1'use strict'; 2 3const common = require('../../common'); 4const assert = require('assert'); 5const async_hooks = require('async_hooks'); 6const binding = require(`./build/${common.buildType}/binding`); 7 8if (process.env.NODE_TEST_WITH_ASYNC_HOOKS) { 9 common.skip('cannot test with env var NODE_TEST_WITH_ASYNC_HOOKS'); 10 return; 11} 12 13// Baseline to make sure the internal field isn't being set. 14assert.strictEqual( 15 binding.getPromiseField(Promise.resolve(1)), 16 0); 17 18const hook0 = async_hooks.createHook({}).enable(); 19 20// Check that no PromiseWrap is created when there are no hook callbacks. 21assert.strictEqual( 22 binding.getPromiseField(Promise.resolve(1)), 23 0); 24 25hook0.disable(); 26 27let pwrap = null; 28const hook1 = async_hooks.createHook({ 29 init(id, type, tid, resource) { 30 pwrap = resource; 31 } 32}).enable(); 33 34// Check that the internal field returns the same PromiseWrap passed to init(). 35assert.strictEqual( 36 binding.getPromiseField(Promise.resolve(1)), 37 pwrap); 38 39hook1.disable(); 40 41// Check that internal fields are no longer being set. This needs to be delayed 42// a bit because the `disable()` call only schedules disabling the hook in a 43// future microtask. 44setImmediate(() => { 45 assert.strictEqual( 46 binding.getPromiseField(Promise.resolve(1)), 47 0); 48}); 49