mirror of https://github.com/lukechilds/node.git
Browse Source
PR-URL: https://github.com/nodejs/node/pull/13336 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Andreas Madsen <amwebdk@gmail.com> Reviewed-By: Trevor Norris <trev.norris@gmail.com>v6
David Cai
7 years ago
11 changed files with 184 additions and 4 deletions
@ -0,0 +1,56 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const spawnSync = require('child_process').spawnSync; |
|||
const async_hooks = require('async_hooks'); |
|||
const initHooks = require('./init-hooks'); |
|||
|
|||
switch (process.argv[2]) { |
|||
case 'test_init_callback': |
|||
initHooks({ |
|||
oninit: common.mustCall(() => { throw new Error('test_init_callback'); }) |
|||
}).enable(); |
|||
|
|||
async_hooks.emitInit(async_hooks.currentId(), 'test_init_callback_type', |
|||
async_hooks.triggerId()); |
|||
break; |
|||
case 'test_callback': |
|||
initHooks({ |
|||
onbefore: common.mustCall(() => { throw new Error('test_callback'); }) |
|||
}).enable(); |
|||
|
|||
async_hooks.emitInit(async_hooks.currentId(), 'test_callback_type', |
|||
async_hooks.triggerId()); |
|||
async_hooks.emitBefore(async_hooks.currentId()); |
|||
break; |
|||
} |
|||
|
|||
if (process.execArgv.includes('--abort-on-uncaught-exception')) { |
|||
initHooks({ |
|||
oninit: common.mustCall(() => { throw new Error('test_callback_abort'); }) |
|||
}).enable(); |
|||
|
|||
async_hooks.emitInit(async_hooks.currentId(), 'test_callback_abort', |
|||
async_hooks.triggerId()); |
|||
} |
|||
|
|||
const c1 = spawnSync(`${process.execPath}`, [__filename, 'test_init_callback']); |
|||
assert.strictEqual(c1.stderr.toString().split('\n')[0], |
|||
'Error: test_init_callback'); |
|||
assert.strictEqual(c1.status, 1); |
|||
|
|||
const c2 = spawnSync(`${process.execPath}`, [__filename, 'test_callback']); |
|||
assert.strictEqual(c2.stderr.toString().split('\n')[0], 'Error: test_callback'); |
|||
assert.strictEqual(c2.status, 1); |
|||
|
|||
const c3 = spawnSync(`${process.execPath}`, ['--abort-on-uncaught-exception', |
|||
__filename, |
|||
'test_callback_abort']); |
|||
assert.strictEqual(c3.stdout.toString(), ''); |
|||
|
|||
const stderrOutput = c3.stderr.toString() |
|||
.trim() |
|||
.split('\n') |
|||
.map((s) => s.trim()); |
|||
assert.strictEqual(stderrOutput[0], 'Error: test_callback_abort'); |
@ -0,0 +1,46 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const spawnSync = require('child_process').spawnSync; |
|||
const async_hooks = require('async_hooks'); |
|||
const initHooks = require('./init-hooks'); |
|||
|
|||
switch (process.argv[2]) { |
|||
case 'test_invalid_async_id': |
|||
async_hooks.emitBefore(-1); |
|||
break; |
|||
case 'test_invalid_trigger_id': |
|||
async_hooks.emitBefore(1, -1); |
|||
break; |
|||
} |
|||
|
|||
const c1 = spawnSync(process.execPath, [__filename, 'test_invalid_async_id']); |
|||
assert.strictEqual(c1.stderr.toString().split('\n')[0], |
|||
'Error: before(): asyncId or triggerId is less than zero ' + |
|||
'(asyncId: -1, triggerId: -1)'); |
|||
assert.strictEqual(c1.status, 1); |
|||
|
|||
const c2 = spawnSync(process.execPath, [__filename, 'test_invalid_trigger_id']); |
|||
assert.strictEqual(c2.stderr.toString().split('\n')[0], |
|||
'Error: before(): asyncId or triggerId is less than zero ' + |
|||
'(asyncId: 1, triggerId: -1)'); |
|||
assert.strictEqual(c2.status, 1); |
|||
|
|||
const expectedId = async_hooks.newUid(); |
|||
const expectedTriggerId = async_hooks.newUid(); |
|||
const expectedType = 'test_emit_before_after_type'; |
|||
|
|||
// Verify that if there is no registered hook, then nothing will happen.
|
|||
async_hooks.emitBefore(expectedId); |
|||
async_hooks.emitAfter(expectedId); |
|||
|
|||
initHooks({ |
|||
onbefore: common.mustCall((id) => assert.strictEqual(id, expectedId)), |
|||
onafter: common.mustCall((id) => assert.strictEqual(id, expectedId)), |
|||
allowNoInit: true |
|||
}).enable(); |
|||
|
|||
async_hooks.emitInit(expectedId, expectedType, expectedTriggerId); |
|||
async_hooks.emitBefore(expectedId); |
|||
async_hooks.emitAfter(expectedId); |
@ -0,0 +1,49 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const async_hooks = require('async_hooks'); |
|||
const initHooks = require('./init-hooks'); |
|||
|
|||
// Verify that if there is no registered hook, then those invalid parameters
|
|||
// won't be checked.
|
|||
assert.doesNotThrow(() => async_hooks.emitInit()); |
|||
|
|||
const expectedId = async_hooks.newUid(); |
|||
const expectedTriggerId = async_hooks.newUid(); |
|||
const expectedType = 'test_emit_init_type'; |
|||
const expectedResource = { key: 'test_emit_init_resource' }; |
|||
|
|||
const hooks1 = initHooks({ |
|||
oninit: common.mustCall((id, type, triggerId, resource) => { |
|||
assert.strictEqual(id, expectedId); |
|||
assert.strictEqual(type, expectedType); |
|||
assert.strictEqual(triggerId, expectedTriggerId); |
|||
assert.strictEqual(resource.key, expectedResource.key); |
|||
}) |
|||
}); |
|||
|
|||
hooks1.enable(); |
|||
|
|||
assert.throws(() => async_hooks.emitInit(), |
|||
/^RangeError: asyncId must be an unsigned integer$/); |
|||
assert.throws(() => async_hooks.emitInit(expectedId), |
|||
/^TypeError: type must be a string with length > 0$/); |
|||
assert.throws(() => async_hooks.emitInit(expectedId, expectedType, -1), |
|||
/^RangeError: triggerId must be an unsigned integer$/); |
|||
|
|||
async_hooks.emitInit(expectedId, expectedType, expectedTriggerId, |
|||
expectedResource); |
|||
|
|||
hooks1.disable(); |
|||
|
|||
initHooks({ |
|||
oninit: common.mustCall((id, type, triggerId, resource) => { |
|||
assert.strictEqual(id, expectedId); |
|||
assert.strictEqual(type, expectedType); |
|||
assert.notStrictEqual(triggerId, expectedTriggerId); |
|||
assert.strictEqual(resource.key, expectedResource.key); |
|||
}) |
|||
}).enable(); |
|||
|
|||
async_hooks.emitInit(expectedId, expectedType, expectedResource); |
@ -0,0 +1,13 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const async_hooks = require('async_hooks'); |
|||
|
|||
const asyncId = async_hooks.newUid(); |
|||
|
|||
assert.notStrictEqual(async_hooks.currentId(), asyncId); |
|||
|
|||
async_hooks.runInAsyncIdScope(asyncId, common.mustCall(() => { |
|||
assert.strictEqual(async_hooks.currentId(), asyncId); |
|||
})); |
Loading…
Reference in new issue