diff options
-rw-r--r-- | test/js/bun/websocket/websocket-server.test.ts | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/test/js/bun/websocket/websocket-server.test.ts b/test/js/bun/websocket/websocket-server.test.ts index 404eca8cf..a9b9b866b 100644 --- a/test/js/bun/websocket/websocket-server.test.ts +++ b/test/js/bun/websocket/websocket-server.test.ts @@ -984,4 +984,148 @@ describe("websocket server", () => { expect(serverCounter).toBe(sendQueue.length); server.stop(true); }); + it("can close with reason and code #2631", done => { + let timeout: any; + let server = Bun.serve({ + websocket: { + message(ws) { + ws.close(2000, "test"); + }, + open(ws) { + try { + expect(ws.remoteAddress).toBe("127.0.0.1"); + } catch (e) { + clearTimeout(timeout); + done(e); + } + }, + close(ws, code, reason) { + try { + expect(code).toBe(2000); + expect(reason).toBe("test"); + clearTimeout(timeout); + done(); + } catch (e) { + clearTimeout(timeout); + done(e); + } + }, + }, + fetch(req, server) { + if (!server.upgrade(req)) { + return new Response(null, { status: 404 }); + } + }, + port: 0, + }); + + let z = new WebSocket(`ws://${server.hostname}:${server.port}`); + z.addEventListener("open", () => { + z.send("test"); + }); + z.addEventListener("close", () => { + server.stop(); + }); + + timeout = setTimeout(() => { + done(new Error("Did not close in time")); + server.stop(true); + }, 1000); + }); + + it("can close with code and without reason #2631", done => { + let timeout: any; + let server = Bun.serve({ + websocket: { + message(ws) { + ws.close(2000); + }, + open(ws) { + try { + expect(ws.remoteAddress).toBe("127.0.0.1"); + } catch (e) { + done(e); + clearTimeout(timeout); + } + }, + close(ws, code, reason) { + clearTimeout(timeout); + + try { + expect(code).toBe(2000); + expect(reason).toBe(""); + done(); + } catch (e) { + done(e); + } + }, + }, + fetch(req, server) { + if (!server.upgrade(req)) { + return new Response(null, { status: 404 }); + } + }, + port: 0, + }); + + let z = new WebSocket(`ws://${server.hostname}:${server.port}`); + z.addEventListener("open", () => { + z.send("test"); + }); + z.addEventListener("close", () => { + server.stop(); + }); + + timeout = setTimeout(() => { + done(new Error("Did not close in time")); + server.stop(true); + }, 1000); + }); + it("can close without reason or code #2631", done => { + let timeout: any; + let server = Bun.serve({ + websocket: { + message(ws) { + ws.close(); + }, + open(ws) { + try { + expect(ws.remoteAddress).toBe("127.0.0.1"); + } catch (e) { + clearTimeout(timeout); + done(e); + } + }, + close(ws, code, reason) { + clearTimeout(timeout); + try { + expect(code).toBe(1006); + expect(reason).toBe(""); + done(); + } catch (e) { + done(e); + } + }, + }, + fetch(req, server) { + if (!server.upgrade(req)) { + return new Response(null, { status: 404 }); + } + }, + port: 0, + }); + + let z = new WebSocket(`ws://${server.hostname}:${server.port}`); + z.addEventListener("open", () => { + z.send("test"); + }); + z.addEventListener("close", () => { + server.stop(); + }); + + timeout = setTimeout(() => { + done(new Error("Did not close in time")); + server.stop(true); + }, 1000); + }); }); |