1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker use std::io::Read; 6*bb4ee6a4SAndroid Build Coastguard Worker use std::io::Seek; 7*bb4ee6a4SAndroid Build Coastguard Worker use std::io::SeekFrom; 8*bb4ee6a4SAndroid Build Coastguard Worker use std::sync::Once; 9*bb4ee6a4SAndroid Build Coastguard Worker 10*bb4ee6a4SAndroid Build Coastguard Worker use base::syslog::*; 11*bb4ee6a4SAndroid Build Coastguard Worker 12*bb4ee6a4SAndroid Build Coastguard Worker static EARLY_INIT_ONCE: Once = Once::new(); 13*bb4ee6a4SAndroid Build Coastguard Worker setup()14*bb4ee6a4SAndroid Build Coastguard Workerpub fn setup() { 15*bb4ee6a4SAndroid Build Coastguard Worker EARLY_INIT_ONCE.call_once(|| { 16*bb4ee6a4SAndroid Build Coastguard Worker early_init(); 17*bb4ee6a4SAndroid Build Coastguard Worker }); 18*bb4ee6a4SAndroid Build Coastguard Worker } 19*bb4ee6a4SAndroid Build Coastguard Worker 20*bb4ee6a4SAndroid Build Coastguard Worker #[test] fds()21*bb4ee6a4SAndroid Build Coastguard Workerfn fds() { 22*bb4ee6a4SAndroid Build Coastguard Worker setup(); 23*bb4ee6a4SAndroid Build Coastguard Worker let mut fds = Vec::new(); 24*bb4ee6a4SAndroid Build Coastguard Worker push_descriptors(&mut fds); 25*bb4ee6a4SAndroid Build Coastguard Worker assert!(!fds.is_empty()); 26*bb4ee6a4SAndroid Build Coastguard Worker for fd in fds { 27*bb4ee6a4SAndroid Build Coastguard Worker assert!(fd >= 0); 28*bb4ee6a4SAndroid Build Coastguard Worker } 29*bb4ee6a4SAndroid Build Coastguard Worker } 30*bb4ee6a4SAndroid Build Coastguard Worker 31*bb4ee6a4SAndroid Build Coastguard Worker #[test] syslog_file()32*bb4ee6a4SAndroid Build Coastguard Workerfn syslog_file() { 33*bb4ee6a4SAndroid Build Coastguard Worker setup(); 34*bb4ee6a4SAndroid Build Coastguard Worker let mut file = tempfile::tempfile().expect("failed to create tempfile"); 35*bb4ee6a4SAndroid Build Coastguard Worker 36*bb4ee6a4SAndroid Build Coastguard Worker let syslog_file = file.try_clone().expect("error cloning shared memory file"); 37*bb4ee6a4SAndroid Build Coastguard Worker let state = State::new(LogConfig { 38*bb4ee6a4SAndroid Build Coastguard Worker pipe: Some(Box::new(syslog_file)), 39*bb4ee6a4SAndroid Build Coastguard Worker ..Default::default() 40*bb4ee6a4SAndroid Build Coastguard Worker }) 41*bb4ee6a4SAndroid Build Coastguard Worker .unwrap(); 42*bb4ee6a4SAndroid Build Coastguard Worker 43*bb4ee6a4SAndroid Build Coastguard Worker const TEST_STR: &str = "hello shared memory file"; 44*bb4ee6a4SAndroid Build Coastguard Worker state.log( 45*bb4ee6a4SAndroid Build Coastguard Worker &log::RecordBuilder::new() 46*bb4ee6a4SAndroid Build Coastguard Worker .level(Level::Error) 47*bb4ee6a4SAndroid Build Coastguard Worker .args(format_args!("{}", TEST_STR)) 48*bb4ee6a4SAndroid Build Coastguard Worker .build(), 49*bb4ee6a4SAndroid Build Coastguard Worker ); 50*bb4ee6a4SAndroid Build Coastguard Worker 51*bb4ee6a4SAndroid Build Coastguard Worker file.seek(SeekFrom::Start(0)) 52*bb4ee6a4SAndroid Build Coastguard Worker .expect("error seeking shared memory file"); 53*bb4ee6a4SAndroid Build Coastguard Worker let mut buf = String::new(); 54*bb4ee6a4SAndroid Build Coastguard Worker file.read_to_string(&mut buf) 55*bb4ee6a4SAndroid Build Coastguard Worker .expect("error reading shared memory file"); 56*bb4ee6a4SAndroid Build Coastguard Worker assert!(buf.contains(TEST_STR)); 57*bb4ee6a4SAndroid Build Coastguard Worker } 58*bb4ee6a4SAndroid Build Coastguard Worker 59*bb4ee6a4SAndroid Build Coastguard Worker #[test] macros()60*bb4ee6a4SAndroid Build Coastguard Workerfn macros() { 61*bb4ee6a4SAndroid Build Coastguard Worker setup(); 62*bb4ee6a4SAndroid Build Coastguard Worker log::error!("this is an error {}", 3); 63*bb4ee6a4SAndroid Build Coastguard Worker log::warn!("this is a warning {}", "uh oh"); 64*bb4ee6a4SAndroid Build Coastguard Worker log::info!("this is info {}", true); 65*bb4ee6a4SAndroid Build Coastguard Worker log::debug!("this is debug info {:?}", Some("helpful stuff")); 66*bb4ee6a4SAndroid Build Coastguard Worker } 67