From 26fd764fed1ae643fd5492802f53121d72ad0dc8 Mon Sep 17 00:00:00 2001 From: Sandor Trombitas Date: Wed, 5 Feb 2025 13:56:09 +0200 Subject: [PATCH] chore(fake-server): handle server listen errors and retry Adds error handling and retry logic to the `listenPromise` function in the `fake-server.ts` file. This ensures that the server can gracefully handle cases where the address is already in use, and retry listening on the specified port after a short delay. This might aleviate our timeout flaky tests --- test/acceptance/fake-server.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/test/acceptance/fake-server.ts b/test/acceptance/fake-server.ts index 3e1e23862e..63168ddf2e 100644 --- a/test/acceptance/fake-server.ts +++ b/test/acceptance/fake-server.ts @@ -943,12 +943,28 @@ export const fakeServer = (basePath: string, snykToken: string): FakeServer => { }); const listenPromise = (port: string | number) => { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { server = http.createServer(app).listen(Number(port), resolve); - server?.on('connection', (socket) => { + if (server === undefined) { + reject(new Error('Server not created')); + return; + } + + server.on('connection', (socket) => { sockets.add(socket); }); + + server.on('error', (e) => { + console.log('Error in server.listen', e); + if ((e as NodeJS.ErrnoException).code === 'EADDRINUSE') { + console.error('Address in use, retrying...'); + setTimeout(() => { + server?.close(); + server?.listen(port, resolve); + }, 1000); + } + }); }); };