From 7435dc8b2ba2bed4d6a8c1b6474f21c7219b3238 Mon Sep 17 00:00:00 2001 From: Eugene Ostroukhov Date: Fri, 26 Jul 2019 16:38:15 -0700 Subject: inspector: report all workers Main thread (the one that WS endpoint connects to) should be able to report all workers. PR-URL: https://github.com/nodejs/node/pull/28872 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Rich Trott --- test/parallel/test-inspector-workers-flat-list.js | 78 +++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 test/parallel/test-inspector-workers-flat-list.js (limited to 'test/parallel/test-inspector-workers-flat-list.js') diff --git a/test/parallel/test-inspector-workers-flat-list.js b/test/parallel/test-inspector-workers-flat-list.js new file mode 100644 index 0000000000..9f6495d10f --- /dev/null +++ b/test/parallel/test-inspector-workers-flat-list.js @@ -0,0 +1,78 @@ +'use strict'; +const common = require('../common'); + +common.skipIfInspectorDisabled(); + +const { Worker, isMainThread, parentPort, workerData } = + require('worker_threads'); + +if (isMainThread || workerData !== 'launched by test') { + common.skipIfWorker(); +} + +const { Session } = require('inspector'); + +const MAX_DEPTH = 3; + +let rootWorker = null; + +const runTest = common.mustCall(function() { + let reportedWorkersCount = 0; + const session = new Session(); + session.connect(); + session.on('NodeWorker.attachedToWorker', common.mustCall( + ({ params: { workerInfo } }) => { + console.log(`Worker ${workerInfo.title} was reported`); + if (++reportedWorkersCount === MAX_DEPTH) { + rootWorker.postMessage({ done: true }); + } + }, MAX_DEPTH)); + session.post('NodeWorker.enable', { waitForDebuggerOnStart: false }); +}); + +function processMessage({ child }) { + console.log(`Worker ${child} is running`); + if (child === MAX_DEPTH) { + runTest(); + } +} + +function workerCallback(message) { + parentPort.postMessage(message); +} + +function startWorker(depth, messageCallback) { + const worker = new Worker(__filename, { workerData: 'launched by test' }); + worker.on('message', messageCallback); + worker.postMessage({ depth }); + return worker; +} + +function runMainThread() { + rootWorker = startWorker(1, processMessage); +} + +function runChildWorkerThread() { + let worker = null; + parentPort.on('message', ({ child, depth, done }) => { + if (done) { + if (worker) { + worker.postMessage({ done: true }); + } + parentPort.close(); + } else if (depth) { + parentPort.postMessage({ child: depth }); + if (depth < MAX_DEPTH) { + worker = startWorker(depth + 1, workerCallback); + } + } else if (child) { + parentPort.postMessage({ child }); + } + }); +} + +if (isMainThread) { + runMainThread(); +} else { + runChildWorkerThread(); +} -- cgit v1.2.3