node/test/async-hooks/test-late-hook-enable.js
Antoine du Hamel bfc81ca228
test: ensure assertions are reachable in test/async-hooks
PR-URL: https://github.com/nodejs/node/pull/60150
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
2025-10-09 21:57:24 +00:00

51 lines
1.2 KiB
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const async_hooks = require('async_hooks');
// Checks that enabling async hooks in a callback actually
// triggers after & destroy as expected.
const fnsToTest = [setTimeout, (cb) => {
setImmediate(() => {
cb();
// We need to keep the event loop open for this to actually work
// since destroy hooks are triggered in unrefed Immediates
setImmediate(() => {
hook.disable();
});
});
}, common.mustCall((cb) => {
setImmediate(common.mustCall(() => {
process.nextTick(() => {
cb();
// We need to keep the event loop open for this to actually work
// since destroy hooks are triggered in unrefed Immediates
setImmediate(common.mustCall(() => {
hook.disable();
assert.strictEqual(fnsToTest.length, 0);
}));
});
}));
})];
const hook = async_hooks.createHook({
before: common.mustNotCall(),
after: common.mustCall(3),
destroy: common.mustCall(() => {
hook.disable();
nextTest();
}, 3),
});
nextTest();
function nextTest() {
if (fnsToTest.length > 0) {
fnsToTest.shift()(common.mustCall(() => {
hook.enable();
}));
}
}