summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-08-02 00:33:53 +0000
committerGerrit Code Review <review@openstack.org>2013-08-02 00:33:53 +0000
commit104f04e416d080052e5f8bede8727475898f2741 (patch)
treee2271a35d6649b2239750d9619a7c7e1b9316fee
parent03689503e23a61ebd3642edc7bb3e04b20f26e6e (diff)
parent19081b834991d263d84c761dcf422a8c9faf40a1 (diff)
downloadkeystone-104f04e416d080052e5f8bede8727475898f2741.tar.gz
keystone-104f04e416d080052e5f8bede8727475898f2741.tar.xz
keystone-104f04e416d080052e5f8bede8727475898f2741.zip
Merge "Clear out the dependency registry between tests"
-rw-r--r--keystone/common/dependency.py10
-rw-r--r--keystone/test.py15
-rw-r--r--tests/test_injection.py17
3 files changed, 41 insertions, 1 deletions
diff --git a/keystone/common/dependency.py b/keystone/common/dependency.py
index dc3e4ac4..3ed261cc 100644
--- a/keystone/common/dependency.py
+++ b/keystone/common/dependency.py
@@ -65,3 +65,13 @@ def requires(*dependencies):
return cls
return wrapped
+
+
+def reset():
+ """Reset the registry of providers.
+
+ This is useful for unit testing to ensure that tests don't use providers
+ from previous tests.
+ """
+
+ REGISTRY.clear()
diff --git a/keystone/test.py b/keystone/test.py
index 2c2be577..d06ea4c5 100644
--- a/keystone/test.py
+++ b/keystone/test.py
@@ -38,6 +38,7 @@ environment.use_eventlet()
from keystone import assignment
from keystone import catalog
+from keystone.common import dependency
from keystone.common import kvs
from keystone.common import logging
from keystone.common import sql
@@ -51,6 +52,7 @@ from keystone import identity
from keystone.openstack.common import timeutils
from keystone import policy
from keystone import token
+from keystone.token import provider as token_provider
from keystone import trust
@@ -240,6 +242,11 @@ class TestCase(NoModule, unittest.TestCase):
for path in self._paths:
if path in sys.path:
sys.path.remove(path)
+
+ # Clear the registry of providers so that providers from previous
+ # tests aren't used.
+ dependency.reset()
+
kvs.INMEMDB.clear()
CONF.reset()
@@ -253,8 +260,14 @@ class TestCase(NoModule, unittest.TestCase):
def load_backends(self):
"""Initializes each manager and assigns them to an attribute."""
+
+ # TODO(blk-u): Shouldn't need to clear the registry here, but some
+ # tests call load_backends multiple times. These should be fixed to
+ # only call load_backends once.
+ dependency.reset()
+
for manager in [assignment, catalog, credential, ec2, identity, policy,
- token, trust]:
+ token, token_provider, trust]:
manager_name = '%s_api' % manager.__name__.split('.')[-1]
setattr(self, manager_name, manager.Manager())
diff --git a/tests/test_injection.py b/tests/test_injection.py
index 4b6fc8ba..08ccd7c7 100644
--- a/tests/test_injection.py
+++ b/tests/test_injection.py
@@ -165,3 +165,20 @@ class TestDependencyInjection(unittest.TestCase):
with self.assertRaises(dependency.UnresolvableDependencyException):
Consumer()
+
+ def test_reset(self):
+ # Can reset the registry of providers.
+
+ p_id = uuid.uuid4().hex
+
+ @dependency.provider(p_id)
+ class P(object):
+ pass
+
+ p_inst = P()
+
+ self.assertIs(dependency.REGISTRY[p_id], p_inst)
+
+ dependency.reset()
+
+ self.assertFalse(dependency.REGISTRY)