aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGravatar Ashcon Partovi <ashcon@partovi.net> 2023-10-17 14:36:56 -0700
committerGravatar Ashcon Partovi <ashcon@partovi.net> 2023-10-17 14:36:56 -0700
commitafab26762043a40f38954868ebdccce85be7f95c (patch)
tree89e27598435d96e3b6777a9c9f7526e1992a89c8 /test
parentac36f5c278197026b2a442d8ac0f18da6d77f9a1 (diff)
downloadbun-fix-websocket-upgrade.tar.gz
bun-fix-websocket-upgrade.tar.zst
bun-fix-websocket-upgrade.zip
Fix `Host` header excluding port in WebSocket upgradefix-websocket-upgrade
Diffstat (limited to 'test')
-rw-r--r--test/js/web/websocket/websocket-upgrade.test.ts37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/js/web/websocket/websocket-upgrade.test.ts b/test/js/web/websocket/websocket-upgrade.test.ts
new file mode 100644
index 000000000..1b6e2f5d7
--- /dev/null
+++ b/test/js/web/websocket/websocket-upgrade.test.ts
@@ -0,0 +1,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);
+ });
+ });
+});