From 9c2098bc46f906f5ab61ac2b887166f301b37be2 Mon Sep 17 00:00:00 2001 From: syntaxbullet Date: Wed, 7 Jan 2026 13:37:21 +0100 Subject: [PATCH] fix(test): use dynamic port for websocket tests --- src/web/server.ts | 3 +++ src/web/websocket.test.ts | 18 +++++------------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/web/server.ts b/src/web/server.ts index fb4baa6..7715769 100644 --- a/src/web/server.ts +++ b/src/web/server.ts @@ -65,4 +65,7 @@ export class WebServer { this.server = null; } } + public static get port(): number | undefined { + return this.server?.port; + } } diff --git a/src/web/websocket.test.ts b/src/web/websocket.test.ts index 582e4e5..aee192b 100644 --- a/src/web/websocket.test.ts +++ b/src/web/websocket.test.ts @@ -14,18 +14,10 @@ describe("WebSocket Server", () => { }); it("should accept websocket connection and send welcome message", async () => { - // We need to know the actual port assigned by Bun if we passed 0. - // But WebServer stores it in private static server. - // We can't access it easily unless we expose it or use a known port. - // Let's rely on the fact that if we pass 0, we can't easily know the port without exposing it. - // So for this test, let's pick a random high port to avoid conflict: 40000 + Math.floor(Math.random() * 1000) + const port = WebServer.port; + expect(port).toBeDefined(); - // Actually, let's restart with a known port 8081 for testing - WebServer.stop(); - const testPort = 8081; - WebServer.start(testPort); - - const ws = new WebSocket(`ws://localhost:${testPort}/ws`); + const ws = new WebSocket(`ws://localhost:${port}/ws`); const messagePromise = new Promise((resolve) => { ws.onmessage = (event) => { @@ -41,13 +33,13 @@ describe("WebSocket Server", () => { }); it("should reject non-ws upgrade requests on /ws endpoint via http", async () => { - const testPort = 8081; + const port = WebServer.port; // Just a normal fetch to /ws should fail with 426 Upgrade Required usually, // but our implementation returns "WebSocket upgrade failed" 500 or undefined -> 101 Switching Protocols if valid. // If we send a normal GET request to /ws without Upgrade headers, server.upgrade(req) returns false. // So it returns status 500 "WebSocket upgrade failed" based on our code. - const res = await fetch(`http://localhost:${testPort}/ws`); + const res = await fetch(`http://localhost:${port}/ws`); expect(res.status).toBe(500); expect(await res.text()).toBe("WebSocket upgrade failed"); });