X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5b3187552676947ee74e4b652e7a04d3d9b9a3a4..55100cd265eea01c9df1a369092ee6b49214c2ac:/services/fuse/tests/test_inodes.py diff --git a/services/fuse/tests/test_inodes.py b/services/fuse/tests/test_inodes.py index 61170d5980..07e6036d08 100644 --- a/services/fuse/tests/test_inodes.py +++ b/services/fuse/tests/test_inodes.py @@ -1,7 +1,12 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + import arvados_fuse import mock import unittest import llfuse +import logging class InodeTests(unittest.TestCase): def test_inodes_basic(self): @@ -11,8 +16,8 @@ class InodeTests(unittest.TestCase): # Check that ent1 gets added to inodes ent1 = mock.MagicMock() ent1.in_use.return_value = False + ent1.has_ref.return_value = False ent1.persisted.return_value = True - ent1.clear.return_value = True ent1.objsize.return_value = 500 inodes.add_entry(ent1) self.assertIn(ent1.inode, inodes) @@ -25,8 +30,8 @@ class InodeTests(unittest.TestCase): ent1 = mock.MagicMock() ent1.in_use.return_value = False + ent1.has_ref.return_value = False ent1.persisted.return_value = True - ent1.clear.return_value = True ent1.objsize.return_value = 500 inodes.add_entry(ent1) @@ -34,6 +39,7 @@ class InodeTests(unittest.TestCase): # affect the cache total ent2 = mock.MagicMock() ent2.in_use.return_value = False + ent2.has_ref.return_value = False ent2.persisted.return_value = False ent2.objsize.return_value = 600 inodes.add_entry(ent2) @@ -46,17 +52,17 @@ class InodeTests(unittest.TestCase): # Check that ent1 gets added to inodes ent1 = mock.MagicMock() ent1.in_use.return_value = False + ent1.has_ref.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.in_use.return_value = False + ent3.has_ref.return_value = False ent3.persisted.return_value = True ent3.objsize.return_value = 600 - ent3.clear.return_value = True self.assertFalse(ent1.clear.called) inodes.add_entry(ent3) @@ -78,46 +84,44 @@ class InodeTests(unittest.TestCase): self.assertTrue(ent3.clear.called) self.assertEqual(500, cache.total()) - def test_clear_false(self): + def test_clear_in_use(self): cache = arvados_fuse.InodeCache(1000, 4) inodes = arvados_fuse.Inodes(cache) ent1 = mock.MagicMock() - ent1.in_use.return_value = False + ent1.in_use.return_value = True + ent1.has_ref.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.has_ref.return_value = True 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 + # ent1, ent3 in use, has ref, can't be cleared 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.assertFalse(ent1.clear.called) + self.assertFalse(ent3.clear.called) + self.assertFalse(ent3.kernel_invalidate.called) self.assertEqual(1100, cache.total()) - # ent1 clear return false, so ent3 - # gets cleared - ent1.clear.return_value = False - ent3.clear.return_value = True + # ent1 still in use, ent3 doesn't have ref, + # so ent3 gets cleared + ent3.has_ref.return_value = False ent1.clear.called = False ent3.clear.called = False cache.touch(ent3) - self.assertTrue(ent1.clear.called) + self.assertFalse(ent1.clear.called) self.assertTrue(ent3.clear.called) self.assertEqual(500, cache.total()) @@ -127,20 +131,19 @@ class InodeTests(unittest.TestCase): ent1 = mock.MagicMock() ent1.in_use.return_value = False + ent1.has_ref.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.has_ref.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 with llfuse.lock: inodes.del_entry(ent1)