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