1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: AGPL-3.0
5 from builtins import range
6 from six import assertRegex
9 import arvados_fuse.command
16 from .integration_test import IntegrationTest
17 from .mount_test_base import MountTestBase
19 logger = logging.getLogger('arvados.arv-mount')
22 class TmpCollectionArgsTest(unittest.TestCase):
24 self.tmpdir = tempfile.mkdtemp()
29 def test_tmp_only(self):
30 args = arvados_fuse.command.ArgumentParser().parse_args([
31 '--mount-tmp', 'tmp1',
32 '--mount-tmp', 'tmp2',
35 self.assertIn(args.mode, [None, 'custom'])
36 self.assertEqual(['tmp1', 'tmp2'], args.mount_tmp)
37 for mtype in ['home', 'shared', 'by_id', 'by_pdh', 'by_tag']:
38 self.assertEqual([], getattr(args, 'mount_'+mtype))
40 def test_tmp_and_home(self):
41 args = arvados_fuse.command.ArgumentParser().parse_args([
42 '--mount-tmp', 'test_tmp',
43 '--mount-home', 'test_home',
46 self.assertIn(args.mode, [None, 'custom'])
47 self.assertEqual(['test_tmp'], args.mount_tmp)
48 self.assertEqual(['test_home'], args.mount_home)
50 def test_no_tmp(self):
51 args = arvados_fuse.command.ArgumentParser().parse_args([
54 self.assertEqual([], args.mount_tmp)
57 def current_manifest(tmpdir):
58 with open(os.path.join(tmpdir, '.arvados#collection')) as tmp:
59 return json.load(tmp)['manifest_text']
61 def storage_classes_desired(tmpdir):
62 with open(os.path.join(tmpdir, '.arvados#collection')) as tmp:
63 return json.load(tmp)['storage_classes_desired']
65 class TmpCollectionTest(IntegrationTest):
71 @IntegrationTest.mount(argv=mnt_args+['--storage-classes', 'foo, bar'])
72 def test_storage_classes(self):
73 self.pool_test(os.path.join(self.mnt, 'zzz'))
75 def _test_storage_classes(self, zzz):
76 self.assertEqual(storage_classes_desired(zzz), ['foo', 'bar'])
78 @IntegrationTest.mount(argv=mnt_args+['--mount-tmp', 'yyy'])
79 def test_two_tmp(self):
80 self.pool_test(os.path.join(self.mnt, 'zzz'),
81 os.path.join(self.mnt, 'yyy'))
83 def _test_two_tmp(self, zzz, yyy):
84 self.assertEqual(current_manifest(zzz), "")
85 self.assertEqual(current_manifest(yyy), "")
86 with open(os.path.join(zzz, 'foo'), 'w') as f:
88 self.assertNotEqual(current_manifest(zzz), "")
89 self.assertEqual(current_manifest(yyy), "")
90 os.unlink(os.path.join(zzz, 'foo'))
91 with open(os.path.join(yyy, 'bar'), 'w') as f:
93 self.assertEqual(current_manifest(zzz), "")
94 self.assertNotEqual(current_manifest(yyy), "")
96 @IntegrationTest.mount(argv=mnt_args)
97 def test_tmp_empty(self):
98 self.pool_test(os.path.join(self.mnt, 'zzz'))
100 def _test_tmp_empty(self, tmpdir):
101 self.assertEqual(current_manifest(tmpdir), "")
103 @IntegrationTest.mount(argv=mnt_args)
104 def test_tmp_onefile(self):
105 self.pool_test(os.path.join(self.mnt, 'zzz'))
107 def _test_tmp_onefile(self, tmpdir):
108 with open(os.path.join(tmpdir, 'foo'), 'w') as f:
112 current_manifest(tmpdir),
113 r'^\. acbd18db4cc2f85cedef654fccc4a4d8\+3(\+\S+)? 0:3:foo\n$')
115 @IntegrationTest.mount(argv=mnt_args)
116 def test_tmp_snapshots(self):
117 self.pool_test(os.path.join(self.mnt, 'zzz'))
119 def _test_tmp_snapshots(self, tmpdir):
122 r'^\. 37b51d194a7513e45b56f6524f2d51f2\+3(\+\S+)? 0:3:foo\n$'),
124 r'^\. acbd18db4cc2f85cedef654fccc4a4d8\+3(\+\S+)? 0:3:foo\n$'),
126 r'^\. 37b51d194a7513e45b56f6524f2d51f2\+3(\+\S+)? acbd18db4cc2f85cedef654fccc4a4d8\+3(\+\S+)? 0:3:bar 3:3:foo\n$'),
128 r'^\. 37b51d194a7513e45b56f6524f2d51f2\+3(\+\S+)? 0:3:bar\n$'),
133 for fn, content, expect in ops:
134 path = os.path.join(tmpdir, fn)
138 with open(path, 'w') as f:
140 assertRegex(self, current_manifest(tmpdir), expect)
142 @IntegrationTest.mount(argv=mnt_args)
143 def test_tmp_rewrite(self):
144 self.pool_test(os.path.join(self.mnt, 'zzz'))
146 def _test_tmp_rewrite(self, tmpdir):
147 with open(os.path.join(tmpdir, "b1"), 'w') as f:
149 with open(os.path.join(tmpdir, "b2"), 'w') as f:
151 with open(os.path.join(tmpdir, "b1"), 'w') as f:
153 assertRegex(self, current_manifest(tmpdir), "^\. ed4f3f67c70b02b29c50ce1ea26666bd\+4(\+\S+)? 0:2:b1 2:2:b2\n$")