Skip to content

Commit 5530930

Browse files
authored
test: test connection state recovery with ioredis and cluster (#15)
1 parent 78075ec commit 5530930

File tree

2 files changed

+31
-53
lines changed

2 files changed

+31
-53
lines changed

test/connection-state-recovery.ts

Lines changed: 15 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,28 @@
1-
import { createServer } from "http";
21
import { Server } from "socket.io";
3-
import expect = require("expect.js");
42
import { io as ioc } from "socket.io-client";
5-
import { createAdapter } from "../lib";
6-
import { AddressInfo } from "net";
7-
import { createClient } from "redis";
8-
import { sleep } from "./util";
9-
10-
const NODES_COUNT = 3;
3+
import { setup, sleep } from "./util";
4+
import expect = require("expect.js");
115

126
describe("connection state recovery", () => {
13-
let servers: Server[], ports: number[], redisClients: any[];
7+
let servers: Server[], ports: number[], cleanup;
148

159
beforeEach(async () => {
16-
servers = [];
17-
ports = [];
18-
redisClients = [];
19-
20-
return new Promise(async (resolve) => {
21-
for (let i = 1; i <= NODES_COUNT; i++) {
22-
const redisClient = createClient();
23-
24-
await redisClient.connect();
25-
26-
const httpServer = createServer();
27-
const io = new Server(httpServer, {
28-
adapter: createAdapter(redisClient),
29-
connectionStateRecovery: {
30-
maxDisconnectionDuration: 5000,
31-
},
32-
});
33-
httpServer.listen(async () => {
34-
const port = (httpServer.address() as AddressInfo).port;
35-
36-
ports.push(port);
37-
servers.push(io);
38-
redisClients.push(redisClient);
39-
if (servers.length === NODES_COUNT) {
40-
await sleep(200);
41-
42-
resolve();
43-
}
44-
});
45-
}
10+
const testContext = await setup({
11+
nodeCount: 3,
12+
serverOptions: {
13+
connectionStateRecovery: {
14+
maxDisconnectionDuration: 5000,
15+
},
16+
},
4617
});
18+
servers = testContext.servers;
19+
cleanup = testContext.cleanup;
20+
ports = testContext.ports;
4721
});
4822

4923
afterEach(() => {
50-
servers.forEach((server) => {
51-
// @ts-ignore
52-
server.httpServer.close();
53-
server.of("/").adapter.close();
54-
servers[0].of("/foo").adapter.close();
55-
});
56-
redisClients.forEach((redisClient) => {
57-
redisClient.quit();
58-
});
24+
servers[0].of("/foo").adapter.close();
25+
cleanup();
5926
});
6027

6128
it("should restore the session", (done) => {

test/util.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Server } from "socket.io";
1+
import { Server, ServerOptions } from "socket.io";
22
import { Socket as ServerSocket } from "socket.io/dist/socket";
33
import { io as ioc, Socket as ClientSocket } from "socket.io-client";
44
import { createClient, createCluster } from "redis";
@@ -30,6 +30,7 @@ interface TestContext {
3030
serverSockets: ServerSocket[];
3131
clientSockets: ClientSocket[];
3232
cleanup: () => void;
33+
ports: number[];
3334
}
3435

3536
const mode = process.env.REDIS_CLUSTER === "1" ? "cluster" : "standalone";
@@ -99,27 +100,35 @@ async function initRedisClient() {
99100
return new Redis();
100101
} else {
101102
const redisClient = createClient();
102-
103103
await redisClient.connect();
104104

105105
return redisClient;
106106
}
107107
}
108108
}
109109

110-
export function setup() {
110+
type SetupOptions = {
111+
nodeCount?: number;
112+
serverOptions?: Partial<ServerOptions>;
113+
};
114+
export function setup({
115+
nodeCount = NODES_COUNT,
116+
serverOptions = {},
117+
}: SetupOptions = {}) {
111118
const servers = [];
112119
const serverSockets = [];
113120
const clientSockets = [];
114121
const redisClients = [];
122+
const ports = [];
115123

116124
return new Promise<TestContext>(async (resolve) => {
117-
for (let i = 1; i <= NODES_COUNT; i++) {
125+
for (let i = 1; i <= nodeCount; i++) {
118126
const redisClient = await initRedisClient();
119127

120128
const httpServer = createServer();
121129
const io = new Server(httpServer, {
122130
adapter: createAdapter(redisClient),
131+
...serverOptions,
123132
});
124133
httpServer.listen(() => {
125134
const port = (httpServer.address() as AddressInfo).port;
@@ -130,13 +139,15 @@ export function setup() {
130139
serverSockets.push(socket);
131140
servers.push(io);
132141
redisClients.push(redisClient);
133-
if (servers.length === NODES_COUNT) {
142+
ports.push(port);
143+
if (servers.length === nodeCount) {
134144
await sleep(200);
135145

136146
resolve({
137147
servers,
138148
serverSockets,
139149
clientSockets,
150+
ports,
140151
cleanup: () => {
141152
servers.forEach((server) => {
142153
// @ts-ignore

0 commit comments

Comments
 (0)