test: disable core dumps before running crash test

The test spawns a subprocess with the `--abort-on-uncaught-exception`
flag and expects it to terminate with a SIGABRT signal.

On systems where core dumps are enabled, that actually generates an
unnecessary core dump. Set `ulimit -c 0` before spawning the subprocess.

Fixes: https://github.com/nodejs/node/issues/29286

PR-URL: https://github.com/nodejs/node/pull/29478
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
This commit is contained in:
Ben Noordhuis 2019-09-06 23:25:36 +02:00 committed by Rich Trott
parent 695e819517
commit 821799024e

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
const common = require('../common'); const common = require('../common');
const assert = require('assert'); const assert = require('assert');
const { spawnSync, fork } = require('child_process'); const { spawnSync } = require('child_process');
const async_hooks = require('async_hooks'); const async_hooks = require('async_hooks');
const initHooks = require('./init-hooks'); const initHooks = require('./init-hooks');
@ -58,39 +58,31 @@ assert.ok(!arg);
{ {
console.log('start case 3'); console.log('start case 3');
console.time('end case 3'); console.time('end case 3');
const opts = { let program = process.execPath;
execArgv: ['--abort-on-uncaught-exception'], let args = [
silent: true '--abort-on-uncaught-exception', __filename, 'test_callback_abort' ];
}; const options = { encoding: 'utf8' };
const child = fork(__filename, ['test_callback_abort'], opts); if (!common.isWindows) {
program = `ulimit -c 0 && exec ${program} ${args.join(' ')}`;
let stdout = ''; args = [];
child.stdout.on('data', (data) => { options.shell = true;
stdout += data; }
}); const child = spawnSync(program, args, options);
if (common.isWindows) {
let stderr = ''; assert.strictEqual(child.status, 134);
child.stderr.on('data', (data) => { assert.strictEqual(child.signal, null);
stderr += data; } else {
}); assert.strictEqual(child.status, null);
// Most posix systems will show 'SIGABRT', but alpine34 does not
child.on('close', (code, signal) => { if (child.signal !== 'SIGABRT') {
if (common.isWindows) { console.log(`parent received signal ${child.signal}\nchild's stderr:`);
assert.strictEqual(code, 134); console.log(child.stderr);
assert.strictEqual(signal, null); process.exit(1);
} else {
assert.strictEqual(code, null);
// Most posix systems will show 'SIGABRT', but alpine34 does not
if (signal !== 'SIGABRT') {
console.log(`parent received signal ${signal}\nchild's stderr:`);
console.log(stderr);
process.exit(1);
}
assert.strictEqual(signal, 'SIGABRT');
} }
assert.strictEqual(stdout, ''); assert.strictEqual(child.signal, 'SIGABRT');
const firstLineStderr = stderr.split(/[\r\n]+/g)[0].trim(); }
assert.strictEqual(firstLineStderr, 'Error: test_callback_abort'); 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'); console.timeEnd('end case 3');
} }