5 class InodeTests(unittest.TestCase):
7 cache = arvados_fuse.InodeCache(1000, 4)
8 inodes = arvados_fuse.Inodes(cache)
10 # Check that ent1 gets added to inodes
11 ent1 = mock.MagicMock()
12 ent1.return_value.in_use = False
13 ent1.persisted.return_value = True
14 ent1.clear.return_value = True
15 ent1.objsize.return_value = 500
16 inodes.add_entry(ent1)
17 self.assertIn(ent1.inode, inodes)
18 self.assertIs(inodes[ent1.inode], ent1)
19 self.assertEqual(500, cache.total())
21 # ent2 is not persisted, so it doesn't
22 # affect the cache total
23 ent2 = mock.MagicMock()
24 ent2.return_value.in_use = False
25 ent2.persisted.return_value = False
26 ent2.objsize.return_value = 600
27 inodes.add_entry(ent2)
28 self.assertEqual(500, cache.total())
30 # ent3 is persisted, adding it should cause ent1 to get cleared
31 ent3 = mock.MagicMock()
32 ent3.return_value.in_use = False
33 ent3.persisted.return_value = True
34 ent3.objsize.return_value = 600
35 ent3.clear.return_value = True
37 self.assertFalse(ent1.clear.called)
38 inodes.add_entry(ent3)
40 # Won't clear anything because min_entries = 4
41 self.assertEqual(2, len(cache._entries))
42 self.assertFalse(ent1.clear.called)
43 self.assertEqual(1100, cache.total())
48 self.assertEqual(600, cache.total())
49 self.assertTrue(ent1.clear.called)
51 # Touching ent1 should cause ent3 to get cleared
52 self.assertFalse(ent3.clear.called)
54 self.assertTrue(ent3.clear.called)
55 self.assertEqual(500, cache.total())
57 # ent1, ent3 clear return false, can't be cleared
58 ent1.clear.return_value = False
59 ent3.clear.return_value = False
60 ent1.clear.called = False
61 ent3.clear.called = False
62 self.assertFalse(ent1.clear.called)
63 self.assertFalse(ent3.clear.called)
65 self.assertTrue(ent1.clear.called)
66 self.assertTrue(ent3.clear.called)
67 self.assertEqual(1100, cache.total())
69 # ent1 clear return false, so ent3
71 ent1.clear.return_value = False
72 ent3.clear.return_value = True
73 ent1.clear.called = False
74 ent3.clear.called = False
75 self.assertFalse(ent1.clear.called)
76 self.assertFalse(ent3.clear.called)
78 self.assertTrue(ent1.clear.called)
79 self.assertTrue(ent3.clear.called)
80 self.assertEqual(500, cache.total())
83 ent1.clear.return_value = True
84 inodes.del_entry(ent1)
85 self.assertEqual(0, cache.total())
87 self.assertEqual(600, cache.total())