diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-08-02 00:33:53 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-08-02 00:33:53 +0000 |
commit | 104f04e416d080052e5f8bede8727475898f2741 (patch) | |
tree | e2271a35d6649b2239750d9619a7c7e1b9316fee | |
parent | 03689503e23a61ebd3642edc7bb3e04b20f26e6e (diff) | |
parent | 19081b834991d263d84c761dcf422a8c9faf40a1 (diff) | |
download | keystone-104f04e416d080052e5f8bede8727475898f2741.tar.gz keystone-104f04e416d080052e5f8bede8727475898f2741.tar.xz keystone-104f04e416d080052e5f8bede8727475898f2741.zip |
Merge "Clear out the dependency registry between tests"
-rw-r--r-- | keystone/common/dependency.py | 10 | ||||
-rw-r--r-- | keystone/test.py | 15 | ||||
-rw-r--r-- | tests/test_injection.py | 17 |
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) |