76 lines
3.0 KiB
JavaScript
76 lines
3.0 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const common = require('../common');
|
||
|
const fixtures = require('../common/fixtures');
|
||
|
|
||
|
common.skipIfInspectorDisabled();
|
||
|
|
||
|
const { NodeInstance } = require('../common/inspector-helper.js');
|
||
|
|
||
|
async function setupInspector(session, sessionId = undefined) {
|
||
|
await session.send({ method: 'NodeRuntime.enable', sessionId });
|
||
|
await session.waitForNotification('NodeRuntime.waitingForDebugger');
|
||
|
await session.send({ method: 'Runtime.enable', sessionId });
|
||
|
await session.send({ method: 'Debugger.enable', sessionId });
|
||
|
await session.send({ method: 'Runtime.runIfWaitingForDebugger', sessionId });
|
||
|
await session.send({ method: 'NodeRuntime.disable', sessionId });
|
||
|
await session.waitForNotification((notification) => {
|
||
|
return notification.method === 'Debugger.scriptParsed' &&
|
||
|
notification.params.url === 'node:internal/bootstrap/realm' &&
|
||
|
notification.sessionId === sessionId;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
async function test(isSetAutoAttachBeforeExecution) {
|
||
|
const child = new NodeInstance(['--inspect-brk=0', '--experimental-worker-inspection'],
|
||
|
'',
|
||
|
fixtures.path('inspect-worker/index.js')
|
||
|
);
|
||
|
|
||
|
|
||
|
const session = await child.connectInspectorSession();
|
||
|
await setupInspector(session);
|
||
|
|
||
|
if (isSetAutoAttachBeforeExecution) {
|
||
|
await session.send({ method: 'Target.setAutoAttach', params: { autoAttach: true, waitForDebuggerOnStart: true } });
|
||
|
}
|
||
|
await session.waitForNotification('Debugger.paused');
|
||
|
await session.send({ method: 'Debugger.resume' });
|
||
|
|
||
|
const sessionId = '1';
|
||
|
await session.waitForNotification('Target.targetCreated');
|
||
|
|
||
|
if (!isSetAutoAttachBeforeExecution) {
|
||
|
await session.send({ method: 'Target.setAutoAttach', params: { autoAttach: true, waitForDebuggerOnStart: true } });
|
||
|
}
|
||
|
await session.waitForNotification((notification) => {
|
||
|
return notification.method === 'Target.attachedToTarget' &&
|
||
|
notification.params.sessionId === sessionId;
|
||
|
});
|
||
|
await setupInspector(session, sessionId);
|
||
|
await session.waitForNotification('Debugger.paused');
|
||
|
await session.send({ method: 'Debugger.resume', sessionId });
|
||
|
await session.waitForDisconnect();
|
||
|
}
|
||
|
|
||
|
test(true).then(common.mustCall());
|
||
|
test(false).then(common.mustCall());
|
||
|
|
||
|
function withPermissionOptionTest() {
|
||
|
const permissionErrorThrow = common.mustCall();
|
||
|
const child = new NodeInstance(['--inspect-brk=0', '--experimental-worker-inspection', '--permission'],
|
||
|
'',
|
||
|
fixtures.path('inspect-worker/index.js'),
|
||
|
{
|
||
|
log: (_, msg) => {
|
||
|
if (msg.includes('Access to this API has been restricted')) {
|
||
|
permissionErrorThrow();
|
||
|
}
|
||
|
},
|
||
|
error: () => {},
|
||
|
}
|
||
|
);
|
||
|
child.connectInspectorSession();
|
||
|
}
|
||
|
withPermissionOptionTest();
|