| 'use strict'; |
| const common = require('../common'); |
| common.skipIfInspectorDisabled(); |
| |
| const { spawnSync } = require('child_process'); |
| const { createServer } = require('http'); |
| const assert = require('assert'); |
| const tmpdir = require('../common/tmpdir'); |
| const fixtures = require('../common/fixtures'); |
| const entry = fixtures.path('empty.js'); |
| const { Worker } = require('worker_threads'); |
| |
| function testOnServerListen(fn) { |
| const server = createServer((socket) => { |
| socket.end('echo'); |
| }); |
| |
| server.on('listening', () => { |
| fn(server); |
| server.close(); |
| }); |
| server.listen(0, '127.0.0.1'); |
| } |
| |
| function testChildProcess(getArgs, exitCode, options) { |
| testOnServerListen((server) => { |
| const { port } = server.address(); |
| const child = spawnSync(process.execPath, getArgs(port), options); |
| const stderr = child.stderr.toString().trim(); |
| const stdout = child.stdout.toString().trim(); |
| console.log('[STDERR]'); |
| console.log(stderr); |
| console.log('[STDOUT]'); |
| console.log(stdout); |
| const match = stderr.match( |
| /Starting inspector on 127\.0\.0\.1:(\d+) failed: address already in use/ |
| ); |
| assert.notStrictEqual(match, null); |
| assert.strictEqual(match[1], port + ''); |
| assert.strictEqual(child.status, exitCode); |
| }); |
| } |
| |
| tmpdir.refresh(); |
| |
| testChildProcess( |
| (port) => [`--inspect=${port}`, '--build-snapshot', entry], 0, |
| { cwd: tmpdir.path }); |
| |
| testChildProcess( |
| (port) => [`--inspect=${port}`, entry], 0); |
| |
| testOnServerListen((server) => { |
| const { port } = server.address(); |
| const worker = new Worker(entry, { |
| execArgv: [`--inspect=${port}`] |
| }); |
| |
| worker.on('error', common.mustNotCall()); |
| |
| worker.on('exit', common.mustCall((code) => { |
| assert.strictEqual(code, 0); |
| })); |
| }); |