test: quarantine test-http2-reset-flood.js on ASAN - #34848
Conversation
The test runs the http2 server inside a Worker and calls worker.terminate() on conn error, so terminate() races with a socket handler on the worker's VM and trips the same ExceptionScope::assertNoException at ExceptionScope.h:61 as #34690. Seen on debian-13 x64-asan across 11+ unrelated branches. Root-cause fix is #34414; remove this entry with #34690/#34414.
WalkthroughAdds an ASAN quarantine entry for ChangesHTTP/2 ASAN crash quarantine
Possibly related issues
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
Comment |
There was a problem hiding this comment.
LGTM — single ASAN quarantine entry for a known worker.terminate() assertion crash.
What was reviewed:
- Entry format matches neighboring
[ ASAN ] ... [ CRASH ]lines and parses pergetTestExpectations. - Verified
test-http2-reset-flood.jsexists and does spawn aWorker+ callworker.terminate()(lines 8/29/82), so the #34690 linkage holds. - Path is specific enough that substring matching won't quarantine sibling tests; non-ASAN lanes still run it.
Extended reasoning...
Overview
This PR adds one line (plus a comment block) to test/expectations.txt, quarantining test/js/node/test/parallel/test-http2-reset-flood.js on ASAN lanes only with a [ CRASH ] expectation. It is placed alongside the existing #34095/#34690 entries for the same ExceptionScope::assertNoException failure class and documents the tracking issue (#34846), root-cause fix (#34414), and removal condition.
Security risks
None. This is a test-runner metadata file; no runtime or build code is touched.
Level of scrutiny
Low. The expectations file header explicitly documents that entries here remove a file from the run on matching platforms — this entry is scoped to [ ASAN ] only, so coverage on release/debug lanes is preserved. I confirmed the target file exists and actually uses Worker + worker.terminate() (test-http2-reset-flood.js:8,29,82), validating the PR's claim that this is the same worker-terminate race as #34690 rather than an unrelated http2 bug. The entry path is a full filename, so the substring match won't accidentally quarantine other test-http2-* files.
Other factors
The comment is thorough (build numbers across 11 unrelated branches, cross-references to #34690/#34414 for removal), which is exactly what the file's header asks for to prevent stale entries. No prior reviews on this PR; the bug-hunting system found nothing.
There was a problem hiding this comment.
LGTM — straightforward ASAN quarantine entry.
What was reviewed:
- Entry format matches neighboring
[ ASAN ] ... [ CRASH ]lines and the file exists at the given path. - Confirmed
test-http2-reset-flood.jsdoes spawn aWorkerand callworker.terminate(), so the #34690 attribution holds. - No substring collision with other paths in expectations.txt; scoped to ASAN only, non-ASAN lanes still run it.
Extended reasoning...
Overview
Single-line addition to test/expectations.txt quarantining test/js/node/test/parallel/test-http2-reset-flood.js on ASAN builds only, plus a 7-line comment documenting the failure mode, affected builds, tracking issue (#34846), root cause (#34690), fix PR (#34414), and removal condition. Placed directly beneath the related worker-transfer-terminate-stress.test.ts entry that shares the same ExceptionScope::assertNoException failure.
Security risks
None. This is a test-infrastructure metadata change; no runtime, build, or dependency code is touched.
Level of scrutiny
Low. The change is mechanical and follows the file's established format exactly. I verified the test file exists at the stated path, that it does in fact use new Worker(__filename) + worker.terminate() (lines 29/82) as claimed in the PR description, and that the entry doesn't substring-collide with any other test path in the file. The [ ASAN ] modifier keeps the test running on all non-ASAN lanes, so coverage loss is minimal and scoped to a known-flaky configuration.
Other factors
The comment names the tracking issue, the shared root cause, the fix PR, and an explicit removal condition ("Remove with #34690/#34414") — exactly what the file header asks for to prevent stale entries. The PR description states the entry was verified against getTestExpectations in scripts/runner.node.mjs. No outstanding reviewer comments and no prior review from me.
|
CI status: this diff touches only
None of the failures are related to http2, worker termination, ASAN, or expectations.txt parsing. Ready for review/merge. |
|
Closing: the crash this quarantined was fixed at the root by #34414 (merged 2026-07-21), and #34846 was closed after test-http2-reset-flood.js passed 25/25 consecutive runs on a debug+ASAN build of main. The related tracking issue #34690 has since been closed as well. On current main the test is not in test/expectations.txt and runs on the ASAN lanes, so this entry is no longer needed. |
Fixes #34846.
Failure
test/js/node/test/parallel/test-http2-reset-flood.jsintermittently dies with SIGABRT on debian-13 x64-asan:Seen across 11+ unrelated branches (builds 75493, 75670, 75930, 75949, 75996, 75998, 76117, 76129, 76248, 76250, 76342), including a pure deps-bot bump, so not branch-specific.
Cause
The issue body says "with no worker involvement", but that's not the case: this test runs the http2 server inside a
Workerand the main thread callsworker.terminate()when the client connection errors:So this is the same
ExceptionScope::assertNoExceptionduring-worker-terminate race as #34690, triggered via a different test. Root-cause fix is #34414 (socket/websocket error-handler dispatch guarding against re-entering JS with a pending termination exception).Change
Adds an
[ ASAN ] ... [ CRASH ]entry next to the existing #34095/#34690 entries. The test continues to run on all non-ASAN lanes. Entry verified to parse as{modifiers: ['ASAN'], filename: 'test/js/node/test/parallel/test-http2-reset-flood.js', expectations: ['CRASH']}via thegetTestExpectationslogic inscripts/runner.node.mjs.Remove with #34690 / #34414.
no test proof · iteration 1 · docs-only change; test-proof not applicable