X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/206451cdcaee133836761024c8517629de429f10..19ae770973482257117fe8ded5619c3018c4b60f:/services/fuse/tests/test_mount.py diff --git a/services/fuse/tests/test_mount.py b/services/fuse/tests/test_mount.py index cc8693bd34..fa48849626 100644 --- a/services/fuse/tests/test_mount.py +++ b/services/fuse/tests/test_mount.py @@ -16,6 +16,7 @@ import logging import multiprocessing import run_test_server import mock +import re from mount_test_base import MountTestBase @@ -427,12 +428,16 @@ class FuseWriteFileTest(MountTestBase): self.assertNotIn("file1.txt", collection) + self.assertEqual(0, self.operations.write_counter.get()) self.pool.apply(fuseWriteFileTestHelperWriteFile, (self.mounttmp,)) + self.assertEqual(12, self.operations.write_counter.get()) with collection.open("file1.txt") as f: self.assertEqual(f.read(), "Hello world!") + self.assertEqual(0, self.operations.read_counter.get()) self.pool.apply(fuseWriteFileTestHelperReadFile, (self.mounttmp,)) + self.assertEqual(12, self.operations.read_counter.get()) collection2 = self.api.collections().get(uuid=collection.manifest_locator()).execute() self.assertRegexpMatches(collection2["manifest_text"], @@ -699,7 +704,7 @@ class FuseUpdateFromEventTest(MountTestBase): with llfuse.lock: m.new_collection(collection.api_response(), collection) - self.operations.listen_for_events(self.api) + self.operations.listen_for_events() d1 = llfuse.listdir(os.path.join(self.mounttmp)) self.assertEqual([], sorted(d1)) @@ -1123,3 +1128,37 @@ 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): + logging.getLogger('arvados.arvados_fuse').setLevel(logging.DEBUG) + 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-1, + 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')