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,