mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-25 04:23:57 +08:00
* add pytest-asyncio
* switch common
* switch selfdrive
* switch system
* switch tools
* small fixes
* fix setUp and valgrind pytest
* switch to setup
* fix random
* switch mock
* switch test_lateral_limits
* revert test_ui
* fix poetry.lock
* add unittest to banned-api
* add inline ignores to remaining unittest imports
* revert test_models
* revert check_can_parser_performance
* one more skip
---------
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
old-commit-hash: dd9d5d4528
41 lines
1.3 KiB
Python
Executable File
41 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import random
|
|
|
|
from openpilot.selfdrive.controls.lib.events import Alert, EVENTS
|
|
from openpilot.selfdrive.controls.lib.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):
|
|
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
|
|
|
|
# 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):
|
|
if greater:
|
|
add_duration = duration + random.randint(1, 10)
|
|
else:
|
|
add_duration = random.randint(1, duration)
|
|
show_duration = max(duration, add_duration)
|
|
|
|
AM = AlertManager()
|
|
for frame in range(duration+10):
|
|
if frame < add_duration:
|
|
AM.add_many(frame, [alert, ])
|
|
current_alert = AM.process_alerts(frame, {})
|
|
|
|
shown = current_alert is not None
|
|
should_show = frame <= show_duration
|
|
assert shown == should_show, f"{frame=} {add_duration=} {duration=}"
|