diff options
author | cjihrig <cjihrig@gmail.com> | 2017-01-27 15:04:25 -0500 |
---|---|---|
committer | Franziska Hinkelmann <franzih@chromium.org> | 2017-03-26 12:29:17 +0200 |
commit | 9ac363b5d65e02bc4b5d86b28e8b6dc232dcaa8d (patch) | |
tree | beac27fb07d9194f015191f783ce8752c90ba524 /test | |
parent | dc9717c805023d23e3a449ef9eedda045c91d532 (diff) | |
download | android-node-v8-9ac363b5d65e02bc4b5d86b28e8b6dc232dcaa8d.tar.gz android-node-v8-9ac363b5d65e02bc4b5d86b28e8b6dc232dcaa8d.tar.bz2 android-node-v8-9ac363b5d65e02bc4b5d86b28e8b6dc232dcaa8d.zip |
test: cover thrown errors from exec() kill
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>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-child-process-exec-kill-throws.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/parallel/test-child-process-exec-kill-throws.js b/test/parallel/test-child-process-exec-kill-throws.js new file mode 100644 index 0000000000..d9473222a4 --- /dev/null +++ b/test/parallel/test-child-process-exec-kill-throws.js @@ -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); + })); +} |