lesavka/tests/regression/install/install_preserves_codec_settings_contract.rs

80 lines
2.6 KiB
Rust

// Regression contract for preserving codec settings across upgrades.
//
// Scope: keep HEVC ingress and MJPEG UVC output defaults explicit, while still
// allowing operator-provided install overrides.
// Targets: server/client install scripts and client camera capture defaults.
// Why: Lesavka now supports both MJPEG and HEVC upstream media, and installer
// reruns must not silently revert the working profile.
const SERVER_INSTALL: &str = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/scripts/install/server.sh"
));
const CLIENT_CAMERA: &str = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/client/src/input/camera/capture_pipeline.rs"
));
#[test]
fn server_install_defaults_to_hevc_ingress_and_mjpeg_uvc_output() {
for marker in [
"INSTALL_UVC_CODEC=${LESAVKA_INSTALL_UVC_CODEC:-mjpeg}",
"INSTALL_CAM_CODEC=${LESAVKA_INSTALL_CAM_CODEC:-${LESAVKA_CAM_CODEC:-hevc}}",
"printf 'LESAVKA_CAM_CODEC=%s\\n' \"${INSTALL_CAM_CODEC}\"",
"printf 'LESAVKA_UVC_CODEC=%s\\n' \"${INSTALL_UVC_CODEC}\"",
"\"LESAVKA_UVC_CODEC=${INSTALL_UVC_CODEC}\"",
] {
assert!(
SERVER_INSTALL.contains(marker),
"server installer should preserve codec marker {marker}"
);
}
}
#[test]
fn server_install_does_not_let_ambient_uvc_codec_override_persisted_default() {
assert!(
!SERVER_INSTALL.contains("LESAVKA_UVC_CODEC=${LESAVKA_UVC_CODEC:-mjpeg}"),
"ambient runtime UVC codec should not leak into install defaults"
);
assert!(
SERVER_INSTALL.contains("LESAVKA_INSTALL_UVC_CODEC"),
"operator install override should remain available"
);
}
#[test]
fn client_camera_can_emit_hevc_or_mjpeg_from_live_capture() {
for marker in [
"LESAVKA_CAM_CODEC",
"CameraCodec::Hevc",
"CameraCodec::Mjpeg",
"choose_hevc_encoder",
"hevc_keyframe_interval",
"image/jpeg",
"video/x-h265",
] {
assert!(
CLIENT_CAMERA.contains(marker),
"client camera pipeline should preserve codec marker {marker}"
);
}
}
#[test]
fn hevc_prerequisites_are_rechecked_idempotently() {
for marker in [
"ensure_hevc_decode_support",
"pacman -Sq --needed --noconfirm",
"modprobe rpi_hevc_dec",
"/etc/modules-load.d/lesavka-hevc.conf",
"gst-inspect-1.0 v4l2slh265dec",
"gst-inspect-1.0 avdec_h265",
] {
assert!(
SERVER_INSTALL.contains(marker),
"HEVC prerequisite path should preserve marker {marker}"
);
}
}