test: fix unreliable async-hooks/test-signalwrap

Use an interval to keep the event loop open so the test does not exit
before receiving all signals fom asynchronous `exec()` calls.

PR-URL: https://github.com/nodejs/node/pull/17827
Fixes: https://github.com/nodejs/node/issues/14070
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
This commit is contained in:
Rich Trott 2017-12-22 10:21:39 -08:00
parent 81c2b59609
commit 457ceebabf

View File

@ -1,7 +1,8 @@
'use strict'; 'use strict';
const common = require('../common'); const common = require('../common');
if (common.isWindows) return common.skip('no signals in Windows'); if (common.isWindows)
common.skip('no signals in Windows');
const assert = require('assert'); const assert = require('assert');
const initHooks = require('./init-hooks'); const initHooks = require('./init-hooks');
@ -11,6 +12,10 @@ const exec = require('child_process').exec;
const hooks = initHooks(); const hooks = initHooks();
hooks.enable(); hooks.enable();
// Keep the event loop open so process doesn't exit before receiving signals.
const interval = setInterval(() => {}, 9999);
process.on('SIGUSR2', common.mustCall(onsigusr2, 2)); process.on('SIGUSR2', common.mustCall(onsigusr2, 2));
const as = hooks.activitiesOfTypes('SIGNALWRAP'); const as = hooks.activitiesOfTypes('SIGNALWRAP');
@ -66,6 +71,7 @@ function onsigusr2() {
} }
function onsigusr2Again() { function onsigusr2Again() {
clearInterval(interval);
setImmediate(() => { setImmediate(() => {
checkInvocations( checkInvocations(
signal1, { init: 1, before: 2, after: 2, destroy: 1 }, signal1, { init: 1, before: 2, after: 2, destroy: 1 },