mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 13:33:42 +08:00
a531afd02a
Expose pairing readiness and coordinate adapter hand-offs with Android Auto. Show app pairings separately, support individual removal, and improve pairing controls on both comma screens. Add Galaxy companion endpoints and web asset manifests, preserve the plain camera look, and fix headless speed-limit shapes.
41 lines
2.0 KiB
Python
41 lines
2.0 KiB
Python
from unittest.mock import patch
|
|
|
|
from openpilot.starpilot.galaxy.pairing_ready import BOOT_GRACE_SECONDS, TRANSIENT, bridge_state, pairing_readiness
|
|
|
|
GOOD = {'available': True, 'powered': True, 'errorCode': None}
|
|
|
|
|
|
def ask(*, uptime=600., parked=True, state=None, bridge=('ready', 'Ready to pair')):
|
|
def snapshot():
|
|
if isinstance(state, Exception):
|
|
raise state
|
|
return GOOD if state is None else state
|
|
return pairing_readiness(parked=lambda: parked, snapshot=snapshot, bridge=lambda: bridge, uptime=lambda: uptime)
|
|
|
|
|
|
def test_ready_only_when_everything_a_phone_needs_is_up():
|
|
assert ask() == {'schema': 1, 'ready': True, 'code': 'ready', 'message': 'Ready to pair.'}
|
|
|
|
|
|
def test_each_blocker_has_its_own_code_in_the_order_a_person_would_fix_them():
|
|
assert ask(uptime=BOOT_GRACE_SECONDS - 1)['code'] == 'starting'
|
|
assert ask(parked=False)['code'] == 'park_required'
|
|
assert ask(state={'available': True, 'powered': False})['code'] == 'bluetooth_off'
|
|
assert ask(state={'available': True, 'powered': True, 'errorCode': 'adapter_unavailable'})['code'] == 'bluetooth_unavailable'
|
|
assert ask(state=OSError('gone'))['code'] == 'bluetooth_unavailable'
|
|
assert ask(state=ValueError('anything else'))['code'] == 'bluetooth_unavailable', 'never an error'
|
|
assert ask(bridge=('pending', 'Bridge startup pending')) == {
|
|
'schema': 1, 'ready': False, 'code': 'bridge_starting', 'message': 'Bridge startup pending'}
|
|
assert ask(uptime=1, parked=False)['code'] == 'starting', 'boot comes first'
|
|
|
|
|
|
def test_only_boot_and_bridge_start_are_worth_waiting_for():
|
|
assert TRANSIENT == {'starting', 'bridge_starting'}
|
|
assert ask(parked=False)['code'] not in TRANSIENT
|
|
assert ask(state={'available': True, 'powered': False})['code'] not in TRANSIENT
|
|
|
|
|
|
def test_an_unreadable_or_stubbed_bridge_module_reads_as_not_ready_instead_of_failing():
|
|
with patch.dict('sys.modules', {'openpilot.starpilot.galaxy_bluetooth.bootstrap': object()}):
|
|
assert bridge_state() == ('pending', 'Bridge startup pending')
|