Skip to content

Commit

Permalink
test: update test-child-process-bad-stdio to use node:test
Browse files Browse the repository at this point in the history
This commit updates test/parallel/test-child-process-bad-stdio.js
to use node:test. This change prevents multiple child processes
from being spawned in parallel, which can be problematic in the
CI.
  • Loading branch information
cjihrig committed Jan 11, 2025
1 parent 8ca2956 commit aed37c0
Showing 1 changed file with 16 additions and 14 deletions.
30 changes: 16 additions & 14 deletions test/parallel/test-child-process-bad-stdio.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
'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;
}

const assert = require('node:assert');
const cp = require('node:child_process');
const { mock, test } = require('node:test');
const { ChildProcess } = require('internal/child_process');

// 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() {
mock.method(ChildProcess.prototype, 'spawn', function() {
const err = original.apply(this, arguments);

this.stdout.destroy();
Expand All @@ -24,7 +26,7 @@ ChildProcess.prototype.spawn = function() {
this.stderr = null;

return err;
};
});

function createChild(options, callback) {
const [cmd, opts] = common.escapePOSIXShell`"${process.execPath}" "${__filename}" child`;
Expand All @@ -33,32 +35,32 @@ function createChild(options, callback) {
return cp.exec(cmd, options, common.mustCall(callback));
}

// Verify that normal execution of a child process is handled.
{
test('normal execution of a child process is handled', (_, done) => {
createChild({}, (err, stdout, stderr) => {
assert.strictEqual(err, null);
assert.strictEqual(stdout, '');
assert.strictEqual(stderr, '');
done();
});
}
});

// Verify that execution with an error event is handled.
{
test('execution with an error event is handled', (_, done) => {
const error = new Error('foo');
const child = createChild({}, (err, stdout, stderr) => {
assert.strictEqual(err, error);
assert.strictEqual(stdout, '');
assert.strictEqual(stderr, '');
done();
});

child.emit('error', error);
}
});

// Verify that execution with a killed process is handled.
{
test('execution with a killed process is handled', (_, done) => {
createChild({ timeout: 1 }, (err, stdout, stderr) => {
assert.strictEqual(err.killed, true);
assert.strictEqual(stdout, '');
assert.strictEqual(stderr, '');
done();
});
}
});

0 comments on commit aed37c0

Please sign in to comment.