aboutsummaryrefslogtreecommitdiff
path: root/test/js/web/websocket/websocket-upgrade.test.ts
blob: 1b6e2f5d7cd9a2f17b2eb4c7a6eaf7f5f0fd7093 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { serve } from "bun";
import { describe, test, expect } from "bun:test";

describe("WebSocket upgrade", () => {
  test("should send correct upgrade headers", async () => {
    const server = serve({
      hostname: "localhost",
      port: 0,
      fetch(request, server) {
        expect(server.upgrade(request)).toBeTrue();
        const { headers } = request;
        expect(headers.get("connection")).toBe("upgrade");
        expect(headers.get("upgrade")).toBe("websocket");
        expect(headers.get("sec-websocket-version")).toBe("13");
        expect(headers.get("sec-websocket-key")).toBeString();
        expect(headers.get("host")).toBe(`localhost:${server.port}`);
        return;
        // FIXME: types gets annoyed if this is not here
        return new Response();
      },
      websocket: {
        open(ws) {
          // FIXME: double-free issue
          // ws.close();
          server.stop();
        },
        message(ws, message) {},
      },
    });
    await new Promise((resolve, reject) => {
      const ws = new WebSocket(`ws://localhost:${server.port}/`);
      ws.addEventListener("open", resolve);
      ws.addEventListener("error", reject);
      ws.addEventListener("close", reject);
    });
  });
});