From 02d0ff58d2bab24ebbd1e61afe6b571ff4c415af Mon Sep 17 00:00:00 2001 From: Satya Rohith Date: Fri, 3 May 2024 11:22:47 +0530 Subject: refactor(tests): move worker_threads itests to spec tests (#23648) --- tests/integration/worker_tests.rs | 33 ---------------- tests/specs/node/worker_threads/__test__.jsonc | 44 +++++++++++++++++++--- tests/specs/node/worker_threads/auto_exits.mjs | 19 ++++++++++ tests/specs/node/worker_threads/auto_exits.out | 3 ++ tests/specs/node/worker_threads/message_port.mjs | 41 ++++++++++++++++++++ tests/specs/node/worker_threads/message_port.out | 6 +++ tests/specs/node/worker_threads/message_port_1.cjs | 9 +++++ .../message_port_removelistener.mjs.out | 1 - .../worker_threads/message_port_removelistener.out | 1 + .../node/worker_threads/message_port_transfer.mjs | 14 +++++++ .../node/worker_threads/message_port_transfer.out | 3 ++ .../node/worker_threads/message_port_transfer1.mjs | 10 +++++ .../node/worker_threads/message_port_unref.mjs | 40 ++++++++++++++++++++ .../node/worker_threads/message_port_unref.out | 2 + tests/testdata/workers/node_worker_auto_exits.mjs | 19 ---------- .../workers/node_worker_auto_exits.mjs.out | 3 -- .../testdata/workers/node_worker_message_port.mjs | 41 -------------------- .../workers/node_worker_message_port.mjs.out | 6 --- .../workers/node_worker_message_port_1.cjs | 9 ----- .../workers/node_worker_message_port_unref.mjs | 40 -------------------- .../workers/node_worker_message_port_unref.mjs.out | 2 - .../testdata/workers/node_worker_transfer_port.mjs | 14 ------- .../workers/node_worker_transfer_port.mjs.out | 3 -- .../workers/node_worker_transfer_port_1.mjs | 10 ----- 24 files changed, 186 insertions(+), 187 deletions(-) create mode 100644 tests/specs/node/worker_threads/auto_exits.mjs create mode 100644 tests/specs/node/worker_threads/auto_exits.out create mode 100644 tests/specs/node/worker_threads/message_port.mjs create mode 100644 tests/specs/node/worker_threads/message_port.out create mode 100644 tests/specs/node/worker_threads/message_port_1.cjs delete mode 100644 tests/specs/node/worker_threads/message_port_removelistener.mjs.out create mode 100644 tests/specs/node/worker_threads/message_port_removelistener.out create mode 100644 tests/specs/node/worker_threads/message_port_transfer.mjs create mode 100644 tests/specs/node/worker_threads/message_port_transfer.out create mode 100644 tests/specs/node/worker_threads/message_port_transfer1.mjs create mode 100644 tests/specs/node/worker_threads/message_port_unref.mjs create mode 100644 tests/specs/node/worker_threads/message_port_unref.out delete mode 100644 tests/testdata/workers/node_worker_auto_exits.mjs delete mode 100644 tests/testdata/workers/node_worker_auto_exits.mjs.out delete mode 100644 tests/testdata/workers/node_worker_message_port.mjs delete mode 100644 tests/testdata/workers/node_worker_message_port.mjs.out delete mode 100644 tests/testdata/workers/node_worker_message_port_1.cjs delete mode 100644 tests/testdata/workers/node_worker_message_port_unref.mjs delete mode 100644 tests/testdata/workers/node_worker_message_port_unref.mjs.out delete mode 100644 tests/testdata/workers/node_worker_transfer_port.mjs delete mode 100644 tests/testdata/workers/node_worker_transfer_port.mjs.out delete mode 100644 tests/testdata/workers/node_worker_transfer_port_1.mjs (limited to 'tests') diff --git a/tests/integration/worker_tests.rs b/tests/integration/worker_tests.rs index aa1c9656e..d711b034c 100644 --- a/tests/integration/worker_tests.rs +++ b/tests/integration/worker_tests.rs @@ -117,36 +117,3 @@ itest!(worker_ids_are_sequential { output: "workers/worker_ids_are_sequential.ts.out", exit_code: 0, }); - -// Test for https://github.com/denoland/deno/issues/22629 -// Test for https://github.com/denoland/deno/issues/22934 -itest!(node_worker_auto_exits { - args: "run --quiet --allow-read workers/node_worker_auto_exits.mjs", - output: "workers/node_worker_auto_exits.mjs.out", - exit_code: 0, -}); - -itest!(node_worker_message_port { - args: "run --quiet --allow-read workers/node_worker_message_port.mjs", - output: "workers/node_worker_message_port.mjs.out", - exit_code: 0, -}); - -itest!(node_worker_transfer_port { - args: "run --quiet --allow-read workers/node_worker_transfer_port.mjs", - output: "workers/node_worker_transfer_port.mjs.out", - exit_code: 0, -}); - -itest!(node_worker_message_port_unref { - args: "run --quiet --allow-env --allow-read workers/node_worker_message_port_unref.mjs", - output: "workers/node_worker_message_port_unref.mjs.out", - exit_code: 0, -}); - -itest!(node_worker_parent_port_unref { - envs: vec![("PARENT_PORT".into(), "1".into())], - args: "run --quiet --allow-env --allow-read workers/node_worker_message_port_unref.mjs", - output: "workers/node_worker_message_port_unref.mjs.out", - exit_code: 0, -}); diff --git a/tests/specs/node/worker_threads/__test__.jsonc b/tests/specs/node/worker_threads/__test__.jsonc index adcb9a85d..9254d9d37 100644 --- a/tests/specs/node/worker_threads/__test__.jsonc +++ b/tests/specs/node/worker_threads/__test__.jsonc @@ -1,8 +1,40 @@ { - "steps": [{ - "args": "run message_port_removelistener.mjs", - "output": "message_port_removelistener.mjs.out", - // Note: successful exit asserts that the test passed - "exitCode": 0 - }] + "tests": { + "auto_exits": { + // Test for https://github.com/denoland/deno/issues/22629 + // Test for https://github.com/denoland/deno/issues/22934 + "args": "run --quiet --allow-read auto_exits.mjs", + "output": "auto_exits.out", + "exitCode": 0 + }, + "message_port": { + "args": "run --allow-env --allow-read message_port.mjs", + "output": "message_port.out", + "exitCode": 0 + }, + "message_port_transfer": { + "args": "run --quiet --allow-read message_port_transfer.mjs", + "output": "message_port_transfer.out", + "exitCode": 0 + }, + "message_port_removelistener": { + "args": "run message_port_removelistener.mjs", + "output": "message_port_removelistener.out", + // Note: successful exit asserts that the test passed + "exitCode": 0 + }, + "message_port_unref": { + "args": "run --allow-env --allow-read message_port_unref.mjs", + "output": "message_port_unref.out", + "exitCode": 0 + }, + "parent_port_unref": { + "args": "run --allow-env --allow-read message_port_unref.mjs", + "envs": { + "PARENT_PORT": "1" + }, + "output": "message_port_unref.out", + "exitCode": 0 + } + } } diff --git a/tests/specs/node/worker_threads/auto_exits.mjs b/tests/specs/node/worker_threads/auto_exits.mjs new file mode 100644 index 000000000..e434f59f7 --- /dev/null +++ b/tests/specs/node/worker_threads/auto_exits.mjs @@ -0,0 +1,19 @@ +import { isMainThread, parentPort, Worker } from "node:worker_threads"; + +function onMessageOneshot() { + console.log("Got message from main thread!"); + parentPort.off("message", onMessageOneshot); +} + +if (isMainThread) { + // This re-loads the current file inside a Worker instance. + const w = new Worker(import.meta.filename); + + setTimeout(() => { + w.postMessage("Hello! I am from the main thread."); + }, 500); +} else { + console.log("Inside Worker!"); + console.log(isMainThread); // Prints 'false'. + parentPort.on("message", onMessageOneshot); +} diff --git a/tests/specs/node/worker_threads/auto_exits.out b/tests/specs/node/worker_threads/auto_exits.out new file mode 100644 index 000000000..a160931db --- /dev/null +++ b/tests/specs/node/worker_threads/auto_exits.out @@ -0,0 +1,3 @@ +Inside Worker! +false +Got message from main thread! diff --git a/tests/specs/node/worker_threads/message_port.mjs b/tests/specs/node/worker_threads/message_port.mjs new file mode 100644 index 000000000..f6503b78d --- /dev/null +++ b/tests/specs/node/worker_threads/message_port.mjs @@ -0,0 +1,41 @@ +import workerThreads from "node:worker_threads"; + +const { port1: mainPort, port2: workerPort } = new workerThreads + .MessageChannel(); + +// Note: not using Promise.withResolver() because it's not available in Node.js +const deferred = createDeferred(); + +const worker = new workerThreads.Worker( + import.meta.resolve("./message_port_1.cjs"), + { + workerData: workerPort, + transferList: [workerPort], + }, +); + +worker.on("message", (data) => { + console.log("worker:", data); + mainPort.on("message", (msg) => { + console.log("mainPort:", msg); + deferred.resolve(); + }); + mainPort.on("close", (_msg) => { + console.log("mainPort closed"); + }); +}); + +worker.postMessage("Hello from parent"); +await deferred.promise; +await worker.terminate(); +mainPort.close(); + +function createDeferred() { + let resolveCallback; + let rejectCallback; + const promise = new Promise((resolve, reject) => { + resolveCallback = resolve; + rejectCallback = reject; + }); + return { promise, resolve: resolveCallback, reject: rejectCallback }; +} diff --git a/tests/specs/node/worker_threads/message_port.out b/tests/specs/node/worker_threads/message_port.out new file mode 100644 index 000000000..95b4fbc96 --- /dev/null +++ b/tests/specs/node/worker_threads/message_port.out @@ -0,0 +1,6 @@ +[UNORDERED_START] +worker port closed +worker: Hello from worker on parentPort! +mainPort: Hello from worker on workerPort! +mainPort closed +[UNORDERED_END] diff --git a/tests/specs/node/worker_threads/message_port_1.cjs b/tests/specs/node/worker_threads/message_port_1.cjs new file mode 100644 index 000000000..3f78cd539 --- /dev/null +++ b/tests/specs/node/worker_threads/message_port_1.cjs @@ -0,0 +1,9 @@ +const { parentPort, workerData } = require("worker_threads"); + +parentPort.on("message", (msg) => { + const workerPort = workerData; + parentPort.postMessage("Hello from worker on parentPort!"); + workerPort.postMessage("Hello from worker on workerPort!"); + workerPort.on("close", () => console.log("worker port closed")); + workerPort.close(); +}); diff --git a/tests/specs/node/worker_threads/message_port_removelistener.mjs.out b/tests/specs/node/worker_threads/message_port_removelistener.mjs.out deleted file mode 100644 index 980a0d5f1..000000000 --- a/tests/specs/node/worker_threads/message_port_removelistener.mjs.out +++ /dev/null @@ -1 +0,0 @@ -Hello World! diff --git a/tests/specs/node/worker_threads/message_port_removelistener.out b/tests/specs/node/worker_threads/message_port_removelistener.out new file mode 100644 index 000000000..980a0d5f1 --- /dev/null +++ b/tests/specs/node/worker_threads/message_port_removelistener.out @@ -0,0 +1 @@ +Hello World! diff --git a/tests/specs/node/worker_threads/message_port_transfer.mjs b/tests/specs/node/worker_threads/message_port_transfer.mjs new file mode 100644 index 000000000..733a91c86 --- /dev/null +++ b/tests/specs/node/worker_threads/message_port_transfer.mjs @@ -0,0 +1,14 @@ +import { MessageChannel, Worker } from "node:worker_threads"; + +const { port1, port2 } = new MessageChannel(); +const worker = new Worker( + import.meta.resolve("./message_port_transfer1.mjs"), +); +// Send the port directly after the worker is created +worker.postMessage(port2, [port2]); +// Send a message to the worker using the transferred port +port1.postMessage("Hello from main thread!"); +worker.on("message", (message) => { + console.log("Received message from worker:", message); + worker.terminate(); +}); diff --git a/tests/specs/node/worker_threads/message_port_transfer.out b/tests/specs/node/worker_threads/message_port_transfer.out new file mode 100644 index 000000000..8e8f11940 --- /dev/null +++ b/tests/specs/node/worker_threads/message_port_transfer.out @@ -0,0 +1,3 @@ +Worker thread started! +Received message from main thread: Hello from main thread! +Received message from worker: Reply from worker diff --git a/tests/specs/node/worker_threads/message_port_transfer1.mjs b/tests/specs/node/worker_threads/message_port_transfer1.mjs new file mode 100644 index 000000000..4d0a38bd5 --- /dev/null +++ b/tests/specs/node/worker_threads/message_port_transfer1.mjs @@ -0,0 +1,10 @@ +import { parentPort } from "node:worker_threads"; + +parentPort.on("message", (message) => { + const transferredPort = message; + transferredPort.on("message", (message) => { + console.log("Received message from main thread:", message); + parentPort.postMessage("Reply from worker"); + }); + console.log("Worker thread started!"); +}); diff --git a/tests/specs/node/worker_threads/message_port_unref.mjs b/tests/specs/node/worker_threads/message_port_unref.mjs new file mode 100644 index 000000000..a12be1ec8 --- /dev/null +++ b/tests/specs/node/worker_threads/message_port_unref.mjs @@ -0,0 +1,40 @@ +import { + isMainThread, + MessageChannel, + parentPort, + Worker, + workerData, +} from "node:worker_threads"; + +const useParentPort = Deno.env.get("PARENT_PORT") === "1"; + +if (useParentPort) { + if (isMainThread) { + const worker = new Worker(import.meta.filename); + worker.postMessage("main says hi!"); + worker.on("message", (msg) => console.log(msg)); + } else { + parentPort.on("message", (msg) => { + console.log(msg); + parentPort.postMessage("worker says hi!"); + parentPort.unref(); + }); + } +} else { + if (isMainThread) { + const { port1, port2 } = new MessageChannel(); + const worker = new Worker(import.meta.filename, { + workerData: port2, + transferList: [port2], + }); + port1.postMessage("main says hi!"); + port1.on("message", (msg) => console.log(msg)); + } else { + const port = workerData; + port.on("message", (msg) => { + console.log(msg); + port.postMessage("worker says hi!"); + port.unref(); + }); + } +} diff --git a/tests/specs/node/worker_threads/message_port_unref.out b/tests/specs/node/worker_threads/message_port_unref.out new file mode 100644 index 000000000..c9d5325bc --- /dev/null +++ b/tests/specs/node/worker_threads/message_port_unref.out @@ -0,0 +1,2 @@ +main says hi! +worker says hi! diff --git a/tests/testdata/workers/node_worker_auto_exits.mjs b/tests/testdata/workers/node_worker_auto_exits.mjs deleted file mode 100644 index e434f59f7..000000000 --- a/tests/testdata/workers/node_worker_auto_exits.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import { isMainThread, parentPort, Worker } from "node:worker_threads"; - -function onMessageOneshot() { - console.log("Got message from main thread!"); - parentPort.off("message", onMessageOneshot); -} - -if (isMainThread) { - // This re-loads the current file inside a Worker instance. - const w = new Worker(import.meta.filename); - - setTimeout(() => { - w.postMessage("Hello! I am from the main thread."); - }, 500); -} else { - console.log("Inside Worker!"); - console.log(isMainThread); // Prints 'false'. - parentPort.on("message", onMessageOneshot); -} diff --git a/tests/testdata/workers/node_worker_auto_exits.mjs.out b/tests/testdata/workers/node_worker_auto_exits.mjs.out deleted file mode 100644 index a160931db..000000000 --- a/tests/testdata/workers/node_worker_auto_exits.mjs.out +++ /dev/null @@ -1,3 +0,0 @@ -Inside Worker! -false -Got message from main thread! diff --git a/tests/testdata/workers/node_worker_message_port.mjs b/tests/testdata/workers/node_worker_message_port.mjs deleted file mode 100644 index 91c7e062d..000000000 --- a/tests/testdata/workers/node_worker_message_port.mjs +++ /dev/null @@ -1,41 +0,0 @@ -import workerThreads from "node:worker_threads"; - -const { port1: mainPort, port2: workerPort } = new workerThreads - .MessageChannel(); - -// Note: not using Promise.withResolver() because it's not available in Node.js -const deferred = createDeferred(); - -const worker = new workerThreads.Worker( - import.meta.resolve("./node_worker_message_port_1.cjs"), - { - workerData: workerPort, - transferList: [workerPort], - }, -); - -worker.on("message", (data) => { - console.log("worker:", data); - mainPort.on("message", (msg) => { - console.log("mainPort:", msg); - deferred.resolve(); - }); - mainPort.on("close", (_msg) => { - console.log("mainPort closed"); - }); -}); - -worker.postMessage("Hello from parent"); -await deferred.promise; -await worker.terminate(); -mainPort.close(); - -function createDeferred() { - let resolveCallback; - let rejectCallback; - const promise = new Promise((resolve, reject) => { - resolveCallback = resolve; - rejectCallback = reject; - }); - return { promise, resolve: resolveCallback, reject: rejectCallback }; -} diff --git a/tests/testdata/workers/node_worker_message_port.mjs.out b/tests/testdata/workers/node_worker_message_port.mjs.out deleted file mode 100644 index 95b4fbc96..000000000 --- a/tests/testdata/workers/node_worker_message_port.mjs.out +++ /dev/null @@ -1,6 +0,0 @@ -[UNORDERED_START] -worker port closed -worker: Hello from worker on parentPort! -mainPort: Hello from worker on workerPort! -mainPort closed -[UNORDERED_END] diff --git a/tests/testdata/workers/node_worker_message_port_1.cjs b/tests/testdata/workers/node_worker_message_port_1.cjs deleted file mode 100644 index 3f78cd539..000000000 --- a/tests/testdata/workers/node_worker_message_port_1.cjs +++ /dev/null @@ -1,9 +0,0 @@ -const { parentPort, workerData } = require("worker_threads"); - -parentPort.on("message", (msg) => { - const workerPort = workerData; - parentPort.postMessage("Hello from worker on parentPort!"); - workerPort.postMessage("Hello from worker on workerPort!"); - workerPort.on("close", () => console.log("worker port closed")); - workerPort.close(); -}); diff --git a/tests/testdata/workers/node_worker_message_port_unref.mjs b/tests/testdata/workers/node_worker_message_port_unref.mjs deleted file mode 100644 index a12be1ec8..000000000 --- a/tests/testdata/workers/node_worker_message_port_unref.mjs +++ /dev/null @@ -1,40 +0,0 @@ -import { - isMainThread, - MessageChannel, - parentPort, - Worker, - workerData, -} from "node:worker_threads"; - -const useParentPort = Deno.env.get("PARENT_PORT") === "1"; - -if (useParentPort) { - if (isMainThread) { - const worker = new Worker(import.meta.filename); - worker.postMessage("main says hi!"); - worker.on("message", (msg) => console.log(msg)); - } else { - parentPort.on("message", (msg) => { - console.log(msg); - parentPort.postMessage("worker says hi!"); - parentPort.unref(); - }); - } -} else { - if (isMainThread) { - const { port1, port2 } = new MessageChannel(); - const worker = new Worker(import.meta.filename, { - workerData: port2, - transferList: [port2], - }); - port1.postMessage("main says hi!"); - port1.on("message", (msg) => console.log(msg)); - } else { - const port = workerData; - port.on("message", (msg) => { - console.log(msg); - port.postMessage("worker says hi!"); - port.unref(); - }); - } -} diff --git a/tests/testdata/workers/node_worker_message_port_unref.mjs.out b/tests/testdata/workers/node_worker_message_port_unref.mjs.out deleted file mode 100644 index c9d5325bc..000000000 --- a/tests/testdata/workers/node_worker_message_port_unref.mjs.out +++ /dev/null @@ -1,2 +0,0 @@ -main says hi! -worker says hi! diff --git a/tests/testdata/workers/node_worker_transfer_port.mjs b/tests/testdata/workers/node_worker_transfer_port.mjs deleted file mode 100644 index 1b17ed1ab..000000000 --- a/tests/testdata/workers/node_worker_transfer_port.mjs +++ /dev/null @@ -1,14 +0,0 @@ -import { MessageChannel, Worker } from "node:worker_threads"; - -const { port1, port2 } = new MessageChannel(); -const worker = new Worker( - import.meta.resolve("./node_worker_transfer_port_1.mjs"), -); -// Send the port directly after the worker is created -worker.postMessage(port2, [port2]); -// Send a message to the worker using the transferred port -port1.postMessage("Hello from main thread!"); -worker.on("message", (message) => { - console.log("Received message from worker:", message); - worker.terminate(); -}); diff --git a/tests/testdata/workers/node_worker_transfer_port.mjs.out b/tests/testdata/workers/node_worker_transfer_port.mjs.out deleted file mode 100644 index 8e8f11940..000000000 --- a/tests/testdata/workers/node_worker_transfer_port.mjs.out +++ /dev/null @@ -1,3 +0,0 @@ -Worker thread started! -Received message from main thread: Hello from main thread! -Received message from worker: Reply from worker diff --git a/tests/testdata/workers/node_worker_transfer_port_1.mjs b/tests/testdata/workers/node_worker_transfer_port_1.mjs deleted file mode 100644 index 4d0a38bd5..000000000 --- a/tests/testdata/workers/node_worker_transfer_port_1.mjs +++ /dev/null @@ -1,10 +0,0 @@ -import { parentPort } from "node:worker_threads"; - -parentPort.on("message", (message) => { - const transferredPort = message; - transferredPort.on("message", (message) => { - console.log("Received message from main thread:", message); - parentPort.postMessage("Reply from worker"); - }); - console.log("Worker thread started!"); -}); -- cgit v1.2.3