summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
+ }));
+}