|
|
|
@ -38,8 +38,6 @@ class TestFwFingerprint(unittest.TestCase): |
|
|
|
|
for _ in range(200): |
|
|
|
|
fw = [] |
|
|
|
|
for ecu, fw_versions in ecus.items(): |
|
|
|
|
if not len(fw_versions): |
|
|
|
|
raise unittest.SkipTest("Car model has no FW versions") |
|
|
|
|
ecu_name, addr, sub_addr = ecu |
|
|
|
|
fw.append({"ecu": ecu_name, "fwVersion": random.choice(fw_versions), 'brand': brand, |
|
|
|
|
"address": addr, "subAddress": 0 if sub_addr is None else sub_addr}) |
|
|
|
@ -50,7 +48,7 @@ class TestFwFingerprint(unittest.TestCase): |
|
|
|
|
@parameterized.expand([(b, c, e[c]) for b, e in VERSIONS.items() for c in e]) |
|
|
|
|
def test_fuzzy_match_ecu_count(self, brand, car_model, ecus): |
|
|
|
|
# Asserts that fuzzy matching does not count matching FW, but ECU address keys |
|
|
|
|
valid_ecus = [e for e in ecus if e[0] not in FUZZY_EXCLUDE_ECUS and len(ecus[e])] |
|
|
|
|
valid_ecus = [e for e in ecus if e[0] not in FUZZY_EXCLUDE_ECUS] |
|
|
|
|
if not len(valid_ecus): |
|
|
|
|
raise unittest.SkipTest("Car model has no compatible ECUs for fuzzy matching") |
|
|
|
|
|
|
|
|
@ -67,18 +65,19 @@ class TestFwFingerprint(unittest.TestCase): |
|
|
|
|
# Assert no match if there are not enough unique ECUs |
|
|
|
|
unique_ecus = {(f['address'], f['subAddress']) for f in fw} |
|
|
|
|
if len(unique_ecus) < 2: |
|
|
|
|
self.assertEqual(len(matches), 0) |
|
|
|
|
self.assertEqual(len(matches), 0, car_model) |
|
|
|
|
# There won't always be a match due to shared FW, but if there is it should be correct |
|
|
|
|
elif len(matches): |
|
|
|
|
self.assertFingerprints(matches, car_model) |
|
|
|
|
|
|
|
|
|
def test_no_duplicate_fw_versions(self): |
|
|
|
|
def test_fw_version_lists(self): |
|
|
|
|
for car_model, ecus in FW_VERSIONS.items(): |
|
|
|
|
with self.subTest(car_model=car_model): |
|
|
|
|
for ecu, ecu_fw in ecus.items(): |
|
|
|
|
with self.subTest(ecu): |
|
|
|
|
duplicates = {fw for fw in ecu_fw if ecu_fw.count(fw) > 1} |
|
|
|
|
self.assertFalse(len(duplicates), f"{car_model}: Duplicate FW versions: Ecu.{ECU_NAME[ecu[0]]}, {duplicates}") |
|
|
|
|
self.assertFalse(len(duplicates), f'{car_model}: Duplicate FW versions: Ecu.{ECU_NAME[ecu[0]]}, {duplicates}') |
|
|
|
|
self.assertGreater(len(ecu_fw), 0, f'{car_model}: No FW versions: Ecu.{ECU_NAME[ecu[0]]}') |
|
|
|
|
|
|
|
|
|
def test_all_addrs_map_to_one_ecu(self): |
|
|
|
|
for brand, cars in VERSIONS.items(): |
|
|
|
|