diff options
author | 2022-10-17 03:25:50 -0700 | |
---|---|---|
committer | 2022-10-17 03:25:50 -0700 | |
commit | e1a17aff4c1b8a10c243a7e9a0e990380f42f615 (patch) | |
tree | 37e34fcec3e9a71ce92df9f918e0cf8db3350c18 | |
parent | b8c5646c4981a408ccb65623d8fe3d23abff89de (diff) | |
download | bun-e1a17aff4c1b8a10c243a7e9a0e990380f42f615.tar.gz bun-e1a17aff4c1b8a10c243a7e9a0e990380f42f615.tar.zst bun-e1a17aff4c1b8a10c243a7e9a0e990380f42f615.zip |
Fix headers + add test
-rw-r--r-- | src/bun.js/api/server.zig | 8 | ||||
-rw-r--r-- | test/bun.js/websocket-server.test.ts | 21 |
2 files changed, 24 insertions, 5 deletions
diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig index c939d4de1..ea4625f73 100644 --- a/src/bun.js/api/server.zig +++ b/src/bun.js/api/server.zig @@ -3307,6 +3307,8 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type { } } + + if (optional) |opts| { getter: { if (opts.isEmptyOrUndefinedOrNull()) { @@ -3328,6 +3330,9 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type { sec_websocket_extensions = protocol; } + // we must write the status first so that 200 OK isn't written + upgrader.resp.writeStatus("101 Switching Protocols"); + fetch_headers.toUWSResponse(comptime ssl_enabled, upgrader.resp); break :getter; } else if (headers_value.isObject()) { @@ -3340,6 +3345,9 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type { sec_websocket_extensions = protocol; } + // we must write the status first so that 200 OK isn't written + upgrader.resp.writeStatus("101 Switching Protocols"); + fetch_headers.toUWSResponse(comptime ssl_enabled, upgrader.resp); fetch_headers_to_deref = fetch_headers; } diff --git a/test/bun.js/websocket-server.test.ts b/test/bun.js/websocket-server.test.ts index 0d188fcce..0e41d3186 100644 --- a/test/bun.js/websocket-server.test.ts +++ b/test/bun.js/websocket-server.test.ts @@ -18,13 +18,22 @@ describe("websocket server", () => { var server = serve({ port: getPort(), websocket: { - open(ws) { - ws.send(ws.data); + open(ws) {}, + message(ws, msg) { + ws.send("hello world"); }, - message(ws, msg) {}, }, fetch(req, server) { - if (server.upgrade(req, { data: "hello world" })) { + if ( + server.upgrade(req, { + data: "hello world", + + // check that headers works + headers: { + "x-a": "text/plain", + }, + }) + ) { if (server.upgrade(req)) { throw new Error("should not upgrade twice"); } @@ -37,7 +46,9 @@ describe("websocket server", () => { await new Promise((resolve, reject) => { const websocket = new WebSocket(`ws://localhost:${server.port}`); - + websocket.onopen = () => { + websocket.send("hello world"); + }; websocket.onmessage = (e) => { try { expect(e.data).toBe("hello world"); |