diff --git a/test/parallel/test-child-process-spawnsync-kill-signal.js b/test/parallel/test-child-process-spawnsync-kill-signal.js new file mode 100644 index 00000000000000..874a3d5581c670 --- /dev/null +++ b/test/parallel/test-child-process-spawnsync-kill-signal.js @@ -0,0 +1,51 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); + +if (process.argv[2] === 'child') { + setInterval(() => {}, 1000); +} else { + const exitCode = common.isWindows ? 1 : 0; + const SIGKILL = process.binding('constants').SIGKILL; + + function spawn(killSignal) { + const child = cp.spawnSync(process.execPath, + [__filename, 'child'], + {killSignal, timeout: 100}); + + assert.strictEqual(child.status, exitCode); + assert.strictEqual(child.error.code, 'ETIMEDOUT'); + return child; + } + + // Verify that an error is thrown for unknown signals. + assert.throws(() => { + spawn('SIG_NOT_A_REAL_SIGNAL'); + }, /Error: Unknown signal: SIG_NOT_A_REAL_SIGNAL/); + + // Verify that the default kill signal is SIGTERM. + { + const child = spawn(); + + assert.strictEqual(child.signal, 'SIGTERM'); + assert.strictEqual(child.options.killSignal, undefined); + } + + // Verify that a string signal name is handled properly. + { + const child = spawn('SIGKILL'); + + assert.strictEqual(child.signal, 'SIGKILL'); + assert.strictEqual(child.options.killSignal, SIGKILL); + } + + // Verify that a numeric signal is handled properly. + { + const child = spawn(SIGKILL); + + assert.strictEqual(typeof SIGKILL, 'number'); + assert.strictEqual(child.signal, 'SIGKILL'); + assert.strictEqual(child.options.killSignal, SIGKILL); + } +}