mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
fd3d02ac32
Ensure that resource returned by executionAsyncResource() in before and after hook matches that resource causing this before/after calls. PR-URL: https://github.com/nodejs/node/pull/31821 Refs: https://github.com/nodejs/node/pull/30959 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com> Reviewed-By: Vladimir de Turckheim <vlad2t@hotmail.com>
63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { readFile } = require('fs');
|
|
const {
|
|
createHook,
|
|
executionAsyncResource,
|
|
AsyncResource
|
|
} = require('async_hooks');
|
|
|
|
// Ignore any asyncIds created before our hook is active.
|
|
let firstSeenAsyncId = -1;
|
|
const idResMap = new Map();
|
|
const numExpectedCalls = 5;
|
|
|
|
createHook({
|
|
init: common.mustCallAtLeast(
|
|
(asyncId, type, triggerId, resource) => {
|
|
if (firstSeenAsyncId === -1) {
|
|
firstSeenAsyncId = asyncId;
|
|
}
|
|
assert.ok(idResMap.get(asyncId) === undefined);
|
|
idResMap.set(asyncId, resource);
|
|
}, numExpectedCalls),
|
|
before(asyncId) {
|
|
if (asyncId >= firstSeenAsyncId) {
|
|
beforeHook(asyncId);
|
|
}
|
|
},
|
|
after(asyncId) {
|
|
if (asyncId >= firstSeenAsyncId) {
|
|
afterHook(asyncId);
|
|
}
|
|
}
|
|
}).enable();
|
|
|
|
const beforeHook = common.mustCallAtLeast(
|
|
(asyncId) => {
|
|
const res = idResMap.get(asyncId);
|
|
assert.ok(res !== undefined);
|
|
const execRes = executionAsyncResource();
|
|
assert.ok(execRes === res, 'resource mismatch in before');
|
|
}, numExpectedCalls);
|
|
|
|
const afterHook = common.mustCallAtLeast(
|
|
(asyncId) => {
|
|
const res = idResMap.get(asyncId);
|
|
assert.ok(res !== undefined);
|
|
const execRes = executionAsyncResource();
|
|
assert.ok(execRes === res, 'resource mismatch in after');
|
|
}, numExpectedCalls);
|
|
|
|
const res = new AsyncResource('TheResource');
|
|
const initRes = idResMap.get(res.asyncId());
|
|
assert.ok(initRes === res, 'resource mismatch in init');
|
|
res.runInAsyncScope(common.mustCall(() => {
|
|
const execRes = executionAsyncResource();
|
|
assert.ok(execRes === res, 'resource mismatch in cb');
|
|
}));
|
|
|
|
readFile(__filename, common.mustCall());
|