summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEugene Ostroukhov <eostroukhov@google.com>2019-07-05 18:01:56 -0700
committerMichaƫl Zasso <targos@protonmail.com>2019-07-20 11:13:03 +0200
commitaba0cf33ecf97fe690f0b5de5c3c103076e23b3a (patch)
treec92ca71fbe1d4eba5a4aca712358f190ea41cce3 /test
parent638c8a394cfc6547ecc9bec6397f87b9ca8d513c (diff)
downloadandroid-node-v8-aba0cf33ecf97fe690f0b5de5c3c103076e23b3a.tar.gz
android-node-v8-aba0cf33ecf97fe690f0b5de5c3c103076e23b3a.tar.bz2
android-node-v8-aba0cf33ecf97fe690f0b5de5c3c103076e23b3a.zip
inspector: do not change async call stack depth if the worker is done
Fixes: https://github.com/nodejs/node/issues/28528 PR-URL: https://github.com/nodejs/node/pull/28613 Reviewed-By: Aleksei Koziatinskii <ak239spb@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-inspector-async-hook-after-done.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/parallel/test-inspector-async-hook-after-done.js b/test/parallel/test-inspector-async-hook-after-done.js
new file mode 100644
index 0000000000..10916acd0f
--- /dev/null
+++ b/test/parallel/test-inspector-async-hook-after-done.js
@@ -0,0 +1,60 @@
+'use strict';
+
+const common = require('../common');
+
+common.skipIfInspectorDisabled();
+
+const assert = require('assert');
+const { Worker } = require('worker_threads');
+const { Session } = require('inspector');
+
+const session = new Session();
+
+let done = false;
+
+session.connect();
+
+session.on('NodeWorker.attachedToWorker', ({ params: { sessionId } }) => {
+ let id = 1;
+ function postToWorkerInspector(method, params) {
+ session.post('NodeWorker.sendMessageToWorker', {
+ sessionId,
+ message: JSON.stringify({ id: id++, method, params })
+ }, () => console.log(`Message ${method} received the response`));
+ }
+
+ // Wait for the notification
+ function onMessageReceived({ params: { message } }) {
+ if (!message ||
+ JSON.parse(message).method !== 'NodeRuntime.waitingForDisconnect') {
+ session.once('NodeWorker.receivedMessageFromWorker', onMessageReceived);
+ return;
+ }
+ // Force a call to node::inspector::Agent::ToggleAsyncHook by changing the
+ // async call stack depth
+ postToWorkerInspector('Debugger.setAsyncCallStackDepth', { maxDepth: 1 });
+ // This is were the original crash happened
+ session.post('NodeWorker.detach', { sessionId }, () => {
+ done = true;
+ });
+ }
+
+ onMessageReceived({ params: { message: null } });
+ // Enable the debugger, otherwise setAsyncCallStackDepth does nothing
+ postToWorkerInspector('Debugger.enable');
+ // Start waiting for disconnect notification
+ postToWorkerInspector('NodeRuntime.notifyWhenWaitingForDisconnect',
+ { enabled: true });
+ // start worker
+ postToWorkerInspector('Runtime.runIfWaitingForDebugger');
+});
+
+session.post('NodeWorker.enable', { waitForDebuggerOnStart: true }, () => {
+ new Worker('console.log("Worker is done")', { eval: true })
+ .once('exit', () => {
+ setTimeout(() => {
+ assert.strictEqual(done, true);
+ console.log('Test is done');
+ }, 0);
+ });
+});