| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -9,6 +9,7 @@ import cereal.messaging as messaging | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from cereal import car | 
					 | 
					 | 
					 | 
					from cereal import car | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from common.basedir import PARAMS | 
					 | 
					 | 
					 | 
					from common.basedir import PARAMS | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from common.params import Params | 
					 | 
					 | 
					 | 
					from common.params import Params | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from common.spinner import Spinner | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from panda import Panda | 
					 | 
					 | 
					 | 
					from panda import Panda | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from selfdrive.boardd.boardd import can_list_to_can_capnp | 
					 | 
					 | 
					 | 
					from selfdrive.boardd.boardd import can_list_to_can_capnp | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from selfdrive.car import make_can_msg | 
					 | 
					 | 
					 | 
					from selfdrive.car import make_can_msg | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -33,7 +34,9 @@ os.environ['PARAMS_PATH'] = PARAMS | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@with_processes(['boardd']) | 
					 | 
					 | 
					 | 
					@with_processes(['boardd']) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def test_boardd_loopback(): | 
					 | 
					 | 
					 | 
					def test_boardd_loopback(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # wait for boardd to init | 
					 | 
					 | 
					 | 
					  # wait for boardd to init | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  spinner = Spinner() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  time.sleep(2) | 
					 | 
					 | 
					 | 
					  time.sleep(2) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # boardd blocks on CarVin and CarParams | 
					 | 
					 | 
					 | 
					  # boardd blocks on CarVin and CarParams | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -47,7 +50,10 @@ def test_boardd_loopback(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  time.sleep(1) | 
					 | 
					 | 
					 | 
					  time.sleep(1) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for i in range(1000): | 
					 | 
					 | 
					 | 
					  n = 1000 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  for i in range(n): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    spinner.update(f"boardd loopback {i}/{n}") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    sent_msgs = defaultdict(set) | 
					 | 
					 | 
					 | 
					    sent_msgs = defaultdict(set) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for _ in range(random.randrange(10)): | 
					 | 
					 | 
					 | 
					    for _ in range(random.randrange(10)): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      to_send = [] | 
					 | 
					 | 
					 | 
					      to_send = [] | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -73,3 +79,5 @@ def test_boardd_loopback(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # if a set isn't empty, messages got dropped | 
					 | 
					 | 
					 | 
					    # if a set isn't empty, messages got dropped | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for bus in range(3): | 
					 | 
					 | 
					 | 
					    for bus in range(3): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      assert not len(sent_msgs[bus]), f"loop {i}: bus {bus} missing {len(sent_msgs[bus])} messages" | 
					 | 
					 | 
					 | 
					      assert not len(sent_msgs[bus]), f"loop {i}: bus {bus} missing {len(sent_msgs[bus])} messages" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  spinner.close() | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
  |