mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-24 01:43:54 +08:00
* new OnroadEvent struct * and migrate python * more forgotten * re-index new OnroadEvent struct * fix! * more missing * migrate onroadEvents migrate onroadEvents * migrate dm events * hacks to get proc replay to say succeeded * Revert "hacks to get proc replay to say succeeded" This reverts commit 0bb8803e5755d606ae9f09da5395d9f50678c7c7. * update refs
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import os
|
|
import pytest
|
|
import time
|
|
import subprocess
|
|
|
|
from cereal import log
|
|
import cereal.messaging as messaging
|
|
from openpilot.common.basedir import BASEDIR
|
|
from openpilot.common.timeout import Timeout
|
|
from openpilot.selfdrive.test.helpers import set_params_enabled
|
|
|
|
EventName = log.OnroadEvent.EventName
|
|
|
|
|
|
@pytest.mark.tici
|
|
def test_time_to_onroad():
|
|
# launch
|
|
set_params_enabled()
|
|
manager_path = os.path.join(BASEDIR, "system/manager/manager.py")
|
|
proc = subprocess.Popen(["python", manager_path])
|
|
|
|
start_time = time.monotonic()
|
|
sm = messaging.SubMaster(['selfdriveState', 'deviceState', 'onroadEvents'])
|
|
try:
|
|
# wait for onroad. timeout assumes panda is up to date
|
|
with Timeout(10, "timed out waiting to go onroad"):
|
|
while not sm['deviceState'].started:
|
|
sm.update(100)
|
|
|
|
# wait for engageability
|
|
try:
|
|
with Timeout(10, "timed out waiting for engageable"):
|
|
initialized = False
|
|
while True:
|
|
sm.update(100)
|
|
|
|
if sm.seen['onroadEvents'] and not any(EventName.selfdriveInitializing == e.name for e in sm['onroadEvents']):
|
|
initialized = True
|
|
|
|
if initialized:
|
|
sm.update(100)
|
|
assert sm['selfdriveState'].engageable, f"events: {sm['onroadEvents']}"
|
|
break
|
|
finally:
|
|
print(f"onroad events: {sm['onroadEvents']}")
|
|
print(f"engageable after {time.monotonic() - start_time:.2f}s")
|
|
|
|
# once we're enageable, must stay for the next few seconds
|
|
st = time.monotonic()
|
|
while (time.monotonic() - st) < 10.:
|
|
sm.update(100)
|
|
assert sm.all_alive(), sm.alive
|
|
assert sm['selfdriveState'].engageable, f"events: {sm['onroadEvents']}"
|
|
finally:
|
|
proc.terminate()
|
|
if proc.wait(20) is None:
|
|
proc.kill()
|