summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-03-11 22:59:42 +0000
committerGitHub <noreply@github.com>2024-03-11 22:59:42 +0000
commit47f318230fe9b4870610cbfbaae424a28818a8d0 (patch)
tree9ded54b81f6d2583ff263e292f889851d41ca975
parenta77b2987bc90879af30a39ba274df9061cc7fbae (diff)
test(ext/node): add worker_threads test for SharedArrayBuffer (#22850)
Follow up to https://github.com/denoland/deno/pull/22815
-rw-r--r--tests/unit_node/testdata/worker_threads2.mjs17
-rw-r--r--tests/unit_node/worker_threads_test.ts20
2 files changed, 37 insertions, 0 deletions
diff --git a/tests/unit_node/testdata/worker_threads2.mjs b/tests/unit_node/testdata/worker_threads2.mjs
new file mode 100644
index 000000000..52d906bdf
--- /dev/null
+++ b/tests/unit_node/testdata/worker_threads2.mjs
@@ -0,0 +1,17 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+import { parentPort, workerData } from "node:worker_threads";
+import { once } from "node:events";
+
+async function message(expectedMessage) {
+ const [message] = await once(parentPort, "message");
+ if (message !== expectedMessage) {
+ console.log(`Expected the message "${expectedMessage}", but got`, message);
+ // fail test
+ parentPort.close();
+ }
+}
+
+const uint = new Uint8Array(workerData.sharedArrayBuffer);
+uint[0]++;
+await message("Hello");
+parentPort.postMessage("Hello");
diff --git a/tests/unit_node/worker_threads_test.ts b/tests/unit_node/worker_threads_test.ts
index bc451e33f..1ded9a591 100644
--- a/tests/unit_node/worker_threads_test.ts
+++ b/tests/unit_node/worker_threads_test.ts
@@ -218,3 +218,23 @@ Deno.test({
clearTimeout(timeout);
},
});
+
+Deno.test({
+ name: "[worker_threads] SharedArrayBuffer",
+ async fn() {
+ const sab = new SharedArrayBuffer(Uint8Array.BYTES_PER_ELEMENT);
+ const uint = new Uint8Array(sab);
+ const worker = new workerThreads.Worker(
+ new URL("./testdata/worker_threads2.mjs", import.meta.url),
+ {
+ workerData: { sharedArrayBuffer: sab },
+ },
+ );
+ worker.postMessage("Hello");
+ if ((await once(worker, "message"))[0] != "Hello") throw new Error();
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ worker.terminate();
+ if (uint[0] != 1) throw new Error();
+ },
+ sanitizeResources: false,
+});