nodejs/test/parallel/test-inspector-multisession...

78 lines
2.5 KiB
JavaScript

'use strict';
const common = require('../common');
common.skipIfInspectorDisabled();
const { NodeInstance } = require('../common/inspector-helper.js');
// Sets up JS bindings session and runs till the "paused" event
const script = `
const { Session } = require('inspector');
const session = new Session();
let done = false;
const interval = setInterval(() => {
if (done)
clearInterval(interval);
}, 150);
session.on('Debugger.paused', () => {
done = true;
});
session.connect();
session.post('Debugger.enable');
console.log('Ready');
console.log('Ready');
`;
async function setupSession(node) {
const session = await node.connectInspectorSession();
await session.send([
{ 'method': 'Runtime.enable' },
{ 'method': 'Debugger.enable' },
{ 'method': 'Debugger.setPauseOnExceptions',
'params': { 'state': 'none' } },
{ 'method': 'Debugger.setAsyncCallStackDepth',
'params': { 'maxDepth': 0 } },
{ 'method': 'Profiler.enable' },
{ 'method': 'Profiler.setSamplingInterval',
'params': { 'interval': 100 } },
{ 'method': 'Debugger.setBlackboxPatterns',
'params': { 'patterns': [] } },
{ 'method': 'Runtime.runIfWaitingForDebugger' }
]);
return session;
}
async function testSuspend(sessionA, sessionB) {
console.log('[test]', 'Breaking in code and verifying events are fired');
await sessionA.waitForNotification('Debugger.paused', 'Initial pause');
sessionA.send({ 'method': 'Debugger.resume' });
await sessionA.waitForNotification('Runtime.consoleAPICalled',
'Console output');
// NOTE(mmarchini): Remove second console.log when
// https://bugs.chromium.org/p/v8/issues/detail?id=10287 is fixed.
await sessionA.waitForNotification('Runtime.consoleAPICalled',
'Console output');
sessionA.send({ 'method': 'Debugger.pause' });
return Promise.all([
sessionA.waitForNotification('Debugger.paused', 'SessionA paused'),
sessionB.waitForNotification('Debugger.paused', 'SessionB paused')
]);
}
async function runTest() {
const child = new NodeInstance(undefined, script);
const [session1, session2] =
await Promise.all([setupSession(child), setupSession(child)]);
await testSuspend(session2, session1);
console.log('[test]', 'Should shut down after both sessions disconnect');
await session1.runToCompletion();
await session2.send({ 'method': 'Debugger.disable' });
await session2.disconnect();
return child.expectShutdown();
}
runTest().then(common.mustCall());