text: #!/usr/bin/env python3
  import os
  import shutil
  import unittest
  
  os.environ["COMMA_CACHE"] = "/tmp/__test_cache__"
  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/docs/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()
  