openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.7 KiB

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()