mirror of
https://github.com/nodejs/node.git
synced 2024-11-24 03:07:54 +01:00
99e0d0d218
PR-URL: https://github.com/nodejs/node/pull/55125 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
92 lines
2.9 KiB
JavaScript
92 lines
2.9 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { spawnSync } = require('child_process');
|
|
const async_hooks = require('async_hooks');
|
|
const initHooks = require('./init-hooks');
|
|
|
|
const arg = process.argv[2];
|
|
switch (arg) {
|
|
case 'test_init_callback':
|
|
initHooks({
|
|
oninit: common.mustCall(() => { throw new Error(arg); }),
|
|
}).enable();
|
|
new async_hooks.AsyncResource(`${arg}_type`);
|
|
return;
|
|
|
|
case 'test_callback': {
|
|
initHooks({
|
|
onbefore: common.mustCall(() => { throw new Error(arg); }),
|
|
}).enable();
|
|
const resource = new async_hooks.AsyncResource(`${arg}_type`);
|
|
resource.runInAsyncScope(() => {});
|
|
return;
|
|
}
|
|
|
|
case 'test_callback_abort':
|
|
initHooks({
|
|
oninit: common.mustCall(() => { throw new Error(arg); }),
|
|
}).enable();
|
|
new async_hooks.AsyncResource(`${arg}_type`);
|
|
return;
|
|
}
|
|
|
|
// This part should run only for the primary test
|
|
assert.ok(!arg);
|
|
{
|
|
// console.log should stay until this test's flakiness is solved
|
|
console.log('start case 1');
|
|
console.time('end case 1');
|
|
const child = spawnSync(process.execPath, [__filename, 'test_init_callback']);
|
|
assert.ifError(child.error);
|
|
const test_init_first_line = child.stderr.toString().split(/[\r\n]+/g)[0];
|
|
assert.strictEqual(test_init_first_line, 'Error: test_init_callback');
|
|
assert.strictEqual(child.status, 1);
|
|
console.timeEnd('end case 1');
|
|
}
|
|
|
|
{
|
|
console.log('start case 2');
|
|
console.time('end case 2');
|
|
const child = spawnSync(process.execPath, [__filename, 'test_callback']);
|
|
assert.ifError(child.error);
|
|
const test_callback_first_line = child.stderr.toString().split(/[\r\n]+/g)[0];
|
|
assert.strictEqual(test_callback_first_line, 'Error: test_callback');
|
|
assert.strictEqual(child.status, 1);
|
|
console.timeEnd('end case 2');
|
|
}
|
|
|
|
{
|
|
console.log('start case 3');
|
|
console.time('end case 3');
|
|
let program = process.execPath;
|
|
let args = [
|
|
'--abort-on-uncaught-exception', __filename, 'test_callback_abort' ];
|
|
let options = {};
|
|
if (!common.isWindows) {
|
|
[program, options] = common.escapePOSIXShell`ulimit -c 0 && exec "${program}" ${args[0]} "${args[1]}" ${args[2]}`;
|
|
args = [];
|
|
options.shell = true;
|
|
}
|
|
|
|
options.encoding = 'utf8';
|
|
const child = spawnSync(program, args, options);
|
|
if (common.isWindows) {
|
|
assert.strictEqual(child.status, 134);
|
|
assert.strictEqual(child.signal, null);
|
|
} else {
|
|
assert.strictEqual(child.status, null);
|
|
// Most posix systems will show 'SIGABRT', but alpine34 does not
|
|
if (child.signal !== 'SIGABRT') {
|
|
console.log(`primary received signal ${child.signal}\nchild's stderr:`);
|
|
console.log(child.stderr);
|
|
process.exit(1);
|
|
}
|
|
assert.strictEqual(child.signal, 'SIGABRT');
|
|
}
|
|
assert.strictEqual(child.stdout, '');
|
|
const firstLineStderr = child.stderr.split(/[\r\n]+/g)[0].trim();
|
|
assert.strictEqual(firstLineStderr, 'Error: test_callback_abort');
|
|
console.timeEnd('end case 3');
|
|
}
|