mirror of https://github.com/lukechilds/node.git
Browse Source
This commit adds a test for the scenario where a child process is spawned, but the stdio streams could not be created. PR-URL: https://github.com/nodejs/node/pull/9528 Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>v6.x
cjihrig
8 years ago
committed by
Anna Henningsen
1 changed files with 63 additions and 0 deletions
@ -0,0 +1,63 @@ |
|||
'use strict'; |
|||
// Flags: --expose_internals
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const cp = require('child_process'); |
|||
|
|||
if (process.argv[2] === 'child') { |
|||
setTimeout(() => {}, common.platformTimeout(100)); |
|||
return; |
|||
} |
|||
|
|||
// Monkey patch spawn() to create a child process normally, but destroy the
|
|||
// stdout and stderr streams. This replicates the conditions where the streams
|
|||
// cannot be properly created.
|
|||
const ChildProcess = require('internal/child_process').ChildProcess; |
|||
const original = ChildProcess.prototype.spawn; |
|||
|
|||
ChildProcess.prototype.spawn = function() { |
|||
const err = original.apply(this, arguments); |
|||
|
|||
this.stdout.destroy(); |
|||
this.stderr.destroy(); |
|||
this.stdout = null; |
|||
this.stderr = null; |
|||
|
|||
return err; |
|||
}; |
|||
|
|||
function createChild(options, callback) { |
|||
const cmd = `${process.execPath} ${__filename} child`; |
|||
|
|||
return cp.exec(cmd, options, common.mustCall(callback)); |
|||
} |
|||
|
|||
// Verify that normal execution of a child process is handled.
|
|||
{ |
|||
createChild({}, (err, stdout, stderr) => { |
|||
assert.strictEqual(err, null); |
|||
assert.strictEqual(stdout, ''); |
|||
assert.strictEqual(stderr, ''); |
|||
}); |
|||
} |
|||
|
|||
// Verify that execution with an error event is handled.
|
|||
{ |
|||
const error = new Error('foo'); |
|||
const child = createChild({}, (err, stdout, stderr) => { |
|||
assert.strictEqual(err, error); |
|||
assert.strictEqual(stdout, ''); |
|||
assert.strictEqual(stderr, ''); |
|||
}); |
|||
|
|||
child.emit('error', error); |
|||
} |
|||
|
|||
// Verify that execution with a killed process is handled.
|
|||
{ |
|||
createChild({ timeout: 1 }, (err, stdout, stderr) => { |
|||
assert.strictEqual(err.killed, true); |
|||
assert.strictEqual(stdout, ''); |
|||
assert.strictEqual(stderr, ''); |
|||
}); |
|||
} |
Loading…
Reference in new issue