Files
bun.sh/test/js/web/websocket/websocket-upgrade.test.ts
2024-09-03 21:32:52 -07:00

38 lines
1.2 KiB
TypeScript

import { serve } from "bun";
import { describe, expect, test } 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);
});
});
});