'use strict';
// Tests that the inspector cannot be activated, and that sessions that could
// pause the main thread cannot be connected, while --process-timeout is used.
const common = require('../common');
common.skipIfInspectorDisabled();
const assert = require('assert');
const { spawn } = require('child_process');
const { once } = require('events');
const inspector = require('inspector');
const readline = require('readline');
const { Worker } = require('worker_threads');
const { spawnSyncAndAssert } = require('../common/child_process');
async function testActivationRequestIsIgnored() {
// Activation via SIGUSR1 (or its Windows equivalent) is ignored. The warning
// is printed from another thread, so wait for it before checking whether the
// inspector was activated.
const child = spawn(process.execPath, [
'--process-timeout=10m',
'-e',
`process._debugProcess(process.pid);
process.stdin.once('data', () => {
process.stdout.write(String(require('inspector').url()));
process.stdin.destroy();
});`,
]);
let stdout = '';
child.stdout.setEncoding('utf8');
child.stdout.on('data', (data) => { stdout += data; });
const lines = readline.createInterface({ input: child.stderr });
const [warning] = await once(lines, 'line');
assert.match(warning,
/^\(node:\d+\) Warning: Ignoring the request to activate the inspector because --process-timeout is used\.$/);
child.stdin.end('check');
const [code, signal] = await once(child, 'close');
assert.strictEqual(signal, null);
assert.strictEqual(code, 0);
assert.strictEqual(stdout, 'undefined');
}
if (process.argv[2] !== 'child') {
spawnSyncAndAssert(process.execPath, [
'--process-timeout=10m',
__filename,
'child',
], {
stderr: '',
});
testActivationRequestIsIgnored().then(common.mustCall());
return;
}
assert.throws(() => inspector.open(0), {
code: 'ERR_INSPECTOR_NOT_AVAILABLE',
message: 'The inspector cannot be activated when --process-timeout is used',
});
assert.strictEqual(inspector.url(), undefined);
// Sessions on the same thread cannot keep the thread paused, so they work.
const session = new inspector.Session();
session.connect();
session.post('Runtime.evaluate', { expression: '1 + 2' }, common.mustSucceed(({ result }) => {
assert.strictEqual(result.value, 3);
session.disconnect();
}));
const worker = new Worker(`
const assert = require('assert');
const { Session } = require('inspector');
assert.throws(() => new Session().connectToMainThread(), {
code: 'ERR_INSPECTOR_NOT_AVAILABLE',
message: 'Sessions cannot be connected to the main thread when ' +
'--process-timeout is used',
});
`, { eval: true });
worker.on('exit', common.mustCall((code) => assert.strictEqual(code, 0)));