cosmjs-util/packages/socket/src/streamingsocket.spec.ts
2020-06-25 16:03:54 +02:00

97 lines
2.5 KiB
TypeScript

import { toListPromise } from "@cosmjs/stream";
import { StreamingSocket } from "./streamingsocket";
function skipTests(): boolean {
return !process.env.SOCKETSERVER_ENABLED;
}
function pendingWithoutSocketServer(): void {
if (skipTests()) {
pending("Set SOCKETSERVER_ENABLED to enable socket tests");
}
}
describe("StreamingSocket", () => {
const socketServerUrl = "ws://localhost:4444/websocket";
const socketServerUrlSlow = "ws://localhost:4445/websocket";
it("can be constructed", () => {
const socket = new StreamingSocket(socketServerUrl);
expect(socket).toBeTruthy();
});
it("can connect", async () => {
pendingWithoutSocketServer();
const socket = new StreamingSocket(socketServerUrl);
expect(socket).toBeTruthy();
socket.connect();
await socket.connected;
socket.disconnect();
});
it("can connect to slow server", async () => {
pendingWithoutSocketServer();
const socket = new StreamingSocket(socketServerUrlSlow);
expect(socket).toBeTruthy();
socket.connect();
await socket.connected;
socket.disconnect();
});
it("times out when establishing connection takes too long", async () => {
pendingWithoutSocketServer();
const socket = new StreamingSocket(socketServerUrlSlow, 2_000);
socket.connect();
await socket.connected
.then(() => fail("must not resolve"))
.catch((error) => expect(error).toMatch(/connection attempt timed out/i));
});
it("can send events when connected", async () => {
pendingWithoutSocketServer();
const socket = new StreamingSocket(socketServerUrl);
const responsePromise = toListPromise(socket.events, 3);
socket.connect();
await socket.connected;
await socket.send("aabbccdd");
await socket.send("whatever");
await socket.send("lalala");
const response = await responsePromise;
expect(response.length).toEqual(3);
socket.disconnect();
});
it("completes stream when disconnected", (done) => {
pendingWithoutSocketServer();
const socket = new StreamingSocket(socketServerUrl);
expect(socket).toBeTruthy();
const subscription = socket.events.subscribe({
complete: () => {
subscription.unsubscribe();
done();
},
});
(async () => {
socket.connect();
await socket.connected;
await socket.send("aabbccdd");
await socket.send("whatever");
await socket.send("lalala");
socket.disconnect();
})().catch(done.fail);
});
});