aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/websocket-server.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'test/bun.js/websocket-server.test.ts')
-rw-r--r--test/bun.js/websocket-server.test.ts63
1 files changed, 63 insertions, 0 deletions
diff --git a/test/bun.js/websocket-server.test.ts b/test/bun.js/websocket-server.test.ts
index eed5ffdc4..7c7869fad 100644
--- a/test/bun.js/websocket-server.test.ts
+++ b/test/bun.js/websocket-server.test.ts
@@ -12,6 +12,69 @@ function getPort() {
}
describe("websocket server", () => {
+ for (let method of ["publish", "publishText", "publishBinary"]) {
+ describe(method, () => {
+ it("in close() should work", async () => {
+ var server = serve({
+ port: getPort(),
+ websocket: {
+ open(ws) {
+ ws.subscribe("all");
+ },
+ message(ws, msg) {},
+ close(ws) {
+ ws[method](
+ "all",
+ method === "publishBinary" ? Buffer.from("bye!") : "bye!"
+ );
+ },
+ },
+ fetch(req, server) {
+ if (server.upgrade(req)) {
+ return;
+ }
+
+ return new Response("success");
+ },
+ });
+
+ try {
+ const first = await new Promise((resolve2, reject2) => {
+ var socket = new WebSocket(
+ `ws://${server.hostname}:${server.port}`
+ );
+ socket.onopen = () => resolve2(socket);
+ });
+
+ const second = await new Promise((resolve2, reject2) => {
+ var socket = new WebSocket(
+ `ws://${server.hostname}:${server.port}`
+ );
+ socket.onmessage = (ev) => {
+ var msg = ev.data;
+ if (typeof msg !== "string") {
+ msg = new TextDecoder().decode(msg);
+ }
+ if (msg === "bye!") {
+ resolve2(socket);
+ } else {
+ reject2(msg);
+ }
+ };
+ socket.onopen = () => {
+ first.close();
+ };
+ });
+
+ second.close();
+ } catch (r) {
+ } finally {
+ server.stop();
+ }
+ });
+ });
+ }
+
it("close inside open", async () => {
var resolve;
var server = serve({