Admit onboard camera preview only after its acquisition producer is ready
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user