diff options
author | Brant Knudson <bknudson@us.ibm.com> | 2013-07-19 16:40:35 -0500 |
---|---|---|
committer | Brant Knudson <bknudson@us.ibm.com> | 2013-07-31 12:03:41 -0500 |
commit | 3c6cc9e838cacd1f7c0a3cfc89b0f66b23851803 (patch) | |
tree | b56b1eb1685222bedd149adf1793e459f3c5cbbd /tests | |
parent | 19081b834991d263d84c761dcf422a8c9faf40a1 (diff) | |
download | keystone-3c6cc9e838cacd1f7c0a3cfc89b0f66b23851803.tar.gz keystone-3c6cc9e838cacd1f7c0a3cfc89b0f66b23851803.tar.xz keystone-3c6cc9e838cacd1f7c0a3cfc89b0f66b23851803.zip |
Handle circular dependencies
The dependency injection code doesn't handle circular
dependencies. This change makes it so that the
dependency injection code allows circular dependencies.
Part of fix for bug 1204605
Change-Id: I8de166a352ac727c7ddf27bae420b7c7ab22415f
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_injection.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/test_injection.py b/tests/test_injection.py index 08ccd7c7..36cd0126 100644 --- a/tests/test_injection.py +++ b/tests/test_injection.py @@ -21,6 +21,10 @@ from keystone.common import dependency class TestDependencyInjection(unittest.TestCase): + def tearDown(self): + dependency.reset() + super(TestDependencyInjection, self).tearDown() + def test_dependency_injection(self): class Interface(object): def do_work(self): @@ -165,6 +169,29 @@ class TestDependencyInjection(unittest.TestCase): with self.assertRaises(dependency.UnresolvableDependencyException): Consumer() + dependency.resolve_future_dependencies() + + def test_circular_dependency(self): + p1_name = uuid.uuid4().hex + p2_name = uuid.uuid4().hex + + @dependency.provider(p1_name) + @dependency.requires(p2_name) + class P1(object): + pass + + @dependency.provider(p2_name) + @dependency.requires(p1_name) + class P2(object): + pass + + p1 = P1() + p2 = P2() + + dependency.resolve_future_dependencies() + + self.assertIs(getattr(p1, p2_name), p2) + self.assertIs(getattr(p2, p1_name), p1) def test_reset(self): # Can reset the registry of providers. |