11402: Disable caching if $HOME/ is not writable, instead of returning a broken cache.
authorTom Clegg <tom@curoverse.com>
Fri, 31 Mar 2017 20:17:19 +0000 (16:17 -0400)
committerTom Clegg <tom@curoverse.com>
Fri, 31 Mar 2017 20:17:19 +0000 (16:17 -0400)
closes #11402

sdk/python/arvados/api.py
sdk/python/tests/test_cache.py

index d1263e24f27b2e89b3ef386d3d35a28bb9341811..1af50b311020f4ed87391cd2a1e76463f39394f5 100644 (file)
@@ -136,7 +136,7 @@ def http_cache(data_type):
     try:
         util.mkdir_dash_p(path)
     except OSError:
-        path = None
+        return None
     return cache.SafeHTTPCache(path, max_age=60*60*24*2)
 
 def api(version=None, cache=True, host=None, token=None, insecure=False, **kwargs):
index baa60bfa17b6f4a7ec2b180bc635dc3ef6da95f2..4d68b401ee2c219cce872ce75d6ec81a6a678108 100644 (file)
@@ -2,14 +2,16 @@ from __future__ import print_function
 
 import md5
 import mock
-import shutil
+import os
 import random
+import shutil
 import sys
 import tempfile
 import threading
 import unittest
 
 import arvados.cache
+import arvados
 import run_test_server
 
 
@@ -47,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'