Commits
Tarun Sukhani authored 9070968920b
fix: remove the handshake race that failed the h2 reset test on CI
Every failing Check run since 089f279b8 (1.13.62) failed the same way, on
whichever of ubuntu/windows got there first: SslHttpServerPipelineFactoryResetTest,
"Tests run: 2, Failures: 1". Passing runs (1.13.63, 1.13.65) interleave with
failing ones across dependency-only commits, so it is timing, not a regression.
The failing assertion is the self-removal precondition in
connectionResetAfterH2NegotiationDoesNotReachDefaultPipelineTail. On handshake
completion the event loop runs, in one dispatch:
1. Http2OrHttp1Negotiator.configurePipeline adds h2-frame-codec
2. SslHandshakeExceptionSuppressor removes itself, only after the event
it re-fired upstream returns
awaitPipelineContains polled from the test thread, so it could observe the
pipeline between 1 and 2: codec present, suppressor not yet gone. TLS 1.3
aligns the two: the client's startHandshake() returns before the server has
processed Finished, so the first poll lands on exactly that window. Fast on a
laptop (15/15 passes), often lost on a 2-vCPU runner.
Reproduced by holding the event loop for 200 ms after step 1: the test then
fails every time on that assertion ("expected: <null> but was:
SslHandshakeExceptionSuppressor"). The poll now runs on the event loop, where
a queued task cannot start until the dispatch has finished. With the 200 ms
probe in place the fixed test passes 5/5, and 5/5 without it. Production
ordering is left alone: propagating first is what lets the ALPN negotiator
remove itself.
Also gives the unittest target a legacy-plain listener. printSummary only
prints per-class counts, so CI said "Failures: 1" with no test or assertion
name, and "Upload tests-results on failure" found no files because unittest
never wrote any. It now writes the same per-class reports integration-test
does, which is what that step collects.
Verified: ant unittest passes (121 classes, 0 failures) and writes 120
per-class reports; console output is unchanged.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011Av3VD2p6s9SPJzb8vXqPk