Compare commits

...

3 Commits

Author SHA1 Message Date
Shane Smiskol a4d572ed88 remove
remove
2022-03-18 22:41:50 -07:00
Shane Smiskol 7650397803 clean up a bit
clean up a bit

clean up a bit
2022-03-18 22:36:28 -07:00
Shane Smiskol 31e5ba4ef9 run test_models on route 2022-03-18 22:26:09 -07:00
2 changed files with 38 additions and 7 deletions

View File

@ -22,7 +22,7 @@ non_tested_cars = [
HYUNDAI.KIA_OPTIMA_H, HYUNDAI.KIA_OPTIMA_H,
] ]
TestRoute = namedtuple('TestRoute', ['route', 'car_fingerprint']) TestRoute = namedtuple('TestRoute', ['route', 'car_model', 'ci'], defaults=[True])
routes = [ routes = [
TestRoute("0c94aa1e1296d7c6|2021-05-05--19-48-37", CHRYSLER.JEEP_CHEROKEE), TestRoute("0c94aa1e1296d7c6|2021-05-05--19-48-37", CHRYSLER.JEEP_CHEROKEE),

View File

@ -1,11 +1,11 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# pylint: disable=E1101 # pylint: disable=E1101
import argparse
import os import os
import importlib import importlib
import unittest import unittest
from collections import defaultdict, Counter from collections import defaultdict, Counter
from typing import List, Optional, Tuple from typing import List, Optional, Tuple
from parameterized import parameterized_class
from cereal import log, car from cereal import log, car
from common.realtime import DT_CTRL from common.realtime import DT_CTRL
@ -16,9 +16,10 @@ from selfdrive.car.gm.values import CAR as GM
from selfdrive.car.honda.values import CAR as HONDA, HONDA_BOSCH from selfdrive.car.honda.values import CAR as HONDA, HONDA_BOSCH
from selfdrive.car.hyundai.values import CAR as HYUNDAI from selfdrive.car.hyundai.values import CAR as HYUNDAI
from selfdrive.car.toyota.values import CAR as TOYOTA from selfdrive.car.toyota.values import CAR as TOYOTA
from selfdrive.car.tests.routes import routes, non_tested_cars from selfdrive.car.tests.routes import routes, non_tested_cars, TestRoute
from selfdrive.test.openpilotci import get_url from selfdrive.test.openpilotci import get_url
from tools.lib.logreader import LogReader from tools.lib.logreader import LogReader
from tools.lib.route import Route
from panda.tests.safety import libpandasafety_py from panda.tests.safety import libpandasafety_py
from panda.tests.safety.common import package_can_msg from panda.tests.safety.common import package_can_msg
@ -36,7 +37,7 @@ ignore_addr_checks_valid = [
# build list of test cases # build list of test cases
routes_by_car = defaultdict(set) routes_by_car = defaultdict(set)
for r in routes: for r in routes:
routes_by_car[r.car_fingerprint].add(r.route) routes_by_car[r.car_model].add(r.route)
test_cases: List[Tuple[str, Optional[str]]] = [] test_cases: List[Tuple[str, Optional[str]]] = []
for i, c in enumerate(sorted(all_known_cars())): for i, c in enumerate(sorted(all_known_cars())):
@ -44,7 +45,6 @@ for i, c in enumerate(sorted(all_known_cars())):
test_cases.extend((c, r) for r in routes_by_car.get(c, (None, ))) test_cases.extend((c, r) for r in routes_by_car.get(c, (None, )))
@parameterized_class(('car_model', 'route'), test_cases)
class TestCarModel(unittest.TestCase): class TestCarModel(unittest.TestCase):
@classmethod @classmethod
@ -58,7 +58,10 @@ class TestCarModel(unittest.TestCase):
disable_radar = False disable_radar = False
for seg in (2, 1, 0): for seg in (2, 1, 0):
try: try:
if cls.ci:
lr = LogReader(get_url(cls.route, seg)) lr = LogReader(get_url(cls.route, seg))
else:
lr = LogReader(Route(cls.route).log_paths()[seg])
except Exception: except Exception:
continue continue
@ -249,5 +252,33 @@ class TestCarModel(unittest.TestCase):
failed_checks = {k: v for k, v in checks.items() if v > 0} failed_checks = {k: v for k, v in checks.items() if v > 0}
self.assertFalse(len(failed_checks), f"panda safety doesn't agree with openpilot: {failed_checks}") self.assertFalse(len(failed_checks), f"panda safety doesn't agree with openpilot: {failed_checks}")
def load_tests(_routes):
# TODO: see if there's a cleaner way to do this
test_cases = unittest.TestSuite()
for test_route in _routes:
test = TestCarModel
for field in test_route._fields:
setattr(test, field, getattr(test_route, field))
# discover tests
test_cases.addTest(unittest.TestLoader().loadTestsFromTestCase(test))
return test_cases
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() parser = argparse.ArgumentParser()
parser.add_argument("--route", help="Specify route to run tests on")
parser.add_argument("--car_model", help="Specify car model for test route")
args = parser.parse_args()
# Run on user-specified route
if args.route is not None:
# TODO: do we want to require specifying car model?
assert args.car_model is not None, "Car model needed for tests"
test_route = TestRoute(args.route, args.car_model, ci=False)
test_cases = load_tests([test_route])
else:
test_cases = load_tests(routes)
unittest.TextTestRunner().run(test_cases)