mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
process.exit() failure
This commit is contained in:
@@ -1,19 +0,0 @@
|
||||
import assert from "node:assert";
|
||||
import { setTimeout as sleep } from "node:timers/promises";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { Worker, isMainThread } from "node:worker_threads";
|
||||
|
||||
// This test exists so we can test the behaviour from
|
||||
// https://github.com/oven-sh/bun/blob/f6dc66925e40dfb088c78b9592f832cbddb86519/test/js/web/workers/worker.test.ts#L341-L351
|
||||
|
||||
if (isMainThread) {
|
||||
const worker = new Worker(fileURLToPath(import.meta.url), { smol: true });
|
||||
let exitCode;
|
||||
worker.once("exit", code => (exitCode = code));
|
||||
await sleep(200);
|
||||
assert.strictEqual(await worker.terminate(), undefined);
|
||||
assert.strictEqual(exitCode, 2);
|
||||
} else {
|
||||
await sleep(100);
|
||||
process.exit(2);
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
// import assert from "node:assert";
|
||||
// import { once } from "node:events";
|
||||
// import { fileURLToPath } from "node:url";
|
||||
// import { Worker, isMainThread, parentPort } from "node:worker_threads";
|
||||
|
||||
// if (isMainThread) {
|
||||
// const worker = new Worker(fileURLToPath(import.meta.url));
|
||||
// worker.postMessage("process.exit(2); parentPort.postMessage('done')");
|
||||
// worker.on("message", () => {
|
||||
// assert.fail("worker should not send a message");
|
||||
// });
|
||||
// const [exitCode] = await once(worker, "exit");
|
||||
// assert.strictEqual(exitCode, 2);
|
||||
// } else {
|
||||
// parentPort.on("message", code => {
|
||||
// console.log(`EVAL(${code})`);
|
||||
// eval(code);
|
||||
// });
|
||||
// }
|
||||
import { once } from "node:events";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { Worker, isMainThread, parentPort } from "node:worker_threads";
|
||||
|
||||
if (isMainThread) {
|
||||
const { test, expect } = await import("bun:test");
|
||||
|
||||
test("process.exit() works", async () => {
|
||||
console.log("Testing process.exit() in worker thread...");
|
||||
|
||||
const worker = new Worker(fileURLToPath(import.meta.url));
|
||||
|
||||
worker.on("message", () => expect().fail("worker should not keep executing after process.exit()"));
|
||||
|
||||
worker.postMessage("boom");
|
||||
|
||||
const [exitCode] = await once(worker, "exit");
|
||||
expect(exitCode).toBe(2);
|
||||
});
|
||||
} else {
|
||||
console.log("Worker thread started");
|
||||
|
||||
parentPort!.on("message", message => {
|
||||
console.log(`Worker received: ${message}`);
|
||||
|
||||
console.log("About to call process.exit(2)...");
|
||||
process.exit(2);
|
||||
console.log("process.exit(2) called");
|
||||
|
||||
parentPort!.postMessage("i'm still alive!");
|
||||
});
|
||||
|
||||
console.log("Worker is ready, waiting for messages...");
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
import assert from "node:assert";
|
||||
import { once } from "node:events";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { Worker, isMainThread, parentPort } from "node:worker_threads";
|
||||
|
||||
if (isMainThread) {
|
||||
const worker = new Worker(fileURLToPath(import.meta.url));
|
||||
worker.postMessage("process.exit(2); parentPort.postMessage('done')");
|
||||
worker.on("message", () => {
|
||||
assert.fail("worker should not send a message");
|
||||
});
|
||||
const [exitCode] = await once(worker, "exit");
|
||||
assert.strictEqual(exitCode, 2);
|
||||
} else {
|
||||
parentPort.on("message", code => {
|
||||
console.log(`EVAL(${code})`);
|
||||
eval(code);
|
||||
});
|
||||
}
|
||||
@@ -342,9 +342,7 @@ describe("worker_threads", () => {
|
||||
const worker = new wt.Worker(new URL("worker-fixture-process-exit.js", import.meta.url).href, {
|
||||
smol: true,
|
||||
});
|
||||
let exitCode: number | undefined = undefined;
|
||||
worker.once("exit", code => (exitCode = code));
|
||||
await Bun.sleep(200);
|
||||
const [exitCode] = await once(worker, "exit");
|
||||
expect<number | undefined>(await worker.terminate()).toBe(undefined);
|
||||
expect<number | undefined>(exitCode).toBe(2);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user