0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-24 12:10:08 +01:00
nodejs/test/parallel/test-async-hooks-fatal-error.js
legendecas d86132488d lib: properly process JavaScript exceptions on async_hooks fatal error
JavaScript exceptions could be arbitrary values.

PR-URL: https://github.com/nodejs/node/pull/38106
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
2021-04-08 08:58:09 +02:00

54 lines
1.3 KiB
JavaScript

'use strict';
require('../common');
const assert = require('assert');
const childProcess = require('child_process');
const os = require('os');
if (process.argv[2] === 'child') {
child(process.argv[3], process.argv[4]);
} else {
main();
}
function child(type, valueType) {
const { createHook } = require('async_hooks');
const fs = require('fs');
createHook({
[type]() {
if (valueType === 'symbol') {
throw Symbol('foo');
}
// eslint-disable-next-line no-throw-literal
throw null;
}
}).enable();
// Trigger `promiseResolve`.
new Promise((resolve) => resolve())
// Trigger `after`/`destroy`.
.then(() => fs.promises.readFile(__filename, 'utf8'))
// Make process exit with code 0 if no error caught.
.then(() => process.exit(0));
}
function main() {
const types = [ 'init', 'before', 'after', 'destroy', 'promiseResolve' ];
const valueTypes = [
[ 'null', 'Error: null' ],
[ 'symbol', 'Error: Symbol(foo)' ],
];
for (const type of types) {
for (const [valueType, expect] of valueTypes) {
const cp = childProcess.spawnSync(
process.execPath,
[ __filename, 'child', type, valueType ],
{
encoding: 'utf8',
});
assert.strictEqual(cp.status, 1, type);
assert.strictEqual(cp.stderr.trim().split(os.EOL)[0], expect, type);
}
}
}