aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ciro Spaciari <ciro.spaciari@gmail.com> 2023-05-11 06:30:48 -0300
committerGravatar GitHub <noreply@github.com> 2023-05-11 02:30:48 -0700
commitd032b73b10905c278fc109b9648612fa0fc94ff7 (patch)
treeafb88c784c05d5f5498f0feea43988f55f368d6c
parent9c166a1bdf22123c693320c144b4a6985fa69dc2 (diff)
downloadbun-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.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);
+ });
});