[ARVADOS] created: b73985d8a0c9173aec57f6a81fe540b2813a5bff
Git user
git at public.curoverse.com
Fri Oct 21 15:44:26 EDT 2016
at b73985d8a0c9173aec57f6a81fe540b2813a5bff (commit)
commit b73985d8a0c9173aec57f6a81fe540b2813a5bff
Author: Tom Clegg <tom at curoverse.com>
Date: Fri Oct 21 15:27:34 2016 -0400
10008: Move test setup from __init__() to setUp()
diff --git a/services/fuse/tests/test_token_expiry.py b/services/fuse/tests/test_token_expiry.py
index 16611dc..415f9bb 100644
--- a/services/fuse/tests/test_token_expiry.py
+++ b/services/fuse/tests/test_token_expiry.py
@@ -15,8 +15,8 @@ from .integration_test import IntegrationTest
logger = logging.getLogger('arvados.arv-mount')
class TokenExpiryTest(IntegrationTest):
- def __init__(self, *args, **kwargs):
- super(TokenExpiryTest, self).__init__(*args, **kwargs)
+ def setUp(self):
+ super(TokenExpiryTest, self).setUp()
self.test_start_time = time.time()
self.time_now = int(time.time())+1
commit dfe0ec7bfec3fd72cd40d3962e5c8af08d2413d2
Merge: 6349237 2431a07
Author: Tom Clegg <tom at curoverse.com>
Date: Fri Oct 21 15:19:51 2016 -0400
10008: Merge branch 'master' into 10008-flaky-token-test
commit 6349237efb19ca7fcad94333090d694fda3d4374
Author: Tom Clegg <tom at curoverse.com>
Date: Fri Oct 21 15:16:24 2016 -0400
10008: Call checkupdate() on ancestors when opening a file.
diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index 6ac51f4..6a5a0fe 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -501,6 +501,12 @@ class Operations(llfuse.Operations):
fh = next(self._filehandles_counter)
self._filehandles[fh] = FileHandle(fh, p)
self.inodes.touch(p)
+ while p.parent_inode in self.inodes:
+ if p == self.inodes[p.parent_inode]:
+ break
+ p = self.inodes[p.parent_inode]
+ self.inodes.touch(p)
+ p.checkupdate()
_logger.debug("arv-mount open inode %i flags %x fh %i", inode, flags, fh)
diff --git a/services/fuse/tests/test_token_expiry.py b/services/fuse/tests/test_token_expiry.py
index 1b1be18..16611dc 100644
--- a/services/fuse/tests/test_token_expiry.py
+++ b/services/fuse/tests/test_token_expiry.py
@@ -44,10 +44,13 @@ class TokenExpiryTest(IntegrationTest):
with mock.patch.object(self.mount.api.collections(), 'get', wraps=self.mount.api.collections().get) as mocked_get:
self.pool_test(os.path.join(self.mnt, 'zzz'))
- self.assertEqual(3, mocked_open.call_count)
- self.assertEqual(
- 4, mocked_get.call_count,
- 'Not enough calls to collections().get(): expected 4, got {!r}'.format(
+ # open() several times here to make sure we don't reach our
+ # quota of mocked_get.call_count dishonestly (e.g., the first
+ # open causes 5 mocked_get, and the rest cause none).
+ self.assertEqual(8, mocked_open.call_count)
+ self.assertGreaterEqual(
+ mocked_get.call_count, 8,
+ 'Not enough calls to collections().get(): expected 8, got {!r}'.format(
mocked_get.mock_calls))
@staticmethod
@@ -55,6 +58,6 @@ class TokenExpiryTest(IntegrationTest):
uuid = 'zzzzz-4zz18-op4e2lbej01tcvu'
fnm = 'zzzzz-8i9sb-0vsrcqi7whchuil.log.txt'
os.listdir(os.path.join(zzz, uuid))
- for _ in range(3):
+ for _ in range(8):
with open(os.path.join(zzz, uuid, fnm)) as f:
f.read()
commit ed16f0c1f600acd7bab81796ec22fde90ecdfa7f
Author: Tom Clegg <tom at curoverse.com>
Date: Wed Sep 14 10:19:21 2016 -0400
10008: Use mocks to ensure collection is re-fetched.
diff --git a/services/fuse/tests/integration_test.py b/services/fuse/tests/integration_test.py
index b485037..c79b131 100644
--- a/services/fuse/tests/integration_test.py
+++ b/services/fuse/tests/integration_test.py
@@ -61,7 +61,6 @@ class IntegrationTest(unittest.TestCase):
def setUp(self):
self.mnt = tempfile.mkdtemp()
run_test_server.authorize_with('active')
- self.api = arvados.safeapi.ThreadSafeApiCache(arvados.config.settings())
def tearDown(self):
os.rmdir(self.mnt)
diff --git a/services/fuse/tests/test_token_expiry.py b/services/fuse/tests/test_token_expiry.py
index 790c819..1b1be18 100644
--- a/services/fuse/tests/test_token_expiry.py
+++ b/services/fuse/tests/test_token_expiry.py
@@ -1,9 +1,12 @@
-import arvados
import apiclient
+import arvados
+import arvados_fuse
import logging
import mock
+import multiprocessing
import os
import re
+import sys
import time
import unittest
@@ -12,33 +15,46 @@ from .integration_test import IntegrationTest
logger = logging.getLogger('arvados.arv-mount')
class TokenExpiryTest(IntegrationTest):
+ def __init__(self, *args, **kwargs):
+ super(TokenExpiryTest, self).__init__(*args, **kwargs)
+ self.test_start_time = time.time()
+ self.time_now = int(time.time())+1
+
+ def fake_time(self):
+ self.time_now += 1
+ return self.time_now
+
+ orig_open = arvados_fuse.Operations.open
+ def fake_open(self, operations, *args, **kwargs):
+ self.time_now += 86400*13
+ logger.debug('opening file at time=%f', self.time_now)
+ return self.orig_open(operations, *args, **kwargs)
+
+ @mock.patch.object(arvados_fuse.Operations, 'open', autospec=True)
+ @mock.patch('time.time')
@mock.patch('arvados.keep.KeepClient.get')
@IntegrationTest.mount(argv=['--mount-by-id', 'zzz'])
- def test_refresh_old_manifest(self, mocked_get):
+ def test_refresh_old_manifest(self, mocked_get, mocked_time, mocked_open):
mocked_get.return_value = 'fake data'
+ mocked_time.side_effect = self.fake_time
+ mocked_open.side_effect = self.fake_open
+
+ with mock.patch.object(self.mount.api, 'collections', wraps=self.mount.api.collections) as mocked_collections:
+ mocked_collections.return_value = mocked_collections()
+ with mock.patch.object(self.mount.api.collections(), 'get', wraps=self.mount.api.collections().get) as mocked_get:
+ self.pool_test(os.path.join(self.mnt, 'zzz'))
- self.api._rootDesc["blobSignatureTtl"] = 2
- old_exp = int(time.time()) + 86400*14
- self.pool_test(os.path.join(self.mnt, 'zzz'))
- want_exp = int(time.time()) + 86400*14
-
- got_loc = mocked_get.call_args[0][0]
- got_exp = int(
- re.search(r'\+A[0-9a-f]+@([0-9a-f]+)', got_loc).group(1),
- 16)
- self.assertGreaterEqual(
- got_exp, want_exp-2,
- msg='now+2w = {:x}, but fuse fetched locator {} (old_exp {:x})'.format(
- want_exp, got_loc, old_exp))
- self.assertLessEqual(
- got_exp, want_exp,
- msg='server is not using the expected 2w TTL; test is ineffective')
+ self.assertEqual(3, mocked_open.call_count)
+ self.assertEqual(
+ 4, mocked_get.call_count,
+ 'Not enough calls to collections().get(): expected 4, got {!r}'.format(
+ mocked_get.mock_calls))
@staticmethod
def _test_refresh_old_manifest(self, zzz):
uuid = 'zzzzz-4zz18-op4e2lbej01tcvu'
fnm = 'zzzzz-8i9sb-0vsrcqi7whchuil.log.txt'
os.listdir(os.path.join(zzz, uuid))
- time.sleep(3)
- with open(os.path.join(zzz, uuid, fnm)) as f:
- f.read()
+ for _ in range(3):
+ with open(os.path.join(zzz, uuid, fnm)) as f:
+ f.read()
commit 17f2b714df870dffc6320173d6a2348243ff7992
Author: Tom Clegg <tom at curoverse.com>
Date: Thu Sep 8 02:10:34 2016 -0400
10008: Move token exp test back to IntegrationTest
diff --git a/services/fuse/tests/test_mount.py b/services/fuse/tests/test_mount.py
index 39f1109..2aba2e7 100644
--- a/services/fuse/tests/test_mount.py
+++ b/services/fuse/tests/test_mount.py
@@ -1128,36 +1128,3 @@ class FuseMagicTestPDHOnly(MountTestBase):
def test_with_default_by_id(self):
self.verify_pdh_only(skip_pdh_only=True)
-
-def _test_refresh_old_manifest(zzz):
- fnm = 'zzzzz-8i9sb-0vsrcqi7whchuil.log.txt'
- os.listdir(os.path.join(zzz))
- time.sleep(3)
- with open(os.path.join(zzz, fnm)) as f:
- f.read()
-
-class TokenExpiryTest(MountTestBase):
- def setUp(self):
- super(TokenExpiryTest, self).setUp(local_store=False)
-
- @mock.patch('arvados.keep.KeepClient.get')
- def runTest(self, mocked_get):
- self.api._rootDesc = {"blobSignatureTtl": 2}
- mnt = self.make_mount(fuse.CollectionDirectory, collection_record='zzzzz-4zz18-op4e2lbej01tcvu')
- mocked_get.return_value = 'fake data'
-
- old_exp = int(time.time()) + 86400*14
- self.pool.apply(_test_refresh_old_manifest, (self.mounttmp,))
- want_exp = int(time.time()) + 86400*14
-
- got_loc = mocked_get.call_args[0][0]
- got_exp = int(
- re.search(r'\+A[0-9a-f]+@([0-9a-f]+)', got_loc).group(1),
- 16)
- self.assertGreaterEqual(
- got_exp, want_exp-2,
- msg='now+2w = {:x}, but fuse fetched locator {} (old_exp {:x})'.format(
- want_exp, got_loc, old_exp))
- self.assertLessEqual(
- got_exp, want_exp,
- msg='server is not using the expected 2w TTL; test is ineffective')
diff --git a/services/fuse/tests/test_token_expiry.py b/services/fuse/tests/test_token_expiry.py
new file mode 100644
index 0000000..790c819
--- /dev/null
+++ b/services/fuse/tests/test_token_expiry.py
@@ -0,0 +1,44 @@
+import arvados
+import apiclient
+import logging
+import mock
+import os
+import re
+import time
+import unittest
+
+from .integration_test import IntegrationTest
+
+logger = logging.getLogger('arvados.arv-mount')
+
+class TokenExpiryTest(IntegrationTest):
+ @mock.patch('arvados.keep.KeepClient.get')
+ @IntegrationTest.mount(argv=['--mount-by-id', 'zzz'])
+ def test_refresh_old_manifest(self, mocked_get):
+ mocked_get.return_value = 'fake data'
+
+ self.api._rootDesc["blobSignatureTtl"] = 2
+ old_exp = int(time.time()) + 86400*14
+ self.pool_test(os.path.join(self.mnt, 'zzz'))
+ want_exp = int(time.time()) + 86400*14
+
+ got_loc = mocked_get.call_args[0][0]
+ got_exp = int(
+ re.search(r'\+A[0-9a-f]+@([0-9a-f]+)', got_loc).group(1),
+ 16)
+ self.assertGreaterEqual(
+ got_exp, want_exp-2,
+ msg='now+2w = {:x}, but fuse fetched locator {} (old_exp {:x})'.format(
+ want_exp, got_loc, old_exp))
+ self.assertLessEqual(
+ got_exp, want_exp,
+ msg='server is not using the expected 2w TTL; test is ineffective')
+
+ @staticmethod
+ def _test_refresh_old_manifest(self, zzz):
+ uuid = 'zzzzz-4zz18-op4e2lbej01tcvu'
+ fnm = 'zzzzz-8i9sb-0vsrcqi7whchuil.log.txt'
+ os.listdir(os.path.join(zzz, uuid))
+ time.sleep(3)
+ with open(os.path.join(zzz, uuid, fnm)) as f:
+ f.read()
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list