summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/child_process.js1
-rw-r--r--test/parallel/test-child-process-fork-args.js105
-rw-r--r--test/parallel/test-child-process-fork-options.js37
3 files changed, 106 insertions, 37 deletions
diff --git a/lib/child_process.js b/lib/child_process.js
index 9e8067784a..dd9d0fd0d8 100644
--- a/lib/child_process.js
+++ b/lib/child_process.js
@@ -62,6 +62,7 @@ function stdioStringToArray(option) {
}
exports.fork = function fork(modulePath /* , args, options */) {
+ validateString(modulePath, 'modulePath');
// Get options and args arguments.
var execArgv;
diff --git a/test/parallel/test-child-process-fork-args.js b/test/parallel/test-child-process-fork-args.js
new file mode 100644
index 0000000000..7c86616f37
--- /dev/null
+++ b/test/parallel/test-child-process-fork-args.js
@@ -0,0 +1,105 @@
+'use strict';
+const common = require('../common');
+const fixtures = require('../common/fixtures');
+const assert = require('assert');
+const { fork } = require('child_process');
+
+// This test check the arguments of `fork` method
+// Refs: https://github.com/nodejs/node/issues/20749
+const expectedEnv = { foo: 'bar' };
+
+// Ensure that first argument `modulePath` must be provided
+// and be of type string
+{
+ const invalidModulePath = [
+ 0,
+ true,
+ undefined,
+ null,
+ [],
+ {},
+ () => {},
+ Symbol('t')
+ ];
+ invalidModulePath.forEach((modulePath) => {
+ common.expectsError(() => fork(modulePath), {
+ code: 'ERR_INVALID_ARG_TYPE',
+ type: TypeError,
+ message: /^The "modulePath" argument must be of type string/
+ });
+ });
+
+ const cp = fork(fixtures.path('child-process-echo-options.js'));
+ cp.on(
+ 'exit',
+ common.mustCall((code) => {
+ assert.strictEqual(code, 0);
+ })
+ );
+}
+
+// Ensure that the second argument of `fork`
+// and `fork` should parse options
+// correctly if args is undefined or null
+{
+ const invalidSecondArgs = [
+ 0,
+ true,
+ () => {},
+ Symbol('t')
+ ];
+ invalidSecondArgs.forEach((arg) => {
+ common.expectsError(
+ () => {
+ fork(fixtures.path('child-process-echo-options.js'), arg);
+ },
+ {
+ code: 'ERR_INVALID_ARG_VALUE',
+ type: TypeError
+ }
+ );
+ });
+
+ const argsLists = [undefined, null, []];
+
+ argsLists.forEach((args) => {
+ const cp = fork(fixtures.path('child-process-echo-options.js'), args, {
+ env: Object.assign({}, process.env, expectedEnv)
+ });
+
+ cp.on(
+ 'message',
+ common.mustCall(({ env }) => {
+ assert.strictEqual(env.foo, expectedEnv.foo);
+ })
+ );
+
+ cp.on(
+ 'exit',
+ common.mustCall((code) => {
+ assert.strictEqual(code, 0);
+ })
+ );
+ });
+}
+
+// Ensure that the third argument should be type of object if provided
+{
+ const invalidThirdArgs = [
+ 0,
+ true,
+ () => {},
+ Symbol('t')
+ ];
+ invalidThirdArgs.forEach((arg) => {
+ common.expectsError(
+ () => {
+ fork(fixtures.path('child-process-echo-options.js'), [], arg);
+ },
+ {
+ code: 'ERR_INVALID_ARG_VALUE',
+ type: TypeError
+ }
+ );
+ });
+}
diff --git a/test/parallel/test-child-process-fork-options.js b/test/parallel/test-child-process-fork-options.js
deleted file mode 100644
index 5efb9bdbb4..0000000000
--- a/test/parallel/test-child-process-fork-options.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-const common = require('../common');
-const fixtures = require('../common/fixtures');
-
-// This test ensures that fork should parse options
-// correctly if args is undefined or null
-
-const assert = require('assert');
-const { fork } = require('child_process');
-
-const expectedEnv = { foo: 'bar' };
-
-{
- const cp = fork(fixtures.path('child-process-echo-options.js'), undefined,
- { env: Object.assign({}, process.env, expectedEnv) });
-
- cp.on('message', common.mustCall(({ env }) => {
- assert.strictEqual(env.foo, expectedEnv.foo);
- }));
-
- cp.on('exit', common.mustCall((code) => {
- assert.strictEqual(code, 0);
- }));
-}
-
-{
- const cp = fork(fixtures.path('child-process-echo-options.js'), null,
- { env: Object.assign({}, process.env, expectedEnv) });
-
- cp.on('message', common.mustCall(({ env }) => {
- assert.strictEqual(env.foo, expectedEnv.foo);
- }));
-
- cp.on('exit', common.mustCall((code) => {
- assert.strictEqual(code, 0);
- }));
-}