Files
StarPilot/openpilot/starpilot/ui/tests/test_big_camera_pending_switch.py
T
2026-10-17 11:12:51 -05:00

56 lines
2.3 KiB
Python

"""An obsolete pending Big camera switch must never paint its first frame."""
from types import SimpleNamespace as NS
from unittest.mock import Mock, patch
import pytest
from openpilot.selfdrive.ui.onroad import augmented_road_view as road
from openpilot.selfdrive.ui.onroad import cameraview
class ViewWithoutResources(road.AugmentedRoadView):
def close(self):
pass
@pytest.mark.parametrize('experimental,speed', [(False, 1.), (True, road.ROAD_CAM_MIN_SPEED + 1.)])
def test_big_cancelled_wide_switch_never_consumes_unwanted_target_frame(experimental, speed):
view = ViewWithoutResources.__new__(ViewWithoutResources)
view._name = 'camerad'
view._stream_type = road.NARROW_ROAD_CAM
view._switching = False
view._target_client = view._target_stream_type = None
view.available_streams = [road.NARROW_ROAD_CAM, road.WIDE_CAM]
current_frame = NS(idx=0)
view.frame = current_frame
view.client = Mock()
view.client.is_connected.return_value = True
view.client.recv.return_value = None
pending = Mock()
pending.recv.side_effect = AssertionError('Obsolete wide stream must not be consumed')
sm = {'selfdriveState': NS(experimentalMode=True), 'carState': NS(vEgo=1.)}
with patch.object(cameraview, 'VisionIpcClient', return_value=pending):
view._switch_stream_if_needed(sm)
assert view._switching and view._target_stream_type == road.WIDE_CAM
# Policy returns to the already displayed narrow stream before wide arrives.
sm['selfdriveState'].experimentalMode = experimental
sm['carState'].vEgo = speed
view._switch_stream_if_needed(sm)
assert not view._switching and view._target_client is None
assert view._target_stream_type is None
assert view._poll_camera()
assert view.frame is current_frame and view.stream_type == road.NARROW_ROAD_CAM
pending.recv.assert_not_called()
view.client.recv.assert_called_once_with(timeout_ms=0)
def test_big_keeps_still_requested_pending_switch():
view = ViewWithoutResources.__new__(ViewWithoutResources)
view._stream_type = road.NARROW_ROAD_CAM
pending = view._target_client = Mock()
view._target_stream_type = road.WIDE_CAM
view._switching = True
view.available_streams = [road.NARROW_ROAD_CAM, road.WIDE_CAM]
view._switch_stream_if_needed({'selfdriveState': NS(experimentalMode=True), 'carState': NS(vEgo=1.)})
assert view._target_client is pending and view._switching