Files
bun.sh/test/bun.js/websocket-server.test.ts
2022-10-15 21:01:59 -07:00

115 lines
2.6 KiB
TypeScript

import { file, gc, serve } from "bun";
import { afterEach, describe, it, expect } from "bun:test";
import { readFileSync } from "fs";
import { resolve } from "path";
var port = 4321;
function getPort() {
if (port > 4444) {
port = 4321;
}
return port++;
}
describe("websocket server", () => {
it("can do hello world", async () => {
var server = serve({
port: getPort(),
websocket: {
open(ws) {
ws.send("hello world");
},
message(ws, msg) {},
},
fetch(req) {
return new Response("noooooo hello world");
},
});
await new Promise((resolve, reject) => {
const websocket = new WebSocket(`ws://localhost:${server.port}`);
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("can do some back and forth", async () => {
var dataCount = 0;
var server = serve({
port: getPort(),
websocket: {
accept(ws) {
return { count: 0 };
},
open(ws) {
ws.send("first");
},
message(ws, msg) {
ws.send(`counter: ${dataCount++}`);
},
},
fetch(req) {
return new Response("noooooo hello world");
},
});
await new Promise((resolve, reject) => {
const websocket = new WebSocket(`ws://localhost:${server.port}`);
var counter = 0;
websocket.onmessage = (e) => {
try {
switch (counter++) {
case 0: {
expect(e.data).toBe("first");
websocket.send("where are the loops");
break;
}
case 1: {
expect(e.data).toBe("counter: 0");
websocket.send("br0ther may i have some loops");
break;
}
case 2: {
expect(e.data).toBe("counter: 1");
websocket.send("br0ther may i have some loops");
break;
}
case 3: {
expect(e.data).toBe("counter: 2");
resolve();
break;
}
}
} catch (r) {
reject(r);
console.error(r);
server?.stop();
console.log("i am closing!");
websocket.close();
return;
} finally {
}
};
websocket.onerror = (e) => {
reject(e);
};
});
});
});