summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreu Botella <abb@randomunok.com>2021-09-25 04:26:57 +0200
committerGitHub <noreply@github.com>2021-09-24 19:26:57 -0700
commit1a6249c9717288e37873b692abac831f11c30f4e (patch)
treee8962a090909ac3187237319732ffb41b8a61a38
parent4e2b59f9df5085025f08faea24e76b009e47f68d (diff)
chore(workers): Test that closing a worker closes any child workers (#12215)
Before #12156, closing a worker which had children would cause a panic (https://github.com/denoland/deno/issues/11342#issuecomment-918327693). After that PR, closing a worker will also close any child workers.
-rw-r--r--cli/tests/integration/run_tests.rs5
-rw-r--r--cli/tests/testdata/worker_close_nested.js20
-rw-r--r--cli/tests/testdata/worker_close_nested.js.out5
-rw-r--r--cli/tests/testdata/workers/close_nested_child.js7
-rw-r--r--cli/tests/testdata/workers/close_nested_parent.js13
5 files changed, 50 insertions, 0 deletions
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index 5116db295..8c196d6e3 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -1194,6 +1194,11 @@ itest!(worker_drop_handle_race {
exit_code: 1,
});
+itest!(worker_close_nested {
+ args: "run --quiet --reload --allow-read worker_close_nested.js",
+ output: "worker_close_nested.js.out",
+});
+
itest!(worker_message_before_close {
args: "run --quiet --reload --allow-read worker_message_before_close.js",
output: "worker_message_before_close.js.out",
diff --git a/cli/tests/testdata/worker_close_nested.js b/cli/tests/testdata/worker_close_nested.js
new file mode 100644
index 000000000..fd47a5ae4
--- /dev/null
+++ b/cli/tests/testdata/worker_close_nested.js
@@ -0,0 +1,20 @@
+// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+
+// Test that closing a worker which has living child workers will automatically
+// close the children.
+
+console.log("Starting the main thread");
+
+const worker = new Worker(
+ new URL("./workers/close_nested_parent.js", import.meta.url),
+ { type: "module" },
+);
+
+setTimeout(() => {
+ console.log("About to close");
+ worker.postMessage({});
+
+ // Keep the process running for another two seconds, to make sure there's no
+ // output from the child worker.
+ setTimeout(() => {}, 2000);
+}, 1000);
diff --git a/cli/tests/testdata/worker_close_nested.js.out b/cli/tests/testdata/worker_close_nested.js.out
new file mode 100644
index 000000000..496bc6251
--- /dev/null
+++ b/cli/tests/testdata/worker_close_nested.js.out
@@ -0,0 +1,5 @@
+Starting the main thread
+Starting the parent worker
+Starting the child worker
+About to close
+Closing
diff --git a/cli/tests/testdata/workers/close_nested_child.js b/cli/tests/testdata/workers/close_nested_child.js
new file mode 100644
index 000000000..627a176aa
--- /dev/null
+++ b/cli/tests/testdata/workers/close_nested_child.js
@@ -0,0 +1,7 @@
+// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+
+console.log("Starting the child worker");
+
+setTimeout(() => {
+ console.log("The child worker survived the death of the parent!!!");
+}, 2000);
diff --git a/cli/tests/testdata/workers/close_nested_parent.js b/cli/tests/testdata/workers/close_nested_parent.js
new file mode 100644
index 000000000..c528632ce
--- /dev/null
+++ b/cli/tests/testdata/workers/close_nested_parent.js
@@ -0,0 +1,13 @@
+// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+
+console.log("Starting the parent worker");
+
+new Worker(
+ new URL("./close_nested_child.js", import.meta.url),
+ { type: "module" },
+);
+
+self.addEventListener("message", () => {
+ console.log("Closing");
+ self.close();
+});