mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-06 06:52:20 +02:00
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
import asyncio
|
|
import json
|
|
from pathlib import Path
|
|
import shutil
|
|
import subprocess
|
|
|
|
import pytest
|
|
|
|
from src.agent_tools import media_tools
|
|
from src.agent_tools.media_tools import InspectMediaTool
|
|
from src.tool_execution import _active_workspace
|
|
|
|
|
|
@pytest.mark.skipif(
|
|
not shutil.which("ffmpeg") or not shutil.which("ffprobe"),
|
|
reason="ffmpeg required",
|
|
)
|
|
def test_inspect_media_retries_one_transient_duration_probe_timeout(
|
|
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
):
|
|
video = tmp_path / "video.mp4"
|
|
subprocess.run(
|
|
[
|
|
"ffmpeg",
|
|
"-hide_banner",
|
|
"-loglevel",
|
|
"error",
|
|
"-f",
|
|
"lavfi",
|
|
"-i",
|
|
"testsrc2=size=320x180:rate=2:duration=1",
|
|
"-pix_fmt",
|
|
"yuv420p",
|
|
"-y",
|
|
str(video),
|
|
],
|
|
check=True,
|
|
)
|
|
|
|
original_run = media_tools._run
|
|
duration_probe_calls = 0
|
|
|
|
def flaky_run(command: list[str], timeout: int = 60):
|
|
nonlocal duration_probe_calls
|
|
if "format=duration" in command:
|
|
duration_probe_calls += 1
|
|
if duration_probe_calls == 1:
|
|
raise subprocess.TimeoutExpired(command, timeout)
|
|
return original_run(command, timeout)
|
|
|
|
monkeypatch.setattr(media_tools, "_run", flaky_run)
|
|
token = _active_workspace.set(str(tmp_path))
|
|
try:
|
|
result = asyncio.run(
|
|
InspectMediaTool().execute(
|
|
json.dumps({"path": "/workspace/video.mp4", "frames": 1}), {}
|
|
)
|
|
)
|
|
finally:
|
|
_active_workspace.reset(token)
|
|
|
|
assert result["exit_code"] == 0
|
|
assert duration_probe_calls == 2
|
|
assert len(result["images"]) == 1
|