diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-07-16 10:22:06 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-07-16 10:22:06 +0000 |
commit | 0d59885fe8555a8ce77269c2240a309f2a9da0ba (patch) | |
tree | 8354c775dca74c1e2e187cd9847a8e525dd61bd8 | |
parent | 03353891845579ef715e87f5c6a985170f12957c (diff) | |
parent | 2b966f94de7367b5d0915d8e301b9b0e78d8c831 (diff) | |
download | oslo-incubator-0d59885fe8555a8ce77269c2240a309f2a9da0ba.tar.gz |
Merge "Fix deletion of cached file for policy enforcer"
-rw-r--r-- | openstack/common/fileutils.py | 15 | ||||
-rw-r--r-- | openstack/common/policy.py | 1 | ||||
-rw-r--r-- | tests/unit/test_fileutils.py | 16 | ||||
-rw-r--r-- | tests/unit/test_policy.py | 6 |
4 files changed, 36 insertions, 2 deletions
diff --git a/openstack/common/fileutils.py b/openstack/common/fileutils.py index 5fc38ab4..bf7df55d 100644 --- a/openstack/common/fileutils.py +++ b/openstack/common/fileutils.py @@ -50,8 +50,8 @@ def read_cached_file(filename, force_reload=False): """ global _FILE_CACHE - if force_reload and filename in _FILE_CACHE: - del _FILE_CACHE[filename] + if force_reload: + delete_cached_file(filename) reloaded = False mtime = os.path.getmtime(filename) @@ -66,6 +66,17 @@ def read_cached_file(filename, force_reload=False): return (reloaded, cache_info['data']) +def delete_cached_file(filename): + """Delete cached file if present. + + :param filename: filename to delete + """ + global _FILE_CACHE + + if filename in _FILE_CACHE: + del _FILE_CACHE[filename] + + def delete_if_exists(path, remove=os.unlink): """Delete a file, but ignore file not found error. diff --git a/openstack/common/policy.py b/openstack/common/policy.py index b2451ea1..38899150 100644 --- a/openstack/common/policy.py +++ b/openstack/common/policy.py @@ -216,6 +216,7 @@ class Enforcer(object): def clear(self): """Clears Enforcer rules, policy's cache and policy's path.""" self.set_rules({}) + fileutils.delete_cached_file(self.policy_path) self.default_rule = None self.policy_path = None diff --git a/tests/unit/test_fileutils.py b/tests/unit/test_fileutils.py index c82f16f9..4d9f98c7 100644 --- a/tests/unit/test_fileutils.py +++ b/tests/unit/test_fileutils.py @@ -74,6 +74,22 @@ class TestCachedFile(test_base.BaseTestCase): self.assertEqual(data, fake_contents) self.assertTrue(fresh) + def test_delete_cached_file(self): + filename = '/this/is/a/fake/deletion/of/cached/file' + fileutils._FILE_CACHE = { + filename: {"data": 1123, "mtime": 1} + } + self.assertIn(filename, fileutils._FILE_CACHE) + fileutils.delete_cached_file(filename) + self.assertNotIn(filename, fileutils._FILE_CACHE) + + def test_delete_cached_file_not_exist(self): + # We expect that if cached file does not exist no Exception raised. + filename = '/this/is/a/fake/deletion/attempt/of/not/cached/file' + self.assertNotIn(filename, fileutils._FILE_CACHE) + fileutils.delete_cached_file(filename) + self.assertNotIn(filename, fileutils._FILE_CACHE) + class DeleteIfExists(test_base.BaseTestCase): def test_file_present(self): diff --git a/tests/unit/test_policy.py b/tests/unit/test_policy.py index 077d966f..33345773 100644 --- a/tests/unit/test_policy.py +++ b/tests/unit/test_policy.py @@ -24,6 +24,7 @@ import six import six.moves.urllib.parse as urlparse import six.moves.urllib.request as urlrequest +from openstack.common import fileutils from openstack.common.fixture import config from openstack.common.fixture import lockutils from openstack.common import jsonutils @@ -139,11 +140,16 @@ class EnforcerTest(PolicyBaseTestCase): self.enforcer.set_rules, 'dummy') + @mock.patch.object(fileutils, 'delete_cached_file', mock.Mock()) def test_clear(self): # Make sure the rules are reset self.enforcer.rules = 'spam' + filename = self.enforcer.policy_path self.enforcer.clear() self.assertEqual(self.enforcer.rules, {}) + self.assertEqual(self.enforcer.default_rule, None) + self.assertEqual(self.enforcer.policy_path, None) + fileutils.delete_cached_file.assert_called_once_with(filename) def test_rule_with_check(self): rules_json = """{ |