Admit onboard camera preview only after its acquisition producer is ready

This commit is contained in:
DCCONSTRUCTIONS
2026-09-07 16:44:38 +03:00
parent fa8ac760a1
commit 9e03404f23
5 changed files with 65 additions and 12 deletions
+12 -6
View File
@@ -71,7 +71,8 @@ def test_native_webrtc_roundtrip_and_missing_camera_preserve_rrd(monkeypatch):
class Camera:
def snapshot(self):
return {"generation": None, "phase": "error"}
return {"generation": None, "phase": "error",
"recording": {"source_end_expected": True}}
# The old test's sub-16KB fake payload missed the actual fragmentation bug.
import numpy as np
@@ -127,10 +128,12 @@ def test_camera_waits_for_post_calibration_producer_and_delivers_metadata():
def snapshot(self):
self.calls += 1
return {"generation": None} if self.calls < 2 else {
"generation": 3, "delivery": {"media_type": "video/mp4"}}
return {"generation": 3, "delivery": {"media_type": "video/mp4"},
"recording": {"active": True, "producer_alive": self.calls >= 2,
"media_ready": self.calls >= 3, "active_epoch": 3}}
def open_delivery(self, generation):
def open_delivery(self, generation, *, require_recording=False):
assert require_recording
self.opened.append(generation)
return "lease"
@@ -182,9 +185,12 @@ def test_native_rrd_idle_does_not_close_camera_or_peer(monkeypatch):
self.released = []
def snapshot(self):
return {"generation": 1, "delivery": {"media_type": "video/mp4"}}
return {"generation": 1, "delivery": {"media_type": "video/mp4"},
"recording": {"active": True, "producer_alive": True,
"media_ready": True, "active_epoch": 1}}
def open_delivery(self, generation):
def open_delivery(self, generation, *, require_recording=False):
assert require_recording
assert generation == 1
return self.lease
+15
View File
@@ -1984,3 +1984,18 @@ def test_service_publishes_two_dynamic_camera_rows_and_stale_stop_is_safe(
)
finally:
service.close()
def test_onboard_preview_never_spawns_a_camera_producer(tmp_path, monkeypatch):
gateway = _gateway(tmp_path, monkeypatch)
try:
selected = gateway.select("sensor.camera.right", "192.168.1.20")
monkeypatch.setattr(
gateway, "_spawn_selected_producer",
lambda: pytest.fail("an onboard preview must not own camera activation"),
)
with pytest.raises(RuntimeError, match="producer is not ready"):
gateway.open_delivery(selected["generation"], require_recording=True)
assert gateway.snapshot()["recording"]["producer_alive"] is False
finally:
gateway.close()