diff options
author | 2023-05-11 06:30:48 -0300 | |
---|---|---|
committer | 2023-05-11 02:30:48 -0700 | |
commit | d032b73b10905c278fc109b9648612fa0fc94ff7 (patch) | |
tree | afb88c784c05d5f5498f0feea43988f55f368d6c | |
parent | 9c166a1bdf22123c693320c144b4a6985fa69dc2 (diff) | |
download | bun-d032b73b10905c278fc109b9648612fa0fc94ff7.tar.gz bun-d032b73b10905c278fc109b9648612fa0fc94ff7.tar.zst bun-d032b73b10905c278fc109b9648612fa0fc94ff7.zip |
add tests for ws.close (#2844)
* add tests for ws.close
* add timeout on ws.close tests
-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); + }); }); |