diff --git a/server/src/video_support.rs b/server/src/video_support.rs index 53b3bf2..3d36e41 100644 --- a/server/src/video_support.rs +++ b/server/src/video_support.rs @@ -342,7 +342,9 @@ mod tests { use super::{ SOFTWARE_VIDEO_FALLBACK_ENV, adjust_effective_fps, contains_hevc_irap, contains_idr, default_eye_fps, env_u32, env_usize, is_hardware_h264_decoder, is_hardware_hevc_decoder, - next_local_pts, reserve_local_pts, should_send_frame, software_video_fallback_allowed, + next_local_pts, pick_h264_decoder, pick_hevc_decoder, require_h264_decoder, + require_hevc_decoder, reserve_local_pts, should_send_frame, + software_video_fallback_allowed, }; use serial_test::serial; use std::sync::atomic::AtomicU64; @@ -467,6 +469,38 @@ mod tests { assert!(!is_hardware_hevc_decoder("libde265dec")); } + #[test] + #[serial] + fn explicit_bad_decoder_overrides_fail_loudly_without_registry_assumptions() { + gstreamer::init().expect("initialize gstreamer registry for decoder lookup"); + + with_var( + "LESAVKA_H264_DECODER", + Some("definitely-not-a-decoder"), + || { + let err = require_h264_decoder().expect_err("bogus H.264 decoder should fail"); + assert!( + err.to_string().contains("not buildable"), + "unexpected H.264 override error: {err:#}" + ); + assert_eq!(pick_h264_decoder(), "missing-hardware-h264dec"); + }, + ); + + with_var( + "LESAVKA_HEVC_DECODER", + Some("definitely-not-a-decoder"), + || { + let err = require_hevc_decoder().expect_err("bogus HEVC decoder should fail"); + assert!( + err.to_string().contains("not buildable"), + "unexpected HEVC override error: {err:#}" + ); + assert_eq!(pick_hevc_decoder(), "missing-hardware-hevcdec"); + }, + ); + } + #[test] fn adjust_effective_fps_keeps_current_rate_when_no_samples() { assert_eq!(adjust_effective_fps(18, 12, 25, 0, 0), 18);