nodejs/test/parallel/test-inspector-async-hook-after-done.js
James M Snell 8caa1dcee6 test: rely less on duplicative common test harness utilities
There are several cleanups here that are not just style nits...

1. The `common.isMainThread` was just a passthrough to the
   `isMainThread` export on the worker_thread module. It's
   use was inconsistent and just obfuscated the fact that
   the test file depend on the `worker_threads` built-in.
   By eliminating it we simplify the test harness a bit and
   make it clearer which tests depend on the worker_threads
   check.
2. The `common.isDumbTerminal` is fairly unnecesary since
   that just wraps a public API check.
3. Several of the `common.skipIf....` checks were inconsistently
   used and really don't need to be separate utility functions.

A key part of the motivation here is to work towards making more
of the tests more self-contained and less reliant on the common
test harness where possible.

PR-URL: https://github.com/nodejs/node/pull/56712
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2025-01-25 07:23:09 +00:00

69 lines
2.1 KiB
JavaScript

'use strict';
const common = require('../common');
common.skipIfInspectorDisabled();
const { isMainThread } = require('worker_threads');
if (!isMainThread) {
common.skip('This test only works on a main thread');
}
const assert = require('assert');
const { Worker } = require('worker_threads');
const { Session } = require('inspector');
const session = new Session();
let done = false;
function onAttachToWorker({ 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.connect();
session.on('NodeWorker.attachedToWorker', common.mustCall(onAttachToWorker));
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);
});
});