mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
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>
This commit is contained in:
1 file changed
+25
-11
@@ -1,28 +1,42 @@
|
||||
// Flags: --expose-gc
|
||||
'use strict';
|
||||
|
||||
require('../common');
|
||||
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(9000), AbortSignal.timeout(110000)]);
|
||||
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) => setTimeout(resolve, 10000)),
|
||||
new Promise((resolve) => {
|
||||
timeout = setTimeout(resolve, common.platformTimeout(10000));
|
||||
}),
|
||||
]);
|
||||
|
||||
// The promise should be aborted by the 9000ms timeout
|
||||
await assert.rejects(
|
||||
() => abortPromise,
|
||||
{
|
||||
name: 'TimeoutError',
|
||||
message: 'The operation was aborted due to timeout'
|
||||
}
|
||||
);
|
||||
// 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user