From 582be0adc2b80e532cf92ffbc44c8c8268a51774 Mon Sep 17 00:00:00 2001 From: Mohammad Sulaiman Date: Mon, 9 Sep 2024 18:07:41 +0300 Subject: chore: Deprecate worker itests (#25514) --- tests/integration/mod.rs | 2 - tests/integration/worker_tests.rs | 119 --------------------- .../_084_worker_custom_inspect/__test__.jsonc | 4 + .../custom_inspect/main.out | 1 + .../custom_inspect/main.ts | 4 + .../custom_inspect/worker.ts | 2 + .../error_worker_permissions_local/__test__.jsonc | 5 + .../error_worker_permissions_local.ts | 4 + .../error_worker_permissions_local.ts.out | 2 + .../error_worker_permissions_local/worker_types.ts | 4 + .../error_worker_permissions_remote/__test__.jsonc | 5 + .../error_worker_permissions_remote.ts | 4 + .../error_worker_permissions_remote.ts.out | 2 + .../specs/worker/nonexistent_worker/__test__.jsonc | 5 + .../nonexistent_worker/nonexistent_worker.out | 3 + .../nonexistent_worker/nonexistent_worker.ts | 5 + .../specs/worker/worker_async_error/__test__.jsonc | 5 + .../specs/worker/worker_async_error/async_error.ts | 4 + .../worker_async_error/worker_async_error.ts | 5 + .../worker_async_error/worker_async_error.ts.out | 7 ++ .../worker_doest_stall_event_loop/__test__.jsonc | 5 + .../worker_doest_stall_event_loop.ts | 29 +++++ .../worker_doest_stall_event_loop.ts.out | 6 ++ tests/specs/worker/worker_error/__test__.jsonc | 5 + tests/specs/worker/worker_error/error.ts | 5 + tests/specs/worker/worker_error/worker_error.ts | 5 + .../specs/worker/worker_error/worker_error.ts.out | 5 + .../specs/worker/worker_error_event/__test__.jsonc | 5 + tests/specs/worker/worker_error_event/error.ts | 5 + .../specs/worker/worker_error_event/error_event.ts | 11 ++ .../worker/worker_error_event/error_event.ts.out | 13 +++ .../worker_ids_are_sequential/__test__.jsonc | 5 + .../worker_ids_are_sequential.ts | 34 ++++++ .../worker_ids_are_sequential.ts.out | 4 + .../worker_message_handler_error/__test__.jsonc | 5 + .../message_handler_error.ts | 4 + .../worker_message_handler_error.ts | 8 ++ .../worker_message_handler_error.ts.out | 7 ++ .../worker/worker_nested_error/__test__.jsonc | 5 + tests/specs/worker/worker_nested_error/error.ts | 5 + .../worker/worker_nested_error/worker_error.ts | 5 + .../worker_nested_error/worker_nested_error.ts | 5 + .../worker_nested_error/worker_nested_error.ts.out | 9 ++ .../worker_permissions_blob_local/__test__.jsonc | 5 + .../permissions_blob_local.ts | 6 ++ .../permissions_blob_local.ts.out | 4 + .../worker_permissions_blob_remote/__test__.jsonc | 5 + .../permissions_blob_remote.ts | 4 + .../permissions_blob_remote.ts.out | 4 + .../worker_permissions_data_local/__test__.jsonc | 5 + .../permissions_data_local.ts | 7 ++ .../permissions_data_local.ts.out | 4 + .../worker_permissions_data_remote/__test__.jsonc | 5 + .../permissions_data_remote.ts | 5 + .../permissions_data_remote.ts.out | 4 + .../__test__.jsonc | 5 + .../__test__.jsonc | 5 + .../permissions_remote_remote.ts.out | 4 + .../worker_terminate_tla_crash/__test__.jsonc | 4 + .../terminate_tla_crash.js | 21 ++++ .../terminate_tla_crash.js.out | 0 tests/testdata/workers/async_error.ts | 4 - tests/testdata/workers/custom_inspect/main.out | 1 - tests/testdata/workers/custom_inspect/main.ts | 4 - tests/testdata/workers/custom_inspect/worker.ts | 2 - tests/testdata/workers/error.ts | 5 - tests/testdata/workers/error_event.ts | 11 -- tests/testdata/workers/error_event.ts.out | 13 --- .../workers/error_worker_permissions_local.ts | 4 - .../workers/error_worker_permissions_local.ts.out | 2 - .../workers/error_worker_permissions_remote.ts | 4 - .../workers/error_worker_permissions_remote.ts.out | 2 - tests/testdata/workers/message_handler_error.ts | 4 - tests/testdata/workers/nonexistent_worker.out | 3 - tests/testdata/workers/nonexistent_worker.ts | 5 - tests/testdata/workers/permissions_blob_local.ts | 6 -- .../testdata/workers/permissions_blob_local.ts.out | 4 - tests/testdata/workers/permissions_blob_remote.ts | 4 - .../workers/permissions_blob_remote.ts.out | 4 - tests/testdata/workers/permissions_data_local.ts | 7 -- .../testdata/workers/permissions_data_local.ts.out | 4 - tests/testdata/workers/permissions_data_remote.ts | 5 - .../workers/permissions_data_remote.ts.out | 4 - .../workers/permissions_remote_remote.ts.out | 4 - tests/testdata/workers/terminate_tla_crash.js | 21 ---- tests/testdata/workers/terminate_tla_crash.js.out | 0 tests/testdata/workers/worker_async_error.ts | 5 - tests/testdata/workers/worker_async_error.ts.out | 7 -- .../workers/worker_doest_stall_event_loop.ts | 29 ----- .../workers/worker_doest_stall_event_loop.ts.out | 6 -- tests/testdata/workers/worker_error.ts | 5 - tests/testdata/workers/worker_error.ts.out | 5 - .../testdata/workers/worker_ids_are_sequential.ts | 34 ------ .../workers/worker_ids_are_sequential.ts.out | 4 - .../workers/worker_message_handler_error.ts | 8 -- .../workers/worker_message_handler_error.ts.out | 7 -- tests/testdata/workers/worker_nested_error.ts | 5 - tests/testdata/workers/worker_nested_error.ts.out | 9 -- tests/testdata/workers/worker_types.ts | 4 - 99 files changed, 358 insertions(+), 376 deletions(-) delete mode 100644 tests/integration/worker_tests.rs create mode 100644 tests/specs/worker/_084_worker_custom_inspect/__test__.jsonc create mode 100644 tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.out create mode 100644 tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.ts create mode 100644 tests/specs/worker/_084_worker_custom_inspect/custom_inspect/worker.ts create mode 100644 tests/specs/worker/error_worker_permissions_local/__test__.jsonc create mode 100644 tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts create mode 100644 tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts.out create mode 100644 tests/specs/worker/error_worker_permissions_local/worker_types.ts create mode 100644 tests/specs/worker/error_worker_permissions_remote/__test__.jsonc create mode 100644 tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts create mode 100644 tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts.out create mode 100644 tests/specs/worker/nonexistent_worker/__test__.jsonc create mode 100644 tests/specs/worker/nonexistent_worker/nonexistent_worker.out create mode 100644 tests/specs/worker/nonexistent_worker/nonexistent_worker.ts create mode 100644 tests/specs/worker/worker_async_error/__test__.jsonc create mode 100644 tests/specs/worker/worker_async_error/async_error.ts create mode 100644 tests/specs/worker/worker_async_error/worker_async_error.ts create mode 100644 tests/specs/worker/worker_async_error/worker_async_error.ts.out create mode 100644 tests/specs/worker/worker_doest_stall_event_loop/__test__.jsonc create mode 100644 tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts create mode 100644 tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts.out create mode 100644 tests/specs/worker/worker_error/__test__.jsonc create mode 100644 tests/specs/worker/worker_error/error.ts create mode 100644 tests/specs/worker/worker_error/worker_error.ts create mode 100644 tests/specs/worker/worker_error/worker_error.ts.out create mode 100644 tests/specs/worker/worker_error_event/__test__.jsonc create mode 100644 tests/specs/worker/worker_error_event/error.ts create mode 100644 tests/specs/worker/worker_error_event/error_event.ts create mode 100644 tests/specs/worker/worker_error_event/error_event.ts.out create mode 100644 tests/specs/worker/worker_ids_are_sequential/__test__.jsonc create mode 100644 tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts create mode 100644 tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts.out create mode 100644 tests/specs/worker/worker_message_handler_error/__test__.jsonc create mode 100644 tests/specs/worker/worker_message_handler_error/message_handler_error.ts create mode 100644 tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts create mode 100644 tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts.out create mode 100644 tests/specs/worker/worker_nested_error/__test__.jsonc create mode 100644 tests/specs/worker/worker_nested_error/error.ts create mode 100644 tests/specs/worker/worker_nested_error/worker_error.ts create mode 100644 tests/specs/worker/worker_nested_error/worker_nested_error.ts create mode 100644 tests/specs/worker/worker_nested_error/worker_nested_error.ts.out create mode 100644 tests/specs/worker/worker_permissions_blob_local/__test__.jsonc create mode 100644 tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts create mode 100644 tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts.out create mode 100644 tests/specs/worker/worker_permissions_blob_remote/__test__.jsonc create mode 100644 tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts create mode 100644 tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts.out create mode 100644 tests/specs/worker/worker_permissions_data_local/__test__.jsonc create mode 100644 tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts create mode 100644 tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts.out create mode 100644 tests/specs/worker/worker_permissions_data_remote/__test__.jsonc create mode 100644 tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts create mode 100644 tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts.out create mode 100644 tests/specs/worker/worker_permissions_dynamic_remote/__test__.jsonc create mode 100644 tests/specs/worker/worker_permissions_remote_remote/__test__.jsonc create mode 100644 tests/specs/worker/worker_permissions_remote_remote/permissions_remote_remote.ts.out create mode 100644 tests/specs/worker/worker_terminate_tla_crash/__test__.jsonc create mode 100644 tests/specs/worker/worker_terminate_tla_crash/terminate_tla_crash.js create mode 100644 tests/specs/worker/worker_terminate_tla_crash/terminate_tla_crash.js.out delete mode 100644 tests/testdata/workers/async_error.ts delete mode 100644 tests/testdata/workers/custom_inspect/main.out delete mode 100644 tests/testdata/workers/custom_inspect/main.ts delete mode 100644 tests/testdata/workers/custom_inspect/worker.ts delete mode 100644 tests/testdata/workers/error.ts delete mode 100644 tests/testdata/workers/error_event.ts delete mode 100644 tests/testdata/workers/error_event.ts.out delete mode 100644 tests/testdata/workers/error_worker_permissions_local.ts delete mode 100644 tests/testdata/workers/error_worker_permissions_local.ts.out delete mode 100644 tests/testdata/workers/error_worker_permissions_remote.ts delete mode 100644 tests/testdata/workers/error_worker_permissions_remote.ts.out delete mode 100644 tests/testdata/workers/message_handler_error.ts delete mode 100644 tests/testdata/workers/nonexistent_worker.out delete mode 100644 tests/testdata/workers/nonexistent_worker.ts delete mode 100644 tests/testdata/workers/permissions_blob_local.ts delete mode 100644 tests/testdata/workers/permissions_blob_local.ts.out delete mode 100644 tests/testdata/workers/permissions_blob_remote.ts delete mode 100644 tests/testdata/workers/permissions_blob_remote.ts.out delete mode 100644 tests/testdata/workers/permissions_data_local.ts delete mode 100644 tests/testdata/workers/permissions_data_local.ts.out delete mode 100644 tests/testdata/workers/permissions_data_remote.ts delete mode 100644 tests/testdata/workers/permissions_data_remote.ts.out delete mode 100644 tests/testdata/workers/permissions_remote_remote.ts.out delete mode 100644 tests/testdata/workers/terminate_tla_crash.js delete mode 100644 tests/testdata/workers/terminate_tla_crash.js.out delete mode 100644 tests/testdata/workers/worker_async_error.ts delete mode 100644 tests/testdata/workers/worker_async_error.ts.out delete mode 100644 tests/testdata/workers/worker_doest_stall_event_loop.ts delete mode 100644 tests/testdata/workers/worker_doest_stall_event_loop.ts.out delete mode 100644 tests/testdata/workers/worker_error.ts delete mode 100644 tests/testdata/workers/worker_error.ts.out delete mode 100644 tests/testdata/workers/worker_ids_are_sequential.ts delete mode 100644 tests/testdata/workers/worker_ids_are_sequential.ts.out delete mode 100644 tests/testdata/workers/worker_message_handler_error.ts delete mode 100644 tests/testdata/workers/worker_message_handler_error.ts.out delete mode 100644 tests/testdata/workers/worker_nested_error.ts delete mode 100644 tests/testdata/workers/worker_nested_error.ts.out delete mode 100644 tests/testdata/workers/worker_types.ts (limited to 'tests') diff --git a/tests/integration/mod.rs b/tests/integration/mod.rs index 1b8e79469..d1d20aee1 100644 --- a/tests/integration/mod.rs +++ b/tests/integration/mod.rs @@ -68,5 +68,3 @@ mod test; mod upgrade; #[path = "watcher_tests.rs"] mod watcher; -#[path = "worker_tests.rs"] -mod worker; diff --git a/tests/integration/worker_tests.rs b/tests/integration/worker_tests.rs deleted file mode 100644 index d711b034c..000000000 --- a/tests/integration/worker_tests.rs +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -use test_util::itest; - -itest!(worker_error { - args: "run -A workers/worker_error.ts", - output: "workers/worker_error.ts.out", - exit_code: 1, -}); - -itest!(worker_nested_error { - args: "run -A workers/worker_nested_error.ts", - output: "workers/worker_nested_error.ts.out", - exit_code: 1, -}); - -itest!(worker_async_error { - args: "run -A --quiet --reload workers/worker_async_error.ts", - output: "workers/worker_async_error.ts.out", - http_server: true, - exit_code: 1, -}); - -itest!(worker_message_handler_error { - args: "run -A --quiet --reload workers/worker_message_handler_error.ts", - output: "workers/worker_message_handler_error.ts.out", - http_server: true, - exit_code: 1, -}); - -itest!(nonexistent_worker { - args: "run --allow-read workers/nonexistent_worker.ts", - output: "workers/nonexistent_worker.out", - exit_code: 1, -}); - -itest!(_084_worker_custom_inspect { - args: "run --allow-read workers/custom_inspect/main.ts", - output: "workers/custom_inspect/main.out", -}); - -itest!(error_worker_permissions_local { - args: "run --reload workers/error_worker_permissions_local.ts", - output: "workers/error_worker_permissions_local.ts.out", - exit_code: 1, -}); - -itest!(error_worker_permissions_remote { - args: "run --reload workers/error_worker_permissions_remote.ts", - http_server: true, - output: "workers/error_worker_permissions_remote.ts.out", - exit_code: 1, -}); - -itest!(worker_permissions_remote_remote { - args: "run --quiet --reload --allow-net=localhost:4545 workers/permissions_remote_remote.ts", - output: "workers/permissions_remote_remote.ts.out", - http_server: true, - exit_code: 1, - }); - -itest!(worker_permissions_dynamic_remote { - args: "run --quiet --reload --allow-net --unstable-worker-options workers/permissions_dynamic_remote.ts", - output: "workers/permissions_dynamic_remote.ts.out", - http_server: true, - exit_code: 1, - }); - -itest!(worker_permissions_data_remote { - args: "run --quiet --reload --allow-net=localhost:4545 workers/permissions_data_remote.ts", - output: "workers/permissions_data_remote.ts.out", - http_server: true, - exit_code: 1, - }); - -itest!(worker_permissions_blob_remote { - args: "run --quiet --reload --allow-net=localhost:4545 workers/permissions_blob_remote.ts", - output: "workers/permissions_blob_remote.ts.out", - http_server: true, - exit_code: 1, - }); - -itest!(worker_permissions_data_local { - args: "run --quiet --reload --allow-net=localhost:4545 workers/permissions_data_local.ts", - output: "workers/permissions_data_local.ts.out", - http_server: true, - exit_code: 1, - }); - -itest!(worker_permissions_blob_local { - args: "run --quiet --reload --allow-net=localhost:4545 workers/permissions_blob_local.ts", - output: "workers/permissions_blob_local.ts.out", - http_server: true, - exit_code: 1, - }); - -itest!(worker_terminate_tla_crash { - args: "run --quiet --reload workers/terminate_tla_crash.js", - output: "workers/terminate_tla_crash.js.out", -}); - -itest!(worker_error_event { - args: "run --quiet -A workers/error_event.ts", - output: "workers/error_event.ts.out", - exit_code: 1, -}); - -// Regression test for https://github.com/denoland/deno/issues/19903 -itest!(worker_doest_stall_event_loop { - args: "run --quiet -A workers/worker_doest_stall_event_loop.ts", - output: "workers/worker_doest_stall_event_loop.ts.out", - exit_code: 0, -}); - -itest!(worker_ids_are_sequential { - args: "run --quiet -A workers/worker_ids_are_sequential.ts", - output: "workers/worker_ids_are_sequential.ts.out", - exit_code: 0, -}); diff --git a/tests/specs/worker/_084_worker_custom_inspect/__test__.jsonc b/tests/specs/worker/_084_worker_custom_inspect/__test__.jsonc new file mode 100644 index 000000000..8d47afab4 --- /dev/null +++ b/tests/specs/worker/_084_worker_custom_inspect/__test__.jsonc @@ -0,0 +1,4 @@ +{ + "args": "run --allow-read custom_inspect/main.ts", + "output": "custom_inspect/main.out" +} diff --git a/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.out b/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.out new file mode 100644 index 000000000..40d9b88ad --- /dev/null +++ b/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.out @@ -0,0 +1 @@ +ReadableStream { locked: false } diff --git a/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.ts b/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.ts new file mode 100644 index 000000000..93d4eec2d --- /dev/null +++ b/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/main.ts @@ -0,0 +1,4 @@ +new Worker( + import.meta.resolve("./worker.ts"), + { type: "module" }, +); diff --git a/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/worker.ts b/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/worker.ts new file mode 100644 index 000000000..5be82724e --- /dev/null +++ b/tests/specs/worker/_084_worker_custom_inspect/custom_inspect/worker.ts @@ -0,0 +1,2 @@ +console.log(new ReadableStream()); +close(); diff --git a/tests/specs/worker/error_worker_permissions_local/__test__.jsonc b/tests/specs/worker/error_worker_permissions_local/__test__.jsonc new file mode 100644 index 000000000..a36e19fa6 --- /dev/null +++ b/tests/specs/worker/error_worker_permissions_local/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --reload error_worker_permissions_local.ts", + "output": "error_worker_permissions_local.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts b/tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts new file mode 100644 index 000000000..1a4b4c0a9 --- /dev/null +++ b/tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts @@ -0,0 +1,4 @@ +new Worker( + import.meta.resolve("../subdir/worker_types.ts"), + { type: "module" }, +); diff --git a/tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts.out b/tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts.out new file mode 100644 index 000000000..cacc8ae38 --- /dev/null +++ b/tests/specs/worker/error_worker_permissions_local/error_worker_permissions_local.ts.out @@ -0,0 +1,2 @@ +error: Uncaught (in worker "") Requires read access to "[WILDCARD]worker_types.ts", run again with the --allow-read flag +[WILDCARD] diff --git a/tests/specs/worker/error_worker_permissions_local/worker_types.ts b/tests/specs/worker/error_worker_permissions_local/worker_types.ts new file mode 100644 index 000000000..b67a3b782 --- /dev/null +++ b/tests/specs/worker/error_worker_permissions_local/worker_types.ts @@ -0,0 +1,4 @@ +// deno-lint-ignore require-await +self.onmessage = async (_msg: MessageEvent) => { + self.postMessage("hello"); +}; diff --git a/tests/specs/worker/error_worker_permissions_remote/__test__.jsonc b/tests/specs/worker/error_worker_permissions_remote/__test__.jsonc new file mode 100644 index 000000000..06a439fd4 --- /dev/null +++ b/tests/specs/worker/error_worker_permissions_remote/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --reload error_worker_permissions_remote.ts", + "output": "error_worker_permissions_remote.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts b/tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts new file mode 100644 index 000000000..878c7080a --- /dev/null +++ b/tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts @@ -0,0 +1,4 @@ +new Worker( + "http://localhost:4545/subdir/worker_types.ts", + { type: "module" }, +); diff --git a/tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts.out b/tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts.out new file mode 100644 index 000000000..afecff0a8 --- /dev/null +++ b/tests/specs/worker/error_worker_permissions_remote/error_worker_permissions_remote.ts.out @@ -0,0 +1,2 @@ +error: Uncaught (in worker "") Requires net access to "localhost:4545", run again with the --allow-net flag +[WILDCARD] diff --git a/tests/specs/worker/nonexistent_worker/__test__.jsonc b/tests/specs/worker/nonexistent_worker/__test__.jsonc new file mode 100644 index 000000000..eada83352 --- /dev/null +++ b/tests/specs/worker/nonexistent_worker/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --allow-read nonexistent_worker.ts", + "output": "nonexistent_worker.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/nonexistent_worker/nonexistent_worker.out b/tests/specs/worker/nonexistent_worker/nonexistent_worker.out new file mode 100644 index 000000000..977d2af48 --- /dev/null +++ b/tests/specs/worker/nonexistent_worker/nonexistent_worker.out @@ -0,0 +1,3 @@ +[WILDCARD]error: Uncaught (in worker "") Module not found "file:///[WILDCARD]/doesnt_exist.js". +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl[WILDCARD] diff --git a/tests/specs/worker/nonexistent_worker/nonexistent_worker.ts b/tests/specs/worker/nonexistent_worker/nonexistent_worker.ts new file mode 100644 index 000000000..b30d08636 --- /dev/null +++ b/tests/specs/worker/nonexistent_worker/nonexistent_worker.ts @@ -0,0 +1,5 @@ +const w = new Worker(import.meta.resolve("./doesnt_exist.js"), { + type: "module", +}); + +w.postMessage("hello"); diff --git a/tests/specs/worker/worker_async_error/__test__.jsonc b/tests/specs/worker/worker_async_error/__test__.jsonc new file mode 100644 index 000000000..0e48d3f32 --- /dev/null +++ b/tests/specs/worker/worker_async_error/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run -A --quiet --reload worker_async_error.ts", + "output": "worker_async_error.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_async_error/async_error.ts b/tests/specs/worker/worker_async_error/async_error.ts new file mode 100644 index 000000000..154b957b1 --- /dev/null +++ b/tests/specs/worker/worker_async_error/async_error.ts @@ -0,0 +1,4 @@ +// deno-lint-ignore require-await +(async () => { + throw new Error("bar"); +})(); diff --git a/tests/specs/worker/worker_async_error/worker_async_error.ts b/tests/specs/worker/worker_async_error/worker_async_error.ts new file mode 100644 index 000000000..7941a5bbe --- /dev/null +++ b/tests/specs/worker/worker_async_error/worker_async_error.ts @@ -0,0 +1,5 @@ +const worker = new Worker( + import.meta.resolve("./async_error.ts"), + { type: "module", name: "foo" }, +); +setTimeout(() => worker.terminate(), 30000); diff --git a/tests/specs/worker/worker_async_error/worker_async_error.ts.out b/tests/specs/worker/worker_async_error/worker_async_error.ts.out new file mode 100644 index 000000000..8d017859c --- /dev/null +++ b/tests/specs/worker/worker_async_error/worker_async_error.ts.out @@ -0,0 +1,7 @@ +error: Uncaught (in worker "foo") (in promise) Error: bar + throw new Error("bar"); + ^ + at [WILDCARD]/async_error.ts:[WILDCARD] + at [WILDCARD]/async_error.ts:[WILDCARD] +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl [WILDCARD] diff --git a/tests/specs/worker/worker_doest_stall_event_loop/__test__.jsonc b/tests/specs/worker/worker_doest_stall_event_loop/__test__.jsonc new file mode 100644 index 000000000..a5ccc6cab --- /dev/null +++ b/tests/specs/worker/worker_doest_stall_event_loop/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet -A worker_doest_stall_event_loop.ts", + "output": "worker_doest_stall_event_loop.ts.out", + "exitCode": 0 +} diff --git a/tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts b/tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts new file mode 100644 index 000000000..bfddee2ec --- /dev/null +++ b/tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts @@ -0,0 +1,29 @@ +const moduleCode = ` +console.log('module start'); +const hash = await crypto.subtle.digest('SHA-1', new TextEncoder().encode('data')); +const __default = {}; +export { __default as default }; +console.log('module finish'); +`; + +const workerCode = ` + console.log('worker!'); + + globalThis.onmessage = (msg) => { + const { moduleCode } = msg.data; + (async () => { + console.log('before import'); + await import(URL.createObjectURL(new Blob([ moduleCode ]))); + console.log('after import'); + self.postMessage('thanks'); + })(); + } +`; +const worker = new Worker(URL.createObjectURL(new Blob([workerCode])), { + type: "module", +}); +worker.onmessage = () => { + console.log("worker.terminate"); + worker.terminate(); +}; +worker.postMessage({ moduleCode }); diff --git a/tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts.out b/tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts.out new file mode 100644 index 000000000..5ed65b02f --- /dev/null +++ b/tests/specs/worker/worker_doest_stall_event_loop/worker_doest_stall_event_loop.ts.out @@ -0,0 +1,6 @@ +worker! +before import +module start +module finish +after import +worker.terminate diff --git a/tests/specs/worker/worker_error/__test__.jsonc b/tests/specs/worker/worker_error/__test__.jsonc new file mode 100644 index 000000000..9c50a7856 --- /dev/null +++ b/tests/specs/worker/worker_error/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run -A worker_error.ts", + "output": "worker_error.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_error/error.ts b/tests/specs/worker/worker_error/error.ts new file mode 100644 index 000000000..495971090 --- /dev/null +++ b/tests/specs/worker/worker_error/error.ts @@ -0,0 +1,5 @@ +function foo() { + throw new Error("foo"); +} + +foo(); diff --git a/tests/specs/worker/worker_error/worker_error.ts b/tests/specs/worker/worker_error/worker_error.ts new file mode 100644 index 000000000..403223d0a --- /dev/null +++ b/tests/specs/worker/worker_error/worker_error.ts @@ -0,0 +1,5 @@ +const worker = new Worker( + import.meta.resolve("./error.ts"), + { type: "module", name: "bar" }, +); +setTimeout(() => worker.terminate(), 30000); diff --git a/tests/specs/worker/worker_error/worker_error.ts.out b/tests/specs/worker/worker_error/worker_error.ts.out new file mode 100644 index 000000000..1dd017770 --- /dev/null +++ b/tests/specs/worker/worker_error/worker_error.ts.out @@ -0,0 +1,5 @@ +[WILDCARD]error: Uncaught (in worker "bar") (in promise) Error: foo[WILDCARD] + at foo ([WILDCARD]) + at [WILDCARD] +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl [WILDCARD] diff --git a/tests/specs/worker/worker_error_event/__test__.jsonc b/tests/specs/worker/worker_error_event/__test__.jsonc new file mode 100644 index 000000000..a05481a13 --- /dev/null +++ b/tests/specs/worker/worker_error_event/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet -A error_event.ts", + "output": "error_event.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_error_event/error.ts b/tests/specs/worker/worker_error_event/error.ts new file mode 100644 index 000000000..495971090 --- /dev/null +++ b/tests/specs/worker/worker_error_event/error.ts @@ -0,0 +1,5 @@ +function foo() { + throw new Error("foo"); +} + +foo(); diff --git a/tests/specs/worker/worker_error_event/error_event.ts b/tests/specs/worker/worker_error_event/error_event.ts new file mode 100644 index 000000000..70e7728ab --- /dev/null +++ b/tests/specs/worker/worker_error_event/error_event.ts @@ -0,0 +1,11 @@ +const worker = new Worker(import.meta.resolve("./error.ts"), { + type: "module", +}); +worker.addEventListener("error", (e) => { + console.log({ + "message": e.message, + "filename": e.filename?.slice?.(-100), + "lineno": e.lineno, + "colno": e.colno, + }); +}); diff --git a/tests/specs/worker/worker_error_event/error_event.ts.out b/tests/specs/worker/worker_error_event/error_event.ts.out new file mode 100644 index 000000000..833cca8be --- /dev/null +++ b/tests/specs/worker/worker_error_event/error_event.ts.out @@ -0,0 +1,13 @@ +error: Uncaught (in worker "") (in promise) Error: foo + throw new Error("foo"); + ^ + at foo ([WILDCARD]/error.ts:2:9) + at [WILDCARD]/error.ts:5:1 +{ + message: "Uncaught (in promise) Error: foo", + filename: "[WILDCARD]/error.ts", + lineno: 2, + colno: 9 +} +error: Uncaught (in promise) Error: Unhandled error in child worker. + at [WILDCARD] diff --git a/tests/specs/worker/worker_ids_are_sequential/__test__.jsonc b/tests/specs/worker/worker_ids_are_sequential/__test__.jsonc new file mode 100644 index 000000000..b90bebac8 --- /dev/null +++ b/tests/specs/worker/worker_ids_are_sequential/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet -A worker_ids_are_sequential.ts", + "output": "worker_ids_are_sequential.ts.out", + "exitCode": 0 +} diff --git a/tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts b/tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts new file mode 100644 index 000000000..eb90f0d47 --- /dev/null +++ b/tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts @@ -0,0 +1,34 @@ +import { + isMainThread, + parentPort, + threadId, + Worker, +} from "node:worker_threads"; + +console.log("threadId", threadId); + +if (isMainThread) { + const worker = new Worker(new URL(import.meta.url)); + worker.on("message", (msg) => console.log("from worker:", msg)); + worker.on("error", () => { + throw new Error("error"); + }); + worker.on("exit", (code) => { + if (code !== 0) { + reject(new Error(`Worker stopped with exit code ${code}`)); + } + }); +} else if (threadId == 1) { + const worker = new Worker(new URL(import.meta.url)); + worker.on("message", (msg) => console.log("from worker:", msg)); + worker.on("error", () => { + throw new Error("error"); + }); + worker.on("exit", (code) => { + if (code !== 0) { + reject(new Error(`Worker stopped with exit code ${code}`)); + } + }); +} else { + parentPort.postMessage("hello!"); +} diff --git a/tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts.out b/tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts.out new file mode 100644 index 000000000..1f0552864 --- /dev/null +++ b/tests/specs/worker/worker_ids_are_sequential/worker_ids_are_sequential.ts.out @@ -0,0 +1,4 @@ +threadId 0 +threadId 1 +threadId 2 +from worker: hello! diff --git a/tests/specs/worker/worker_message_handler_error/__test__.jsonc b/tests/specs/worker/worker_message_handler_error/__test__.jsonc new file mode 100644 index 000000000..ea00753a7 --- /dev/null +++ b/tests/specs/worker/worker_message_handler_error/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run -A --quiet --reload worker_message_handler_error.ts", + "output": "worker_message_handler_error.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_message_handler_error/message_handler_error.ts b/tests/specs/worker/worker_message_handler_error/message_handler_error.ts new file mode 100644 index 000000000..3416faad1 --- /dev/null +++ b/tests/specs/worker/worker_message_handler_error/message_handler_error.ts @@ -0,0 +1,4 @@ +postMessage("ready"); +onmessage = () => { + throw new Error("bar"); +}; diff --git a/tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts b/tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts new file mode 100644 index 000000000..355d86770 --- /dev/null +++ b/tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts @@ -0,0 +1,8 @@ +const worker = new Worker( + import.meta.resolve("./message_handler_error.ts"), + { type: "module", name: "foo" }, +); +worker.onmessage = () => { + worker.postMessage("ready"); +}; +setTimeout(() => worker.terminate(), 30000); diff --git a/tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts.out b/tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts.out new file mode 100644 index 000000000..0f97e9703 --- /dev/null +++ b/tests/specs/worker/worker_message_handler_error/worker_message_handler_error.ts.out @@ -0,0 +1,7 @@ +error: Uncaught (in worker "foo") Error: bar + throw new Error("bar"); + ^ + at onmessage ([WILDCARD]/message_handler_error.ts:[WILDCARD]) + at [WILDCARD] +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl [WILDCARD] diff --git a/tests/specs/worker/worker_nested_error/__test__.jsonc b/tests/specs/worker/worker_nested_error/__test__.jsonc new file mode 100644 index 000000000..71d7c8109 --- /dev/null +++ b/tests/specs/worker/worker_nested_error/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run -A worker_nested_error.ts", + "output": "worker_nested_error.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_nested_error/error.ts b/tests/specs/worker/worker_nested_error/error.ts new file mode 100644 index 000000000..495971090 --- /dev/null +++ b/tests/specs/worker/worker_nested_error/error.ts @@ -0,0 +1,5 @@ +function foo() { + throw new Error("foo"); +} + +foo(); diff --git a/tests/specs/worker/worker_nested_error/worker_error.ts b/tests/specs/worker/worker_nested_error/worker_error.ts new file mode 100644 index 000000000..403223d0a --- /dev/null +++ b/tests/specs/worker/worker_nested_error/worker_error.ts @@ -0,0 +1,5 @@ +const worker = new Worker( + import.meta.resolve("./error.ts"), + { type: "module", name: "bar" }, +); +setTimeout(() => worker.terminate(), 30000); diff --git a/tests/specs/worker/worker_nested_error/worker_nested_error.ts b/tests/specs/worker/worker_nested_error/worker_nested_error.ts new file mode 100644 index 000000000..48bdea109 --- /dev/null +++ b/tests/specs/worker/worker_nested_error/worker_nested_error.ts @@ -0,0 +1,5 @@ +const worker = new Worker( + import.meta.resolve("./worker_error.ts"), + { type: "module", name: "baz" }, +); +setTimeout(() => worker.terminate(), 30000); diff --git a/tests/specs/worker/worker_nested_error/worker_nested_error.ts.out b/tests/specs/worker/worker_nested_error/worker_nested_error.ts.out new file mode 100644 index 000000000..404b0aa3d --- /dev/null +++ b/tests/specs/worker/worker_nested_error/worker_nested_error.ts.out @@ -0,0 +1,9 @@ +[WILDCARD]error: Uncaught (in worker "bar") (in promise) Error: foo[WILDCARD] + throw new Error("foo"); + ^ + at foo ([WILDCARD]/error.ts:[WILDCARD]) + at [WILDCARD]/error.ts:[WILDCARD] +error: Uncaught (in worker "baz") (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl [WILDCARD] +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl [WILDCARD] diff --git a/tests/specs/worker/worker_permissions_blob_local/__test__.jsonc b/tests/specs/worker/worker_permissions_blob_local/__test__.jsonc new file mode 100644 index 000000000..27a747b3a --- /dev/null +++ b/tests/specs/worker/worker_permissions_blob_local/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet --reload --allow-net=localhost:4545 permissions_blob_local.ts", + "output": "permissions_blob_local.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts b/tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts new file mode 100644 index 000000000..52f630bd8 --- /dev/null +++ b/tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts @@ -0,0 +1,6 @@ +// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. +const code = `import "file:///${ + Deno.build.os == "windows" ? "C:/" : "" +}local_file.ts";`; +const blob = new Blob([code]); +new Worker(URL.createObjectURL(blob), { type: "module" }); diff --git a/tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts.out b/tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts.out new file mode 100644 index 000000000..0cd581f7b --- /dev/null +++ b/tests/specs/worker/worker_permissions_blob_local/permissions_blob_local.ts.out @@ -0,0 +1,4 @@ +error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag + at blob:null/[WILDCARD]:1:8 +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl [WILDCARD] diff --git a/tests/specs/worker/worker_permissions_blob_remote/__test__.jsonc b/tests/specs/worker/worker_permissions_blob_remote/__test__.jsonc new file mode 100644 index 000000000..f9d66b6b3 --- /dev/null +++ b/tests/specs/worker/worker_permissions_blob_remote/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet --reload --allow-net=localhost:4545 permissions_blob_remote.ts", + "output": "permissions_blob_remote.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts b/tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts new file mode 100644 index 000000000..4808bc57b --- /dev/null +++ b/tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts @@ -0,0 +1,4 @@ +// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. +const code = `import "https://example.com/some/file.ts";`; +const blob = new Blob([code]); +new Worker(URL.createObjectURL(blob), { type: "module" }); diff --git a/tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts.out b/tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts.out new file mode 100644 index 000000000..6dc4f0f5f --- /dev/null +++ b/tests/specs/worker/worker_permissions_blob_remote/permissions_blob_remote.ts.out @@ -0,0 +1,4 @@ +error: Uncaught (in worker "") Requires net access to "example.com:443", run again with the --allow-net flag + at blob:null/[WILDCARD]:1:8 +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl[WILDCARD] diff --git a/tests/specs/worker/worker_permissions_data_local/__test__.jsonc b/tests/specs/worker/worker_permissions_data_local/__test__.jsonc new file mode 100644 index 000000000..8f118d8be --- /dev/null +++ b/tests/specs/worker/worker_permissions_data_local/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet --reload --allow-net=localhost:4545 permissions_data_local.ts", + "output": "permissions_data_local.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts b/tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts new file mode 100644 index 000000000..cda80bed6 --- /dev/null +++ b/tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts @@ -0,0 +1,7 @@ +// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. +const code = `import "file:///${ + Deno.build.os == "windows" ? "C:/" : "" +}local_file.ts";`; +new Worker(`data:application/javascript;base64,${btoa(code)}`, { + type: "module", +}); diff --git a/tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts.out b/tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts.out new file mode 100644 index 000000000..4e0f72779 --- /dev/null +++ b/tests/specs/worker/worker_permissions_data_local/permissions_data_local.ts.out @@ -0,0 +1,4 @@ +error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag + at data:application/javascript;base64,[WILDCARD]:1:8 +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl[WILDCARD] diff --git a/tests/specs/worker/worker_permissions_data_remote/__test__.jsonc b/tests/specs/worker/worker_permissions_data_remote/__test__.jsonc new file mode 100644 index 000000000..6096b4280 --- /dev/null +++ b/tests/specs/worker/worker_permissions_data_remote/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet --reload --allow-net=localhost:4545 permissions_data_remote.ts", + "output": "permissions_data_remote.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts b/tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts new file mode 100644 index 000000000..b37bd661d --- /dev/null +++ b/tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts @@ -0,0 +1,5 @@ +// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. +const code = `import "https://example.com/some/file.ts";`; +new Worker(`data:application/javascript;base64,${btoa(code)}`, { + type: "module", +}); diff --git a/tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts.out b/tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts.out new file mode 100644 index 000000000..e7af110bb --- /dev/null +++ b/tests/specs/worker/worker_permissions_data_remote/permissions_data_remote.ts.out @@ -0,0 +1,4 @@ +error: Uncaught (in worker "") Requires net access to "example.com:443", run again with the --allow-net flag + at data:application/javascript;base64,aW1wb3J0ICJodHRwczovL2V4YW1wbGUuY29tL3NvbWUvZmlsZS50cyI7:1:8 +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl[WILDCARD] diff --git a/tests/specs/worker/worker_permissions_dynamic_remote/__test__.jsonc b/tests/specs/worker/worker_permissions_dynamic_remote/__test__.jsonc new file mode 100644 index 000000000..8343b17f6 --- /dev/null +++ b/tests/specs/worker/worker_permissions_dynamic_remote/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet --reload --allow-net --unstable-worker-options ../../../testdata/workers/permissions_dynamic_remote.ts", + "output": "../../../testdata/workers/permissions_dynamic_remote.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_permissions_remote_remote/__test__.jsonc b/tests/specs/worker/worker_permissions_remote_remote/__test__.jsonc new file mode 100644 index 000000000..8cf700158 --- /dev/null +++ b/tests/specs/worker/worker_permissions_remote_remote/__test__.jsonc @@ -0,0 +1,5 @@ +{ + "args": "run --quiet --reload --allow-net=localhost:4545 ../../../testdata/workers/permissions_remote_remote.ts", + "output": "permissions_remote_remote.ts.out", + "exitCode": 1 +} diff --git a/tests/specs/worker/worker_permissions_remote_remote/permissions_remote_remote.ts.out b/tests/specs/worker/worker_permissions_remote_remote/permissions_remote_remote.ts.out new file mode 100644 index 000000000..e5bdfc2dc --- /dev/null +++ b/tests/specs/worker/worker_permissions_remote_remote/permissions_remote_remote.ts.out @@ -0,0 +1,4 @@ +error: Uncaught (in worker "") Requires net access to "example.com:443", run again with the --allow-net flag + at http://localhost:4545/[WILDCARD]/static_remote.ts:2:8 +error: Uncaught (in promise) Error: Unhandled error in child worker. + at Worker.#pollControl [WILDCARD] diff --git a/tests/specs/worker/worker_terminate_tla_crash/__test__.jsonc b/tests/specs/worker/worker_terminate_tla_crash/__test__.jsonc new file mode 100644 index 000000000..a3e04da85 --- /dev/null +++ b/tests/specs/worker/worker_terminate_tla_crash/__test__.jsonc @@ -0,0 +1,4 @@ +{ + "args": "run --quiet --reload terminate_tla_crash.js", + "output": "terminate_tla_crash.js.out" +} diff --git a/tests/specs/worker/worker_terminate_tla_crash/terminate_tla_crash.js b/tests/specs/worker/worker_terminate_tla_crash/terminate_tla_crash.js new file mode 100644 index 000000000..f793b8c8e --- /dev/null +++ b/tests/specs/worker/worker_terminate_tla_crash/terminate_tla_crash.js @@ -0,0 +1,21 @@ +// Test for https://github.com/denoland/deno/issues/12658 +// +// If a worker is terminated immediately after construction, and the worker's +// main module uses top-level await, V8 has a chance to crash. +// +// These crashes are so rare in debug mode that I've only seen them once. They +// happen a lot more often in release mode. + +const workerModule = ` + await new Promise(resolve => setTimeout(resolve, 1000)); +`; + +// Iterating 10 times to increase the likelihood of triggering the crash, at +// least in release mode. +for (let i = 0; i < 10; i++) { + const worker = new Worker( + `data:application/javascript;base64,${btoa(workerModule)}`, + { type: "module" }, + ); + worker.terminate(); +} diff --git a/tests/specs/worker/worker_terminate_tla_crash/terminate_tla_crash.js.out b/tests/specs/worker/worker_terminate_tla_crash/terminate_tla_crash.js.out new file mode 100644 index 000000000..e69de29bb diff --git a/tests/testdata/workers/async_error.ts b/tests/testdata/workers/async_error.ts deleted file mode 100644 index 154b957b1..000000000 --- a/tests/testdata/workers/async_error.ts +++ /dev/null @@ -1,4 +0,0 @@ -// deno-lint-ignore require-await -(async () => { - throw new Error("bar"); -})(); diff --git a/tests/testdata/workers/custom_inspect/main.out b/tests/testdata/workers/custom_inspect/main.out deleted file mode 100644 index 40d9b88ad..000000000 --- a/tests/testdata/workers/custom_inspect/main.out +++ /dev/null @@ -1 +0,0 @@ -ReadableStream { locked: false } diff --git a/tests/testdata/workers/custom_inspect/main.ts b/tests/testdata/workers/custom_inspect/main.ts deleted file mode 100644 index 93d4eec2d..000000000 --- a/tests/testdata/workers/custom_inspect/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -new Worker( - import.meta.resolve("./worker.ts"), - { type: "module" }, -); diff --git a/tests/testdata/workers/custom_inspect/worker.ts b/tests/testdata/workers/custom_inspect/worker.ts deleted file mode 100644 index 5be82724e..000000000 --- a/tests/testdata/workers/custom_inspect/worker.ts +++ /dev/null @@ -1,2 +0,0 @@ -console.log(new ReadableStream()); -close(); diff --git a/tests/testdata/workers/error.ts b/tests/testdata/workers/error.ts deleted file mode 100644 index 495971090..000000000 --- a/tests/testdata/workers/error.ts +++ /dev/null @@ -1,5 +0,0 @@ -function foo() { - throw new Error("foo"); -} - -foo(); diff --git a/tests/testdata/workers/error_event.ts b/tests/testdata/workers/error_event.ts deleted file mode 100644 index 70e7728ab..000000000 --- a/tests/testdata/workers/error_event.ts +++ /dev/null @@ -1,11 +0,0 @@ -const worker = new Worker(import.meta.resolve("./error.ts"), { - type: "module", -}); -worker.addEventListener("error", (e) => { - console.log({ - "message": e.message, - "filename": e.filename?.slice?.(-100), - "lineno": e.lineno, - "colno": e.colno, - }); -}); diff --git a/tests/testdata/workers/error_event.ts.out b/tests/testdata/workers/error_event.ts.out deleted file mode 100644 index 833cca8be..000000000 --- a/tests/testdata/workers/error_event.ts.out +++ /dev/null @@ -1,13 +0,0 @@ -error: Uncaught (in worker "") (in promise) Error: foo - throw new Error("foo"); - ^ - at foo ([WILDCARD]/error.ts:2:9) - at [WILDCARD]/error.ts:5:1 -{ - message: "Uncaught (in promise) Error: foo", - filename: "[WILDCARD]/error.ts", - lineno: 2, - colno: 9 -} -error: Uncaught (in promise) Error: Unhandled error in child worker. - at [WILDCARD] diff --git a/tests/testdata/workers/error_worker_permissions_local.ts b/tests/testdata/workers/error_worker_permissions_local.ts deleted file mode 100644 index 1a4b4c0a9..000000000 --- a/tests/testdata/workers/error_worker_permissions_local.ts +++ /dev/null @@ -1,4 +0,0 @@ -new Worker( - import.meta.resolve("../subdir/worker_types.ts"), - { type: "module" }, -); diff --git a/tests/testdata/workers/error_worker_permissions_local.ts.out b/tests/testdata/workers/error_worker_permissions_local.ts.out deleted file mode 100644 index cacc8ae38..000000000 --- a/tests/testdata/workers/error_worker_permissions_local.ts.out +++ /dev/null @@ -1,2 +0,0 @@ -error: Uncaught (in worker "") Requires read access to "[WILDCARD]worker_types.ts", run again with the --allow-read flag -[WILDCARD] diff --git a/tests/testdata/workers/error_worker_permissions_remote.ts b/tests/testdata/workers/error_worker_permissions_remote.ts deleted file mode 100644 index 878c7080a..000000000 --- a/tests/testdata/workers/error_worker_permissions_remote.ts +++ /dev/null @@ -1,4 +0,0 @@ -new Worker( - "http://localhost:4545/subdir/worker_types.ts", - { type: "module" }, -); diff --git a/tests/testdata/workers/error_worker_permissions_remote.ts.out b/tests/testdata/workers/error_worker_permissions_remote.ts.out deleted file mode 100644 index afecff0a8..000000000 --- a/tests/testdata/workers/error_worker_permissions_remote.ts.out +++ /dev/null @@ -1,2 +0,0 @@ -error: Uncaught (in worker "") Requires net access to "localhost:4545", run again with the --allow-net flag -[WILDCARD] diff --git a/tests/testdata/workers/message_handler_error.ts b/tests/testdata/workers/message_handler_error.ts deleted file mode 100644 index 3416faad1..000000000 --- a/tests/testdata/workers/message_handler_error.ts +++ /dev/null @@ -1,4 +0,0 @@ -postMessage("ready"); -onmessage = () => { - throw new Error("bar"); -}; diff --git a/tests/testdata/workers/nonexistent_worker.out b/tests/testdata/workers/nonexistent_worker.out deleted file mode 100644 index a624c0b51..000000000 --- a/tests/testdata/workers/nonexistent_worker.out +++ /dev/null @@ -1,3 +0,0 @@ -[WILDCARD]error: Uncaught (in worker "") Module not found "file:///[WILDCARD]/workers/doesnt_exist.js". -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl[WILDCARD] diff --git a/tests/testdata/workers/nonexistent_worker.ts b/tests/testdata/workers/nonexistent_worker.ts deleted file mode 100644 index b30d08636..000000000 --- a/tests/testdata/workers/nonexistent_worker.ts +++ /dev/null @@ -1,5 +0,0 @@ -const w = new Worker(import.meta.resolve("./doesnt_exist.js"), { - type: "module", -}); - -w.postMessage("hello"); diff --git a/tests/testdata/workers/permissions_blob_local.ts b/tests/testdata/workers/permissions_blob_local.ts deleted file mode 100644 index 52f630bd8..000000000 --- a/tests/testdata/workers/permissions_blob_local.ts +++ /dev/null @@ -1,6 +0,0 @@ -// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. -const code = `import "file:///${ - Deno.build.os == "windows" ? "C:/" : "" -}local_file.ts";`; -const blob = new Blob([code]); -new Worker(URL.createObjectURL(blob), { type: "module" }); diff --git a/tests/testdata/workers/permissions_blob_local.ts.out b/tests/testdata/workers/permissions_blob_local.ts.out deleted file mode 100644 index 0cd581f7b..000000000 --- a/tests/testdata/workers/permissions_blob_local.ts.out +++ /dev/null @@ -1,4 +0,0 @@ -error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag - at blob:null/[WILDCARD]:1:8 -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl [WILDCARD] diff --git a/tests/testdata/workers/permissions_blob_remote.ts b/tests/testdata/workers/permissions_blob_remote.ts deleted file mode 100644 index 4808bc57b..000000000 --- a/tests/testdata/workers/permissions_blob_remote.ts +++ /dev/null @@ -1,4 +0,0 @@ -// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. -const code = `import "https://example.com/some/file.ts";`; -const blob = new Blob([code]); -new Worker(URL.createObjectURL(blob), { type: "module" }); diff --git a/tests/testdata/workers/permissions_blob_remote.ts.out b/tests/testdata/workers/permissions_blob_remote.ts.out deleted file mode 100644 index 6dc4f0f5f..000000000 --- a/tests/testdata/workers/permissions_blob_remote.ts.out +++ /dev/null @@ -1,4 +0,0 @@ -error: Uncaught (in worker "") Requires net access to "example.com:443", run again with the --allow-net flag - at blob:null/[WILDCARD]:1:8 -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl[WILDCARD] diff --git a/tests/testdata/workers/permissions_data_local.ts b/tests/testdata/workers/permissions_data_local.ts deleted file mode 100644 index cda80bed6..000000000 --- a/tests/testdata/workers/permissions_data_local.ts +++ /dev/null @@ -1,7 +0,0 @@ -// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. -const code = `import "file:///${ - Deno.build.os == "windows" ? "C:/" : "" -}local_file.ts";`; -new Worker(`data:application/javascript;base64,${btoa(code)}`, { - type: "module", -}); diff --git a/tests/testdata/workers/permissions_data_local.ts.out b/tests/testdata/workers/permissions_data_local.ts.out deleted file mode 100644 index 4e0f72779..000000000 --- a/tests/testdata/workers/permissions_data_local.ts.out +++ /dev/null @@ -1,4 +0,0 @@ -error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag - at data:application/javascript;base64,[WILDCARD]:1:8 -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl[WILDCARD] diff --git a/tests/testdata/workers/permissions_data_remote.ts b/tests/testdata/workers/permissions_data_remote.ts deleted file mode 100644 index b37bd661d..000000000 --- a/tests/testdata/workers/permissions_data_remote.ts +++ /dev/null @@ -1,5 +0,0 @@ -// This file doesn't really exist, but it doesn't matter, a "PermissionsDenied" error should be thrown. -const code = `import "https://example.com/some/file.ts";`; -new Worker(`data:application/javascript;base64,${btoa(code)}`, { - type: "module", -}); diff --git a/tests/testdata/workers/permissions_data_remote.ts.out b/tests/testdata/workers/permissions_data_remote.ts.out deleted file mode 100644 index e7af110bb..000000000 --- a/tests/testdata/workers/permissions_data_remote.ts.out +++ /dev/null @@ -1,4 +0,0 @@ -error: Uncaught (in worker "") Requires net access to "example.com:443", run again with the --allow-net flag - at data:application/javascript;base64,aW1wb3J0ICJodHRwczovL2V4YW1wbGUuY29tL3NvbWUvZmlsZS50cyI7:1:8 -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl[WILDCARD] diff --git a/tests/testdata/workers/permissions_remote_remote.ts.out b/tests/testdata/workers/permissions_remote_remote.ts.out deleted file mode 100644 index a095f1938..000000000 --- a/tests/testdata/workers/permissions_remote_remote.ts.out +++ /dev/null @@ -1,4 +0,0 @@ -error: Uncaught (in worker "") Requires net access to "example.com:443", run again with the --allow-net flag - at http://localhost:4545/workers/static_remote.ts:2:8 -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl [WILDCARD] diff --git a/tests/testdata/workers/terminate_tla_crash.js b/tests/testdata/workers/terminate_tla_crash.js deleted file mode 100644 index f793b8c8e..000000000 --- a/tests/testdata/workers/terminate_tla_crash.js +++ /dev/null @@ -1,21 +0,0 @@ -// Test for https://github.com/denoland/deno/issues/12658 -// -// If a worker is terminated immediately after construction, and the worker's -// main module uses top-level await, V8 has a chance to crash. -// -// These crashes are so rare in debug mode that I've only seen them once. They -// happen a lot more often in release mode. - -const workerModule = ` - await new Promise(resolve => setTimeout(resolve, 1000)); -`; - -// Iterating 10 times to increase the likelihood of triggering the crash, at -// least in release mode. -for (let i = 0; i < 10; i++) { - const worker = new Worker( - `data:application/javascript;base64,${btoa(workerModule)}`, - { type: "module" }, - ); - worker.terminate(); -} diff --git a/tests/testdata/workers/terminate_tla_crash.js.out b/tests/testdata/workers/terminate_tla_crash.js.out deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/testdata/workers/worker_async_error.ts b/tests/testdata/workers/worker_async_error.ts deleted file mode 100644 index 7941a5bbe..000000000 --- a/tests/testdata/workers/worker_async_error.ts +++ /dev/null @@ -1,5 +0,0 @@ -const worker = new Worker( - import.meta.resolve("./async_error.ts"), - { type: "module", name: "foo" }, -); -setTimeout(() => worker.terminate(), 30000); diff --git a/tests/testdata/workers/worker_async_error.ts.out b/tests/testdata/workers/worker_async_error.ts.out deleted file mode 100644 index 8d017859c..000000000 --- a/tests/testdata/workers/worker_async_error.ts.out +++ /dev/null @@ -1,7 +0,0 @@ -error: Uncaught (in worker "foo") (in promise) Error: bar - throw new Error("bar"); - ^ - at [WILDCARD]/async_error.ts:[WILDCARD] - at [WILDCARD]/async_error.ts:[WILDCARD] -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl [WILDCARD] diff --git a/tests/testdata/workers/worker_doest_stall_event_loop.ts b/tests/testdata/workers/worker_doest_stall_event_loop.ts deleted file mode 100644 index bfddee2ec..000000000 --- a/tests/testdata/workers/worker_doest_stall_event_loop.ts +++ /dev/null @@ -1,29 +0,0 @@ -const moduleCode = ` -console.log('module start'); -const hash = await crypto.subtle.digest('SHA-1', new TextEncoder().encode('data')); -const __default = {}; -export { __default as default }; -console.log('module finish'); -`; - -const workerCode = ` - console.log('worker!'); - - globalThis.onmessage = (msg) => { - const { moduleCode } = msg.data; - (async () => { - console.log('before import'); - await import(URL.createObjectURL(new Blob([ moduleCode ]))); - console.log('after import'); - self.postMessage('thanks'); - })(); - } -`; -const worker = new Worker(URL.createObjectURL(new Blob([workerCode])), { - type: "module", -}); -worker.onmessage = () => { - console.log("worker.terminate"); - worker.terminate(); -}; -worker.postMessage({ moduleCode }); diff --git a/tests/testdata/workers/worker_doest_stall_event_loop.ts.out b/tests/testdata/workers/worker_doest_stall_event_loop.ts.out deleted file mode 100644 index 5ed65b02f..000000000 --- a/tests/testdata/workers/worker_doest_stall_event_loop.ts.out +++ /dev/null @@ -1,6 +0,0 @@ -worker! -before import -module start -module finish -after import -worker.terminate diff --git a/tests/testdata/workers/worker_error.ts b/tests/testdata/workers/worker_error.ts deleted file mode 100644 index 403223d0a..000000000 --- a/tests/testdata/workers/worker_error.ts +++ /dev/null @@ -1,5 +0,0 @@ -const worker = new Worker( - import.meta.resolve("./error.ts"), - { type: "module", name: "bar" }, -); -setTimeout(() => worker.terminate(), 30000); diff --git a/tests/testdata/workers/worker_error.ts.out b/tests/testdata/workers/worker_error.ts.out deleted file mode 100644 index 1dd017770..000000000 --- a/tests/testdata/workers/worker_error.ts.out +++ /dev/null @@ -1,5 +0,0 @@ -[WILDCARD]error: Uncaught (in worker "bar") (in promise) Error: foo[WILDCARD] - at foo ([WILDCARD]) - at [WILDCARD] -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl [WILDCARD] diff --git a/tests/testdata/workers/worker_ids_are_sequential.ts b/tests/testdata/workers/worker_ids_are_sequential.ts deleted file mode 100644 index eb90f0d47..000000000 --- a/tests/testdata/workers/worker_ids_are_sequential.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - isMainThread, - parentPort, - threadId, - Worker, -} from "node:worker_threads"; - -console.log("threadId", threadId); - -if (isMainThread) { - const worker = new Worker(new URL(import.meta.url)); - worker.on("message", (msg) => console.log("from worker:", msg)); - worker.on("error", () => { - throw new Error("error"); - }); - worker.on("exit", (code) => { - if (code !== 0) { - reject(new Error(`Worker stopped with exit code ${code}`)); - } - }); -} else if (threadId == 1) { - const worker = new Worker(new URL(import.meta.url)); - worker.on("message", (msg) => console.log("from worker:", msg)); - worker.on("error", () => { - throw new Error("error"); - }); - worker.on("exit", (code) => { - if (code !== 0) { - reject(new Error(`Worker stopped with exit code ${code}`)); - } - }); -} else { - parentPort.postMessage("hello!"); -} diff --git a/tests/testdata/workers/worker_ids_are_sequential.ts.out b/tests/testdata/workers/worker_ids_are_sequential.ts.out deleted file mode 100644 index 1f0552864..000000000 --- a/tests/testdata/workers/worker_ids_are_sequential.ts.out +++ /dev/null @@ -1,4 +0,0 @@ -threadId 0 -threadId 1 -threadId 2 -from worker: hello! diff --git a/tests/testdata/workers/worker_message_handler_error.ts b/tests/testdata/workers/worker_message_handler_error.ts deleted file mode 100644 index 355d86770..000000000 --- a/tests/testdata/workers/worker_message_handler_error.ts +++ /dev/null @@ -1,8 +0,0 @@ -const worker = new Worker( - import.meta.resolve("./message_handler_error.ts"), - { type: "module", name: "foo" }, -); -worker.onmessage = () => { - worker.postMessage("ready"); -}; -setTimeout(() => worker.terminate(), 30000); diff --git a/tests/testdata/workers/worker_message_handler_error.ts.out b/tests/testdata/workers/worker_message_handler_error.ts.out deleted file mode 100644 index 0f97e9703..000000000 --- a/tests/testdata/workers/worker_message_handler_error.ts.out +++ /dev/null @@ -1,7 +0,0 @@ -error: Uncaught (in worker "foo") Error: bar - throw new Error("bar"); - ^ - at onmessage ([WILDCARD]/message_handler_error.ts:[WILDCARD]) - at [WILDCARD] -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl [WILDCARD] diff --git a/tests/testdata/workers/worker_nested_error.ts b/tests/testdata/workers/worker_nested_error.ts deleted file mode 100644 index 48bdea109..000000000 --- a/tests/testdata/workers/worker_nested_error.ts +++ /dev/null @@ -1,5 +0,0 @@ -const worker = new Worker( - import.meta.resolve("./worker_error.ts"), - { type: "module", name: "baz" }, -); -setTimeout(() => worker.terminate(), 30000); diff --git a/tests/testdata/workers/worker_nested_error.ts.out b/tests/testdata/workers/worker_nested_error.ts.out deleted file mode 100644 index 3622acfb3..000000000 --- a/tests/testdata/workers/worker_nested_error.ts.out +++ /dev/null @@ -1,9 +0,0 @@ -[WILDCARD]error: Uncaught (in worker "bar") (in promise) Error: foo[WILDCARD] - throw new Error("foo"); - ^ - at foo ([WILDCARD]/workers/error.ts:[WILDCARD]) - at [WILDCARD]/workers/error.ts:[WILDCARD] -error: Uncaught (in worker "baz") (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl [WILDCARD] -error: Uncaught (in promise) Error: Unhandled error in child worker. - at Worker.#pollControl [WILDCARD] diff --git a/tests/testdata/workers/worker_types.ts b/tests/testdata/workers/worker_types.ts deleted file mode 100644 index b67a3b782..000000000 --- a/tests/testdata/workers/worker_types.ts +++ /dev/null @@ -1,4 +0,0 @@ -// deno-lint-ignore require-await -self.onmessage = async (_msg: MessageEvent) => { - self.postMessage("hello"); -}; -- cgit v1.2.3