80 lines
2.6 KiB
Rust
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}"
|
|
);
|
|
}
|
|
}
|