@@ -21,7 +21,9 @@ use hyperlight_host::sandbox::SandboxConfiguration;
21
21
use hyperlight_host:: sandbox_state:: sandbox:: EvolvableSandbox ;
22
22
use hyperlight_host:: sandbox_state:: transition:: Noop ;
23
23
use hyperlight_host:: { GuestBinary , HyperlightError , MultiUseSandbox , UninitializedSandbox } ;
24
+ use hyperlight_testing:: simplelogger:: { SimpleLogger , LOGGER } ;
24
25
use hyperlight_testing:: { c_simple_guest_as_string, simple_guest_as_string} ;
26
+ use log:: LevelFilter ;
25
27
26
28
pub mod common; // pub to disable dead_code warning
27
29
use crate :: common:: { new_uninit, new_uninit_rust} ;
@@ -471,69 +473,58 @@ fn recursive_stack_allocate_overflow() {
471
473
#[ test]
472
474
#[ ignore]
473
475
fn 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
+
475
487
// init
476
488
SimpleLogger :: initialize_test_logger ( ) ;
477
489
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 ;
480
492
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( ) ) ;
500
496
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( ) ) ;
508
501
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( ) ) ;
516
505
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 ) ;
522
515
assert_eq ! ( 1 , LOGGER . num_log_calls( ) ) ;
523
- assert_eq ! ( LOGGER . num_log_calls ( ) , LOGGER . num_enabled_calls ( ) ) ;
516
+ }
524
517
525
- // test off level
526
- log:: set_max_level ( log:: LevelFilter :: Off ) ;
518
+ fn log_test_messages ( levelfilter : Option < log:: LevelFilter > ) {
527
519
LOGGER . clear_log_calls ( ) ;
528
520
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 ( ) {
535
521
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 ( ) ;
537
528
538
529
let message = format ! ( "Hello from log_message level {}" , level as i32 ) ;
539
530
sbox1
0 commit comments