chore(quic-interop): auto-patch upstream certs.sh for macOS BSD tr
`LC_CTYPE=C tr -dc '[:alnum:]' </dev/urandom` in the upstream runner's certs.sh trips "tr: Illegal byte sequence" on macOS — LC_CTYPE alone doesn't override the runtime locale chain. Only the amplificationlimit testcase exercises this loop (chain length > 1 → fakedns SAN inflation), but if it aborts the runner stops the whole matrix BEFORE any later test in TESTCASES_QUIC runs: handshakeloss, transferloss, handshakecorruption, transfercorruption, ipv6, v2, rebind-port, rebind-addr, connectionmigration, and the goodput/crosstraffic measurements all silently never execute. The post-mortem summary shows the 12 testcases that ran before the abort and looks deceptively complete. Add an idempotent `sed` step to run-matrix.sh that rewrites the line to `LC_ALL=C tr` on every invocation, plus a plan-file note so the next person hitting the deceptive summary doesn't repeat the diagnosis. The patch is a working-tree edit to ../quic-interop-runner/, not a fork; re-applied on every clone. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -60,6 +60,27 @@ python run.py -d -i amethyst -s aioquic -t handshake,chacha20 --log-dir ./logs
|
||||
|
||||
Inspect `./logs/<run>/client_qlog/*.qlog` in qvis when something breaks.
|
||||
|
||||
### macOS gotcha — upstream `certs.sh` patch (auto-applied)
|
||||
|
||||
`run-matrix.sh` step 1a rewrites `LC_CTYPE=C tr` → `LC_ALL=C tr` in
|
||||
the upstream `certs.sh`. macOS BSD `tr` chokes on `/dev/urandom` with
|
||||
`tr: Illegal byte sequence` when only `LC_CTYPE` is set; `LC_ALL` wins
|
||||
in the locale-precedence chain and silences it. Without this, the
|
||||
`amplificationlimit` testcase aborts at cert generation, and every
|
||||
test sequenced after it in `TESTCASES_QUIC`
|
||||
(`handshakeloss`, `transferloss`, `handshakecorruption`,
|
||||
`transfercorruption`, `ipv6`, `v2`, `rebind-port`, `rebind-addr`,
|
||||
`connectionmigration`, plus the goodput/crosstraffic measurements)
|
||||
silently never runs. The matrix prints the post-mortem summary
|
||||
showing only the 12 testcases that ran before the abort, which looks
|
||||
deceptively complete.
|
||||
|
||||
The patch is idempotent and is re-applied on every clone of the
|
||||
runner (the fix is a working-tree edit to `../quic-interop-runner/`,
|
||||
not a fork). If you ever delete `../quic-interop-runner/` and
|
||||
re-clone manually, run `quic/interop/run-matrix.sh` once first or
|
||||
apply the same `sed` by hand. Upstream PR not yet filed.
|
||||
|
||||
## Phase ladder (excerpt — full plan in conversation)
|
||||
|
||||
| Phase | Goal | Tests | Exit criterion |
|
||||
|
||||
Reference in New Issue
Block a user