summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGireesh Punathil <gpunathi@in.ibm.com>2018-12-17 04:48:53 -0500
committerGireesh Punathil <gpunathi@in.ibm.com>2019-02-08 10:16:41 +0530
commit2ea20006256caf844dc8d297868544790807aa52 (patch)
tree536346a50f8bd68e15134119c07e02b014a7a6ed /test
parentb44131ab927008edff85a9efb196e1e192d28a29 (diff)
downloadandroid-node-v8-2ea20006256caf844dc8d297868544790807aa52.tar.gz
android-node-v8-2ea20006256caf844dc8d297868544790807aa52.tar.bz2
android-node-v8-2ea20006256caf844dc8d297868544790807aa52.zip
test: exit sequence sanity tests
Execute JS code in worker through same vm context while exiting from the main thread at arbitrary execution points, and make sure that the workers quiesce without crashing. `worker_threads` are not necessarily the subject of testing, those are used for easy simulation of multi-thread scenarios. Refs: https://github.com/nodejs/node/issues/25007 PR-URL: https://github.com/nodejs/node/pull/25085 Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-worker-cleanexit-with-js.js21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/parallel/test-worker-cleanexit-with-js.js b/test/parallel/test-worker-cleanexit-with-js.js
new file mode 100644
index 0000000000..737399b113
--- /dev/null
+++ b/test/parallel/test-worker-cleanexit-with-js.js
@@ -0,0 +1,21 @@
+'use strict';
+const common = require('../common');
+
+// Harden the thread interactions on the exit path.
+// Ensure workers are able to bail out safe at
+// arbitrary execution points. By running a lot of
+// JS code in a tight loop, the expectation
+// is that those will be at various control flow points
+// preferrably in the JS land.
+
+const { Worker } = require('worker_threads');
+const code = 'setInterval(() => {' +
+ "require('v8').deserialize(require('v8').serialize({ foo: 'bar' }));" +
+ "require('vm').runInThisContext('x = \"foo\";');" +
+ "eval('const y = \"vm\";');}, 10);";
+for (let i = 0; i < 9; i++) {
+ new Worker(code, { eval: true });
+}
+new Worker(code, { eval: true }).on('online', common.mustCall((msg) => {
+ process.exit(0);
+}));