76 lines
2.3 KiB
Rust
76 lines
2.3 KiB
Rust
use ember_tune_rs::engine::formatters::throttled::{ThrottledConfig, ThrottledTranslator};
|
|
use ember_tune_rs::agent_analyst::{OptimizationMatrix, SystemProfile, FanCurvePoint};
|
|
use ember_tune_rs::agent_integrator::ServiceIntegrator;
|
|
use std::fs;
|
|
use tempfile::tempdir;
|
|
|
|
#[test]
|
|
fn test_throttled_merge_preserves_undervolt() {
|
|
let existing = r#"[GENERAL]
|
|
Update_Interval_ms: 1000
|
|
|
|
[UNDERVOLT]
|
|
# CPU core undervolt
|
|
CORE: -100
|
|
# GPU undervolt
|
|
GPU: -50
|
|
|
|
[AC]
|
|
PL1_Tdp_W: 15
|
|
PL2_Tdp_W: 25
|
|
"#;
|
|
|
|
let config = ThrottledConfig {
|
|
pl1_limit: 22.0,
|
|
pl2_limit: 28.0,
|
|
trip_temp: 95.0,
|
|
};
|
|
|
|
let merged = ThrottledTranslator::merge_conf(existing, &config);
|
|
|
|
assert!(merged.contains("CORE: -100"));
|
|
assert!(merged.contains("GPU: -50"));
|
|
assert!(merged.contains("PL1_Tdp_W: 22"));
|
|
assert!(merged.contains("PL2_Tdp_W: 28"));
|
|
assert!(merged.contains("Trip_Temp_C: 95"));
|
|
assert!(merged.contains("[UNDERVOLT]"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_i8kmon_merge_preserves_settings() {
|
|
let dir = tempdir().unwrap();
|
|
let config_path = dir.path().join("i8kmon.conf");
|
|
|
|
let existing = r#"set config(gen_shadow) 1
|
|
set config(i8k_ignore_dmi) 1
|
|
set config(daemon) 1
|
|
|
|
set config(0) {0 0 60 50}
|
|
"#;
|
|
fs::write(&config_path, existing).unwrap();
|
|
|
|
let matrix = OptimizationMatrix {
|
|
silent: SystemProfile { name: "Silent".to_string(), pl1_watts: 10.0, pl2_watts: 12.0, fan_curve: vec![] },
|
|
balanced: SystemProfile {
|
|
name: "Balanced".to_string(),
|
|
pl1_watts: 20.0,
|
|
pl2_watts: 25.0,
|
|
fan_curve: vec![
|
|
FanCurvePoint { temp_on: 70.0, temp_off: 60.0, pwm_percent: 50 }
|
|
]
|
|
},
|
|
performance: SystemProfile { name: "Perf".to_string(), pl1_watts: 30.0, pl2_watts: 35.0, fan_curve: vec![] },
|
|
thermal_resistance_kw: 1.5,
|
|
ambient_temp: 25.0,
|
|
};
|
|
|
|
ServiceIntegrator::generate_i8kmon_config(&matrix, &config_path, Some(&config_path)).unwrap();
|
|
|
|
let result = fs::read_to_string(&config_path).unwrap();
|
|
|
|
assert!(result.contains("set config(gen_shadow) 1"));
|
|
assert!(result.contains("set config(daemon) 1"));
|
|
assert!(result.contains("set config(0) {1 1 70 -}")); // New config
|
|
assert!(!result.contains("set config(0) {0 0 60 50}")); // Old config should be gone
|
|
}
|