mirror of
https://github.com/nvms/prsm.git
synced 2025-12-16 16:10:54 +00:00
90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import { describe, test, expect, beforeEach, afterEach } from "vitest";
|
|
import { KeepAliveClient, Status } from "../src/client/client";
|
|
import { KeepAliveServer } from "../src/server/index";
|
|
|
|
const createTestServer = (port: number) => {
|
|
return new KeepAliveServer({
|
|
port,
|
|
pingInterval: 1000,
|
|
latencyInterval: 500,
|
|
});
|
|
};
|
|
|
|
describe("Basic KeepAliveClient and KeepAliveServer Tests", () => {
|
|
const port = 8124;
|
|
let server: KeepAliveServer;
|
|
let client: KeepAliveClient;
|
|
|
|
beforeEach(async () => {
|
|
server = createTestServer(port);
|
|
|
|
await new Promise<void>((resolve) => {
|
|
server.on("listening", () => {
|
|
resolve();
|
|
});
|
|
|
|
if (server.listening) {
|
|
resolve();
|
|
}
|
|
});
|
|
|
|
client = new KeepAliveClient(`ws://localhost:${port}`);
|
|
});
|
|
|
|
afterEach(async () => {
|
|
if (client.status === Status.ONLINE) {
|
|
await client.close();
|
|
}
|
|
|
|
return new Promise<void>((resolve) => {
|
|
if (server) {
|
|
server.close(() => {
|
|
resolve();
|
|
});
|
|
} else {
|
|
resolve();
|
|
}
|
|
});
|
|
});
|
|
|
|
test("client-server connection should be online", async () => {
|
|
await server.registerCommand("echo", async (context) => {
|
|
return context.payload;
|
|
});
|
|
|
|
await client.connect();
|
|
expect(client.status).toBe(Status.ONLINE);
|
|
}, 10000);
|
|
|
|
test("simple echo command", async () => {
|
|
await server.registerCommand("echo", async (context) => {
|
|
return `Echo: ${context.payload}`;
|
|
});
|
|
|
|
await client.connect();
|
|
|
|
const result = await client.command("echo", "Hello", 5000);
|
|
expect(result).toBe("Echo: Hello");
|
|
}, 10000);
|
|
|
|
test("connect should resolve when already connected", async () => {
|
|
await server.registerCommand("echo", async (context) => {
|
|
return context.payload;
|
|
});
|
|
|
|
await client.connect();
|
|
expect(client.status).toBe(Status.ONLINE);
|
|
|
|
await client.connect();
|
|
expect(client.status).toBe(Status.ONLINE);
|
|
}, 10000);
|
|
|
|
test("close should resolve when already closed", async () => {
|
|
await client.close();
|
|
expect(client.status).toBe(Status.OFFLINE);
|
|
|
|
await client.close();
|
|
expect(client.status).toBe(Status.OFFLINE);
|
|
}, 10000);
|
|
});
|