summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2017-01-27 15:04:25 -0500
committerFranziska Hinkelmann <franzih@chromium.org>2017-03-26 12:29:17 +0200
commit9ac363b5d65e02bc4b5d86b28e8b6dc232dcaa8d (patch)
treebeac27fb07d9194f015191f783ce8752c90ba524 /test
parentdc9717c805023d23e3a449ef9eedda045c91d532 (diff)
downloadandroid-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.js29
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);
+ }));
+}