X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d2f68bd1e108c3f2dda2322c427050d019b17e04..c5f1d667aed3a993296374de3d53f3a2745c4ff4:/services/fuse/tests/test_inodes.py diff --git a/services/fuse/tests/test_inodes.py b/services/fuse/tests/test_inodes.py index 2c5f3dcef8..61170d5980 100644 --- a/services/fuse/tests/test_inodes.py +++ b/services/fuse/tests/test_inodes.py @@ -1,15 +1,16 @@ import arvados_fuse import mock import unittest +import llfuse class InodeTests(unittest.TestCase): - def test_inodes(self): + def test_inodes_basic(self): cache = arvados_fuse.InodeCache(1000, 4) inodes = arvados_fuse.Inodes(cache) # Check that ent1 gets added to inodes ent1 = mock.MagicMock() - ent1.return_value.in_use = False + ent1.in_use.return_value = False ent1.persisted.return_value = True ent1.clear.return_value = True ent1.objsize.return_value = 500 @@ -18,18 +19,41 @@ class InodeTests(unittest.TestCase): self.assertIs(inodes[ent1.inode], ent1) self.assertEqual(500, cache.total()) + def test_inodes_not_persisted(self): + cache = arvados_fuse.InodeCache(1000, 4) + inodes = arvados_fuse.Inodes(cache) + + ent1 = mock.MagicMock() + ent1.in_use.return_value = False + ent1.persisted.return_value = True + ent1.clear.return_value = True + ent1.objsize.return_value = 500 + inodes.add_entry(ent1) + # ent2 is not persisted, so it doesn't # affect the cache total ent2 = mock.MagicMock() - ent2.return_value.in_use = False + ent2.in_use.return_value = False ent2.persisted.return_value = False ent2.objsize.return_value = 600 inodes.add_entry(ent2) self.assertEqual(500, cache.total()) + def test_inode_cleared(self): + cache = arvados_fuse.InodeCache(1000, 4) + inodes = arvados_fuse.Inodes(cache) + + # Check that ent1 gets added to inodes + ent1 = mock.MagicMock() + ent1.in_use.return_value = False + ent1.persisted.return_value = True + ent1.clear.return_value = True + ent1.objsize.return_value = 500 + inodes.add_entry(ent1) + # ent3 is persisted, adding it should cause ent1 to get cleared ent3 = mock.MagicMock() - ent3.return_value.in_use = False + ent3.in_use.return_value = False ent3.persisted.return_value = True ent3.objsize.return_value = 600 ent3.clear.return_value = True @@ -54,6 +78,26 @@ class InodeTests(unittest.TestCase): self.assertTrue(ent3.clear.called) self.assertEqual(500, cache.total()) + def test_clear_false(self): + cache = arvados_fuse.InodeCache(1000, 4) + inodes = arvados_fuse.Inodes(cache) + + ent1 = mock.MagicMock() + ent1.in_use.return_value = False + ent1.persisted.return_value = True + ent1.clear.return_value = True + ent1.objsize.return_value = 500 + inodes.add_entry(ent1) + + ent3 = mock.MagicMock() + ent3.in_use.return_value = False + ent3.persisted.return_value = True + ent3.objsize.return_value = 600 + ent3.clear.return_value = True + inodes.add_entry(ent3) + + cache.min_entries = 1 + # ent1, ent3 clear return false, can't be cleared ent1.clear.return_value = False ent3.clear.return_value = False @@ -72,17 +116,34 @@ class InodeTests(unittest.TestCase): ent3.clear.return_value = True ent1.clear.called = False ent3.clear.called = False - self.assertFalse(ent1.clear.called) - self.assertFalse(ent3.clear.called) cache.touch(ent3) self.assertTrue(ent1.clear.called) self.assertTrue(ent3.clear.called) self.assertEqual(500, cache.total()) + def test_delete(self): + cache = arvados_fuse.InodeCache(1000, 4) + inodes = arvados_fuse.Inodes(cache) + + ent1 = mock.MagicMock() + ent1.in_use.return_value = False + ent1.persisted.return_value = True + ent1.clear.return_value = True + ent1.objsize.return_value = 500 + inodes.add_entry(ent1) + + ent3 = mock.MagicMock() + ent3.in_use.return_value = False + ent3.persisted.return_value = True + ent3.objsize.return_value = 600 + ent3.clear.return_value = True + # Delete ent1 + self.assertEqual(500, cache.total()) ent1.clear.return_value = True ent1.ref_count = 0 - inodes.del_entry(ent1) + with llfuse.lock: + inodes.del_entry(ent1) self.assertEqual(0, cache.total()) cache.touch(ent3) self.assertEqual(600, cache.total())