- Add ffmpeg to Dockerfile.app for container HLS support - Configure yt-dlp with --downloader ffmpeg --hls-use-mpegts - Add startup health check warns if ffmpeg missing - Update DEVELOPMENT.md with ffmpeg prerequisites and troubleshooting - Add tests for ffmpeg HLS options and health check
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
"""Unit tests for ffmpeg health check in fastapi_app.py."""
|
|
|
|
import asyncio
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
|
|
class TestFfmpegHealthCheck:
|
|
"""Test ffmpeg health check warns when not in PATH."""
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_ffmpeg_missing_warns(self):
|
|
"""Should log warning when ffmpeg not found in PATH."""
|
|
with patch("shutil.which", return_value=None):
|
|
with patch("src.server.fastapi_app.setup_logging") as mock_log:
|
|
mock_logger = MagicMock()
|
|
mock_log.return_value = mock_logger
|
|
|
|
from src.server.fastapi_app import lifespan
|
|
app = MagicMock()
|
|
|
|
with pytest.raises(StopIteration):
|
|
async with lifespan(app):
|
|
pass
|
|
|
|
# Should have logged a warning about ffmpeg
|
|
warning_calls = [
|
|
c for c in mock_logger.warning.call_args_list
|
|
if "ffmpeg" in str(c)
|
|
]
|
|
assert len(warning_calls) >= 1
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_ffmpeg_present_no_warning(self):
|
|
"""Should not log warning when ffmpeg is found."""
|
|
with patch("shutil.which", return_value="/usr/bin/ffmpeg"):
|
|
with patch("src.server.fastapi_app.setup_logging") as mock_log:
|
|
mock_logger = MagicMock()
|
|
mock_log.return_value = mock_logger
|
|
|
|
from src.server.fastapi_app import lifespan
|
|
app = MagicMock()
|
|
|
|
with pytest.raises(StopIteration):
|
|
async with lifespan(app):
|
|
pass
|
|
|
|
# Should NOT have logged a warning about ffmpeg
|
|
warning_calls = [
|
|
c for c in mock_logger.warning.call_args_list
|
|
if "ffmpeg" in str(c)
|
|
]
|
|
assert len(warning_calls) == 0 |