From 4dca3ab23d184714da5fa82c61789a27c9fea845 Mon Sep 17 00:00:00 2001 From: Gireesh Punathil Date: Mon, 17 Dec 2018 04:48:53 -0500 Subject: [PATCH] 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 --- .../parallel/test-worker-cleanexit-with-js.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 test/parallel/test-worker-cleanexit-with-js.js 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 00000000000000..737399b1133981 --- /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); +}));