From 47f318230fe9b4870610cbfbaae424a28818a8d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Mon, 11 Mar 2024 22:59:42 +0000 Subject: test(ext/node): add worker_threads test for SharedArrayBuffer (#22850) Follow up to https://github.com/denoland/deno/pull/22815 --- tests/unit_node/testdata/worker_threads2.mjs | 17 +++++++++++++++++ tests/unit_node/worker_threads_test.ts | 20 ++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 tests/unit_node/testdata/worker_threads2.mjs (limited to 'tests') 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, +}); -- cgit v1.2.3