@@ -9,6 +9,9 @@ use rexpect::process::wait::WaitStatus;
99use crate :: builder:: { BuildArgs , Built , Machine } ;
1010use crate :: ExitStatus ;
1111
12+ /// defines the threshold on when the output is truncated.
13+ const PRINT_NUM_LINES : usize = 100 ;
14+
1215/// Different build modes for rackscale
1316#[ derive( Eq , PartialEq , Debug , Clone ) ]
1417pub enum RackscaleMode {
@@ -496,10 +499,26 @@ pub fn log_qemu_out(args: &RunnerArgs, output: String) {
496499 log_qemu_out_with_name ( Some ( args) , String :: from ( "" ) , output)
497500}
498501
502+
503+
499504pub fn log_qemu_out_with_name ( args : Option < & RunnerArgs > , name : String , output : String ) {
500505 if !output. is_empty ( ) {
501506 println ! ( "\n ===== QEMU LOG {}=====" , name) ;
502- println ! ( "{}" , & output) ;
507+ let num_lines = output. lines ( ) . count ( ) ;
508+
509+ if num_lines > PRINT_NUM_LINES {
510+ for l in output. lines ( ) . take ( PRINT_NUM_LINES / 2 ) {
511+ println ! ( " > {}" , l) ;
512+ }
513+ println ! ( " > ... {} more lines\n " , num_lines - PRINT_NUM_LINES ) ;
514+ for l in output. lines ( ) . skip ( num_lines - PRINT_NUM_LINES / 2 ) {
515+ println ! ( " > {}" , l) ;
516+ }
517+ } else {
518+ for l in output. lines ( ) {
519+ println ! ( " > {l}" ) ;
520+ }
521+ }
503522 println ! ( "===== END QEMU LOG {}=====" , name) ;
504523 }
505524 if let Some ( nrk_args) = args {
@@ -620,7 +639,32 @@ pub fn wait_for_sigterm_or_successful_exit_no_log(
620639 }
621640 Err ( e) => {
622641 log_qemu_args ( args) ;
623- panic ! ( "Qemu testing failed: {} {}" , name, e) ;
642+ println ! ( "Qemu testing failed: {} " , name) ;
643+ use rexpect:: errors:: Error ;
644+ use rexpect:: errors:: ErrorKind :: Timeout ;
645+ match e {
646+ Error ( Timeout ( expected, got, timeout) , st) => {
647+ println ! ( "Expected: `{expected}`\n " ) ;
648+ println ! ( "Got:" , ) ;
649+ let count = got. lines ( ) . count ( ) ;
650+ if count > PRINT_NUM_LINES {
651+ for l in got. lines ( ) . take ( PRINT_NUM_LINES / 2 ) {
652+ println ! ( " > {l}" ) ;
653+ }
654+ println ! ( " > ... skipping {} more lines..." , count - PRINT_NUM_LINES ) ;
655+ for l in got. lines ( ) . skip ( count - PRINT_NUM_LINES / 2 ) {
656+ println ! ( " > {l}" ) ;
657+ }
658+ } else {
659+ for l in got. lines ( ) {
660+ println ! ( " > {l}" ) ;
661+ }
662+ }
663+ }
664+ _ => println ! ( "{e}" )
665+ }
666+
667+ panic ! ( "Qemu testing failed" ) ;
624668 }
625669 e => {
626670 log_qemu_args ( args) ;
0 commit comments