| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -27,19 +27,17 @@ from selfdrive.car.mock.values import CAR as MOCK | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					os.environ['NOCRASH'] = '1' | 
					 | 
					 | 
					 | 
					os.environ['NOCRASH'] = '1' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def wait_for_socket(name, timeout=10.0): | 
					 | 
					 | 
					 | 
					def wait_for_sockets(socks, timeout=10.0): | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  socket = messaging.sub_sock(name) | 
					 | 
					 | 
					 | 
					  sm = messaging.SubMaster(socks) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  cur_time = time.time() | 
					 | 
					 | 
					 | 
					  t = time.time() | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  r = None | 
					 | 
					 | 
					 | 
					  recvd = [] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  while time.time() - cur_time < timeout: | 
					 | 
					 | 
					 | 
					  while time.time() - t < timeout and len(recvd) < len(socks): | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("waiting for %s" % name) | 
					 | 
					 | 
					 | 
					    sm.update() | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    r = socket.receive(non_blocking=True) | 
					 | 
					 | 
					 | 
					    for s in socks: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if r is not None: | 
					 | 
					 | 
					 | 
					      if s not in recvd and sm.updated[s]: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      break | 
					 | 
					 | 
					 | 
					        recvd.append(s) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    time.sleep(0.5) | 
					 | 
					 | 
					 | 
					  return recvd | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return r | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def get_route_logs(route_name): | 
					 | 
					 | 
					 | 
					def get_route_logs(route_name): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for log_f in ["rlog.bz2", "fcamera.hevc"]: | 
					 | 
					 | 
					 | 
					  for log_f in ["rlog.bz2", "fcamera.hevc"]: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -449,12 +447,19 @@ non_public_routes = [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					if __name__ == "__main__": | 
					 | 
					 | 
					 | 
					if __name__ == "__main__": | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  tested_procs = ["controlsd", "radard", "plannerd"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  tested_socks = ["radarState", "controlsState", "carState", "plan"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # TODO: add routes for untested cars and fail test if we have an untested car | 
					 | 
					 | 
					 | 
					  # TODO: add routes for untested cars and fail test if we have an untested car | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  tested_cars = [keys["carFingerprint"] for route, keys in routes.items()] | 
					 | 
					 | 
					 | 
					  tested_cars = [keys["carFingerprint"] for route, keys in routes.items()] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for car_model in all_known_cars(): | 
					 | 
					 | 
					 | 
					  for car_model in all_known_cars(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if car_model not in tested_cars: | 
					 | 
					 | 
					 | 
					    if car_model not in tested_cars: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      print("***** WARNING: %s not tested *****" % car_model) | 
					 | 
					 | 
					 | 
					      print("***** WARNING: %s not tested *****" % car_model) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  print("Preparing processes") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  for p in tested_procs: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    manager.prepare_managed_process(p) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  results = {} | 
					 | 
					 | 
					 | 
					  results = {} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for route, checks in routes.items(): | 
					 | 
					 | 
					 | 
					  for route, checks in routes.items(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if route not in non_public_routes: | 
					 | 
					 | 
					 | 
					    if route not in non_public_routes: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -463,83 +468,46 @@ if __name__ == "__main__": | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      continue | 
					 | 
					 | 
					 | 
					      continue | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    shutil.rmtree('/data/params') | 
					 | 
					 | 
					 | 
					    shutil.rmtree('/data/params') | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.gctx = {} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    params = Params() | 
					 | 
					 | 
					 | 
					    params = Params() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    params.manager_start() | 
					 | 
					 | 
					 | 
					    params.manager_start() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    params.put("OpenpilotEnabledToggle", "1") | 
					 | 
					 | 
					 | 
					    params.put("OpenpilotEnabledToggle", "1") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    params.put("CommunityFeaturesToggle", "1") | 
					 | 
					 | 
					 | 
					    params.put("CommunityFeaturesToggle", "1") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					    params.put("Passive", "1" if route in passive_routes else "0") | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if route in passive_routes: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      params.put("Passive", "1") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      params.put("Passive", "0") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("testing ", route, " ", checks['carFingerprint']) | 
					 | 
					 | 
					 | 
					    print("testing ", route, " ", checks['carFingerprint']) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("Preparing processes") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.prepare_managed_process("radard") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.prepare_managed_process("controlsd") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.prepare_managed_process("plannerd") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("Starting processes") | 
					 | 
					 | 
					 | 
					    print("Starting processes") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.start_managed_process("radard") | 
					 | 
					 | 
					 | 
					    for p in tested_procs: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.start_managed_process("controlsd") | 
					 | 
					 | 
					 | 
					      manager.start_managed_process(p) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.start_managed_process("plannerd") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    time.sleep(2) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # Start unlogger | 
					 | 
					 | 
					 | 
					    # Start unlogger | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("Start unlogger") | 
					 | 
					 | 
					 | 
					    print("Start unlogger") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if route in non_public_routes: | 
					 | 
					 | 
					 | 
					    if route in non_public_routes: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      unlogger_cmd = [os.path.join(BASEDIR, os.environ['UNLOGGER_PATH']), '%s' % route, '--disable', 'frame,plan,pathPlan,liveLongitudinalMpc,radarState,controlsState,liveTracks,liveMpc,sendcan,carState,carControl,carEvents,carParams', '--no-interactive'] | 
					 | 
					 | 
					 | 
					      unlogger_cmd = [os.path.join(BASEDIR, os.environ['UNLOGGER_PATH']), route] | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					    else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      unlogger_cmd = [os.path.join(BASEDIR, 'tools/replay/unlogger.py'), '%s' % route, '/tmp', '--disable', 'frame,plan,pathPlan,liveLongitudinalMpc,radarState,controlsState,liveTracks,liveMpc,sendcan,carState,carControl,carEvents,carParams', '--no-interactive'] | 
					 | 
					 | 
					 | 
					      unlogger_cmd = [os.path.join(BASEDIR, 'tools/replay/unlogger.py'), route, '/tmp'] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    unlogger = subprocess.Popen(unlogger_cmd, preexec_fn=os.setsid) | 
					 | 
					 | 
					 | 
					    unlogger = subprocess.Popen(unlogger_cmd + ['--disable', 'frame,plan,pathPlan,liveLongitudinalMpc,radarState,controlsState,liveTracks,liveMpc,sendcan,carState,carControl,carEvents,carParams', '--no-interactive'], preexec_fn=os.setsid) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("Check sockets") | 
					 | 
					 | 
					 | 
					    print("Check sockets") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    controls_state_result = wait_for_socket('controlsState', timeout=30) | 
					 | 
					 | 
					 | 
					    extra_socks = [] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    has_camera = checks.get('enableCamera', False) | 
					 | 
					 | 
					 | 
					    has_camera = checks.get('enableCamera', False) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (route not in passive_routes) and (route not in forced_dashcam_routes) and has_camera: | 
					 | 
					 | 
					 | 
					    if (route not in passive_routes) and (route not in forced_dashcam_routes) and has_camera: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      controls_state_result = controls_state_result and wait_for_socket('sendcan', timeout=30) | 
					 | 
					 | 
					 | 
					      extra_socks.append("sendcan") | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					    if route not in passive_routes: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    radarstate_result = wait_for_socket('radarState', timeout=30) | 
					 | 
					 | 
					 | 
					      extra_socks.append("pathPlan") | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    plan_result = wait_for_socket('plan', timeout=30) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if route not in passive_routes:  # TODO The passive routes have very flaky models | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      path_plan_result = wait_for_socket('pathPlan', timeout=30) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      path_plan_result = True | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    carstate_result = wait_for_socket('carState', timeout=30) | 
					 | 
					 | 
					 | 
					    recvd_socks = wait_for_sockets(tested_socks + extra_socks, timeout=30) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    failures = [s for s in tested_socks + extra_socks if s not in recvd_socks] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("Check if everything is running") | 
					 | 
					 | 
					 | 
					    print("Check if everything is running") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    running = manager.get_running() | 
					 | 
					 | 
					 | 
					    running = manager.get_running() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    controlsd_running = running['controlsd'].is_alive() | 
					 | 
					 | 
					 | 
					    for p in tested_procs: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    radard_running = running['radard'].is_alive() | 
					 | 
					 | 
					 | 
					      if not running[p].is_alive: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    plannerd_running = running['plannerd'].is_alive() | 
					 | 
					 | 
					 | 
					        failures.append(p) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					      manager.kill_managed_process(p) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.kill_managed_process("controlsd") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.kill_managed_process("radard") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    manager.kill_managed_process("plannerd") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    os.killpg(os.getpgid(unlogger.pid), signal.SIGTERM) | 
					 | 
					 | 
					 | 
					    os.killpg(os.getpgid(unlogger.pid), signal.SIGTERM) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    sockets_ok = all([ | 
					 | 
					 | 
					 | 
					    sockets_ok = len(failures) == 0 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      controls_state_result, radarstate_result, plan_result, path_plan_result, carstate_result, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      controlsd_running, radard_running, plannerd_running | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    params_ok = True | 
					 | 
					 | 
					 | 
					    params_ok = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    failures = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not controlsd_running: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      failures.append('controlsd') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not radard_running: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      failures.append('radard') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not radarstate_result: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      failures.append('radarState') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not controls_state_result: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      failures.append('controlsState') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not plan_result: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      failures.append('plan') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not path_plan_result: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      failures.append('pathPlan') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    try: | 
					 | 
					 | 
					 | 
					    try: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      car_params = car.CarParams.from_bytes(params.get("CarParams")) | 
					 | 
					 | 
					 | 
					      car_params = car.CarParams.from_bytes(params.get("CarParams")) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -558,11 +526,12 @@ if __name__ == "__main__": | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      results[route] = False, failures | 
					 | 
					 | 
					 | 
					      results[route] = False, failures | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      break | 
					 | 
					 | 
					 | 
					      break | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    time.sleep(2) | 
					 | 
					 | 
					 | 
					  # put back not passive to not leave the params in an unintended state | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  Params().put("Passive", "0") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for route in results: | 
					 | 
					 | 
					 | 
					  for route in results: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print(results[route]) | 
					 | 
					 | 
					 | 
					    print(results[route]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  Params().put("Passive", "0")   # put back not passive to not leave the params in an unintended state | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if not all(passed for passed, _ in results.values()): | 
					 | 
					 | 
					 | 
					  if not all(passed for passed, _ in results.values()): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print("TEST FAILED") | 
					 | 
					 | 
					 | 
					    print("TEST FAILED") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    sys.exit(1) | 
					 | 
					 | 
					 | 
					    sys.exit(1) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |