#![cfg(test)]
use super::*;
#[test]
fn enforce_true_with_violation_yields_passed_false() {
let t = MonitorThresholds {
fail_on_stall: true,
sustained_samples: 3,
enforce: true,
..Default::default()
};
let samples: Vec<_> = (0..4u64)
.map(|i| MonitorSample {
prog_stats: None,
elapsed_ms: i * 100,
cpus: vec![
CpuSnapshot {
nr_running: 1,
rq_clock: 5000,
..Default::default()
},
CpuSnapshot {
nr_running: 1,
rq_clock: 6000 + i * 500,
..Default::default()
},
],
})
.collect();
let summary = MonitorSummary::from_samples(&samples);
let report = MonitorReport {
samples,
summary,
..Default::default()
};
let v = t.evaluate(&report);
assert!(
!v.is_pass(),
"enforce=true + violation must yield passed=false: {:?}",
v.details
);
assert!(
!v.details.is_empty(),
"violation must be recorded in details even when enforce=true"
);
assert!(
v.summary.contains("FAILED"),
"summary must indicate failure: {}",
v.summary
);
}
#[test]
fn enforce_false_with_violation_yields_passed_true_and_records_details() {
let t = MonitorThresholds {
fail_on_stall: true,
sustained_samples: 3,
enforce: false,
..Default::default()
};
let samples: Vec<_> = (0..4u64)
.map(|i| MonitorSample {
prog_stats: None,
elapsed_ms: i * 100,
cpus: vec![
CpuSnapshot {
nr_running: 1,
rq_clock: 5000,
..Default::default()
},
CpuSnapshot {
nr_running: 1,
rq_clock: 6000 + i * 500,
..Default::default()
},
],
})
.collect();
let summary = MonitorSummary::from_samples(&samples);
let report = MonitorReport {
samples,
summary,
..Default::default()
};
let v = t.evaluate(&report);
assert!(
v.is_pass(),
"enforce=false + violation must yield passed=true (report-only mode)"
);
assert!(
!v.details.is_empty(),
"violation must STILL be recorded in details even under report-only mode"
);
assert!(
v.details.iter().any(|d| d.contains("rq_clock stall")),
"details must carry the rq_clock stall violation: {:?}",
v.details
);
assert!(
v.summary.contains("report-only") || v.summary.contains("flagged"),
"summary must carry the report-only advisory: {}",
v.summary
);
}