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.

75 lines
2.5 KiB

import random
from openpilot.selfdrive.selfdrived.events import Alert, EmptyAlert, EVENTS
from openpilot.selfdrive.selfdrived.alertmanager import AlertManager
class TestAlertManager:
def test_duration(self):
"""
Enforce that an alert lasts for max(alert duration, duration the alert is added)
"""
for duration in range(1, 100):
print('duration', duration)
1 year ago
duration = 5
alert = None
while not isinstance(alert, Alert):
event = random.choice([e for e in EVENTS.values() if len(e)])
alert = random.choice(list(event.values()))
alert.duration = duration
1 year ago
# check one case:
# - if alert is re-added to AM before it ends the duration is extended
1 year ago
# if duration > 1:
# AM = AlertManager()
# show_duration = duration * 2
# for frame in range(duration * 2 + 10):
# print(frame)
# if frame == 0:
# AM.add_many(frame, [alert, ])
# print('added!')
#
# if frame == duration:
# # add alert one frame before it ends
# assert AM.current_alert == alert
# AM.add_many(frame, [alert, ])
# print('added!')
# AM.process_alerts(frame, set())
# print('alert', AM.current_alert)
#
# shown = AM.current_alert != EmptyAlert
# should_show = frame <= show_duration
# print('shown', shown, 'should_show', should_show)
# print()
# assert shown == should_show, f"{frame=} {duration=}"
# break
# check two cases:
# - alert is added to AM for <= the alert's duration
# - alert is added to AM for > alert's duration
for greater in (True, False):
print('greater', greater)
if greater:
add_duration = duration + random.randint(1, 10)
else:
add_duration = random.randint(1, duration)
show_duration = max(duration, add_duration)
print('add_duration', add_duration, 'show_duration', show_duration)
AM = AlertManager()
1 year ago
for frame in range(duration+10):
print('frame', frame)
if frame < add_duration:
print('added!')
AM.add_many(frame, [alert, ])
1 year ago
AM.process_alerts(frame, set())
1 year ago
print(AM.current_alert)
shown = AM.current_alert != EmptyAlert
should_show = frame <= show_duration
print('shown', shown, 'should_show', should_show)
1 year ago
assert shown == should_show, f"{frame=} {add_duration=} {duration=}"
print()