'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());