8104: OPENSOCKETFUNCTION accepts calls from pycurl 7.21.
[arvados.git] / sdk / python / tests / test_cache.py
index 9697e477087175858d6f9da9bb152b20f569fd1f..4d68b401ee2c219cce872ce75d6ec81a6a678108 100644 (file)
@@ -1,11 +1,18 @@
+from __future__ import print_function
+
 import md5
-import shutil
+import mock
+import os
 import random
+import shutil
+import sys
 import tempfile
 import threading
 import unittest
 
 import arvados.cache
+import arvados
+import run_test_server
 
 
 def _random(n):
@@ -20,13 +27,19 @@ class CacheTestThread(threading.Thread):
     def run(self):
         c = arvados.cache.SafeHTTPCache(self._dir)
         url = 'http://example.com/foo'
+        self.ok = True
         for x in range(16):
-            data_in = _random(128)
-            data_in = md5.new(data_in).hexdigest() + "\n" + str(data_in)
-            c.set(url, data_in)
-            data_out = c.get(url)
-            digest, content = data_out.split("\n", 1)
-            self.ok = (digest == md5.new(content).hexdigest())
+            try:
+                data_in = _random(128)
+                data_in = md5.new(data_in).hexdigest() + "\n" + str(data_in)
+                c.set(url, data_in)
+                data_out = c.get(url)
+                digest, content = data_out.split("\n", 1)
+                if digest != md5.new(content).hexdigest():
+                    self.ok = False
+            except Exception as err:
+                self.ok = False
+                print("cache failed: {}".format(err), file=sys.stderr)
 
 
 class CacheTest(unittest.TestCase):
@@ -36,6 +49,17 @@ class CacheTest(unittest.TestCase):
     def tearDown(self):
         shutil.rmtree(self._dir)
 
+    def test_cache_create_error(self):
+        _, filename = tempfile.mkstemp()
+        home_was = os.environ['HOME']
+        os.environ['HOME'] = filename
+        try:
+            c = arvados.http_cache('test')
+            self.assertEqual(None, c)
+        finally:
+            os.environ['HOME'] = home_was
+            os.unlink(filename)
+
     def test_cache_crud(self):
         c = arvados.cache.SafeHTTPCache(self._dir, max_age=0)
         url = 'https://example.com/foo?bar=baz'
@@ -60,3 +84,12 @@ class CacheTest(unittest.TestCase):
         for t in threads:
             t.join()
             self.assertTrue(t.ok)
+
+
+class CacheIntegrationTest(run_test_server.TestCaseWithServers):
+    MAIN_SERVER = {}
+
+    def test_cache_used_by_default_client(self):
+        with mock.patch('arvados.cache.SafeHTTPCache.get') as getter:
+            arvados.api('v1')._rootDesc.get('foobar')
+            getter.assert_called()