diff --git a/test/http2-request-never-settles.js b/test/http2-request-never-settles.js index a5c2056473f..076839280cf 100644 --- a/test/http2-request-never-settles.js +++ b/test/http2-request-never-settles.js @@ -1,7 +1,7 @@ 'use strict' const assert = require('node:assert') -const { test, after } = require('node:test') +const { test } = require('node:test') const { constants, createSecureServer } = require('node:http2') const { once } = require('node:events') const { Readable } = require('node:stream') @@ -10,6 +10,8 @@ const pem = require('@metcoder95/https-pem') const { Agent } = require('..') +const skipOnNode24 = Number(process.versions.node.split('.')[0]) === 24 + // completeRequestStream() runs on an h2 stream's 'close': // // releaseRequestStream(this) @@ -115,7 +117,9 @@ async function churningServer (rnd) { } for (const seed of SEEDS) { - test(`every h2 request settles under connection churn (seed ${seed})`, async () => { + test(`every h2 request settles under connection churn (seed ${seed})`, { + skip: skipOnNode24 && 'Node.js 24 has an HTTP/2 memory corruption bug' + }, async (t) => { const timer = setInterval(() => {}, 1000) const rnd = makeRandom(seed) const server = await churningServer(rnd) @@ -127,10 +131,16 @@ for (const seed of SEEDS) { headersTimeout: 500, bodyTimeout: 500 }) - after(async () => { - await agent.destroy() - server.shutdown() - clearInterval(timer) + // Release each seed's resources before the next test starts. A file-level + // after hook kept every TLS server and keepalive timer until all seeds had + // finished, making this churn test sensitive to CI load. + t.after(async () => { + try { + await agent.destroy() + } finally { + server.shutdown() + clearInterval(timer) + } }) const unsettled = []