From 9199156758517ec417ee9bedfaa8b66467398643 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Mon, 22 Dec 2025 15:27:48 +0100 Subject: [PATCH] test(eio): fix flaky test --- .../engine.io-client/test/webtransport.mjs | 30 +++++++++++++++---- packages/engine.io/test/webtransport.mjs | 23 ++++++++++++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/packages/engine.io-client/test/webtransport.mjs b/packages/engine.io-client/test/webtransport.mjs index 94efab1c..bd4e9f70 100644 --- a/packages/engine.io-client/test/webtransport.mjs +++ b/packages/engine.io-client/test/webtransport.mjs @@ -53,6 +53,26 @@ async function setup(opts, cb) { cb({ engine, h3Server, certificate }); } +function createHttpServer(port) { + const httpServer = createServer(); + + let retryCount = 0; + + return new Promise((resolve, reject) => { + httpServer.listen(port, () => resolve(httpServer)); + + httpServer.on("error", (e) => { + if (e.code === "EADDRINUSE" && ++retryCount <= 3) { + console.warn("port already in use, retrying..."); + setTimeout(() => { + httpServer.listen(port, () => resolve(httpServer)); + }, 100); + } + reject(e); + }); + }); +} + function success(engine, h3server, done) { engine.close(); h3server.stopServer(); @@ -98,10 +118,9 @@ describe("WebTransport", () => { { transports: ["polling", "webtransport"], }, - ({ engine, h3Server, certificate }) => { - const httpServer = createServer(); + async ({ engine, h3Server, certificate }) => { + const httpServer = await createHttpServer(h3Server.port); engine.attach(httpServer); - httpServer.listen(h3Server.port); const socket = createSocket(h3Server.port, certificate, { transports: ["polling", "webtransport"], @@ -120,10 +139,9 @@ describe("WebTransport", () => { { transports: ["polling", "websocket", "webtransport"], }, - ({ engine, h3Server, certificate }) => { - const httpServer = createServer(); + async ({ engine, h3Server, certificate }) => { + const httpServer = await createHttpServer(h3Server.port); engine.attach(httpServer); - httpServer.listen(h3Server.port); const socket = createSocket(h3Server.port, certificate, { transports: ["polling", "websocket", "webtransport"], diff --git a/packages/engine.io/test/webtransport.mjs b/packages/engine.io/test/webtransport.mjs index bc6a13da..99e6a10b 100644 --- a/packages/engine.io/test/webtransport.mjs +++ b/packages/engine.io/test/webtransport.mjs @@ -99,6 +99,26 @@ function setup(opts, cb) { }); } +function createHttpServer(port) { + const httpServer = createServer(); + + let retryCount = 0; + + return new Promise((resolve, reject) => { + httpServer.listen(port, () => resolve(httpServer)); + + httpServer.on("error", (e) => { + if (e.code === "EADDRINUSE" && ++retryCount <= 3) { + console.warn("port already in use, retrying..."); + setTimeout(() => { + httpServer.listen(port, () => resolve(httpServer)); + }, 100); + } + reject(e); + }); + }); +} + describe("WebTransport", () => { it("should allow to connect with WebTransport directly", (done) => { setupServer({}, async ({ engine, h3Server, certificate }) => { @@ -154,9 +174,8 @@ describe("WebTransport", () => { transports: ["polling", "websocket", "webtransport"], }, async ({ engine, h3Server, certificate }) => { - const httpServer = createServer(); + const httpServer = await createHttpServer(h3Server.port); engine.attach(httpServer); - httpServer.listen(h3Server.port); const partialDone = createPartialDone(() => { httpServer.close();