1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
mod test_utils;
use flexi_logger::{writers::FileLogWriter, FileSpec, Logger};
use log::*;
const COUNT: u8 = 3;
#[test]
fn test_write_modes() {
if let Some(value) = test_utils::dispatch(COUNT) {
work(value)
}
}
fn work(value: u8) {
let link_name = "link_to_log".to_string();
let mut logger = Logger::try_with_str("trace").unwrap();
let flwb = FileLogWriter::builder(
FileSpec::default()
.directory(self::test_utils::dir())
.basename("to_foo_or_not_to_foo"),
);
match value {
0 => {
logger = logger.log_to_writer(Box::new(
flwb.max_level(LevelFilter::Debug).try_build().unwrap(),
));
}
1 => {
logger = logger.log_to_writer(Box::new(
flwb.max_level(LevelFilter::Trace).try_build().unwrap(),
));
}
2 => {
logger = logger.log_to_writer(Box::new(flwb.try_build().unwrap()));
}
COUNT..=u8::MAX => {
unreachable!()
}
};
let handle = logger
.start()
.unwrap_or_else(|e| panic!("Logger initialization failed with {e}"));
error!("This is an error message");
warn!("This is a warning");
info!("This is an info message");
debug!("This is a debug message");
trace!("This is a trace message");
match value {
0 => {
handle.validate_logs(&[
("ERROR", "test_file_writer", "error"),
("WARN", "test_file_writer", "warning"),
("INFO", "test_file_writer", "info"),
("DEBUG", "test_file_writer", "debug"),
]);
}
1 => {
handle.validate_logs(&[
("ERROR", "test_file_writer", "error"),
("WARN", "test_file_writer", "warning"),
("INFO", "test_file_writer", "info"),
("DEBUG", "test_file_writer", "debug"),
("TRACE", "test_file_writer", "trace"),
]);
}
2 => {
handle.validate_logs(&[
("ERROR", "test_file_writer", "error"),
("WARN", "test_file_writer", "warning"),
("INFO", "test_file_writer", "info"),
("DEBUG", "test_file_writer", "debug"),
("TRACE", "test_file_writer", "trace"),
]);
}
COUNT..=u8::MAX => {
unreachable!()
}
}
if value == 4 {
self::platform::check_link(&link_name);
}
}
mod platform {
#[cfg(target_family = "unix")]
pub fn check_link(link_name: &str) {
match std::fs::symlink_metadata(link_name) {
Err(e) => panic!("error with symlink: {e}"),
Ok(metadata) => assert!(metadata.file_type().is_symlink(), "not a symlink"),
}
}
#[cfg(not(target_family = "unix"))]
pub fn check_link(_: &str) {}
}
|