@@ -344,7 +344,7 @@ async fn run_parallel(
344
344
let mut remaining_files: HashSet < String > = HashSet :: from_iter ( filenames. clone ( ) ) ;
345
345
346
346
let start = Instant :: now ( ) ;
347
-
347
+ let mut connection_refused = false ;
348
348
while let Some ( ( db_name, file, res, mut buf) ) = stream. next ( ) . await {
349
349
remaining_files. remove ( & file) ;
350
350
let test_case_name = file. replace ( [ '/' , ' ' , '.' , '-' ] , "_" ) ;
@@ -359,7 +359,11 @@ async fn run_parallel(
359
359
}
360
360
Err ( e) => {
361
361
failed = true ;
362
- writeln ! ( buf, "{}\n \n {:?}" , style( "[FAILED]" ) . red( ) . bold( ) , e) ?;
362
+ let err = format ! ( "{:?}" , e) ;
363
+ if err. contains ( "Connection refused" ) {
364
+ connection_refused = true ;
365
+ }
366
+ writeln ! ( buf, "{}\n \n {}" , style( "[FAILED]" ) . red( ) . bold( ) , err) ?;
363
367
writeln ! ( buf) ?;
364
368
failed_case. push ( file. clone ( ) ) ;
365
369
failed_db. insert ( db_name. clone ( ) ) ;
@@ -376,6 +380,10 @@ async fn run_parallel(
376
380
} ;
377
381
test_suite. add_test_case ( case) ;
378
382
tokio:: task:: block_in_place ( || stdout ( ) . write_all ( & buf) ) ?;
383
+ if connection_refused {
384
+ eprintln ! ( "Connection refused. The server may be down. Exiting..." ) ;
385
+ break ;
386
+ }
379
387
if fail_fast && failed {
380
388
println ! ( "early exit after failure..." ) ;
381
389
break ;
@@ -401,22 +409,31 @@ async fn run_parallel(
401
409
// in the stream. Abort them before dropping temporary databases.
402
410
drop ( stream) ;
403
411
404
- for db_name in db_names {
405
- if keep_db_on_failure && failed_db. contains ( & db_name) {
406
- eprintln ! (
407
- "+ {}" ,
408
- style( format!(
409
- "DATABASE {db_name} contains failed cases, kept for debugging"
410
- ) )
411
- . red( )
412
- . bold( )
413
- ) ;
414
- continue ;
415
- }
416
- let query = format ! ( "DROP DATABASE {db_name};" ) ;
417
- eprintln ! ( "+ {query}" ) ;
418
- if let Err ( err) = db. run ( & query) . await {
419
- eprintln ! ( " ignore error: {err}" ) ;
412
+ if connection_refused {
413
+ eprintln ! ( "Skip dropping databases due to connection refused: {db_names:?}" ) ;
414
+ } else {
415
+ for db_name in db_names {
416
+ if keep_db_on_failure && failed_db. contains ( & db_name) {
417
+ eprintln ! (
418
+ "+ {}" ,
419
+ style( format!(
420
+ "DATABASE {db_name} contains failed cases, kept for debugging"
421
+ ) )
422
+ . red( )
423
+ . bold( )
424
+ ) ;
425
+ continue ;
426
+ }
427
+ let query = format ! ( "DROP DATABASE {db_name};" ) ;
428
+ eprintln ! ( "+ {query}" ) ;
429
+ if let Err ( err) = db. run ( & query) . await {
430
+ let err = err. to_string ( ) ;
431
+ if err. contains ( "Connection refused" ) {
432
+ eprintln ! ( " Connection refused. The server may be down. Exiting..." ) ;
433
+ break ;
434
+ }
435
+ eprintln ! ( " ignore DROP DATABASE error: {err}" ) ;
436
+ }
420
437
}
421
438
}
422
439
@@ -440,6 +457,7 @@ async fn run_serial(
440
457
let mut failed_case = vec ! [ ] ;
441
458
let mut skipped_case = vec ! [ ] ;
442
459
let mut files = files. into_iter ( ) ;
460
+ let mut connection_refused = false ;
443
461
for file in & mut files {
444
462
let mut runner = Runner :: new ( || engines:: connect ( engine, & config) ) ;
445
463
for label in labels {
@@ -459,7 +477,11 @@ async fn run_serial(
459
477
}
460
478
Err ( e) => {
461
479
failed = true ;
462
- println ! ( "{}\n \n {:?}" , style( "[FAILED]" ) . red( ) . bold( ) , e) ;
480
+ let err = format ! ( "{:?}" , e) ;
481
+ if err. contains ( "Connection refused" ) {
482
+ connection_refused = true ;
483
+ }
484
+ println ! ( "{}\n \n {}" , style( "[FAILED]" ) . red( ) . bold( ) , err) ;
463
485
println ! ( ) ;
464
486
failed_case. push ( filename. clone ( ) ) ;
465
487
let mut status = TestCaseStatus :: non_success ( NonSuccessKind :: Failure ) ;
@@ -474,6 +496,10 @@ async fn run_serial(
474
496
}
475
497
} ;
476
498
test_suite. add_test_case ( case) ;
499
+ if connection_refused {
500
+ eprintln ! ( "Connection refused. The server may be down. Exiting..." ) ;
501
+ break ;
502
+ }
477
503
if fail_fast && failed {
478
504
println ! ( "early exit after failure..." ) ;
479
505
break ;
0 commit comments