|
|
|
@ -2,28 +2,31 @@ |
|
|
|
|
import unittest |
|
|
|
|
|
|
|
|
|
from cereal import car |
|
|
|
|
from selfdrive.car.car_helpers import get_interface_attr |
|
|
|
|
from selfdrive.car.fw_versions import FW_QUERY_CONFIGS |
|
|
|
|
from selfdrive.car.hyundai.values import CANFD_CAR |
|
|
|
|
from selfdrive.car.hyundai.values import CANFD_CAR, FW_VERSIONS, FW_QUERY_CONFIG |
|
|
|
|
|
|
|
|
|
Ecu = car.CarParams.Ecu |
|
|
|
|
|
|
|
|
|
ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} |
|
|
|
|
VERSIONS = get_interface_attr("FW_VERSIONS", ignore_none=True) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestHyundaiFingerprint(unittest.TestCase): |
|
|
|
|
def test_auxiliary_request_ecu_whitelist(self): |
|
|
|
|
# Asserts only auxiliary Ecus can exist in database for CAN-FD cars |
|
|
|
|
config = FW_QUERY_CONFIGS['hyundai'] |
|
|
|
|
whitelisted_ecus = {ecu for r in config.requests for ecu in r.whitelist_ecus if r.bus > 3} |
|
|
|
|
whitelisted_ecus = {ecu for r in FW_QUERY_CONFIG.requests for ecu in r.whitelist_ecus if r.bus > 3} |
|
|
|
|
|
|
|
|
|
for car_model in CANFD_CAR: |
|
|
|
|
ecus = {fw[0] for fw in VERSIONS['hyundai'][car_model].keys()} |
|
|
|
|
ecus = {fw[0] for fw in FW_VERSIONS[car_model].keys()} |
|
|
|
|
ecus_not_in_whitelist = ecus - whitelisted_ecus |
|
|
|
|
ecu_strings = ", ".join([f'Ecu.{ECU_NAME[ecu]}' for ecu in ecus_not_in_whitelist]) |
|
|
|
|
self.assertEqual(len(ecus_not_in_whitelist), 0, f'{car_model}: Car model has ECUs not in auxiliary request whitelists: {ecu_strings}') |
|
|
|
|
|
|
|
|
|
def test_certain_ecus_available(self): |
|
|
|
|
# Asserts certain ecu keys essential for fuzzy fingerprinting are available on all platforms |
|
|
|
|
essential_ecus = [(Ecu.fwdCamera, 0x7c4, None), (Ecu.fwdRadar, 0x7d0, None)] |
|
|
|
|
|
|
|
|
|
for car, ecus in FW_VERSIONS.items(): |
|
|
|
|
for essential_ecu in essential_ecus: |
|
|
|
|
self.assertIn(essential_ecu, ecus) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
unittest.main() |
|
|
|
|