'use strict'; const assert = require('node:assert/strict'); const net = require('node:net'); const path = require('node:path'); const ROOT = path.resolve(__dirname, '..'); function listenEphemeral() { return new Promise((resolve, reject) => { const server = net.createServer(); server.once('error', reject); server.listen(0, '127.0.0.1', () => resolve(server)); }); } async function main() { const previousFlowPort = process.env.QIWEI_FLOW_PORT; const blocker = await listenEphemeral(); try { const occupiedPort = blocker.address().port; process.env.QIWEI_FLOW_PORT = String(occupiedPort); const { canListen, defaultFlowPort, selectFlowPort } = require(path.join(ROOT, 'bin', 'qiwei-training.js')); const selectedPort = await selectFlowPort(4320); assert.equal(defaultFlowPort(4320), 4310); assert.notEqual(selectedPort, occupiedPort); assert.equal(await canListen(selectedPort), true); process.stdout.write(`${JSON.stringify({ status: 'ok', checks: 3, coverage: [ 'default_dashboard_flow_port_pair', 'occupied_flow_port_selects_next_available_port', 'selected_flow_port_is_listenable', ], }, null, 2)}\n`); } finally { await new Promise(resolve => blocker.close(resolve)); if (previousFlowPort === undefined) delete process.env.QIWEI_FLOW_PORT; else process.env.QIWEI_FLOW_PORT = previousFlowPort; } } main().catch(error => { process.stderr.write(`${error.stack || error.message}\n`); process.exitCode = 1; });