xref: /aosp_15_r20/external/crosvm/base/tests/linux/syslog.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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 Worker pub 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 Worker fn 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 Worker fn 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 Worker fn 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