release: WRNexusJS 0.8.0
This commit is contained in:
@@ -31,3 +31,43 @@ test("bounds writes queued while Redis is unavailable", () => {
|
||||
expect(() => driver.publish("topic", "overflow")).toThrow("queue is full");
|
||||
driver.close();
|
||||
});
|
||||
|
||||
test("validates reconnect and backpressure options", () => {
|
||||
bun.connect = (() => new Promise(() => {})) as typeof bun.connect;
|
||||
expect(() => redisDriver(undefined, { maxPending: 0 })).toThrow("maxPending");
|
||||
expect(() => redisDriver(undefined, { reconnectDelayMs: 20, reconnectMaxDelayMs: 10 })).toThrow(
|
||||
"reconnectMaxDelayMs",
|
||||
);
|
||||
});
|
||||
|
||||
test("reconnects and replays subscriptions after a socket closes", async () => {
|
||||
const connections: Array<Record<string, any>> = [];
|
||||
bun.connect = ((options: Record<string, any>) => {
|
||||
connections.push(options);
|
||||
return Promise.resolve({});
|
||||
}) as typeof bun.connect;
|
||||
const driver = redisDriver("redis://localhost:6379", {
|
||||
reconnectDelayMs: 1,
|
||||
reconnectMaxDelayMs: 1,
|
||||
});
|
||||
expect(connections).toHaveLength(2);
|
||||
|
||||
const firstWrites: string[] = [];
|
||||
connections[0].socket.open({
|
||||
write: (bytes: Uint8Array) => firstWrites.push(new TextDecoder().decode(bytes)),
|
||||
end() {},
|
||||
});
|
||||
driver.subscribe("order:*", () => {});
|
||||
expect(firstWrites.some((write) => write.includes("PSUBSCRIBE"))).toBe(true);
|
||||
|
||||
connections[0].socket.close();
|
||||
await new Promise((resolve) => setTimeout(resolve, 10));
|
||||
expect(connections.length).toBeGreaterThanOrEqual(3);
|
||||
const replayed: string[] = [];
|
||||
connections[2].socket.open({
|
||||
write: (bytes: Uint8Array) => replayed.push(new TextDecoder().decode(bytes)),
|
||||
end() {},
|
||||
});
|
||||
expect(replayed.some((write) => write.includes("PSUBSCRIBE"))).toBe(true);
|
||||
driver.close();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user