mirror of https://github.com/lukechilds/node.git
Browse Source
This commit adds code coverage for the scenario where exec() kills a child process, but the call to ChildProcess#kill() throws an exception. PR-URL: https://github.com/nodejs/node/pull/11038 Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>v6
committed by
Franziska Hinkelmann
1 changed files with 29 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||
'use strict'; |
|||
// Flags: --expose_internals
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const cp = require('child_process'); |
|||
const internalCp = require('internal/child_process'); |
|||
|
|||
if (process.argv[2] === 'child') { |
|||
// Keep the process alive and printing to stdout.
|
|||
setInterval(() => { console.log('foo'); }, 1); |
|||
} else { |
|||
// Monkey patch ChildProcess#kill() to kill the process and then throw.
|
|||
const kill = internalCp.ChildProcess.prototype.kill; |
|||
|
|||
internalCp.ChildProcess.prototype.kill = function() { |
|||
kill.apply(this, arguments); |
|||
throw new Error('mock error'); |
|||
}; |
|||
|
|||
const cmd = `${process.execPath} ${__filename} child`; |
|||
const options = { maxBuffer: 0 }; |
|||
const child = cp.exec(cmd, options, common.mustCall((err, stdout, stderr) => { |
|||
// Verify that if ChildProcess#kill() throws, the error is reported.
|
|||
assert(/^Error: mock error$/.test(err)); |
|||
assert.strictEqual(stdout, ''); |
|||
assert.strictEqual(stderr, ''); |
|||
assert.strictEqual(child.killed, true); |
|||
})); |
|||
} |
Loading…
Reference in new issue