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:
dr-js authored and Antoine du Hamel committed 2021-02-22 12:15:53 +01:00
1 parent c1c98fb159
commit 1e0cfa3361
3 files changed
+22 -12

No files matched your search

+10 -7
View File
@@ -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) {