mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
test,child_process: add check for subProcess.pid
Note: this only add checks for async spawn, as the sync spawn do not return a `subProcess`. PR-URL: https://github.com/nodejs/node/pull/37014 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
This commit is contained in:
1 parent
c1c98fb159
commit
1e0cfa3361
3 files changed
+22
-12
No files matched your search
@@ -28,11 +28,14 @@ const assert = require('assert');
|
||||
const { spawn } = require('child_process');
|
||||
|
||||
// Spawns 'pwd' with given options, then test
|
||||
// - whether the child pid is undefined or number,
|
||||
// - whether the exit code equals expectCode,
|
||||
// - optionally whether the trimmed stdout result matches expectData
|
||||
function testCwd(options, expectCode = 0, expectData) {
|
||||
function testCwd(options, expectPidType, expectCode = 0, expectData) {
|
||||
const child = spawn(...common.pwdCommand, options);
|
||||
|
||||
assert.strictEqual(typeof child.pid, expectPidType);
|
||||
|
||||
child.stdout.setEncoding('utf8');
|
||||
|
||||
// No need to assert callback since `data` is asserted.
|
||||
@@ -57,18 +60,18 @@ function testCwd(options, expectCode = 0, expectData) {
|
||||
|
||||
// Assume does-not-exist doesn't exist, expect exitCode=-1 and errno=ENOENT
|
||||
{
|
||||
testCwd({ cwd: 'does-not-exist' }, -1)
|
||||
testCwd({ cwd: 'does-not-exist' }, 'undefined', -1)
|
||||
.on('error', common.mustCall(function(e) {
|
||||
assert.strictEqual(e.code, 'ENOENT');
|
||||
}));
|
||||
}
|
||||
|
||||
// Assume these exist, and 'pwd' gives us the right directory back
|
||||
testCwd({ cwd: tmpdir.path }, 0, tmpdir.path);
|
||||
testCwd({ cwd: tmpdir.path }, 'number', 0, tmpdir.path);
|
||||
const shouldExistDir = common.isWindows ? process.env.windir : '/dev';
|
||||
testCwd({ cwd: shouldExistDir }, 0, shouldExistDir);
|
||||
testCwd({ cwd: shouldExistDir }, 'number', 0, shouldExistDir);
|
||||
|
||||
// Spawn() shouldn't try to chdir() to invalid arg, so this should just work
|
||||
testCwd({ cwd: '' });
|
||||
testCwd({ cwd: undefined });
|
||||
testCwd({ cwd: null });
|
||||
testCwd({ cwd: '' }, 'number');
|
||||
testCwd({ cwd: undefined }, 'number');
|
||||
testCwd({ cwd: null }, 'number');
|
||||
@@ -24,17 +24,21 @@ const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const child_process = require('child_process');
|
||||
|
||||
function test(fn, code) {
|
||||
fn('does-not-exist', common.mustCall(function(err) {
|
||||
function test(fn, code, expectPidType = 'number') {
|
||||
const child = fn('does-not-exist', common.mustCall(function(err) {
|
||||
assert.strictEqual(err.code, code);
|
||||
assert(err.cmd.includes('does-not-exist'));
|
||||
}));
|
||||
|
||||
assert.strictEqual(typeof child.pid, expectPidType);
|
||||
}
|
||||
|
||||
// With `shell: true`, expect pid (of the shell)
|
||||
if (common.isWindows) {
|
||||
test(child_process.exec, 1); // Exit code of cmd.exe
|
||||
test(child_process.exec, 1, 'number'); // Exit code of cmd.exe
|
||||
} else {
|
||||
test(child_process.exec, 127); // Exit code of /bin/sh
|
||||
test(child_process.exec, 127, 'number'); // Exit code of /bin/sh
|
||||
}
|
||||
|
||||
test(child_process.execFile, 'ENOENT');
|
||||
// With `shell: false`, expect no pid
|
||||
test(child_process.execFile, 'ENOENT', 'undefined');
|
||||
@@ -41,6 +41,9 @@ assert.strictEqual(enoentChild.stdio[0], enoentChild.stdin);
|
||||
assert.strictEqual(enoentChild.stdio[1], enoentChild.stdout);
|
||||
assert.strictEqual(enoentChild.stdio[2], enoentChild.stderr);
|
||||
|
||||
// Verify pid is not assigned.
|
||||
assert.strictEqual(enoentChild.pid, undefined);
|
||||
|
||||
enoentChild.on('spawn', common.mustNotCall());
|
||||
|
||||
enoentChild.on('error', common.mustCall(function(err) {
|
||||
|
||||
Reference in new issue
Block a user