| 'use strict'; |
| |
| const common = require('../../common'); |
| const assert = require('assert'); |
| const async_hooks = require('async_hooks'); |
| |
| // The async_hook that we enable would register the process.emitWarning() |
| // call from loading the N-API addon as asynchronous activity because |
| // it contains a process.nextTick() call. Monkey patch it to be a no-op |
| // before we load the addon in order to avoid this. |
| process.emitWarning = () => {}; |
| |
| const { runInCallbackScope } = require(`./build/${common.buildType}/binding`); |
| |
| const expectedResource = {}; |
| const expectedResourceType = 'test-resource'; |
| let insideHook = false; |
| let expectedId; |
| async_hooks.createHook({ |
| init: common.mustCall((id, type, triggerAsyncId, resource) => { |
| if (type !== expectedResourceType) { |
| return; |
| } |
| assert.strictEqual(resource, expectedResource); |
| expectedId = id; |
| }), |
| before: common.mustCall((id) => { |
| assert.strictEqual(id, expectedId); |
| insideHook = true; |
| }), |
| after: common.mustCall((id) => { |
| assert.strictEqual(id, expectedId); |
| insideHook = false; |
| }) |
| }).enable(); |
| |
| runInCallbackScope(expectedResource, expectedResourceType, () => { |
| assert(insideHook); |
| }); |