Files
node/test/parallel/test-abort-controller-any-timeout.js
T
Filip Skokan c109c85703 test: collect timeout signals explicitly
Force collection on a later turn while the timeout sources are only
retained by AbortSignal.any(). Shorten the first timeout and clear the
watchdog after the assertion. This preserves the source-retention
regression check without waiting ten seconds on successful runs.

Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: https://github.com/nodejs/node/pull/65980
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: LiviaMedeiros <livia@cirno.name>
2026-09-13 14:01:18 +02:00

43 lines
1.1 KiB
JavaScript

// Flags: --expose-gc
'use strict';
const common = require('../common');
const assert = require('assert');
const { once } = require('node:events');
const { describe, it } = require('node:test');
describe('AbortSignal.any() with timeout signals', () => {
it('should abort when the first timeout signal fires', async () => {
const signal = AbortSignal.any([
AbortSignal.timeout(common.platformTimeout(1000)),
AbortSignal.timeout(110000),
]);
let timeout;
const abortPromise = Promise.race([
once(signal, 'abort').then(() => {
throw signal.reason;
}),
new Promise((resolve) => {
timeout = setTimeout(resolve, common.platformTimeout(10000));
}),
]);
// Collect after this turn so the WeakRefs no longer keep the timeout
// signals alive by themselves.
setImmediate(common.mustCall(() => globalThis.gc()));
try {
await assert.rejects(
() => abortPromise,
{
name: 'TimeoutError',
message: 'The operation was aborted due to timeout'
}
);
} finally {
clearTimeout(timeout);
}
});
});