@ -2,11 +2,13 @@ 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					from  functools  import  partial  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  http . server  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  os  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  shutil  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  socket  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  unittest  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					from  parameterized  import  parameterized  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					from  openpilot . selfdrive . athena . tests . helpers  import  with_http_server  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					from  openpilot . system . hardware . hw  import  Paths  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					from  openpilot . tools . lib . url_file  import  URLFile  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -15,7 +17,7 @@ class CachingTestRequestHandler(http.server.BaseHTTPRequestHandler): 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  def  do_GET ( self ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  self . FILE_EXISTS :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      self . send_response ( 200 ,  b ' 1234 ' )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      self . send_response ( 206  if  " Range "  in  self . headers  else  20 0 ,  b ' 1234 ' )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    else :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      self . send_response ( 404 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    self . end_headers ( )   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -34,6 +36,34 @@ with_caching_server = partial(with_http_server, handler=CachingTestRequestHandle 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					class  TestFileDownload ( unittest . TestCase ) :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  @with_caching_server   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  def  test_pipeline_defaults ( self ,  host ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    # TODO: parameterize the defaults so we don't rely on hard-coded values in xx   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    self . assertEqual ( URLFile . pool_manager ( ) . pools . _maxsize ,  10 )  # PoolManager num_pools param   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    pool_manager_defaults  =  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      " maxsize " :  100 ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      " socket_options " :  [ ( socket . SOL_SOCKET ,  socket . SO_KEEPALIVE ,  1 ) , ] ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    for  k ,  v  in  pool_manager_defaults . items ( ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      self . assertEqual ( URLFile . pool_manager ( ) . connection_pool_kw . get ( k ) ,  v )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    retry_defaults  =  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      " total " :  5 ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      " backoff_factor " :  0.5 ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      " status_forcelist " :  [ 409 ,  429 ,  503 ,  504 ] ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    for  k ,  v  in  retry_defaults . items ( ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      self . assertEqual ( getattr ( URLFile . pool_manager ( ) . connection_pool_kw [ " retries " ] ,  k ) ,  v )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    # ensure caching off by default and cache dir doesn't get created   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    os . environ . pop ( " FILEREADER_CACHE " ,  None )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  os . path . exists ( Paths . download_cache_root ( ) ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      shutil . rmtree ( Paths . download_cache_root ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    URLFile ( f " { host } /test.txt " ) . get_length ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    URLFile ( f " { host } /test.txt " ) . read ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    self . assertEqual ( os . path . exists ( Paths . download_cache_root ( ) ) ,  False )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  def  compare_loads ( self ,  url ,  start = 0 ,  length = None ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    """ Compares range between cached and non cached version """   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    file_cached  =  URLFile ( url ,  cache = True )