X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c7a21e6294f1eb905ace3d717f9dcfb4d4c39f0b..846ac5d419862e2b0051ec0843e71c601b35da44:/services/fuse/tests/test_mount.py diff --git a/services/fuse/tests/test_mount.py b/services/fuse/tests/test_mount.py index 3939e5ada8..269a256fc8 100644 --- a/services/fuse/tests/test_mount.py +++ b/services/fuse/tests/test_mount.py @@ -17,8 +17,13 @@ class MountTestBase(unittest.TestCase): self.keeptmp = tempfile.mkdtemp() os.environ['KEEP_LOCAL_STORE'] = self.keeptmp self.mounttmp = tempfile.mkdtemp() + run_test_server.run(False) + run_test_server.authorize_with("admin") + self.api = api = fuse.SafeApi(arvados.config) def tearDown(self): + run_test_server.stop() + # llfuse.close is buggy, so use fusermount instead. #llfuse.close(unmount=True) count = 0 @@ -63,11 +68,12 @@ class FuseMountTest(MountTestBase): cw.write("data 8") self.testcollection = cw.finish() + self.api.collections().create(body={"manifest_text":cw.manifest_text()}).execute() def runTest(self): # Create the request handler operations = fuse.Operations(os.getuid(), os.getgid()) - e = operations.inodes.add_entry(fuse.CollectionDirectory(llfuse.ROOT_INODE, operations.inodes, self.testcollection)) + e = operations.inodes.add_entry(fuse.CollectionDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0, self.testcollection)) llfuse.init(operations, self.mounttmp, []) t = threading.Thread(None, lambda: llfuse.main()) @@ -117,11 +123,12 @@ class FuseMagicTest(MountTestBase): cw.write("data 1") self.testcollection = cw.finish() + self.api.collections().create(body={"manifest_text":cw.manifest_text()}).execute() def runTest(self): # Create the request handler operations = fuse.Operations(os.getuid(), os.getgid()) - e = operations.inodes.add_entry(fuse.MagicDirectory(llfuse.ROOT_INODE, operations.inodes)) + e = operations.inodes.add_entry(fuse.MagicDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0)) self.mounttmp = tempfile.mkdtemp() @@ -135,7 +142,7 @@ class FuseMagicTest(MountTestBase): # now check some stuff d1 = os.listdir(self.mounttmp) d1.sort() - self.assertEqual([], d1) + self.assertEqual(['README'], d1) d2 = os.listdir(os.path.join(self.mounttmp, self.testcollection)) d2.sort() @@ -143,7 +150,7 @@ class FuseMagicTest(MountTestBase): d3 = os.listdir(self.mounttmp) d3.sort() - self.assertEqual([self.testcollection], d3) + self.assertEqual([self.testcollection, 'README'], d3) files = {} files[os.path.join(self.mounttmp, self.testcollection, 'thing1.txt')] = 'data 1' @@ -154,24 +161,9 @@ class FuseMagicTest(MountTestBase): class FuseTagsTest(MountTestBase): - def setUp(self): - super(FuseTagsTest, self).setUp() - - cw = arvados.CollectionWriter() - - cw.start_new_file('foo') - cw.write("foo") - - self.testcollection = cw.finish() - - run_test_server.run() - def runTest(self): - run_test_server.authorize_with("admin") - api = arvados.api('v1', cache=False) - operations = fuse.Operations(os.getuid(), os.getgid()) - e = operations.inodes.add_entry(fuse.TagsDirectory(llfuse.ROOT_INODE, operations.inodes, api)) + e = operations.inodes.add_entry(fuse.TagsDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0)) llfuse.init(operations, self.mounttmp, []) t = threading.Thread(None, lambda: llfuse.main()) @@ -186,33 +178,17 @@ class FuseTagsTest(MountTestBase): d2 = os.listdir(os.path.join(self.mounttmp, 'foo_tag')) d2.sort() - self.assertEqual(['1f4b0bc7583c2a7f9102c395f4ffc5e3+45'], d2) + self.assertEqual(['zzzzz-4zz18-fy296fx3hot09f7'], d2) - d3 = os.listdir(os.path.join(self.mounttmp, 'foo_tag', '1f4b0bc7583c2a7f9102c395f4ffc5e3+45')) + d3 = os.listdir(os.path.join(self.mounttmp, 'foo_tag', 'zzzzz-4zz18-fy296fx3hot09f7')) d3.sort() self.assertEqual(['foo'], d3) - files = {} - files[os.path.join(self.mounttmp, 'foo_tag', '1f4b0bc7583c2a7f9102c395f4ffc5e3+45', 'foo')] = 'foo' - - for k, v in files.items(): - with open(os.path.join(self.mounttmp, k)) as f: - self.assertEqual(v, f.read()) - - - def tearDown(self): - run_test_server.stop() - - super(FuseTagsTest, self).tearDown() - -class FuseTagsUpdateTestBase(MountTestBase): +class FuseTagsUpdateTest(MountTestBase): def runRealTest(self): - run_test_server.authorize_with("admin") - api = arvados.api('v1', cache=False) - operations = fuse.Operations(os.getuid(), os.getgid()) - e = operations.inodes.add_entry(fuse.TagsDirectory(llfuse.ROOT_INODE, operations.inodes, api, poll_time=1)) + e = operations.inodes.add_entry(fuse.TagsDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0, poll_time=1)) llfuse.init(operations, self.mounttmp, []) t = threading.Thread(None, lambda: llfuse.main()) @@ -225,7 +201,7 @@ class FuseTagsUpdateTestBase(MountTestBase): d1.sort() self.assertEqual(['foo_tag'], d1) - api.links().create(body={'link': { + self.api.links().create(body={'link': { 'head_uuid': 'fa7aeb5140e2848d39b416daeef4ffc5+45', 'link_class': 'tag', 'name': 'bar_tag' @@ -241,7 +217,7 @@ class FuseTagsUpdateTestBase(MountTestBase): d3.sort() self.assertEqual(['fa7aeb5140e2848d39b416daeef4ffc5+45'], d3) - l = api.links().create(body={'link': { + l = self.api.links().create(body={'link': { 'head_uuid': 'ea10d51bcf88862dbcc36eb292017dfd+45', 'link_class': 'tag', 'name': 'bar_tag' @@ -253,7 +229,7 @@ class FuseTagsUpdateTestBase(MountTestBase): d4.sort() self.assertEqual(['ea10d51bcf88862dbcc36eb292017dfd+45', 'fa7aeb5140e2848d39b416daeef4ffc5+45'], d4) - api.links().delete(uuid=l['uuid']).execute() + self.api.links().delete(uuid=l['uuid']).execute() time.sleep(1) @@ -262,43 +238,57 @@ class FuseTagsUpdateTestBase(MountTestBase): self.assertEqual(['fa7aeb5140e2848d39b416daeef4ffc5+45'], d5) -class FuseTagsUpdateTestWebsockets(FuseTagsUpdateTestBase): - def setUp(self): - super(FuseTagsUpdateTestWebsockets, self).setUp() - run_test_server.run(True) - +class FuseSharedTest(MountTestBase): def runTest(self): - self.runRealTest() + operations = fuse.Operations(os.getuid(), os.getgid()) + e = operations.inodes.add_entry(fuse.SharedDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0, self.api.users().current().execute()['uuid'])) - def tearDown(self): - run_test_server.stop() - super(FuseTagsUpdateTestWebsockets, self).tearDown() + llfuse.init(operations, self.mounttmp, []) + t = threading.Thread(None, lambda: llfuse.main()) + t.start() + # wait until the driver is finished initializing + operations.initlock.wait() -class FuseTagsUpdateTestPoll(FuseTagsUpdateTestBase): - def setUp(self): - super(FuseTagsUpdateTestPoll, self).setUp() - run_test_server.run(False) + d1 = os.listdir(self.mounttmp) + d1.sort() + self.assertIn('Active User', d1) - def runTest(self): - self.runRealTest() + d2 = os.listdir(os.path.join(self.mounttmp, 'Active User')) + d2.sort() + self.assertEqual(['A Project', + "Empty collection", + "Empty collection.link", + "Pipeline Template Newer Than Instance.pipelineTemplate", + "Pipeline Template with Input Parameter with Search.pipelineTemplate", + "Pipeline Template with Jobspec Components.pipelineTemplate", + "collection_expires_in_future", + "collection_with_same_name_in_aproject_and_home_project", + "owned_by_active", + "pipeline_to_merge_params.pipelineInstance", + "pipeline_with_job.pipelineInstance", + "pipeline_with_tagged_collection_input.pipelineInstance", + "real_log_collection" + ], d2) - def tearDown(self): - run_test_server.stop() - super(FuseTagsUpdateTestPoll, self).tearDown() + d3 = os.listdir(os.path.join(self.mounttmp, 'Active User', 'A Project')) + d3.sort() + self.assertEqual(["A Subproject", + "Two Part Pipeline Template.pipelineTemplate", + "collection_to_move_around", + "collection_with_same_name_in_aproject_and_home_project", + "zzzzz-4zz18-fy296fx3hot09f7 added sometime" + ], d3) + with open(os.path.join(self.mounttmp, 'Active User', "A Project", "Two Part Pipeline Template.pipelineTemplate")) as f: + j = json.load(f) + self.assertEqual("Two Part Pipeline Template", j['name']) -class FuseGroupsTest(MountTestBase): - def setUp(self): - super(FuseGroupsTest, self).setUp() - run_test_server.run() +class FuseHomeTest(MountTestBase): def runTest(self): - run_test_server.authorize_with("admin") - api = arvados.api('v1', cache=False) - operations = fuse.Operations(os.getuid(), os.getgid()) - e = operations.inodes.add_entry(fuse.GroupsDirectory(llfuse.ROOT_INODE, operations.inodes, api)) + e = operations.inodes.add_entry(fuse.ProjectDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0, self.api.users().current().execute())) llfuse.init(operations, self.mounttmp, []) t = threading.Thread(None, lambda: llfuse.main()) @@ -309,29 +299,12 @@ class FuseGroupsTest(MountTestBase): d1 = os.listdir(self.mounttmp) d1.sort() - self.assertIn('zzzzz-j7d0g-v955i6s2oi1cbso', d1) + self.assertIn('Unrestricted public data', d1) - d2 = os.listdir(os.path.join(self.mounttmp, 'zzzzz-j7d0g-v955i6s2oi1cbso')) + d2 = os.listdir(os.path.join(self.mounttmp, 'Unrestricted public data')) d2.sort() - self.assertEqual(['1f4b0bc7583c2a7f9102c395f4ffc5e3+45 added sometime', - "I'm a job in a folder", - "I'm a template in a folder", - "zzzzz-j58dm-5gid26432uujf79", - "zzzzz-j58dm-7r18rnd5nzhg5yk", - "zzzzz-j58dm-ypsjlol9dofwijz", - "zzzzz-j7d0g-axqo7eu9pwvna1x" - ], d2) + self.assertEqual(['GNU General Public License, version 3'], d2) - d3 = os.listdir(os.path.join(self.mounttmp, 'zzzzz-j7d0g-v955i6s2oi1cbso', 'zzzzz-j7d0g-axqo7eu9pwvna1x')) + d3 = os.listdir(os.path.join(self.mounttmp, 'Unrestricted public data', 'GNU General Public License, version 3')) d3.sort() - self.assertEqual(["I'm in a subfolder, too", - "zzzzz-j58dm-c40lddwcqqr1ffs" - ], d3) - - with open(os.path.join(self.mounttmp, 'zzzzz-j7d0g-v955i6s2oi1cbso', "I'm a template in a folder")) as f: - j = json.load(f) - self.assertEqual("Two Part Pipeline Template", j['name']) - - def tearDown(self): - run_test_server.stop() - super(FuseGroupsTest, self).tearDown() + self.assertEqual(["GNU_General_Public_License,_version_3.pdf"], d3)