@ -11,6 +11,7 @@ from common.realtime import DT_CTRL 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  selfdrive . car  import  gen_empty_fingerprint  
					 
					 
					 
					from  selfdrive . car  import  gen_empty_fingerprint  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  selfdrive . car . car_helpers  import  interfaces  
					 
					 
					 
					from  selfdrive . car . car_helpers  import  interfaces  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  selfdrive . car . fingerprints  import  all_known_cars  
					 
					 
					 
					from  selfdrive . car . fingerprints  import  all_known_cars  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					from  selfdrive . car . interfaces  import  get_interface_attr  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  selfdrive . test . fuzzy_generation  import  DrawType ,  FuzzyGenerator  
					 
					 
					 
					from  selfdrive . test . fuzzy_generation  import  DrawType ,  FuzzyGenerator  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -109,5 +110,31 @@ class TestCarInterfaces(unittest.TestCase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					       hasattr ( radar_interface ,  ' _update ' )  and  hasattr ( radar_interface ,  ' trigger_msg ' ) :   
					 
					 
					 
					       hasattr ( radar_interface ,  ' _update ' )  and  hasattr ( radar_interface ,  ' trigger_msg ' ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      radar_interface . _update ( [ radar_interface . trigger_msg ] )   
					 
					 
					 
					      radar_interface . _update ( [ radar_interface . trigger_msg ] )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  def  test_interface_attrs ( self ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    """ Asserts basic behavior of interface attribute getter """   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    num_brands  =  len ( get_interface_attr ( ' CAR ' ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . assertGreaterEqual ( num_brands ,  13 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # Should return value for all brands when not combining, even if attribute doesn't exist   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    ret  =  get_interface_attr ( ' FAKE_ATTR ' )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . assertEqual ( len ( ret ) ,  num_brands )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # Make sure we can combine dicts   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    ret  =  get_interface_attr ( ' DBC ' ,  combine_brands = True )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . assertGreaterEqual ( len ( ret ) ,  170 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # We don't support combining non-dicts   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    ret  =  get_interface_attr ( ' CAR ' ,  combine_brands = True )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . assertEqual ( len ( ret ) ,  0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # If brand has None value, it shouldn't return when ignore_none=True is specified   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    none_brands  =  { b  for  b ,  v  in  get_interface_attr ( ' FINGERPRINTS ' ) . items ( )  if  v  is  None }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . assertGreaterEqual ( len ( none_brands ) ,  1 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    ret  =  get_interface_attr ( ' FINGERPRINTS ' ,  ignore_none = True )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    none_brands_in_ret  =  none_brands . intersection ( ret )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . assertEqual ( len ( none_brands_in_ret ) ,  0 ,  f ' Brands with None values in ignore_none=True result:  { none_brands_in_ret } ' )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					if  __name__  ==  " __main__ " :  
					 
					 
					 
					if  __name__  ==  " __main__ " :  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  unittest . main ( )   
					 
					 
					 
					  unittest . main ( )