mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
80 lines
1.9 KiB
JavaScript
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);
|
|
});
|
|
});
|