@@ -21,7 +21,9 @@ use hyperlight_host::sandbox::SandboxConfiguration;
2121use hyperlight_host:: sandbox_state:: sandbox:: EvolvableSandbox ;
2222use hyperlight_host:: sandbox_state:: transition:: Noop ;
2323use hyperlight_host:: { GuestBinary , HyperlightError , MultiUseSandbox , UninitializedSandbox } ;
24+ use hyperlight_testing:: simplelogger:: { SimpleLogger , LOGGER } ;
2425use hyperlight_testing:: { c_simple_guest_as_string, simple_guest_as_string} ;
26+ use log:: LevelFilter ;
2527
2628pub mod common; // pub to disable dead_code warning
2729use crate :: common:: { new_uninit, new_uninit_rust} ;
@@ -471,69 +473,58 @@ fn recursive_stack_allocate_overflow() {
471473#[ test]
472474#[ ignore]
473475fn log_message ( ) {
474- use hyperlight_testing:: simplelogger:: { SimpleLogger , LOGGER } ;
476+ // internal_dispatch_function does a log::trace! in debug mode, and we call it 6 times in `log_test_messages`
477+ let num_fixed_trace_log = if cfg ! ( debug_assertions) { 6 } else { 0 } ;
478+
479+ let mut tests = Vec :: new ( ) ;
480+ tests. push ( ( LevelFilter :: Trace , 5 + num_fixed_trace_log) ) ;
481+ tests. push ( ( LevelFilter :: Debug , 4 ) ) ;
482+ tests. push ( ( LevelFilter :: Info , 3 ) ) ;
483+ tests. push ( ( LevelFilter :: Warn , 2 ) ) ;
484+ tests. push ( ( LevelFilter :: Error , 1 ) ) ;
485+ tests. push ( ( LevelFilter :: Off , 0 ) ) ;
486+
475487 // init
476488 SimpleLogger :: initialize_test_logger ( ) ;
477489
478- // internal_dispatch_function does a log::trace! in debug mode, and we call it 6 times in `log_test_messages`
479- let num_fixed_trace_log = if cfg ! ( debug_assertions ) { 6 } else { 0 } ;
490+ for test in tests {
491+ let ( level , expected ) = test ;
480492
481- // test trace level
482- log:: set_max_level ( log:: LevelFilter :: Trace ) ;
483- LOGGER . clear_log_calls ( ) ;
484- assert_eq ! ( 0 , LOGGER . num_log_calls( ) ) ;
485- log_test_messages ( ) ;
486- assert_eq ! ( 5 + num_fixed_trace_log, LOGGER . num_log_calls( ) ) ;
487- // The number of enabled calls is the number of times that the enabled function is called
488- // with a target of "hyperlight_guest"
489- // This should be the same as the number of log calls as all the log calls for the "hyperlight_guest" target should be filtered in
490- // the guest
491- assert_eq ! ( LOGGER . num_log_calls( ) , LOGGER . num_enabled_calls( ) ) ;
492-
493- // test debug level
494- log:: set_max_level ( log:: LevelFilter :: Debug ) ;
495- LOGGER . clear_log_calls ( ) ;
496- assert_eq ! ( 0 , LOGGER . num_log_calls( ) ) ;
497- log_test_messages ( ) ;
498- assert_eq ! ( 4 , LOGGER . num_log_calls( ) ) ;
499- assert_eq ! ( LOGGER . num_log_calls( ) , LOGGER . num_enabled_calls( ) ) ;
493+ // Test setting max log level via method on uninit sandbox
494+ log_test_messages ( Some ( level) ) ;
495+ assert_eq ! ( expected, LOGGER . num_log_calls( ) ) ;
500496
501- // test info level
502- log:: set_max_level ( log:: LevelFilter :: Info ) ;
503- LOGGER . clear_log_calls ( ) ;
504- assert_eq ! ( 0 , LOGGER . num_log_calls( ) ) ;
505- log_test_messages ( ) ;
506- assert_eq ! ( 3 , LOGGER . num_log_calls( ) ) ;
507- assert_eq ! ( LOGGER . num_log_calls( ) , LOGGER . num_enabled_calls( ) ) ;
497+ // Set the log level via env var
498+ std:: env:: set_var ( "RUST_LOG" , format ! ( "hyperlight_guest={}" , level) ) ;
499+ log_test_messages ( None ) ;
500+ assert_eq ! ( expected, LOGGER . num_log_calls( ) ) ;
508501
509- // test warn level
510- log:: set_max_level ( log:: LevelFilter :: Warn ) ;
511- LOGGER . clear_log_calls ( ) ;
512- assert_eq ! ( 0 , LOGGER . num_log_calls( ) ) ;
513- log_test_messages ( ) ;
514- assert_eq ! ( 2 , LOGGER . num_log_calls( ) ) ;
515- assert_eq ! ( LOGGER . num_log_calls( ) , LOGGER . num_enabled_calls( ) ) ;
502+ std:: env:: set_var ( "RUST_LOG" , format ! ( "hyperlight_host={}" , level) ) ;
503+ log_test_messages ( None ) ;
504+ assert_eq ! ( expected, LOGGER . num_log_calls( ) ) ;
516505
517- // test error level
518- log:: set_max_level ( log:: LevelFilter :: Error ) ;
519- LOGGER . clear_log_calls ( ) ;
520- assert_eq ! ( 0 , LOGGER . num_log_calls( ) ) ;
521- log_test_messages ( ) ;
506+ std:: env:: set_var ( "RUST_LOG" , format ! ( "{}" , level) ) ;
507+ log_test_messages ( None ) ;
508+ assert_eq ! ( expected, LOGGER . num_log_calls( ) ) ;
509+
510+ std:: env:: remove_var ( "RUST_LOG" ) ;
511+ }
512+
513+ // Test that if no log level is set, the default is error
514+ log_test_messages ( None ) ;
522515 assert_eq ! ( 1 , LOGGER . num_log_calls( ) ) ;
523- assert_eq ! ( LOGGER . num_log_calls ( ) , LOGGER . num_enabled_calls ( ) ) ;
516+ }
524517
525- // test off level
526- log:: set_max_level ( log:: LevelFilter :: Off ) ;
518+ fn log_test_messages ( levelfilter : Option < log:: LevelFilter > ) {
527519 LOGGER . clear_log_calls ( ) ;
528520 assert_eq ! ( 0 , LOGGER . num_log_calls( ) ) ;
529- log_test_messages ( ) ;
530- assert_eq ! ( 0 , LOGGER . num_log_calls( ) ) ;
531- assert_eq ! ( LOGGER . num_log_calls( ) , LOGGER . num_enabled_calls( ) ) ;
532- }
533-
534- fn log_test_messages ( ) {
535521 for level in log:: LevelFilter :: iter ( ) {
536- let mut sbox1 = new_uninit ( ) . unwrap ( ) . evolve ( Noop :: default ( ) ) . unwrap ( ) ;
522+ let mut sbox = new_uninit ( ) . unwrap ( ) ;
523+ if let Some ( levelfilter) = levelfilter {
524+ sbox. set_max_guest_log_level ( levelfilter) ;
525+ }
526+
527+ let mut sbox1 = sbox. evolve ( Noop :: default ( ) ) . unwrap ( ) ;
537528
538529 let message = format ! ( "Hello from log_message level {}" , level as i32 ) ;
539530 sbox1
0 commit comments