mirror of
https://github.com/LukeHagar/crossws.git
synced 2025-12-09 12:27:45 +00:00
49 lines
1.4 KiB
TypeScript
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",
|
|
});
|
|
});
|