Files
silver_pose/v1/tests/test_camera.py
T

50 lines
1.4 KiB
Python
Raw Normal View History

import numpy as np
from v1.camera import build_rtsp_url, probe_stream
class _FakeCapture:
def __init__(self, frames):
self._frames = list(frames) if frames is not None else None
def isOpened(self):
return self._frames is not None
def read(self):
if self._frames:
return True, self._frames.pop(0)
return False, None
def release(self):
pass
def test_build_rtsp_url_percent_encodes_special_characters_in_password():
# Example TEST-NET address and a synthetic password (never a real credential).
url = build_rtsp_url("192.0.2.10", 554, "admin", "p@ss/w:d", "102")
assert url == "rtsp://admin:p%40ss%2Fw%3Ad@192.0.2.10:554/Streaming/Channels/102"
def test_build_rtsp_url_defaults_to_main_channel():
url = build_rtsp_url("192.0.2.10", 554, "admin", "secret")
assert url.endswith("/Streaming/Channels/101")
def test_probe_stream_returns_a_frame_on_success():
frame = np.zeros((480, 640, 3), dtype=np.uint8)
result = probe_stream("rtsp://x", capture_factory=lambda _u: _FakeCapture([frame]))
assert result.ok is True
assert "640x480" in result.message
assert result.frame is not None
def test_probe_stream_reports_failure_without_raising():
result = probe_stream("rtsp://x", attempts=3, capture_factory=lambda _u: _FakeCapture(None))
assert result.ok is False
assert result.frame is None