From 287f22e3d13c22650f870a80e670a59cb38f27c8 Mon Sep 17 00:00:00 2001 From: Nitzan Uziely Date: Thu, 1 Apr 2021 13:41:47 +0300 Subject: [PATCH] fixup! fixup! worker: fix exit code for error thrown in handler --- test/fixtures/process-exit-code-cases.js | 216 ++++++++++++----------- test/parallel/test-process-exit-code.js | 3 +- test/parallel/test-worker-exit-code.js | 3 +- 3 files changed, 113 insertions(+), 109 deletions(-) diff --git a/test/fixtures/process-exit-code-cases.js b/test/fixtures/process-exit-code-cases.js index ca1ae9d37921ec..e0dae5811d718c 100644 --- a/test/fixtures/process-exit-code-cases.js +++ b/test/fixtures/process-exit-code-cases.js @@ -2,124 +2,126 @@ const assert = require('assert'); -const cases = []; -module.exports = cases; +function getTestCases(isWorker = false) { + const cases = []; + function exitsOnExitCodeSet() { + process.exitCode = 42; + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 42); + assert.strictEqual(code, 42); + }); + } + cases.push({ func: exitsOnExitCodeSet, result: 42 }); -function exitsOnExitCodeSet() { - process.exitCode = 42; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 42); - assert.strictEqual(code, 42); - }); -} -cases.push({ func: exitsOnExitCodeSet, result: 42 }); - -function changesCodeViaExit() { - process.exitCode = 99; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 42); - assert.strictEqual(code, 42); - }); - process.exit(42); -} -cases.push({ func: changesCodeViaExit, result: 42 }); - -function changesCodeZeroExit() { - process.exitCode = 99; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 0); - assert.strictEqual(code, 0); - }); - process.exit(0); -} -cases.push({ func: changesCodeZeroExit, result: 0 }); + function changesCodeViaExit() { + process.exitCode = 99; + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 42); + assert.strictEqual(code, 42); + }); + process.exit(42); + } + cases.push({ func: changesCodeViaExit, result: 42 }); -function exitWithOneOnUncaught() { - process.exitCode = 99; - process.on('exit', (code) => { - // cannot use assert because it will be uncaughtException -> 1 exit code - // that will render this test useless - if (code !== 1 || process.exitCode !== 1) { - console.log('wrong code! expected 1 for uncaughtException'); - process.exit(99); - } - }); - throw new Error('ok'); -} -cases.push({ - func: exitWithOneOnUncaught, - result: 1, - error: /^Error: ok$/, -}); + function changesCodeZeroExit() { + process.exitCode = 99; + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 0); + assert.strictEqual(code, 0); + }); + process.exit(0); + } + cases.push({ func: changesCodeZeroExit, result: 0 }); -function changeCodeInsideExit() { - process.exitCode = 95; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 95); - assert.strictEqual(code, 95); + function exitWithOneOnUncaught() { process.exitCode = 99; + process.on('exit', (code) => { + // cannot use assert because it will be uncaughtException -> 1 exit code + // that will render this test useless + if (code !== 1 || process.exitCode !== 1) { + console.log('wrong code! expected 1 for uncaughtException'); + process.exit(99); + } + }); + throw new Error('ok'); + } + cases.push({ + func: exitWithOneOnUncaught, + result: 1, + error: /^Error: ok$/, }); -} -cases.push({ func: changeCodeInsideExit, result: 99 }); -function zeroExitWithUncaughtHandler() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 0); - assert.strictEqual(code, 0); - }); - process.on('uncaughtException', () => {}); - throw new Error('ok'); -} -cases.push({ func: zeroExitWithUncaughtHandler, result: 0 }); + function changeCodeInsideExit() { + process.exitCode = 95; + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 95); + assert.strictEqual(code, 95); + process.exitCode = 99; + }); + } + cases.push({ func: changeCodeInsideExit, result: 99 }); -function changeCodeInUncaughtHandler() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 97); - assert.strictEqual(code, 97); - }); - process.on('uncaughtException', () => { - process.exitCode = 97; - }); - throw new Error('ok'); -} -cases.push({ func: changeCodeInUncaughtHandler, result: 97 }); + function zeroExitWithUncaughtHandler() { + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 0); + assert.strictEqual(code, 0); + }); + process.on('uncaughtException', () => { }); + throw new Error('ok'); + } + cases.push({ func: zeroExitWithUncaughtHandler, result: 0 }); + + function changeCodeInUncaughtHandler() { + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 97); + assert.strictEqual(code, 97); + }); + process.on('uncaughtException', () => { + process.exitCode = 97; + }); + throw new Error('ok'); + } + cases.push({ func: changeCodeInUncaughtHandler, result: 97 }); -function changeCodeInExitWithUncaught() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 1); - assert.strictEqual(code, 1); - process.exitCode = 98; + function changeCodeInExitWithUncaught() { + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 1); + assert.strictEqual(code, 1); + process.exitCode = 98; + }); + throw new Error('ok'); + } + cases.push({ + func: changeCodeInExitWithUncaught, + result: 98, + error: /^Error: ok$/, }); - throw new Error('ok'); -} -cases.push({ - func: changeCodeInExitWithUncaught, - result: 98, - error: /^Error: ok$/, -}); -function exitWithZeroInExitWithUncaught() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 1); - assert.strictEqual(code, 1); - process.exitCode = 0; + function exitWithZeroInExitWithUncaught() { + process.on('exit', (code) => { + assert.strictEqual(process.exitCode, 1); + assert.strictEqual(code, 1); + process.exitCode = 0; + }); + throw new Error('ok'); + } + cases.push({ + func: exitWithZeroInExitWithUncaught, + result: 0, + error: /^Error: ok$/, }); - throw new Error('ok'); -} -cases.push({ - func: exitWithZeroInExitWithUncaught, - result: 0, - error: /^Error: ok$/, -}); -function exitWithThrowInUncaughtHandler() { - process.on('uncaughtException', () => { - throw new Error('ok') + function exitWithThrowInUncaughtHandler() { + process.on('uncaughtException', () => { + throw new Error('ok') + }); + throw new Error('bad'); + } + cases.push({ + func: exitWithThrowInUncaughtHandler, + result: isWorker ? 1 : 7, + error: /^Error: ok$/, }); - throw new Error('bad'); + return cases; } -cases.push({ - func: exitWithThrowInUncaughtHandler, - result: 1, - error: /^Error: ok$/, -}); +exports.getTestCases = getTestCases; \ No newline at end of file diff --git a/test/parallel/test-process-exit-code.js b/test/parallel/test-process-exit-code.js index 2f658a172cdc5a..51d23c35c5665e 100644 --- a/test/parallel/test-process-exit-code.js +++ b/test/parallel/test-process-exit-code.js @@ -24,7 +24,8 @@ require('../common'); const assert = require('assert'); const debug = require('util').debuglog('test'); -const testCases = require('../fixtures/process-exit-code-cases'); +const { getTestCases } = require('../fixtures/process-exit-code-cases'); +const testCases = getTestCases(false); if (!process.argv[2]) { parent(); diff --git a/test/parallel/test-worker-exit-code.js b/test/parallel/test-worker-exit-code.js index 6107cd0316b250..db8986f9ef6c92 100644 --- a/test/parallel/test-worker-exit-code.js +++ b/test/parallel/test-worker-exit-code.js @@ -8,7 +8,8 @@ const assert = require('assert'); const worker = require('worker_threads'); const { Worker, parentPort } = worker; -const testCases = require('../fixtures/process-exit-code-cases'); +const { getTestCases } = require('../fixtures/process-exit-code-cases'); +const testCases = getTestCases(true); // Do not use isMainThread so that this test itself can be run inside a Worker. if (!process.env.HAS_STARTED_WORKER) {