use crate::brain::agent::service::boot_report::*;
use std::sync::Mutex;
use uuid::Uuid;
fn guard() -> std::sync::MutexGuard<'static, ()> {
static LOCK: Mutex<()> = Mutex::new(());
let g = LOCK.lock().unwrap_or_else(|e| e.into_inner());
reset_for_test();
g
}
fn uuid(n: u8) -> Uuid {
Uuid::from_u64_pair(n as u64, 0)
}
#[test]
fn an_empty_boot_still_says_so() {
let _g = guard();
assert_eq!(
summary_line(),
"[boot] interrupted=0 resumed=[] delivered=0 failed=0"
);
}
#[test]
fn duplicate_rows_count_as_one_session_but_every_resume_counts() {
let _g = guard();
record_interrupted(uuid(1));
record_interrupted(uuid(1));
record_interrupted(uuid(2));
record_resumed(uuid(1));
record_resumed(uuid(2));
record_delivered();
record_failed();
let line = summary_line();
assert!(line.contains("interrupted=2"), "line was: {line}");
assert!(line.contains(&uuid(1).to_string()), "line was: {line}");
assert!(line.contains(&uuid(2).to_string()), "line was: {line}");
assert!(line.contains("delivered=1"), "line was: {line}");
assert!(line.contains("failed=1"), "line was: {line}");
}
#[test]
fn a_wake_that_never_left_survives_as_failed() {
let _g = guard();
record_interrupted(uuid(7));
record_resumed(uuid(7));
record_failed();
let line = summary_line();
assert!(line.contains("interrupted=1"), "line was: {line}");
assert!(line.contains(&uuid(7).to_string()), "line was: {line}");
assert!(line.contains("delivered=0"), "line was: {line}");
assert!(line.contains("failed=1"), "line was: {line}");
}
#[test]
fn a_dead_tracking_table_is_named_in_the_summary() {
let _g = guard();
record_tracking_disabled("no such column: origin".to_string());
let line = summary_line();
assert!(line.starts_with("[boot] interrupted=0"), "line was: {line}");
assert!(
line.ends_with(" recovery=DISABLED(no such column: origin)"),
"line was: {line}"
);
}
#[test]
fn a_healthy_boot_does_not_mention_recovery_state() {
let _g = guard();
assert!(!summary_line().contains("recovery="));
}