@@ -233,8 +233,7 @@ func startGossamer(t *testing.T, node *Node, websocket bool) error {
233
233
func RunGossamer (t * testing.T , idx int , basepath , genesis , config string , websocket , babeLead bool ) (* Node , error ) {
234
234
node , err := InitGossamer (idx , basepath , genesis , config )
235
235
if err != nil {
236
- Logger .Criticalf ("could not initialise gossamer: %s" , err )
237
- os .Exit (1 )
236
+ return nil , fmt .Errorf ("could not initialise gossamer: %w" , err )
238
237
}
239
238
240
239
if idx == 0 || babeLead {
@@ -243,8 +242,7 @@ func RunGossamer(t *testing.T, idx int, basepath, genesis, config string, websoc
243
242
244
243
err = startGossamer (t , node , websocket )
245
244
if err != nil {
246
- Logger .Criticalf ("could not start gossamer: %s" , err )
247
- os .Exit (1 )
245
+ return nil , fmt .Errorf ("could not start gossamer: %w" , err )
248
246
}
249
247
250
248
return node , nil
@@ -314,61 +312,83 @@ func StartNodes(t *testing.T, nodes []*Node) error {
314
312
}
315
313
316
314
// InitializeAndStartNodes will spin up `num` gossamer nodes
317
- func InitializeAndStartNodes (t * testing.T , num int , genesis , config string ) ([]* Node , error ) {
318
- var nodes []* Node
319
-
315
+ func InitializeAndStartNodes (t * testing.T , num int , genesis , config string ) (
316
+ nodes []* Node , err error ) {
320
317
var wg sync.WaitGroup
321
- var nodeMu sync.Mutex
318
+ var nodesMutex , errMutex sync.Mutex
322
319
wg .Add (num )
323
320
324
321
for i := 0 ; i < num ; i ++ {
325
322
go func (i int ) {
323
+ defer wg .Done ()
326
324
name := strconv .Itoa (i )
327
325
if i < len (KeyList ) {
328
326
name = KeyList [i ]
329
327
}
330
- node , err := RunGossamer (t , i , TestDir (t , name ), genesis , config , false , false )
331
- if err != nil {
332
- Logger .Errorf ("failed to run Gossamer for node index %d" , i )
328
+ node , runErr := RunGossamer (t , i , TestDir (t , name ), genesis , config , false , false )
329
+ if runErr != nil {
330
+ errMutex .Lock ()
331
+ if err == nil {
332
+ err = fmt .Errorf ("failed to run Gossamer for node index %d: %w" , i , runErr )
333
+ }
334
+ errMutex .Unlock ()
335
+ return
333
336
}
334
337
335
- nodeMu .Lock ()
338
+ nodesMutex .Lock ()
336
339
nodes = append (nodes , node )
337
- nodeMu .Unlock ()
338
- wg .Done ()
340
+ nodesMutex .Unlock ()
339
341
}(i )
340
342
}
341
343
342
344
wg .Wait ()
343
345
346
+ if err != nil {
347
+ _ = StopNodes (t , nodes )
348
+ return nil , err
349
+ }
350
+
344
351
return nodes , nil
345
352
}
346
353
347
354
// InitializeAndStartNodesWebsocket will spin up `num` gossamer nodes running with Websocket rpc enabled
348
- func InitializeAndStartNodesWebsocket (t * testing.T , num int , genesis , config string ) ([] * Node , error ) {
349
- var nodes []* Node
350
-
355
+ func InitializeAndStartNodesWebsocket (t * testing.T , num int , genesis , config string ) (
356
+ nodes []* Node , err error ) {
357
+ var nodesMutex , errMutex sync. Mutex
351
358
var wg sync.WaitGroup
359
+
352
360
wg .Add (num )
353
361
354
362
for i := 0 ; i < num ; i ++ {
355
363
go func (i int ) {
364
+ defer wg .Done ()
356
365
name := strconv .Itoa (i )
357
366
if i < len (KeyList ) {
358
367
name = KeyList [i ]
359
368
}
360
- node , err := RunGossamer (t , i , TestDir (t , name ), genesis , config , true , false )
361
- if err != nil {
362
- Logger .Errorf ("failed to run Gossamer for node index %d" , i )
369
+ node , runErr := RunGossamer (t , i , TestDir (t , name ), genesis , config , true , false )
370
+ if runErr != nil {
371
+ errMutex .Lock ()
372
+ if err == nil {
373
+ err = fmt .Errorf ("failed to run Gossamer for node index %d: %w" , i , runErr )
374
+ }
375
+ errMutex .Unlock ()
376
+ return
363
377
}
364
378
379
+ nodesMutex .Lock ()
365
380
nodes = append (nodes , node )
366
- wg . Done ()
381
+ nodesMutex . Unlock ()
367
382
}(i )
368
383
}
369
384
370
385
wg .Wait ()
371
386
387
+ if err != nil {
388
+ _ = StopNodes (t , nodes )
389
+ return nil , err
390
+ }
391
+
372
392
return nodes , nil
373
393
}
374
394
0 commit comments