use std::time::Duration;
use fork::{fork, Fork};
use log::*;
use rstest::rstest;
mod fixture;
use fixture::{init_client_logger, make_fixture, Fixture};
use tokio::runtime::Runtime;
#[rstest]
fn test_simple_log(#[from(make_fixture)] fixture: Fixture) {
match fork() {
Ok(Fork::Child) => {
let rt = Runtime::new().unwrap();
rt.block_on(async move {
println!("Starting logger");
fixture.start_logger().await;
tokio::time::sleep(Duration::from_millis(99)).await;
println!("Logger exited");
fixture.cancel();
})
}
Ok(Fork::Parent(child)) => {
eprintln!("Child PID: {child}");
let rt = Runtime::new().unwrap();
rt.block_on(async move {
tokio::time::sleep(Duration::from_millis(10)).await;
println!("Initializing client logger");
init_client_logger(fixture.logger_socket_path().clone()).await;
error!("Error message");
warn!("Warning message");
info!("Info message");
debug!("Debug message");
tokio::time::sleep(Duration::from_millis(1)).await;
let log_file_text = std::fs::read_to_string(fixture.log_file_path()).unwrap();
println!("Log text:\n{log_file_text}");
assert!(log_file_text.contains("Error message"));
assert!(log_file_text.contains("Warning message"));
assert!(log_file_text.contains("Info message"));
assert!(log_file_text.contains("Debug message"));
fixture.cancel();
});
}
Err(e) => panic!("Failed to fork: {e}"),
}
}