| 'use strict'; |
| const common = require('../../common'); |
| const assert = require('assert'); |
| const async_hooks = require('async_hooks'); |
| const test_async = require(`./build/${common.buildType}/test_async`); |
| |
| const events = []; |
| let testId; |
| const initAsyncId = async_hooks.executionAsyncId(); |
| |
| async_hooks.createHook({ |
| init(id, provider, triggerAsyncId, resource) { |
| if (provider === 'TestResource') { |
| testId = id; |
| events.push({ type: 'init', id, provider, triggerAsyncId, resource }); |
| } |
| }, |
| before(id) { |
| if (testId === id) { |
| events.push({ type: 'before', id }); |
| } |
| }, |
| after(id) { |
| if (testId === id) { |
| events.push({ type: 'after', id }); |
| } |
| }, |
| destroy(id) { |
| if (testId === id) { |
| events.push({ type: 'destroy', id }); |
| } |
| } |
| }).enable(); |
| |
| const resource = { foo: 'foo' }; |
| |
| events.push({ type: 'start' }); |
| test_async.Test(5, resource, common.mustCall(function(err, val) { |
| assert.strictEqual(err, null); |
| assert.strictEqual(val, 10); |
| events.push({ type: 'complete' }); |
| process.nextTick(common.mustCall()); |
| })); |
| events.push({ type: 'scheduled' }); |
| |
| process.on('exit', () => { |
| assert.deepStrictEqual(events, [ |
| { type: 'start' }, |
| { type: 'init', |
| id: testId, |
| provider: 'TestResource', |
| triggerAsyncId: initAsyncId, |
| resource }, |
| { type: 'scheduled' }, |
| { type: 'before', id: testId }, |
| { type: 'complete' }, |
| { type: 'after', id: testId }, |
| { type: 'destroy', id: testId } |
| ]); |
| }); |