lesavka/tests/regression/install/install_preserves_calibration_contract.rs

88 lines
3.3 KiB
Rust

// Regression contract for preserving calibration across installs.
//
// Scope: guard the shipped calibration maps and ensure the installer does not
// overwrite site calibration state during upgrades.
// Targets: `scripts/install/server.sh` and server calibration modules.
// Why: the server-to-RCT timing values are hard-won hardware facts; installer
// reruns should refresh defaults without erasing local calibration decisions.
const SERVER_INSTALL: &str = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/scripts/install/server.sh"
));
const CALIBRATION: &str = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/server/src/calibration.rs"
));
const PROFILE_OFFSETS: &str = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/server/src/calibration/profile_offsets.rs"
));
#[test]
fn installer_persists_both_mjpeg_and_hevc_factory_offset_maps() {
for marker in [
"DEFAULT_MJPEG_UPSTREAM_VIDEO_PLAYOUT_MODE_OFFSETS_US=1280x720@20=162659,1280x720@30=135090,1920x1080@20=160045,1920x1080@30=127952",
"DEFAULT_HEVC_UPSTREAM_VIDEO_PLAYOUT_MODE_OFFSETS_US=1280x720@20=173852,1280x720@30=110000,1920x1080@20=160045,1920x1080@30=127952",
"DEFAULT_HEVC_OPUS_UPSTREAM_AUDIO_PLAYOUT_MODE_OFFSETS_US=$DEFAULT_HEVC_UPSTREAM_AUDIO_PLAYOUT_MODE_OFFSETS_US",
"LESAVKA_UPSTREAM_MJPEG_VIDEO_PLAYOUT_MODE_OFFSETS_US=%s",
"LESAVKA_UPSTREAM_HEVC_VIDEO_PLAYOUT_MODE_OFFSETS_US=%s",
"LESAVKA_UPSTREAM_HEVC_OPUS_AUDIO_PLAYOUT_MODE_OFFSETS_US=%s",
"LESAVKA_UPSTREAM_VIDEO_PLAYOUT_MODE_OFFSETS_US=%s",
] {
assert!(
SERVER_INSTALL.contains(marker),
"server installer should preserve calibration map marker {marker}"
);
}
}
#[test]
fn explicit_install_offsets_win_over_stale_ambient_runtime_values() {
for marker in [
"LESAVKA_INSTALL_UPSTREAM_AUDIO_PLAYOUT_OFFSET_US",
"LESAVKA_INSTALL_UPSTREAM_VIDEO_PLAYOUT_OFFSET_US",
"migrating stale upstream audio playout offset",
"migrating stale upstream video playout offset",
"Use LESAVKA_INSTALL_UPSTREAM_VIDEO_PLAYOUT_OFFSET_US to intentionally keep an older value.",
] {
assert!(
SERVER_INSTALL.contains(marker),
"installer should preserve stale-baseline migration marker {marker}"
);
}
}
#[test]
fn installer_does_not_delete_or_rewrite_site_calibration_file() {
assert!(
!SERVER_INSTALL.contains("calibration.toml"),
"installer should not write the persisted site calibration file directly"
);
assert!(
!SERVER_INSTALL.contains("/var/lib/lesavka/calibration"),
"installer should leave calibration storage to the runtime store"
);
assert!(CALIBRATION.contains("/var/lib/lesavka/calibration.toml"));
assert!(CALIBRATION.contains("persist_snapshot"));
}
#[test]
fn runtime_calibration_selects_profile_from_ingress_codec() {
for marker in [
"LESAVKA_CALIBRATION_PROFILE",
"LESAVKA_UPLINK_AUDIO_CODEC",
"format!(\"{camera_profile}+{audio_profile}\")",
"LESAVKA_CALIBRATION_AUDIO_CODEC",
"LESAVKA_CAM_CODEC",
"mjpeg",
"hevc",
"factory_video_mode_offsets_us",
] {
assert!(
PROFILE_OFFSETS.contains(marker),
"profile offset code should preserve marker {marker}"
);
}
}