Files
bun.sh/test/bun.js/websocket.test.js
2022-06-22 23:21:48 -07:00

80 lines
1.9 KiB
JavaScript

import { describe, it, expect } from "bun:test";
import { unsafe } from "bun";
import { gc } from "./gc";
const TEST_WEBSOCKET_HOST =
process.env.TEST_WEBSOCKET_HOST || "wss://ws.postman-echo.com/raw";
describe("WebSocket", () => {
it("should connect", async () => {
const ws = new WebSocket(TEST_WEBSOCKET_HOST);
await new Promise((resolve, reject) => {
ws.onopen = resolve;
ws.onerror = reject;
});
var closed = new Promise((resolve, reject) => {
ws.onclose = resolve;
});
ws.close();
await closed;
});
it("should send and receive messages", async () => {
const ws = new WebSocket(TEST_WEBSOCKET_HOST);
await new Promise((resolve, reject) => {
ws.onopen = resolve;
ws.onerror = reject;
ws.onclose = () => {
reject("WebSocket closed");
};
});
const count = 10;
// 10 messages in burst
var promise = new Promise((resolve, reject) => {
var remain = count;
ws.onmessage = (event) => {
gc(true);
expect(event.data).toBe("Hello World!");
remain--;
if (remain <= 0) {
ws.onmessage = () => {};
resolve();
}
};
ws.onerror = reject;
});
for (let i = 0; i < count; i++) {
ws.send("Hello World!");
gc(true);
}
await promise;
var echo = 0;
// 10 messages one at a time
function waitForEcho() {
return new Promise((resolve, reject) => {
gc(true);
const msg = `Hello World! ${echo++}`;
ws.onmessage = (event) => {
expect(event.data).toBe(msg);
resolve();
};
ws.onerror = reject;
ws.onclose = reject;
ws.send(msg);
gc(true);
});
}
gc(true);
for (let i = 0; i < count; i++) await waitForEcho();
ws.onclose = () => {};
ws.onerror = () => {};
ws.close();
gc(true);
});
});