from __future__ import annotations import unittest from src.youtube_runtime import normalize_youtube_video_save_type, resolve_live_video_encoder class YoutubeRuntimeTests(unittest.TestCase): def test_youtube_process_defaults_ts_setting_to_push_mode(self) -> None: self.assertEqual(normalize_youtube_video_save_type("ts", "youtube"), "YOUTUBE") self.assertEqual(normalize_youtube_video_save_type("", "youtube2__lane1"), "YOUTUBE") def test_explicit_local_record_format_is_preserved(self) -> None: self.assertEqual(normalize_youtube_video_save_type("mp4", "youtube"), "MP4") self.assertEqual(normalize_youtube_video_save_type("mkv", "douyin_youtube"), "MKV") def test_non_youtube_process_falls_back_to_ts(self) -> None: self.assertEqual(normalize_youtube_video_save_type("ts", "tiktok"), "TS") self.assertEqual(normalize_youtube_video_save_type("unknown", "tiktok"), "TS") def test_arm_falls_back_from_vaapi_to_v4l2m2m(self) -> None: enc, note = resolve_live_video_encoder( "h264_vaapi", "h264_v4l2m2m\nh264_vaapi\n", "aarch64", has_mpp_service=False, has_render_node=True, has_v4l2_device=True, ) self.assertEqual(enc, "h264_v4l2m2m") self.assertIn("fallback", note) def test_arm_auto_selects_v4l2m2m_when_env_missing(self) -> None: enc, note = resolve_live_video_encoder( "", "h264_v4l2m2m\n", "aarch64", has_mpp_service=False, has_render_node=False, has_v4l2_device=True, ) self.assertEqual(enc, "h264_v4l2m2m") self.assertEqual(note, "") def test_x86_requires_render_node_for_vaapi(self) -> None: enc, note = resolve_live_video_encoder( "h264_vaapi", "h264_vaapi\n", "x86_64", has_mpp_service=False, has_render_node=False, ) self.assertEqual(enc, "") self.assertIn("renderD", note) def test_arm_rejects_v4l2m2m_without_video_nodes(self) -> None: enc, note = resolve_live_video_encoder( "h264_v4l2m2m", "h264_v4l2m2m\n", "aarch64", has_mpp_service=False, has_render_node=False, has_v4l2_device=False, ) self.assertEqual(enc, "") self.assertIn("/dev/video", note) if __name__ == "__main__": unittest.main()