use sysinfo::System;
use crate::metrics::processes::{refresh, ProcessEntry};
#[test]
fn test_process_entry_fields_stored_correctly() {
let p = ProcessEntry {
pid: 1234,
name: "bash".to_string(),
cpu: 12.5,
mem_kb: 4096,
};
assert_eq!(p.pid, 1234);
assert_eq!(p.name, "bash");
assert!((p.cpu - 12.5).abs() < f32::EPSILON);
assert_eq!(p.mem_kb, 4096);
}
#[test]
fn test_processes_refresh_does_not_panic() {
let mut sys = System::new_all();
sys.refresh_all();
let mut processes: Vec<ProcessEntry> = Vec::new();
refresh(&mut processes, &sys);
}
#[test]
fn test_processes_refresh_count_within_limit() {
let mut sys = System::new_all();
sys.refresh_all();
let mut processes: Vec<ProcessEntry> = Vec::new();
refresh(&mut processes, &sys);
assert!(
processes.len() <= 100,
"refresh should keep at most 100 processes, got {}",
processes.len()
);
}
#[test]
fn test_processes_refresh_sorted_by_cpu_descending() {
let mut sys = System::new_all();
sys.refresh_all();
let mut processes: Vec<ProcessEntry> = Vec::new();
refresh(&mut processes, &sys);
for i in 0..processes.len().saturating_sub(1) {
assert!(
processes[i].cpu >= processes[i + 1].cpu,
"processes not sorted: processes[{i}].cpu ({:.2}) < processes[{}].cpu ({:.2})",
processes[i].cpu,
i + 1,
processes[i + 1].cpu
);
}
}
#[test]
fn test_processes_refresh_names_non_empty() {
let mut sys = System::new_all();
sys.refresh_all();
let mut processes: Vec<ProcessEntry> = Vec::new();
refresh(&mut processes, &sys);
for p in &processes {
assert!(!p.name.is_empty(), "PID {} has an empty name", p.pid);
}
}