From 7d5fcd710f6ee099f11e5077a22f840ae11b6d33 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 7 May 2026 00:33:37 +0000 Subject: [PATCH] fix(quic-interop): drop versionnegotiation; document concurrency limit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two corrections from the user's just-completed run: 1. The runner does not have a 'versionnegotiation' testcase. Available list output: handshake, transfer, longrtt, chacha20, multiplexing, retry, resumption, zerortt, http3, blackhole, keyupdate, ecn, amplificationlimit, handshakeloss, transferloss, handshakecorruption, transfercorruption, ipv6, v2, rebind-port, rebind-addr, connectionmigration. (`v2` exists but tests QUIC v2 protocol support — we're v1-only, so it would correctly fail.) The :quic-side VN code from agent A stays as defensive support for any future server that throws a VN at us; just no testcase wires it up. 2. run-matrix.sh is NOT safe to run concurrently. The runner's docker-compose.yml hardcodes container_name: sim/server/client — Docker enforces those globally regardless of COMPOSE_PROJECT_NAME. Documented the limitation + the recommended sequential loop in the script's comments. https://claude.ai/code/session_01HcvfQq1ttPV9PkRoJb4nyT --- quic/interop/build.gradle.kts | 1 + quic/interop/run-matrix.sh | 9 +++++++++ .../vitorpamplona/quic/interop/runner/InteropClient.kt | 7 ++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/quic/interop/build.gradle.kts b/quic/interop/build.gradle.kts index edd1ee3b3..09cae4e32 100644 --- a/quic/interop/build.gradle.kts +++ b/quic/interop/build.gradle.kts @@ -44,6 +44,7 @@ sourceSets { dependencies { implementation(project(":quic")) implementation(libs.kotlinx.coroutines.core) + implementation(libs.jackson.module.kotlin) testImplementation(libs.kotlin.test) } diff --git a/quic/interop/run-matrix.sh b/quic/interop/run-matrix.sh index 10a23e2c3..dbfa4f1a5 100755 --- a/quic/interop/run-matrix.sh +++ b/quic/interop/run-matrix.sh @@ -112,6 +112,15 @@ fi # per-invocation subdirectory under $LOG_DIR. The parent must exist; the # child must not. Tail of `ls -t "$LOG_DIR" | head -1` finds the latest. # +# NOTE: this script is NOT safe to run concurrently against itself. +# quic-interop-runner's docker-compose.yml hardcodes `container_name: +# sim/server/client`, which Docker enforces globally regardless of +# COMPOSE_PROJECT_NAME. Two simultaneous invocations collide on +# `docker create container "sim"`. Run sequentially: +# for peer in aioquic picoquic quic-go; do +# quic/interop/run-matrix.sh -s $peer -t handshake,chacha20,... +# done +# # Output filter: by default we drop the runner / container boilerplate # (interface checksum offload toggles, route setup, container lifecycle, # the long Command: WAITFORSERVER=... line, the platform-mismatch warning diff --git a/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt b/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt index 111b7dc93..7f3fd956c 100644 --- a/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt +++ b/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt @@ -141,7 +141,12 @@ fun main() { "handshake", "chacha20", "handshakeloss", "transfer", "http3", "multiplexing", "transferloss", "transfercorruption", "longrtt", "goodput", "crosstraffic", - "retry", "ipv6", "versionnegotiation", + "retry", "ipv6", + // NOTE: the runner does NOT have a `versionnegotiation` testcase + // (its Available list excludes it). The :quic VN-handling code + // (applyVersionNegotiation, FORCE_VERSION_NEGOTIATION constant) + // stays as defensive support for any server that decides to + // send a VN packet at us, but no testcase exercises it directly. -> { runTransferTest( requests = requests,