Skip to content

Commit b3d7551

Browse files
bis
1 parent 87cfaa5 commit b3d7551

File tree

2 files changed

+59
-50
lines changed

2 files changed

+59
-50
lines changed

test/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ describe("@socket.io/postgres-adapter", () => {
262262
servers[0].disconnectSockets();
263263
});
264264

265-
it.skip("sends a packet before all socket instances disconnect", (done) => {
265+
it("sends a packet before all socket instances disconnect", (done) => {
266266
const partialDone = times(3, done);
267267

268268
clientSockets.forEach((clientSocket) => {

test/util.ts

Lines changed: 58 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -25,72 +25,81 @@ export function shouldNotHappen(done: (err?: Error) => void) {
2525
return () => done(new Error("should not happen"));
2626
}
2727

28-
interface TestContext {
29-
servers: Server[];
30-
serverSockets: ServerSocket[];
31-
clientSockets: ClientSocket[];
32-
cleanup: () => void;
33-
}
28+
function createServerAndClient(pool: Pool) {
29+
const httpServer = createServer();
30+
const io = new Server(httpServer, {
31+
adapter: createAdapter(pool, {
32+
tableName: "events",
33+
}),
34+
});
3435

35-
const NODES_COUNT = 3;
36+
return new Promise<{
37+
io: Server;
38+
socket: ServerSocket;
39+
clientSocket: ClientSocket;
40+
}>((resolve) => {
41+
httpServer.listen(() => {
42+
const port = (httpServer.address() as AddressInfo).port;
43+
const clientSocket = ioc(`http://localhost:${port}`);
44+
45+
io.on("connection", (socket) => {
46+
resolve({
47+
io,
48+
socket,
49+
clientSocket,
50+
});
51+
});
52+
});
53+
});
54+
}
3655

37-
export function setup() {
38-
const servers: Server[] = [];
39-
const serverSockets: ServerSocket[] = [];
40-
const clientSockets: ClientSocket[] = [];
56+
function isInitComplete(servers: Server[]) {
57+
return servers.every((server) => {
58+
return server.of("/").adapter.nodesMap.size === servers.length - 1;
59+
});
60+
}
4161

62+
export async function setup() {
4263
const pool = new Pool({
4364
user: "postgres",
4465
password: "changeit",
4566
});
4667

47-
return new Promise<TestContext>(async (resolve) => {
48-
await pool.query(
49-
`
68+
await pool.query(
69+
`
5070
CREATE TABLE IF NOT EXISTS events (
5171
id bigserial UNIQUE,
5272
created_at timestamptz DEFAULT NOW(),
5373
payload bytea
5474
);
5575
`,
56-
() => {}
57-
);
58-
59-
for (let i = 1; i <= NODES_COUNT; i++) {
60-
const httpServer = createServer();
61-
const io = new Server(httpServer, {
62-
adapter: createAdapter(pool, {
63-
tableName: "events",
64-
}),
65-
});
76+
() => {}
77+
);
6678

67-
io.of("/").adapter.init();
79+
const results = await Promise.all([
80+
createServerAndClient(pool),
81+
createServerAndClient(pool),
82+
createServerAndClient(pool),
83+
]);
6884

69-
httpServer.listen(() => {
70-
const port = (httpServer.address() as AddressInfo).port;
71-
const clientSocket = ioc(`http://localhost:${port}`);
85+
const servers = results.map(({ io }) => io);
86+
const serverSockets = results.map(({ socket }) => socket);
87+
const clientSockets = results.map(({ clientSocket }) => clientSocket);
7288

73-
io.on("connection", async (socket) => {
74-
clientSockets.push(clientSocket);
75-
serverSockets.push(socket);
76-
servers.push(io);
89+
servers.forEach((server) => server.of("/").adapter.init());
7790

78-
if (servers.length === NODES_COUNT) {
79-
await sleep(100);
91+
while (!isInitComplete(servers)) {
92+
await sleep(20);
93+
}
8094

81-
resolve({
82-
servers,
83-
serverSockets,
84-
clientSockets,
85-
cleanup: () => {
86-
servers.forEach((server) => server.close());
87-
clientSockets.forEach((socket) => socket.disconnect());
88-
pool.end();
89-
},
90-
});
91-
}
92-
});
93-
});
94-
}
95-
});
95+
return {
96+
servers,
97+
serverSockets,
98+
clientSockets,
99+
cleanup: () => {
100+
servers.forEach((server) => server.close());
101+
clientSockets.forEach((socket) => socket.disconnect());
102+
pool.end();
103+
},
104+
};
96105
}

0 commit comments

Comments
 (0)