X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/86c4b60b5f9e8ab1f20eeee1da0afce3db57ab3b..52141835e85e4014a691e036f89bcd71a98bd6b2:/services/fuse/tests/test_mount.py diff --git a/services/fuse/tests/test_mount.py b/services/fuse/tests/test_mount.py index d6c1ee7d7b..3db5281eb0 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' @@ -152,189 +159,149 @@ class FuseMagicTest(MountTestBase): with open(os.path.join(self.mounttmp, k)) as f: self.assertEqual(v, f.read()) -# -# Restore these tests when working on issue #3644 -# -# 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)) - -# llfuse.init(operations, self.mounttmp, []) -# t = threading.Thread(None, lambda: llfuse.main()) -# t.start() - -# # wait until the driver is finished initializing -# operations.initlock.wait() - -# d1 = os.listdir(self.mounttmp) -# d1.sort() -# self.assertEqual(['foo_tag'], d1) - -# d2 = os.listdir(os.path.join(self.mounttmp, 'foo_tag')) -# d2.sort() -# self.assertEqual(['1f4b0bc7583c2a7f9102c395f4ffc5e3+45'], d2) - -# d3 = os.listdir(os.path.join(self.mounttmp, 'foo_tag', '1f4b0bc7583c2a7f9102c395f4ffc5e3+45')) -# 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): - -# 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)) - -# 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 FuseTagsTest(MountTestBase): + def runTest(self): + operations = fuse.Operations(os.getuid(), os.getgid()) + e = operations.inodes.add_entry(fuse.TagsDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0)) -# d1 = os.listdir(self.mounttmp) -# d1.sort() -# self.assertEqual(['foo_tag'], d1) + llfuse.init(operations, self.mounttmp, []) + t = threading.Thread(None, lambda: llfuse.main()) + t.start() -# api.links().create(body={'link': { -# 'head_uuid': 'fa7aeb5140e2848d39b416daeef4ffc5+45', -# 'link_class': 'tag', -# 'name': 'bar_tag' -# }}).execute() + # wait until the driver is finished initializing + operations.initlock.wait() -# time.sleep(1) + d1 = os.listdir(self.mounttmp) + d1.sort() + self.assertEqual(['foo_tag'], d1) -# d2 = os.listdir(self.mounttmp) -# d2.sort() -# self.assertEqual(['bar_tag', 'foo_tag'], d2) + d2 = os.listdir(os.path.join(self.mounttmp, 'foo_tag')) + d2.sort() + self.assertEqual(['zzzzz-4zz18-fy296fx3hot09f7'], d2) -# d3 = os.listdir(os.path.join(self.mounttmp, 'bar_tag')) -# d3.sort() -# self.assertEqual(['fa7aeb5140e2848d39b416daeef4ffc5+45'], d3) + d3 = os.listdir(os.path.join(self.mounttmp, 'foo_tag', 'zzzzz-4zz18-fy296fx3hot09f7')) + d3.sort() + self.assertEqual(['foo'], d3) -# l = api.links().create(body={'link': { -# 'head_uuid': 'ea10d51bcf88862dbcc36eb292017dfd+45', -# 'link_class': 'tag', -# 'name': 'bar_tag' -# }}).execute() -# time.sleep(1) +class FuseTagsUpdateTest(MountTestBase): + def runRealTest(self): + operations = fuse.Operations(os.getuid(), os.getgid()) + e = operations.inodes.add_entry(fuse.TagsDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0, poll_time=1)) -# d4 = os.listdir(os.path.join(self.mounttmp, 'bar_tag')) -# d4.sort() -# self.assertEqual(['ea10d51bcf88862dbcc36eb292017dfd+45', 'fa7aeb5140e2848d39b416daeef4ffc5+45'], d4) + llfuse.init(operations, self.mounttmp, []) + t = threading.Thread(None, lambda: llfuse.main()) + t.start() -# api.links().delete(uuid=l['uuid']).execute() + # wait until the driver is finished initializing + operations.initlock.wait() -# time.sleep(1) + d1 = os.listdir(self.mounttmp) + d1.sort() + self.assertEqual(['foo_tag'], d1) -# d5 = os.listdir(os.path.join(self.mounttmp, 'bar_tag')) -# d5.sort() -# self.assertEqual(['fa7aeb5140e2848d39b416daeef4ffc5+45'], d5) + self.api.links().create(body={'link': { + 'head_uuid': 'fa7aeb5140e2848d39b416daeef4ffc5+45', + 'link_class': 'tag', + 'name': 'bar_tag' + }}).execute() + time.sleep(1) -# class FuseTagsUpdateTestWebsockets(FuseTagsUpdateTestBase): -# def setUp(self): -# super(FuseTagsUpdateTestWebsockets, self).setUp() -# run_test_server.run(True) + d2 = os.listdir(self.mounttmp) + d2.sort() + self.assertEqual(['bar_tag', 'foo_tag'], d2) -# def runTest(self): -# self.runRealTest() + d3 = os.listdir(os.path.join(self.mounttmp, 'bar_tag')) + d3.sort() + self.assertEqual(['fa7aeb5140e2848d39b416daeef4ffc5+45'], d3) -# def tearDown(self): -# run_test_server.stop() -# super(FuseTagsUpdateTestWebsockets, self).tearDown() + l = self.api.links().create(body={'link': { + 'head_uuid': 'ea10d51bcf88862dbcc36eb292017dfd+45', + 'link_class': 'tag', + 'name': 'bar_tag' + }}).execute() + time.sleep(1) -# class FuseTagsUpdateTestPoll(FuseTagsUpdateTestBase): -# def setUp(self): -# super(FuseTagsUpdateTestPoll, self).setUp() -# run_test_server.run(False) + d4 = os.listdir(os.path.join(self.mounttmp, 'bar_tag')) + d4.sort() + self.assertEqual(['ea10d51bcf88862dbcc36eb292017dfd+45', 'fa7aeb5140e2848d39b416daeef4ffc5+45'], d4) -# def runTest(self): -# self.runRealTest() + self.api.links().delete(uuid=l['uuid']).execute() -# def tearDown(self): -# run_test_server.stop() -# super(FuseTagsUpdateTestPoll, self).tearDown() + time.sleep(1) + d5 = os.listdir(os.path.join(self.mounttmp, 'bar_tag')) + d5.sort() + self.assertEqual(['fa7aeb5140e2848d39b416daeef4ffc5+45'], d5) -# class FuseGroupsTest(MountTestBase): -# def setUp(self): -# super(FuseGroupsTest, self).setUp() -# run_test_server.run() -# def runTest(self): -# run_test_server.authorize_with("admin") -# api = arvados.api('v1', cache=False) +class FuseSharedTest(MountTestBase): + def runTest(self): + 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'])) -# operations = fuse.Operations(os.getuid(), os.getgid()) -# e = operations.inodes.add_entry(fuse.GroupsDirectory(llfuse.ROOT_INODE, operations.inodes, api)) + llfuse.init(operations, self.mounttmp, []) + t = threading.Thread(None, lambda: llfuse.main()) + t.start() -# llfuse.init(operations, self.mounttmp, []) -# t = threading.Thread(None, lambda: llfuse.main()) -# t.start() + # wait until the driver is finished initializing + operations.initlock.wait() -# # wait until the driver is finished initializing -# operations.initlock.wait() + # shared_dirs is a list of the directories exposed + # by fuse.SharedDirectory (i.e. any object visible + # to the current user) + shared_dirs = os.listdir(self.mounttmp) + shared_dirs.sort() + self.assertIn('FUSE User', shared_dirs) + + # fuse_user_dirs is a list of the directories owned + # by the "FUSE User" test user. + fuse_user_dirs = os.listdir(os.path.join(self.mounttmp, 'FUSE User')) + fuse_user_dirs.sort() + self.assertEqual(['FUSE Test Project', + 'collection #1 owned by FUSE', + 'collection #2 owned by FUSE' + ], fuse_user_dirs) + + # test_proj_files is a list of the files in the FUSE Test Project. + test_proj_files = os.listdir(os.path.join(self.mounttmp, 'FUSE User', 'FUSE Test Project')) + test_proj_files.sort() + self.assertEqual(['Pipeline Template in FUSE Project.pipelineTemplate', + 'collection in FUSE project', + ], test_proj_files) + + with open(os.path.join( + self.mounttmp, + 'FUSE User', + 'FUSE Test Project', + 'Pipeline Template in FUSE Project.pipelineTemplate')) as f: + j = json.load(f) + self.assertEqual("Pipeline Template in FUSE Project", j['name']) + + +class FuseHomeTest(MountTestBase): + def runTest(self): + operations = fuse.Operations(os.getuid(), os.getgid()) + e = operations.inodes.add_entry(fuse.ProjectDirectory(llfuse.ROOT_INODE, operations.inodes, self.api, 0, self.api.users().current().execute())) -# d1 = os.listdir(self.mounttmp) -# d1.sort() -# self.assertIn('zzzzz-j7d0g-v955i6s2oi1cbso', d1) + llfuse.init(operations, self.mounttmp, []) + t = threading.Thread(None, lambda: llfuse.main()) + t.start() -# d2 = os.listdir(os.path.join(self.mounttmp, 'zzzzz-j7d0g-v955i6s2oi1cbso')) -# d2.sort() -# self.assertEqual(['1f4b0bc7583c2a7f9102c395f4ffc5e3+45 added sometime', -# "I'm a job in a project", -# "I'm a template in a project", -# "zzzzz-j58dm-5gid26432uujf79", -# "zzzzz-j58dm-7r18rnd5nzhg5yk", -# "zzzzz-j58dm-ypsjlol9dofwijz", -# "zzzzz-j7d0g-axqo7eu9pwvna1x" -# ], d2) + # wait until the driver is finished initializing + operations.initlock.wait() -# d3 = os.listdir(os.path.join(self.mounttmp, 'zzzzz-j7d0g-v955i6s2oi1cbso', 'zzzzz-j7d0g-axqo7eu9pwvna1x')) -# d3.sort() -# self.assertEqual(["I'm in a subproject, too", -# "ea10d51bcf88862dbcc36eb292017dfd+45 added sometime", -# "zzzzz-j58dm-c40lddwcqqr1ffs" -# ], d3) + d1 = os.listdir(self.mounttmp) + d1.sort() + self.assertIn('Unrestricted public data', d1) -# with open(os.path.join(self.mounttmp, 'zzzzz-j7d0g-v955i6s2oi1cbso', "I'm a template in a project")) as f: -# j = json.load(f) -# self.assertEqual("Two Part Pipeline Template", j['name']) + d2 = os.listdir(os.path.join(self.mounttmp, 'Unrestricted public data')) + d2.sort() + self.assertEqual(['GNU General Public License, version 3'], d2) -# def tearDown(self): -# run_test_server.stop() -# super(FuseGroupsTest, self).tearDown() + d3 = os.listdir(os.path.join(self.mounttmp, 'Unrestricted public data', 'GNU General Public License, version 3')) + d3.sort() + self.assertEqual(["GNU_General_Public_License,_version_3.pdf"], d3)