Files
crossws/test/adapters/node.test.ts

49 lines
1.4 KiB
TypeScript

import { afterAll, beforeAll, describe } from "vitest";
import { createServer, Server } from "node:http";
import { getRandomPort, waitForPort } from "get-port-please";
import nodeAdapter from "../../src/adapters/node";
import { createDemo } from "../fixture/_shared";
import { wsTests } from "../tests";
describe("node", () => {
let server: Server;
let url: string;
let ws: ReturnType<typeof createDemo<typeof nodeAdapter>>;
beforeAll(async () => {
ws = createDemo(nodeAdapter);
server = createServer((req, res) => {
if (req.url === "/peers") {
return res.end(
JSON.stringify({
peers: [...ws.peers].map((p) => p.id),
}),
);
} else if (req.url!.startsWith("/publish")) {
const q = new URLSearchParams(req.url!.split("?")[1]);
const topic = q.get("topic") || "";
const message = q.get("message") || "";
if (topic && message) {
ws.publish(topic, message);
return res.end("published");
}
}
res.end("ok");
});
server.on("upgrade", ws.handleUpgrade);
const port = await getRandomPort("localhost");
url = `ws://localhost:${port}/`;
await new Promise<void>((resolve) => server.listen(port, resolve));
await waitForPort(port);
});
afterAll(() => {
ws.closeAll();
server.close();
});
wsTests(() => url, {
adapter: "node",
});
});