1+ import { describe , it , beforeEach , afterEach } from "node:test" ;
2+ import * as assert from "node:assert" ;
13import { type Server , type Socket as ServerSocket } from "socket.io" ;
24import { type Socket as ClientSocket } from "socket.io-client" ;
3- import expect = require( "expect.js" ) ;
45import { times , sleep , setup , initRedisClient } from "./util" ;
56import { Emitter } from "../lib" ;
67
78const PROPAGATION_DELAY_IN_MS = 100 ;
89
910describe ( "@socket.io/redis-streams-emitter" , ( ) => {
10- let servers : Server [ ] ,
11- serverSockets : ServerSocket [ ] ,
12- clientSockets : ClientSocket [ ] ,
11+ let servers : [ Server , Server , Server ] ,
12+ serverSockets : [ ServerSocket , ServerSocket , ServerSocket ] ,
13+ clientSockets : [ ClientSocket , ClientSocket , ClientSocket ] ,
1314 cleanup : ( ) => void ,
1415 emitter : Emitter ;
1516
@@ -30,80 +31,88 @@ describe("@socket.io/redis-streams-emitter", () => {
3031 afterEach ( ( ) => cleanup ( ) ) ;
3132
3233 describe ( "broadcast" , function ( ) {
33- it ( "broadcasts to all clients" , ( done ) => {
34- const partialDone = times ( 3 , done ) ;
35-
36- clientSockets . forEach ( ( clientSocket ) => {
37- clientSocket . on ( "test" , ( arg1 , arg2 , arg3 ) => {
38- expect ( arg1 ) . to . eql ( 1 ) ;
39- expect ( arg2 ) . to . eql ( "2" ) ;
40- expect ( Buffer . isBuffer ( arg3 ) ) . to . be ( true ) ;
41- partialDone ( ) ;
34+ it ( "broadcasts to all clients" , ( ) => {
35+ return new Promise < void > ( ( resolve ) => {
36+ const partialResolve = times ( 3 , resolve ) ;
37+
38+ clientSockets . forEach ( ( clientSocket ) => {
39+ clientSocket . on ( "test" , ( arg1 , arg2 , arg3 ) => {
40+ assert . equal ( arg1 , 1 ) ;
41+ assert . equal ( arg2 , "2" ) ;
42+ assert . ok ( Buffer . isBuffer ( arg3 ) ) ;
43+ partialResolve ( ) ;
44+ } ) ;
4245 } ) ;
43- } ) ;
4446
45- emitter . emit ( "test" , 1 , "2" , Buffer . from ( [ 3 , 4 ] ) ) ;
47+ emitter . emit ( "test" , 1 , "2" , Buffer . from ( [ 3 , 4 ] ) ) ;
48+ } ) ;
4649 } ) ;
4750
48- it ( "broadcasts to all clients in a namespace" , ( done ) => {
49- const partialDone = times ( 3 , ( ) => {
50- servers . forEach ( ( server ) => server . of ( "/custom" ) . adapter . close ( ) ) ;
51- done ( ) ;
52- } ) ;
51+ it ( "broadcasts to all clients in a namespace" , ( ) => {
52+ return new Promise < void > ( ( resolve ) => {
53+ const partialResolve = times ( 3 , ( ) => {
54+ servers . forEach ( ( server ) => server . of ( "/custom" ) . adapter . close ( ) ) ;
55+ resolve ( ) ;
56+ } ) ;
5357
54- servers . forEach ( ( server ) => server . of ( "/custom" ) ) ;
58+ servers . forEach ( ( server ) => server . of ( "/custom" ) ) ;
5559
56- const onConnect = times ( 3 , async ( ) => {
57- await sleep ( PROPAGATION_DELAY_IN_MS ) ;
60+ const onConnect = times ( 3 , async ( ) => {
61+ await sleep ( PROPAGATION_DELAY_IN_MS ) ;
5862
59- emitter . of ( "/custom" ) . emit ( "test" ) ;
60- } ) ;
63+ emitter . of ( "/custom" ) . emit ( "test" ) ;
64+ } ) ;
6165
62- clientSockets . forEach ( ( clientSocket ) => {
63- const socket = clientSocket . io . socket ( "/custom" ) ;
64- socket . on ( "connect" , onConnect ) ;
65- socket . on ( "test" , ( ) => {
66- socket . disconnect ( ) ;
67- partialDone ( ) ;
66+ clientSockets . forEach ( ( clientSocket ) => {
67+ const socket = clientSocket . io . socket ( "/custom" ) ;
68+ socket . on ( "connect" , onConnect ) ;
69+ socket . on ( "test" , ( ) => {
70+ socket . disconnect ( ) ;
71+ partialResolve ( ) ;
72+ } ) ;
6873 } ) ;
6974 } ) ;
7075 } ) ;
7176
72- it ( "broadcasts to all clients in a room" , ( done ) => {
73- serverSockets [ 1 ] . join ( "room1" ) ;
77+ it ( "broadcasts to all clients in a room" , ( ) => {
78+ return new Promise < void > ( ( resolve , reject ) => {
79+ serverSockets [ 1 ] . join ( "room1" ) ;
7480
75- clientSockets [ 0 ] . on ( "test" , ( ) => {
76- done ( new Error ( "should not happen" ) ) ;
77- } ) ;
81+ clientSockets [ 0 ] . on ( "test" , ( ) => {
82+ reject ( "should not happen" ) ;
83+ } ) ;
7884
79- clientSockets [ 1 ] . on ( "test" , ( ) => {
80- done ( ) ;
81- } ) ;
85+ clientSockets [ 1 ] . on ( "test" , ( ) => {
86+ resolve ( ) ;
87+ } ) ;
8288
83- clientSockets [ 2 ] . on ( "test" , ( ) => {
84- done ( new Error ( "should not happen" ) ) ;
85- } ) ;
89+ clientSockets [ 2 ] . on ( "test" , ( ) => {
90+ reject ( "should not happen" ) ;
91+ } ) ;
8692
87- emitter . to ( "room1" ) . emit ( "test" ) ;
93+ emitter . to ( "room1" ) . emit ( "test" ) ;
94+ } ) ;
8895 } ) ;
8996
90- it ( "broadcasts to all clients except in room" , ( done ) => {
91- const partialDone = times ( 2 , done ) ;
92- serverSockets [ 1 ] . join ( "room1" ) ;
97+ it ( "broadcasts to all clients except in room" , ( ) => {
98+ return new Promise < void > ( ( resolve , reject ) => {
99+ const partialResolve = times ( 2 , resolve ) ;
100+ serverSockets [ 1 ] . join ( "room1" ) ;
93101
94- clientSockets [ 0 ] . on ( "test" , ( ) => {
95- partialDone ( ) ;
96- } ) ;
102+ clientSockets [ 0 ] . on ( "test" , ( ) => {
103+ partialResolve ( ) ;
104+ } ) ;
97105
98- clientSockets [ 1 ] . on ( "test" , ( ) => {
99- done ( new Error ( "should not happen" ) ) ;
100- } ) ;
106+ clientSockets [ 1 ] . on ( "test" , ( ) => {
107+ reject ( "should not happen" ) ;
108+ } ) ;
101109
102- clientSockets [ 2 ] . on ( "test" , ( ) => {
103- partialDone ( ) ;
104- } ) ;
110+ clientSockets [ 2 ] . on ( "test" , ( ) => {
111+ partialResolve ( ) ;
112+ } ) ;
105113
106- emitter . of ( "/" ) . except ( "room1" ) . emit ( "test" ) ;
114+ emitter . of ( "/" ) . except ( "room1" ) . emit ( "test" ) ;
115+ } ) ;
107116 } ) ;
108117 } ) ;
109118
@@ -113,9 +122,9 @@ describe("@socket.io/redis-streams-emitter", () => {
113122
114123 await sleep ( PROPAGATION_DELAY_IN_MS ) ;
115124
116- expect ( serverSockets [ 0 ] . rooms . has ( "room1" ) ) . to . be ( true ) ;
117- expect ( serverSockets [ 1 ] . rooms . has ( "room1" ) ) . to . be ( true ) ;
118- expect ( serverSockets [ 2 ] . rooms . has ( "room1" ) ) . to . be ( true ) ;
125+ assert . ok ( serverSockets [ 0 ] . rooms . has ( "room1" ) ) ;
126+ assert . ok ( serverSockets [ 1 ] . rooms . has ( "room1" ) ) ;
127+ assert . ok ( serverSockets [ 2 ] . rooms . has ( "room1" ) ) ;
119128 } ) ;
120129
121130 it ( "makes the matching socket instances join the specified room" , async ( ) => {
@@ -126,19 +135,19 @@ describe("@socket.io/redis-streams-emitter", () => {
126135
127136 await sleep ( PROPAGATION_DELAY_IN_MS ) ;
128137
129- expect ( serverSockets [ 0 ] . rooms . has ( "room2" ) ) . to . be ( true ) ;
130- expect ( serverSockets [ 1 ] . rooms . has ( "room2" ) ) . to . be ( false ) ;
131- expect ( serverSockets [ 2 ] . rooms . has ( "room2" ) ) . to . be ( true ) ;
138+ assert . ok ( serverSockets [ 0 ] . rooms . has ( "room2" ) ) ;
139+ assert . ok ( serverSockets [ 1 ] . rooms . has ( "room2" ) === false ) ;
140+ assert . ok ( serverSockets [ 2 ] . rooms . has ( "room2" ) ) ;
132141 } ) ;
133142
134143 it ( "makes the given socket instance join the specified room" , async ( ) => {
135144 emitter . in ( serverSockets [ 1 ] . id ) . socketsJoin ( "room3" ) ;
136145
137146 await sleep ( PROPAGATION_DELAY_IN_MS ) ;
138147
139- expect ( serverSockets [ 0 ] . rooms . has ( "room3" ) ) . to . be ( false ) ;
140- expect ( serverSockets [ 1 ] . rooms . has ( "room3" ) ) . to . be ( true ) ;
141- expect ( serverSockets [ 2 ] . rooms . has ( "room3" ) ) . to . be ( false ) ;
148+ assert . ok ( serverSockets [ 0 ] . rooms . has ( "room3" ) === false ) ;
149+ assert . ok ( serverSockets [ 1 ] . rooms . has ( "room3" ) ) ;
150+ assert . ok ( serverSockets [ 2 ] . rooms . has ( "room3" ) === false ) ;
142151 } ) ;
143152 } ) ;
144153
@@ -151,9 +160,9 @@ describe("@socket.io/redis-streams-emitter", () => {
151160
152161 await sleep ( PROPAGATION_DELAY_IN_MS ) ;
153162
154- expect ( serverSockets [ 0 ] . rooms . has ( "room1" ) ) . to . be ( false ) ;
155- expect ( serverSockets [ 1 ] . rooms . has ( "room1" ) ) . to . be ( false ) ;
156- expect ( serverSockets [ 2 ] . rooms . has ( "room1" ) ) . to . be ( false ) ;
163+ assert . ok ( serverSockets [ 0 ] . rooms . has ( "room1" ) === false ) ;
164+ assert . ok ( serverSockets [ 1 ] . rooms . has ( "room1" ) === false ) ;
165+ assert . ok ( serverSockets [ 2 ] . rooms . has ( "room1" ) === false ) ;
157166 } ) ;
158167
159168 it ( "makes the matching socket instances leave the specified room" , async ( ) => {
@@ -165,9 +174,9 @@ describe("@socket.io/redis-streams-emitter", () => {
165174
166175 await sleep ( PROPAGATION_DELAY_IN_MS ) ;
167176
168- expect ( serverSockets [ 0 ] . rooms . has ( "room2" ) ) . to . be ( false ) ;
169- expect ( serverSockets [ 1 ] . rooms . has ( "room2" ) ) . to . be ( false ) ;
170- expect ( serverSockets [ 2 ] . rooms . has ( "room2" ) ) . to . be ( true ) ;
177+ assert . ok ( serverSockets [ 0 ] . rooms . has ( "room2" ) === false ) ;
178+ assert . ok ( serverSockets [ 1 ] . rooms . has ( "room2" ) === false ) ;
179+ assert . ok ( serverSockets [ 2 ] . rooms . has ( "room2" ) ) ;
171180 } ) ;
172181
173182 it ( "makes the given socket instance leave the specified room" , async ( ) => {
@@ -179,46 +188,50 @@ describe("@socket.io/redis-streams-emitter", () => {
179188
180189 await sleep ( PROPAGATION_DELAY_IN_MS ) ;
181190
182- expect ( serverSockets [ 0 ] . rooms . has ( "room3" ) ) . to . be ( true ) ;
183- expect ( serverSockets [ 1 ] . rooms . has ( "room3" ) ) . to . be ( false ) ;
184- expect ( serverSockets [ 2 ] . rooms . has ( "room3" ) ) . to . be ( true ) ;
191+ assert . ok ( serverSockets [ 0 ] . rooms . has ( "room3" ) ) ;
192+ assert . ok ( serverSockets [ 1 ] . rooms . has ( "room1" ) === false ) ;
193+ assert . ok ( serverSockets [ 2 ] . rooms . has ( "room3" ) ) ;
185194 } ) ;
186195 } ) ;
187196
188197 describe ( "disconnectSockets" , ( ) => {
189- it ( "makes all socket instances disconnect" , ( done ) => {
190- const partialDone = times ( 3 , done ) ;
191-
192- clientSockets . forEach ( ( clientSocket ) => {
193- clientSocket . on ( "disconnect" , ( reason ) => {
194- expect ( reason ) . to . eql ( "io server disconnect" ) ;
195- partialDone ( ) ;
198+ it ( "makes all socket instances disconnect" , ( ) => {
199+ return new Promise < void > ( ( resolve ) => {
200+ const partialResolve = times ( 3 , resolve ) ;
201+
202+ clientSockets . forEach ( ( clientSocket ) => {
203+ clientSocket . on ( "disconnect" , ( reason ) => {
204+ assert . equal ( reason , "io server disconnect" ) ;
205+ partialResolve ( ) ;
206+ } ) ;
196207 } ) ;
197- } ) ;
198208
199- emitter . disconnectSockets ( ) ;
209+ emitter . disconnectSockets ( ) ;
210+ } ) ;
200211 } ) ;
201212 } ) ;
202213
203214 describe ( "serverSideEmit" , ( ) => {
204- it ( "sends an event to other server instances" , ( done ) => {
205- const partialDone = times ( 3 , done ) ;
215+ it ( "sends an event to other server instances" , ( ) => {
216+ return new Promise < void > ( ( resolve ) => {
217+ const partialResolve = times ( 3 , resolve ) ;
206218
207- emitter . serverSideEmit ( "hello" , "world" , 1 , "2" ) ;
219+ emitter . serverSideEmit ( "hello" , "world" , 1 , "2" ) ;
208220
209- servers [ 0 ] . on ( "hello" , ( arg1 , arg2 , arg3 ) => {
210- expect ( arg1 ) . to . eql ( "world" ) ;
211- expect ( arg2 ) . to . eql ( 1 ) ;
212- expect ( arg3 ) . to . eql ( "2" ) ;
213- partialDone ( ) ;
214- } ) ;
221+ servers [ 0 ] . on ( "hello" , ( arg1 , arg2 , arg3 ) => {
222+ assert . equal ( arg1 , "world" ) ;
223+ assert . equal ( arg2 , 1 ) ;
224+ assert . equal ( arg3 , "2" ) ;
225+ partialResolve ( ) ;
226+ } ) ;
215227
216- servers [ 1 ] . on ( "hello" , ( arg1 , arg2 , arg3 ) => {
217- partialDone ( ) ;
218- } ) ;
228+ servers [ 1 ] . on ( "hello" , ( arg1 , arg2 , arg3 ) => {
229+ partialResolve ( ) ;
230+ } ) ;
219231
220- servers [ 2 ] . of ( "/" ) . on ( "hello" , ( ) => {
221- partialDone ( ) ;
232+ servers [ 2 ] . of ( "/" ) . on ( "hello" , ( ) => {
233+ partialResolve ( ) ;
234+ } ) ;
222235 } ) ;
223236 } ) ;
224237 } ) ;
0 commit comments