use std::process::Command;
use std::time::{Duration, Instant};
fn seval_bin() -> String {
env!("CARGO_BIN_EXE_seval").to_string()
}
#[test]
fn startup_time_under_200ms() {
let tmp = tempfile::tempdir().expect("failed to create temp dir");
let log_dir = tmp.path().join("logs");
let start = Instant::now();
let mut child = Command::new(seval_bin())
.env("SEVAL_LOG_DIR", &log_dir)
.spawn()
.expect("failed to spawn seval binary");
std::thread::sleep(Duration::from_millis(50));
let pid = child.id();
unsafe {
libc::kill(pid.cast_signed(), libc::SIGTERM);
}
let _status = child.wait().expect("failed to wait for seval");
let elapsed = start.elapsed();
assert!(
elapsed < Duration::from_millis(200),
"startup + shutdown took {elapsed:?}, expected < 200ms"
);
}
#[test]
fn creates_log_on_startup() {
let tmp = tempfile::tempdir().expect("failed to create temp dir");
let log_dir = tmp.path().join("logs");
let output = Command::new(seval_bin())
.env("SEVAL_LOG_DIR", &log_dir)
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.output()
.expect("failed to run seval binary");
assert!(
!output.status.success(),
"expected non-zero exit (no terminal), got: {:?}",
output.status
);
assert!(
log_dir.exists(),
"log directory was not created at {log_dir:?}"
);
let entries: Vec<_> = std::fs::read_dir(&log_dir)
.expect("failed to read log dir")
.collect();
assert!(
!entries.is_empty(),
"expected at least one log file in {log_dir:?}"
);
}