parent
							
								
									51c3f43205
								
							
						
					
					
						commit
						5d5a2fd88f
					
				
				 3 changed files with 47 additions and 5 deletions
			
			
		@ -0,0 +1,45 @@ | 
				
			|||||||
 | 
					#!/usr/bin/env python3 | 
				
			||||||
 | 
					import random | 
				
			||||||
 | 
					import unittest | 
				
			||||||
 | 
					from collections import defaultdict | 
				
			||||||
 | 
					from parameterized import parameterized | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cereal import car | 
				
			||||||
 | 
					from selfdrive.car.car_helpers import get_interface_attr, interfaces | 
				
			||||||
 | 
					from selfdrive.car.fingerprints import FW_VERSIONS | 
				
			||||||
 | 
					from selfdrive.car.fw_versions import FW_QUERY_CONFIGS, VERSIONS, match_fw_to_car | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CarFw = car.CarParams.CarFw | 
				
			||||||
 | 
					Ecu = car.CarParams.Ecu | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestFwFingerprint(unittest.TestCase): | 
				
			||||||
 | 
					  # TODO: test multiple pandas | 
				
			||||||
 | 
					  @parameterized.expand([(1,), (2,)]) | 
				
			||||||
 | 
					  def test_fw_query_metrics(self, num_pandas): | 
				
			||||||
 | 
					    for brand, config in FW_QUERY_CONFIGS.items(): | 
				
			||||||
 | 
					      with self.subTest(brand=brand, num_pandas=num_pandas): | 
				
			||||||
 | 
					        requests = [r for r in config.requests if r.bus <= num_pandas * 4 - 1] | 
				
			||||||
 | 
					        multi_panda_requests = [r for r in config.requests if r.bus > 3] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if not len(multi_panda_requests) and num_pandas > 1: | 
				
			||||||
 | 
					          raise unittest.SkipTest("No multi-panda FW queries") | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        total_time = 0 | 
				
			||||||
 | 
					        obd_multiplexing = config.requests[0].obd_multiplexing  # only count OBD multiplexing transitions | 
				
			||||||
 | 
					        for r in requests: | 
				
			||||||
 | 
					          total_time += 0.1 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if r.obd_multiplexing != obd_multiplexing and r.bus % 4 == 1: | 
				
			||||||
 | 
					            obd_multiplexing = r.obd_multiplexing | 
				
			||||||
 | 
					            total_time += 0.1 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        total_time = round(total_time, 2) | 
				
			||||||
 | 
					        self.assertLessEqual(total_time, 1.1) | 
				
			||||||
 | 
					        print(f'{brand=}, {num_pandas=}, {len(requests)=}, total FW query time={total_time} seconds') | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__": | 
				
			||||||
 | 
					  unittest.main() | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue