#[cfg(test)]
use crate::device::container_info::ContainerInfo;
#[test]
fn test_parse_cpuset_range() {
let result = ContainerInfo::parse_cpuset_range("0");
assert_eq!(result, Some(vec![0]));
let result = ContainerInfo::parse_cpuset_range("0-3");
assert_eq!(result, Some(vec![0, 1, 2, 3]));
let result = ContainerInfo::parse_cpuset_range("0,2,4");
assert_eq!(result, Some(vec![0, 2, 4]));
let result = ContainerInfo::parse_cpuset_range("0-2,5,7-8");
assert_eq!(result, Some(vec![0, 1, 2, 5, 7, 8]));
let result = ContainerInfo::parse_cpuset_range("");
assert_eq!(result, None);
let result = ContainerInfo::parse_cpuset_range("invalid");
assert_eq!(result, None);
}
#[test]
fn test_calculate_effective_cpus() {
let effective = ContainerInfo::calculate_effective_cpus(None, None, None, &None);
assert!(effective > 0.0);
let effective = ContainerInfo::calculate_effective_cpus(
Some(200000), Some(100000), None,
&None,
);
assert_eq!(effective, 2.0);
let effective = ContainerInfo::calculate_effective_cpus(
Some(50000), Some(100000), None,
&None,
);
assert_eq!(effective, 0.5);
let cpuset = Some(vec![0, 1, 2, 3]);
let effective = ContainerInfo::calculate_effective_cpus(None, None, None, &cpuset);
assert_eq!(effective, 4.0);
let effective = ContainerInfo::calculate_effective_cpus(
Some(100000), Some(100000), None,
&cpuset,
);
assert_eq!(effective, 1.0);
let cpuset = Some(vec![0, 1]);
let effective = ContainerInfo::calculate_effective_cpus(
Some(300000), Some(100000), None,
&cpuset,
);
assert_eq!(effective, 2.0); }
#[cfg(target_os = "linux")]
#[test]
fn test_container_detection() {
let info = ContainerInfo::detect();
assert!(info.effective_cpu_count > 0.0);
if info.is_container {
println!(
"Running in container with {} effective CPUs",
info.effective_cpu_count
);
if let Some(quota) = info.cpu_quota {
println!("CPU quota: {quota}");
}
if let Some(period) = info.cpu_period {
println!("CPU period: {period}");
}
if let Some(cpuset) = &info.cpuset_cpus {
println!("CPUSet: {cpuset:?}");
}
if let Some(mem_limit) = info.memory_limit_bytes {
println!("Memory limit: {} MB", mem_limit / 1024 / 1024);
}
if let Some(mem_usage) = info.memory_usage_bytes {
println!("Memory usage: {} MB", mem_usage / 1024 / 1024);
}
} else {
println!("Not running in a container");
}
}
#[test]
fn test_memory_limit_detection() {
let info = ContainerInfo::detect();
if info.is_container {
if let Some(limit) = info.memory_limit_bytes {
assert!(limit > 0);
println!("Container memory limit: {limit} bytes");
}
} else {
assert!(info.memory_limit_bytes.is_none());
}
}
#[test]
fn test_get_current_memory_usage() {
let info = ContainerInfo::detect();
if info.is_container {
let usage = info.get_current_memory_usage();
if let Some(usage_bytes) = usage {
assert!(usage_bytes > 0);
println!("Current memory usage: {} MB", usage_bytes / 1024 / 1024);
}
}
}