aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/js/bun/websocket/websocket-server.test.ts144
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);
+ });
});