3 import arvados.fuse as fuse
12 import run_test_server
15 class FuseMountTest(unittest.TestCase):
17 self.keeptmp = tempfile.mkdtemp()
18 os.environ['KEEP_LOCAL_STORE'] = self.keeptmp
20 cw = arvados.CollectionWriter()
22 cw.start_new_file('thing1.txt')
24 cw.start_new_file('thing2.txt')
26 cw.start_new_stream('dir1')
28 cw.start_new_file('thing3.txt')
30 cw.start_new_file('thing4.txt')
33 cw.start_new_stream('dir2')
34 cw.start_new_file('thing5.txt')
36 cw.start_new_file('thing6.txt')
39 cw.start_new_stream('dir2/dir3')
40 cw.start_new_file('thing7.txt')
43 cw.start_new_file('thing8.txt')
46 self.testcollection = cw.finish()
49 # Create the request handler
50 operations = fuse.Operations(os.getuid(), os.getgid())
51 #e = operations.inodes.add_entry(fuse.Directory(llfuse.ROOT_INODE))
52 #operations.inodes.load_collection(e, arvados.CollectionReader(arvados.Keep.get(self.testcollection)))
53 e = operations.inodes.add_entry(fuse.CollectionDirectory(llfuse.ROOT_INODE, operations.inodes, self.testcollection))
55 self.mounttmp = tempfile.mkdtemp()
57 llfuse.init(operations, self.mounttmp, [])
58 t = threading.Thread(None, lambda: llfuse.main())
61 # wait until the driver is finished initializing
62 operations.initlock.wait()
64 # now check some stuff
65 d1 = os.listdir(self.mounttmp)
67 self.assertEqual(d1, ['dir1', 'dir2', 'thing1.txt', 'thing2.txt'])
69 d2 = os.listdir(os.path.join(self.mounttmp, 'dir1'))
71 self.assertEqual(d2, ['thing3.txt', 'thing4.txt'])
73 d3 = os.listdir(os.path.join(self.mounttmp, 'dir2'))
75 self.assertEqual(d3, ['dir3', 'thing5.txt', 'thing6.txt'])
77 d4 = os.listdir(os.path.join(self.mounttmp, 'dir2/dir3'))
79 self.assertEqual(d4, ['thing7.txt', 'thing8.txt'])
81 files = {'thing1.txt': 'data 1',
82 'thing2.txt': 'data 2',
83 'dir1/thing3.txt': 'data 3',
84 'dir1/thing4.txt': 'data 4',
85 'dir2/thing5.txt': 'data 5',
86 'dir2/thing6.txt': 'data 6',
87 'dir2/dir3/thing7.txt': 'data 7',
88 'dir2/dir3/thing8.txt': 'data 8'}
90 for k, v in files.items():
91 with open(os.path.join(self.mounttmp, k)) as f:
92 self.assertEqual(f.read(), v)
96 # llfuse.close is buggy, so use fusermount instead.
97 #llfuse.close(unmount=True)
98 subprocess.call(["fusermount", "-u", self.mounttmp])
100 os.rmdir(self.mounttmp)
101 shutil.rmtree(self.keeptmp)
103 class FuseMagicTest(unittest.TestCase):
105 self.keeptmp = tempfile.mkdtemp()
106 os.environ['KEEP_LOCAL_STORE'] = self.keeptmp
108 cw = arvados.CollectionWriter()
110 cw.start_new_file('thing1.txt')
113 self.testcollection = cw.finish()
116 # Create the request handler
117 operations = fuse.Operations(os.getuid(), os.getgid())
118 e = operations.inodes.add_entry(fuse.MagicDirectory(llfuse.ROOT_INODE, operations.inodes))
120 self.mounttmp = tempfile.mkdtemp()
122 llfuse.init(operations, self.mounttmp, [])
123 t = threading.Thread(None, lambda: llfuse.main())
126 # wait until the driver is finished initializing
127 operations.initlock.wait()
129 # now check some stuff
130 d1 = os.listdir(self.mounttmp)
132 self.assertEqual(d1, [])
134 d2 = os.listdir(os.path.join(self.mounttmp, self.testcollection))
136 self.assertEqual(d2, ['thing1.txt'])
138 d3 = os.listdir(self.mounttmp)
140 self.assertEqual(d3, [self.testcollection])
143 files[os.path.join(self.mounttmp, self.testcollection, 'thing1.txt')] = 'data 1'
145 for k, v in files.items():
146 with open(os.path.join(self.mounttmp, k)) as f:
147 self.assertEqual(f.read(), v)
151 # llfuse.close is buggy, so use fusermount instead.
152 #llfuse.close(unmount=True)
153 subprocess.call(["fusermount", "-u", self.mounttmp])
155 os.rmdir(self.mounttmp)
156 shutil.rmtree(self.keeptmp)
158 class FuseTagsTest(unittest.TestCase):
160 run_test_server.run()
163 run_test_server.authorize_with("admin")
166 run_test_server.stop()