From 99efc2296c54e1332795f9f926fce0a202380f04 Mon Sep 17 00:00:00 2001 From: David Stanek Date: Mon, 25 Nov 2013 15:10:44 +0000 Subject: [PATCH] Adds a fixture for setting up the cache Certain tests will fail in isolation becasue the cache isn't properly configured. This fixture will clear out any old configuration and correctly configure the cache. Change-Id: I6ec944880dea930771906a63a76400fe3d10e299 Closes-Bug: #1251300 --- keystone/tests/core.py | 11 ++------- keystone/tests/fixtures/__init__.py | 16 ++++++++++++ keystone/tests/fixtures/cache.py | 38 +++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 keystone/tests/fixtures/cache.py diff --git a/keystone/tests/core.py b/keystone/tests/core.py index 85bc48e8a2..9e0ddc9b12 100644 --- a/keystone/tests/core.py +++ b/keystone/tests/core.py @@ -51,7 +51,6 @@ from keystone.common import environment environment.use_eventlet() from keystone import auth -from keystone.common import cache from keystone.common import dependency from keystone.common import kvs from keystone.common.kvs import core as kvs_core @@ -65,6 +64,7 @@ from keystone.openstack.common.db.sqlalchemy import session from keystone.openstack.common import log from keystone.openstack.common import timeutils from keystone import service +from keystone.tests import fixtures as ksfixtures # NOTE(dstanek): Tests inheriting from TestCase depend on having the # policy_file command-line option declared before setUp runs. Importing the @@ -328,16 +328,9 @@ class TestCase(testtools.TestCase): self.opt(policy_file=dirs.etc('policy.json')) - # NOTE(morganfainberg): The only way to reconfigure the - # CacheRegion object on each setUp() call is to remove the - # .backend property. - self.addCleanup(delattr, cache.REGION, 'backend') - - # ensure the cache region instance is setup - cache.configure_cache_region(cache.REGION) - self.logger = self.useFixture(fixtures.FakeLogger(level=logging.DEBUG)) warnings.filterwarnings('ignore', category=DeprecationWarning) + self.useFixture(ksfixtures.Cache()) # Clear the registry of providers so that providers from previous # tests aren't used. diff --git a/keystone/tests/fixtures/__init__.py b/keystone/tests/fixtures/__init__.py index e69de29bb2..d54164c4eb 100644 --- a/keystone/tests/fixtures/__init__.py +++ b/keystone/tests/fixtures/__init__.py @@ -0,0 +1,16 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from keystone.tests.fixtures.cache import Cache # flake8: noqa diff --git a/keystone/tests/fixtures/cache.py b/keystone/tests/fixtures/cache.py new file mode 100644 index 0000000000..b12940779b --- /dev/null +++ b/keystone/tests/fixtures/cache.py @@ -0,0 +1,38 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import fixtures + +from keystone.common import cache + + +class Cache(fixtures.Fixture): + """A fixture for setting up and tearing down the cache between test cases. + """ + + def setUp(self): + # NOTE(dstanek): We must remove the existing cache backend in the + # setUp instead of the tearDown because it defaults to a no-op cache + # and we want the configure call below to create the correct backend. + + # NOTE(morganfainberg): The only way to reconfigure the CacheRegion + # object on each setUp() call is to remove the .backend property. + if hasattr(cache.REGION, 'backend'): + del cache.REGION.backend + + # ensure the cache region instance is setup + cache.configure_cache_region(cache.REGION) + + super(Cache, self).setUp()