updated safety measurements and benchmarking behavior for 9380
This commit is contained in:
@@ -1,35 +1,75 @@
|
||||
#[path = "../src/engine/formatters/throttled.rs"]
|
||||
mod throttled;
|
||||
|
||||
use throttled::{ThrottledTranslator, ThrottledConfig};
|
||||
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_formatter_non_destructive() {
|
||||
let fixture_path = "tests/fixtures/throttled.conf";
|
||||
let existing_content = fs::read_to_string(fixture_path).expect("Failed to read fixture");
|
||||
|
||||
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: 25.0,
|
||||
pl2_limit: 35.0,
|
||||
trip_temp: 90.0,
|
||||
pl1_limit: 22.0,
|
||||
pl2_limit: 28.0,
|
||||
trip_temp: 95.0,
|
||||
};
|
||||
|
||||
let merged = ThrottledTranslator::merge_conf(&existing_content, &config);
|
||||
let merged = ThrottledTranslator::merge_conf(existing, &config);
|
||||
|
||||
// Assert updates
|
||||
assert!(merged.contains("PL1_Tdp_W: 25"));
|
||||
assert!(merged.contains("PL2_Tdp_W: 35"));
|
||||
assert!(merged.contains("Trip_Temp_C: 90"));
|
||||
|
||||
// Assert preservation
|
||||
assert!(merged.contains("[UNDERVOLT]"));
|
||||
assert!(merged.contains("CORE: -100"));
|
||||
assert!(merged.contains("GPU: -50"));
|
||||
assert!(merged.contains("# Important: Preserving undervolt offsets is critical!"));
|
||||
assert!(merged.contains("Update_Interval_ms: 3000"));
|
||||
|
||||
// Check that we didn't lose the [GENERAL] section
|
||||
assert!(merged.contains("[GENERAL]"));
|
||||
assert!(merged.contains("# This is a complex test fixture"));
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user