diff options
author | Gireesh Punathil <gpunathi@in.ibm.com> | 2018-12-17 04:48:53 -0500 |
---|---|---|
committer | Gireesh Punathil <gpunathi@in.ibm.com> | 2019-02-08 10:16:41 +0530 |
commit | 2ea20006256caf844dc8d297868544790807aa52 (patch) | |
tree | 536346a50f8bd68e15134119c07e02b014a7a6ed /test | |
parent | b44131ab927008edff85a9efb196e1e192d28a29 (diff) | |
download | android-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.js | 21 |
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); +})); |