aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/websocket-server.test.ts
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-19 00:18:00 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-19 00:18:00 -0700
commit87ca9948ec999c1f60129fa033639cfb151993a6 (patch)
tree988e1c392d437dec0780cad07c3ea6f1b29fb7cf /test/bun.js/websocket-server.test.ts
parent57e5c35277479c672f4da55319ce538c38321f59 (diff)
downloadbun-87ca9948ec999c1f60129fa033639cfb151993a6.tar.gz
bun-87ca9948ec999c1f60129fa033639cfb151993a6.tar.zst
bun-87ca9948ec999c1f60129fa033639cfb151993a6.zip
Allow returning a Response object when upgrading
Diffstat (limited to 'test/bun.js/websocket-server.test.ts')
-rw-r--r--test/bun.js/websocket-server.test.ts116
1 files changed, 116 insertions, 0 deletions
diff --git a/test/bun.js/websocket-server.test.ts b/test/bun.js/websocket-server.test.ts
index 3b9aae5b6..eed5ffdc4 100644
--- a/test/bun.js/websocket-server.test.ts
+++ b/test/bun.js/websocket-server.test.ts
@@ -155,6 +155,122 @@ describe("websocket server", () => {
server.stop();
});
+ it("fetch() allows a Response object to be returned for an upgraded ServerWebSocket", () => {
+ var server = serve({
+ port: getPort(),
+ websocket: {
+ open(ws) {},
+ message(ws, msg) {
+ ws.send("hello world");
+ },
+ },
+ error(err) {
+ console.error(err);
+ },
+ fetch(req, server) {
+ 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");
+ }
+ return new Response("lol!", {
+ status: 101,
+ });
+ }
+
+ return new Response("noooooo hello world");
+ },
+ });
+
+ return new Promise((resolve, reject) => {
+ const websocket = new WebSocket(`ws://${server.hostname}:${server.port}`);
+ websocket.onopen = () => {
+ websocket.send("hello world");
+ };
+ websocket.onmessage = (e) => {
+ try {
+ expect(e.data).toBe("hello world");
+ resolve();
+ } catch (r) {
+ reject(r);
+ return;
+ } finally {
+ server?.stop();
+ websocket.close();
+ }
+ };
+ websocket.onerror = (e) => {
+ reject(e);
+ };
+ });
+ });
+
+ it("fetch() allows a Promise<Response> object to be returned for an upgraded ServerWebSocket", () => {
+ var server = serve({
+ port: getPort(),
+ websocket: {
+ async open(ws) {},
+ async message(ws, msg) {
+ await 1;
+ ws.send("hello world");
+ },
+ },
+ error(err) {
+ console.error(err);
+ },
+ async fetch(req, server) {
+ await 1;
+ 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");
+ }
+ return new Response("lol!", {
+ status: 101,
+ });
+ }
+
+ return new Response("noooooo hello world");
+ },
+ });
+ return new Promise((resolve, reject) => {
+ const websocket = new WebSocket(`ws://${server.hostname}:${server.port}`);
+ websocket.onopen = () => {
+ websocket.send("hello world");
+ };
+ websocket.onmessage = (e) => {
+ try {
+ expect(e.data).toBe("hello world");
+ resolve();
+ } catch (r) {
+ reject(r);
+ return;
+ } finally {
+ server?.stop();
+ websocket.close();
+ }
+ };
+ websocket.onerror = (e) => {
+ reject(e);
+ };
+ });
+ });
it("binaryType works", async () => {
var done = false;
var server = serve({