mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
2.7 KiB
129 lines
2.7 KiB
'use strict';
|
|
|
|
const common = require('../common');
|
|
|
|
common.skipIfInspectorDisabled();
|
|
|
|
const assert = require('assert');
|
|
const cluster = require('cluster');
|
|
|
|
const debuggerPort = common.PORT;
|
|
const childProcess = require('child_process');
|
|
|
|
let offset = 0;
|
|
|
|
/*
|
|
* This test suite checks that inspector port in cluster is incremented
|
|
* for different execArgv combinations
|
|
*/
|
|
|
|
function testRunnerMain() {
|
|
spawnMaster({
|
|
execArgv: ['--inspect'],
|
|
workers: [{expectedPort: 9230}]
|
|
});
|
|
|
|
let port = debuggerPort + offset++ * 10;
|
|
|
|
spawnMaster({
|
|
execArgv: [`--inspect=${port}`],
|
|
workers: [
|
|
{expectedPort: port + 1},
|
|
{expectedPort: port + 2},
|
|
{expectedPort: port + 3}
|
|
]
|
|
});
|
|
|
|
port = debuggerPort + offset++ * 10;
|
|
|
|
spawnMaster({
|
|
execArgv: ['--inspect', `--inspect-port=${port}`],
|
|
workers: [{expectedPort: port + 1}]
|
|
});
|
|
|
|
port = debuggerPort + offset++ * 10;
|
|
|
|
spawnMaster({
|
|
execArgv: ['--inspect', `--debug-port=${port}`],
|
|
workers: [{expectedPort: port + 1}]
|
|
});
|
|
|
|
port = debuggerPort + offset++ * 10;
|
|
|
|
spawnMaster({
|
|
execArgv: [`--inspect=0.0.0.0:${port}`],
|
|
workers: [{expectedPort: port + 1, expectedHost: '0.0.0.0'}]
|
|
});
|
|
|
|
port = debuggerPort + offset++ * 10;
|
|
|
|
spawnMaster({
|
|
execArgv: [`--inspect=127.0.0.1:${port}`],
|
|
workers: [{expectedPort: port + 1, expectedHost: '127.0.0.1'}]
|
|
});
|
|
|
|
if (common.hasIPv6) {
|
|
port = debuggerPort + offset++ * 10;
|
|
|
|
spawnMaster({
|
|
execArgv: [`--inspect=[::]:${port}`],
|
|
workers: [{expectedPort: port + 1, expectedHost: '::'}]
|
|
});
|
|
|
|
port = debuggerPort + offset++ * 10;
|
|
|
|
spawnMaster({
|
|
execArgv: [`--inspect=[::1]:${port}`],
|
|
workers: [{expectedPort: port + 1, expectedHost: '::1'}]
|
|
});
|
|
}
|
|
}
|
|
|
|
function masterProcessMain() {
|
|
const workers = JSON.parse(process.env.workers);
|
|
|
|
for (const worker of workers) {
|
|
cluster.fork({
|
|
expectedPort: worker.expectedPort,
|
|
expectedHost: worker.expectedHost
|
|
}).on('exit', common.mustCall(checkExitCode));
|
|
}
|
|
}
|
|
|
|
function workerProcessMain() {
|
|
const {expectedPort, expectedHost} = process.env;
|
|
|
|
assert.strictEqual(process.debugPort, +expectedPort);
|
|
|
|
if (expectedHost !== 'undefined') {
|
|
assert.strictEqual(
|
|
process.binding('config').debugOptions.host,
|
|
expectedHost
|
|
);
|
|
}
|
|
|
|
process.exit();
|
|
}
|
|
|
|
function spawnMaster({execArgv, workers}) {
|
|
childProcess.fork(__filename, {
|
|
env: {
|
|
workers: JSON.stringify(workers),
|
|
testProcess: true
|
|
},
|
|
execArgv
|
|
}).on('exit', common.mustCall(checkExitCode));
|
|
}
|
|
|
|
function checkExitCode(code, signal) {
|
|
assert.strictEqual(code, 0);
|
|
assert.strictEqual(signal, null);
|
|
}
|
|
|
|
if (!process.env.testProcess) {
|
|
testRunnerMain();
|
|
} else if (cluster.isMaster) {
|
|
masterProcessMain();
|
|
} else {
|
|
workerProcessMain();
|
|
}
|
|
|