import { createServer } from "node:net"; import { isMainThread, threadId } from "node:worker_threads";
async function isPortFree(port: number): Promise<boolean> { if (!Number.isFinite(port) || port <= 0 || port > 65535) { returnfalse;
} return await new Promise((resolve) => { const server = createServer();
server.once("error", () => resolve(false));
server.listen(port, "127.0.0.1", () => {
server.close(() => resolve(true));
});
});
}
async function getOsFreePort(): Promise<number> { return await new Promise((resolve, reject) => { const server = createServer();
server.once("error", reject);
server.listen(0, "127.0.0.1", () => { const addr = server.address(); if (!addr || typeof addr === "string") {
server.close();
reject(new Error("failed to acquire free port")); return;
} const port = addr.port;
server.close((err) => (err ? reject(err) : resolve(port)));
});
});
}
let nextTestPortOffset = 0;
/** * Allocate a deterministic per-worker port block. * * Motivation: many tests spin up gateway + related services that use derived ports * (e.g. +1/+2/+3/+4). If each test just grabs an OS free port, parallel test runs * can collide on derived ports and get flaky EADDRINUSE.
*/
export async function getDeterministicFreePortBlock(params?: {
offsets?: number[];
}): Promise<number> { const offsets = params?.offsets ?? [0, 1, 2, 3, 4]; const maxOffset = Math.max(...offsets);
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.0Bemerkung:
(vorverarbeitet am 2026-05-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.