diff --git a/quic/interop/run-matrix.sh b/quic/interop/run-matrix.sh index 83fb00418..10a23e2c3 100755 --- a/quic/interop/run-matrix.sh +++ b/quic/interop/run-matrix.sh @@ -111,9 +111,35 @@ fi # run.py hard-exits if --log-dir already exists, so we use a fresh # 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. +# +# 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 +# that fires once per test on Apple Silicon). Set VERBOSE=1 to bypass. mkdir -p "$LOG_DIR" RUN_LOG_DIR="$LOG_DIR/run-$(date +%Y%m%d-%H%M%S)" echo "==> running matrix (args: $* | logs: $RUN_LOG_DIR)" cd "$RUNNER_DIR" -exec "$RUNNER_DIR/.venv/bin/python" run.py \ - -d -i amethyst --log-dir "$RUN_LOG_DIR" "$@" + +if [ "${VERBOSE:-0}" = "1" ]; then + exec "$RUNNER_DIR/.venv/bin/python" run.py \ + -d -i amethyst --log-dir "$RUN_LOG_DIR" "$@" +else + "$RUNNER_DIR/.venv/bin/python" run.py \ + -d -i amethyst --log-dir "$RUN_LOG_DIR" "$@" 2>&1 \ + | grep -Ev \ + -e '^(client|server|sim) +\| +(Setting up routes|Actual changes:|tx-[a-z0-9-]+:|Endpoint'\''s IPv[46] address is)' \ + -e '^ Container [a-z]+ +(Recreate|Recreated|Stopping|Stopped|Starting|Started)( [0-9.]+s)?$' \ + -e '^ server The requested image'\''s platform' \ + -e '^Attaching to client, server, sim$' \ + -e '^Aborting on container exit\.\.\.$' \ + -e '^(client|server|sim) exited with code [0-9]+$' \ + -e '^Packets captured: [0-9]+$' \ + -e '^sim +\| +Packets received/dropped on interface ' \ + -e '^sim +\| +(Received signal:|msg=|NS_FATAL)' \ + -e '^Using the client'\''s key log file\.$' \ + -e '^Command: WAITFORSERVER=' \ + -e '^==> ' \ + -e '^$' + exit "${PIPESTATUS[0]}" +fi 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 7b35e6827..a0523cecc 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 @@ -72,11 +72,16 @@ fun main() { val downloadsDir = File("/downloads") val keyLogPath = System.getenv("SSLKEYLOGFILE")?.takeIf { it.isNotBlank() } - System.err.println("== quic-interop client ==") - System.err.println("testcase: $testcase") - System.err.println("requests: $requests") - System.err.println("downloads dir: ${downloadsDir.absolutePath} (exists=${downloadsDir.isDirectory})") - System.err.println("sslkeylogfile: ${keyLogPath ?: "(unset)"}") + // One-line context header. Verbose per-field dump deferred to debug + // mode (env var QUIC_INTEROP_DEBUG=1) so the runner's aggregated output + // stays readable across a full matrix run. + if (System.getenv("QUIC_INTEROP_DEBUG") == "1") { + System.err.println("== quic-interop client ==") + System.err.println("testcase: $testcase") + System.err.println("requests: $requests") + System.err.println("downloads dir: ${downloadsDir.absolutePath} (exists=${downloadsDir.isDirectory})") + System.err.println("sslkeylogfile: ${keyLogPath ?: "(unset)"}") + } val cipherSuites = when (testcase) { @@ -207,7 +212,6 @@ private fun runTransferTest( } val name = url.path.substringAfterLast('/').ifBlank { "index" } File(downloadsDir, name).writeBytes(resp.body) - System.err.println("GET ${url.path} → ${resp.body.size} bytes") } if (anyFailed) "request_failed" else "ok" } ?: "transfer_timeout" @@ -220,7 +224,6 @@ private fun runTransferTest( scope.cancel() return if (outcome == "ok") { - System.err.println("transfer ok") EXIT_OK } else { System.err.println("transfer $outcome")