Skip to content

Commit 9199156

Browse files
test(eio): fix flaky test
1 parent 5948416 commit 9199156

File tree

2 files changed

+45
-8
lines changed

2 files changed

+45
-8
lines changed

packages/engine.io-client/test/webtransport.mjs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,26 @@ async function setup(opts, cb) {
5353
cb({ engine, h3Server, certificate });
5454
}
5555

56+
function createHttpServer(port) {
57+
const httpServer = createServer();
58+
59+
let retryCount = 0;
60+
61+
return new Promise((resolve, reject) => {
62+
httpServer.listen(port, () => resolve(httpServer));
63+
64+
httpServer.on("error", (e) => {
65+
if (e.code === "EADDRINUSE" && ++retryCount <= 3) {
66+
console.warn("port already in use, retrying...");
67+
setTimeout(() => {
68+
httpServer.listen(port, () => resolve(httpServer));
69+
}, 100);
70+
}
71+
reject(e);
72+
});
73+
});
74+
}
75+
5676
function success(engine, h3server, done) {
5777
engine.close();
5878
h3server.stopServer();
@@ -98,10 +118,9 @@ describe("WebTransport", () => {
98118
{
99119
transports: ["polling", "webtransport"],
100120
},
101-
({ engine, h3Server, certificate }) => {
102-
const httpServer = createServer();
121+
async ({ engine, h3Server, certificate }) => {
122+
const httpServer = await createHttpServer(h3Server.port);
103123
engine.attach(httpServer);
104-
httpServer.listen(h3Server.port);
105124

106125
const socket = createSocket(h3Server.port, certificate, {
107126
transports: ["polling", "webtransport"],
@@ -120,10 +139,9 @@ describe("WebTransport", () => {
120139
{
121140
transports: ["polling", "websocket", "webtransport"],
122141
},
123-
({ engine, h3Server, certificate }) => {
124-
const httpServer = createServer();
142+
async ({ engine, h3Server, certificate }) => {
143+
const httpServer = await createHttpServer(h3Server.port);
125144
engine.attach(httpServer);
126-
httpServer.listen(h3Server.port);
127145

128146
const socket = createSocket(h3Server.port, certificate, {
129147
transports: ["polling", "websocket", "webtransport"],

packages/engine.io/test/webtransport.mjs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,26 @@ function setup(opts, cb) {
9999
});
100100
}
101101

102+
function createHttpServer(port) {
103+
const httpServer = createServer();
104+
105+
let retryCount = 0;
106+
107+
return new Promise((resolve, reject) => {
108+
httpServer.listen(port, () => resolve(httpServer));
109+
110+
httpServer.on("error", (e) => {
111+
if (e.code === "EADDRINUSE" && ++retryCount <= 3) {
112+
console.warn("port already in use, retrying...");
113+
setTimeout(() => {
114+
httpServer.listen(port, () => resolve(httpServer));
115+
}, 100);
116+
}
117+
reject(e);
118+
});
119+
});
120+
}
121+
102122
describe("WebTransport", () => {
103123
it("should allow to connect with WebTransport directly", (done) => {
104124
setupServer({}, async ({ engine, h3Server, certificate }) => {
@@ -154,9 +174,8 @@ describe("WebTransport", () => {
154174
transports: ["polling", "websocket", "webtransport"],
155175
},
156176
async ({ engine, h3Server, certificate }) => {
157-
const httpServer = createServer();
177+
const httpServer = await createHttpServer(h3Server.port);
158178
engine.attach(httpServer);
159-
httpServer.listen(h3Server.port);
160179

161180
const partialDone = createPartialDone(() => {
162181
httpServer.close();

0 commit comments

Comments
 (0)