From 12b3cfcea686e2bd01c4d17d0835b74710ce950c Mon Sep 17 00:00:00 2001 From: cjihrig Date: Tue, 15 Jan 2019 14:12:57 -0500 Subject: process: stub unsupported worker methods Some process methods are not supported in workers. This commit adds stubs that throw more informative errors. PR-URL: https://github.com/nodejs/node/pull/25587 Fixes: https://github.com/nodejs/node/issues/25448 Reviewed-By: Anna Henningsen Reviewed-By: Refael Ackermann Reviewed-By: Franziska Hinkelmann Reviewed-By: James M Snell --- test/parallel/test-process-euid-egid.js | 11 ++++---- test/parallel/test-process-initgroups.js | 5 +++- test/parallel/test-process-setgroups.js | 5 +++- test/parallel/test-process-uid-gid.js | 13 +++++----- test/parallel/test-worker-unsupported-things.js | 34 +++++++++++++++++-------- 5 files changed, 45 insertions(+), 23 deletions(-) (limited to 'test/parallel') diff --git a/test/parallel/test-process-euid-egid.js b/test/parallel/test-process-euid-egid.js index 5639163bf3..b9e0630dab 100644 --- a/test/parallel/test-process-euid-egid.js +++ b/test/parallel/test-process-euid-egid.js @@ -3,16 +3,17 @@ const common = require('../common'); const assert = require('assert'); -if (common.isWindows || !common.isMainThread) { - if (common.isMainThread) { - assert.strictEqual(process.geteuid, undefined); - assert.strictEqual(process.getegid, undefined); - } +if (common.isWindows) { + assert.strictEqual(process.geteuid, undefined); + assert.strictEqual(process.getegid, undefined); assert.strictEqual(process.seteuid, undefined); assert.strictEqual(process.setegid, undefined); return; } +if (!common.isMainThread) + return; + assert.throws(() => { process.seteuid({}); }, { diff --git a/test/parallel/test-process-initgroups.js b/test/parallel/test-process-initgroups.js index 49b8833f61..f5e839b1d2 100644 --- a/test/parallel/test-process-initgroups.js +++ b/test/parallel/test-process-initgroups.js @@ -2,11 +2,14 @@ const common = require('../common'); const assert = require('assert'); -if (common.isWindows || !common.isMainThread) { +if (common.isWindows) { assert.strictEqual(process.initgroups, undefined); return; } +if (!common.isMainThread) + return; + [undefined, null, true, {}, [], () => {}].forEach((val) => { assert.throws( () => { diff --git a/test/parallel/test-process-setgroups.js b/test/parallel/test-process-setgroups.js index a85d668316..74de3e7a25 100644 --- a/test/parallel/test-process-setgroups.js +++ b/test/parallel/test-process-setgroups.js @@ -2,11 +2,14 @@ const common = require('../common'); const assert = require('assert'); -if (common.isWindows || !common.isMainThread) { +if (common.isWindows) { assert.strictEqual(process.setgroups, undefined); return; } +if (!common.isMainThread) + return; + assert.throws( () => { process.setgroups(); diff --git a/test/parallel/test-process-uid-gid.js b/test/parallel/test-process-uid-gid.js index 456cba7f4d..49086792b9 100644 --- a/test/parallel/test-process-uid-gid.js +++ b/test/parallel/test-process-uid-gid.js @@ -24,17 +24,18 @@ const common = require('../common'); const assert = require('assert'); -if (common.isWindows || !common.isMainThread) { - // uid/gid functions are POSIX only, setters are main-thread only. - if (common.isMainThread) { - assert.strictEqual(process.getuid, undefined); - assert.strictEqual(process.getgid, undefined); - } +if (common.isWindows) { + // uid/gid functions are POSIX only. + assert.strictEqual(process.getuid, undefined); + assert.strictEqual(process.getgid, undefined); assert.strictEqual(process.setuid, undefined); assert.strictEqual(process.setgid, undefined); return; } +if (!common.isMainThread) + return; + assert.throws(() => { process.setuid({}); }, { diff --git a/test/parallel/test-worker-unsupported-things.js b/test/parallel/test-worker-unsupported-things.js index 66b10ad157..cc9eec4af6 100644 --- a/test/parallel/test-worker-unsupported-things.js +++ b/test/parallel/test-worker-unsupported-things.js @@ -1,9 +1,12 @@ 'use strict'; const common = require('../common'); const assert = require('assert'); -const { Worker, isMainThread, parentPort } = require('worker_threads'); +const { Worker, parentPort } = require('worker_threads'); -if (isMainThread) { +// Do not use isMainThread so that this test itself can be run inside a Worker. +if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + process.env.NODE_CHANNEL_FD = 'foo'; // Make worker think it has IPC. const w = new Worker(__filename); w.on('message', common.mustCall((message) => { assert.strictEqual(message, true); @@ -21,14 +24,25 @@ if (isMainThread) { assert.strictEqual(process.debugPort, before); } - assert.strictEqual('abort' in process, false); - assert.strictEqual('chdir' in process, false); - assert.strictEqual('setuid' in process, false); - assert.strictEqual('seteuid' in process, false); - assert.strictEqual('setgid' in process, false); - assert.strictEqual('setegid' in process, false); - assert.strictEqual('setgroups' in process, false); - assert.strictEqual('initgroups' in process, false); + const stubs = ['abort', 'chdir', 'send', 'disconnect']; + + if (!common.isWindows) { + stubs.push('setuid', 'seteuid', 'setgid', + 'setegid', 'setgroups', 'initgroups'); + } + + stubs.forEach((fn) => { + assert.strictEqual(process[fn].disabled, true); + assert.throws(() => { + process[fn](); + }, { code: 'ERR_WORKER_UNSUPPORTED_OPERATION' }); + }); + + ['channel', 'connected'].forEach((fn) => { + assert.throws(() => { + process[fn]; + }, { code: 'ERR_WORKER_UNSUPPORTED_OPERATION' }); + }); assert.strictEqual('_startProfilerIdleNotifier' in process, false); assert.strictEqual('_stopProfilerIdleNotifier' in process, false); -- cgit v1.2.3