open source driving agent
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.
 
 
 
 
 
 

106 lines
2.9 KiB

#!/usr/bin/env python3
import os
import unittest
import requests
import selfdrive.messaging as messaging
from selfdrive.can.parser import CANParser as CANParserNew
from selfdrive.can.tests.parser_old import CANParser as CANParserOld
from selfdrive.car.honda.carstate import get_can_signals
from selfdrive.car.honda.interface import CarInterface
from selfdrive.car.honda.values import CAR, DBC
from selfdrive.services import service_list
from tools.lib.logreader import LogReader
BASE_URL = "https://commadataci.blob.core.windows.net/openpilotci/"
DT = int(0.01 * 1e9) # ns
def dict_keys_differ(dict1, dict2):
keys1 = set(dict1.keys())
keys2 = set(dict2.keys())
if keys1 != keys2:
return True
for k in keys1:
keys1 = set(dict1[k].keys())
keys2 = set(dict2[k].keys())
if keys1 != keys2:
return True
return False
def dicts_vals_differ(dict1, dict2):
for k_outer in dict1.keys():
for k_inner in dict1[k_outer].keys():
if dict1[k_outer][k_inner] != dict2[k_outer][k_inner]:
return True
return False
def run_route(route):
can = messaging.pub_sock(service_list['can'].port)
CP = CarInterface.get_params(CAR.CIVIC)
signals, checks = get_can_signals(CP)
parser_old = CANParserOld(DBC[CP.carFingerprint]['pt'], signals, checks, 0, timeout=-1, tcp_addr="127.0.0.1")
parser_new = CANParserNew(DBC[CP.carFingerprint]['pt'], signals, checks, 0, timeout=-1, tcp_addr="127.0.0.1")
parser_string = CANParserNew(DBC[CP.carFingerprint]['pt'], signals, checks, 0, timeout=-1)
if dict_keys_differ(parser_old.vl, parser_new.vl):
return False
lr = LogReader(route + ".bz2")
route_ok = True
for msg in lr:
if msg.which() == 'can':
t = msg.logMonoTime
msg_bytes = msg.as_builder().to_bytes()
can.send(msg_bytes)
_, updated_old = parser_old.update(t, True)
_, updated_new = parser_new.update(t, True)
updated_string = parser_string.update_string(msg_bytes)
if updated_old != updated_new:
route_ok = False
print(t, "Diff in seen")
if updated_new != updated_string:
route_ok = False
print(t, "Diff in seen string")
if dicts_vals_differ(parser_old.vl, parser_new.vl):
print(t, "Diff in dict")
route_ok = False
if dicts_vals_differ(parser_new.vl, parser_string.vl):
print(t, "Diff in dict string")
route_ok = False
return route_ok
class TestCanParser(unittest.TestCase):
def setUp(self):
self.routes = {
CAR.CIVIC: "b0c9d2329ad1606b|2019-05-30--20-23-57"
}
for route in self.routes.values():
route_filename = route + ".bz2"
if not os.path.isfile(route_filename):
with open(route + ".bz2", "wb") as f:
f.write(requests.get(BASE_URL + route_filename).content)
def test_parser_civic(self):
self.assertTrue(run_route(self.routes[CAR.CIVIC]))
if __name__ == "__main__":
unittest.main()