@@ -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