summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorBrant Knudson <bknudson@us.ibm.com>2013-07-19 16:40:35 -0500
committerBrant Knudson <bknudson@us.ibm.com>2013-07-31 12:03:41 -0500
commit3c6cc9e838cacd1f7c0a3cfc89b0f66b23851803 (patch)
treeb56b1eb1685222bedd149adf1793e459f3c5cbbd /tests
parent19081b834991d263d84c761dcf422a8c9faf40a1 (diff)
downloadkeystone-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.py27
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.