You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					69 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					69 lines
				
				2.2 KiB
			| 
											5 years ago
										 | #!/usr/bin/env python3
 | ||
|  | 
 | ||
|  | import os
 | ||
|  | import unittest
 | ||
|  | import shutil
 | ||
|  | from tools.lib.url_file import URLFile, CACHE_DIR
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestFileDownload(unittest.TestCase):
 | ||
|  | 
 | ||
|  |   def compare_loads(self, url, start=0, length=None):
 | ||
|  |     """Compares range between cached and non cached version"""
 | ||
|  |     shutil.rmtree(CACHE_DIR)
 | ||
|  | 
 | ||
|  |     file_cached = URLFile(url, cache=True)
 | ||
|  |     file_downloaded = URLFile(url, cache=False)
 | ||
|  | 
 | ||
|  |     file_cached.seek(start)
 | ||
|  |     file_downloaded.seek(start)
 | ||
|  | 
 | ||
|  |     self.assertEqual(file_cached.get_length(), file_downloaded.get_length())
 | ||
|  |     self.assertLessEqual(length + start if length is not None else 0, file_downloaded.get_length())
 | ||
|  | 
 | ||
|  |     response_cached = file_cached.read(ll=length)
 | ||
|  |     response_downloaded = file_downloaded.read(ll=length)
 | ||
|  | 
 | ||
|  |     self.assertEqual(response_cached, response_downloaded)
 | ||
|  | 
 | ||
|  |     # Now test with cache in place
 | ||
|  |     file_cached = URLFile(url, cache=True)
 | ||
|  |     file_cached.seek(start)
 | ||
|  |     response_cached = file_cached.read(ll=length)
 | ||
|  | 
 | ||
|  |     self.assertEqual(file_cached.get_length(), file_downloaded.get_length())
 | ||
|  |     self.assertEqual(response_cached, response_downloaded)
 | ||
|  | 
 | ||
|  |   def test_small_file(self):
 | ||
|  |     # Make sure we don't force cache
 | ||
|  |     os.environ["FILEREADER_CACHE"] = "0"
 | ||
|  |     small_file_url = "https://raw.githubusercontent.com/commaai/openpilot/master/SAFETY.md"
 | ||
|  |     #  If you want large file to be larger than a chunk
 | ||
|  |     #  large_file_url = "https://commadataci.blob.core.windows.net/openpilotci/0375fdf7b1ce594d/2019-06-13--08-32-25/3/fcamera.hevc"
 | ||
|  | 
 | ||
|  |     #  Load full small file
 | ||
|  |     self.compare_loads(small_file_url)
 | ||
|  | 
 | ||
|  |     file_small = URLFile(small_file_url)
 | ||
|  |     length = file_small.get_length()
 | ||
|  | 
 | ||
|  |     self.compare_loads(small_file_url, length - 100, 100)
 | ||
|  |     self.compare_loads(small_file_url, 50, 100)
 | ||
|  | 
 | ||
|  |     #  Load small file 100 bytes at a time
 | ||
|  |     for i in range(length // 100):
 | ||
|  |       self.compare_loads(small_file_url, 100 * i, 100)
 | ||
|  | 
 | ||
|  |   def test_large_file(self):
 | ||
|  |     large_file_url = "https://commadataci.blob.core.windows.net/openpilotci/0375fdf7b1ce594d/2019-06-13--08-32-25/3/qlog.bz2"
 | ||
|  |     #  Load the end 100 bytes of both files
 | ||
|  |     file_large = URLFile(large_file_url)
 | ||
|  |     length = file_large.get_length()
 | ||
|  | 
 | ||
|  |     self.compare_loads(large_file_url, length - 100, 100)
 | ||
|  |     self.compare_loads(large_file_url)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == "__main__":
 | ||
|  |     unittest.main()
 |