summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavanum Srinivas <davanum@gmail.com>2015-12-02 14:43:32 -0500
committerOleksii Zamiatin <ozamiatin@mirantis.com>2015-12-03 11:13:35 +0000
commit74a0ec8b1c4b3ca6c700d110d6bfd77348cc970a (patch)
tree8c6aa7223eb1b21d526d4496c921a4c634012c77
parent36fc947b1543f0fa1a898cd34a6d1b8312e7ae5b (diff)
downloadoslo-messaging-74a0ec8b1c4b3ca6c700d110d6bfd77348cc970a.tar.gz
setUp/tearDown decorator for set/clear override
Problem with recursion shows up only in full runs of Nova for example. So split the code that sets up the decorator and add a method to cleanup the decorated set_override during teardown. Also add a decorator for clear_override similar to the one for set_override. Added more tests for all the above. Change-Id: Ib16af2e770e96d971aef7f5c5d48ffd781477cfe
-rw-r--r--oslo_messaging/conffixture.py32
-rw-r--r--oslo_messaging/tests/test_fixture.py49
2 files changed, 79 insertions, 2 deletions
diff --git a/oslo_messaging/conffixture.py b/oslo_messaging/conffixture.py
index 42e9d51..0d05a58 100644
--- a/oslo_messaging/conffixture.py
+++ b/oslo_messaging/conffixture.py
@@ -71,6 +71,7 @@ class ConfFixture(fixtures.Fixture):
'_notifier_opts',
'oslo_messaging_notifications')
+ def _setup_decorator(self):
# Support older test cases that still use the set_override
# with the old config key names
def decorator_for_set_override(wrapped_function):
@@ -84,13 +85,40 @@ class ConfFixture(fixtures.Fixture):
elif args[0] == 'notification_topics':
args = ('topics', args[1], group)
return wrapped_function(*args, **kwargs)
+ _wrapper.wrapped = wrapped_function
return _wrapper
- self.conf.set_override = decorator_for_set_override(
- self.conf.set_override)
+ def decorator_for_clear_override(wrapped_function):
+ @wraps(wrapped_function)
+ def _wrapper(*args, **kwargs):
+ group = 'oslo_messaging_notifications'
+ if args[0] == 'notification_driver':
+ args = ('driver', group)
+ elif args[0] == 'notification_transport_url':
+ args = ('transport_url', group)
+ elif args[0] == 'notification_topics':
+ args = ('topics', group)
+ return wrapped_function(*args, **kwargs)
+ _wrapper.wrapped = wrapped_function
+ return _wrapper
+
+ if not hasattr(self.conf.set_override, 'wrapped'):
+ self.conf.set_override = decorator_for_set_override(
+ self.conf.set_override)
+ if not hasattr(self.conf.clear_override, 'wrapped'):
+ self.conf.clear_override = decorator_for_clear_override(
+ self.conf.clear_override)
+
+ def _teardown_decorator(self):
+ if hasattr(self.conf.set_override, 'wrapped'):
+ self.conf.set_override = self.conf.set_override.wrapped
+ if hasattr(self.conf.clear_override, 'wrapped'):
+ self.conf.clear_override = self.conf.clear_override.wrapped
def setUp(self):
super(ConfFixture, self).setUp()
+ self._setup_decorator()
+ self.addCleanup(self._teardown_decorator)
self.addCleanup(self.conf.reset)
@property
diff --git a/oslo_messaging/tests/test_fixture.py b/oslo_messaging/tests/test_fixture.py
index dfa78b6..2ad1117 100644
--- a/oslo_messaging/tests/test_fixture.py
+++ b/oslo_messaging/tests/test_fixture.py
@@ -12,10 +12,48 @@
# License for the specific language governing permissions and limitations
# under the License.
+from oslo_config import cfg
+
+from oslo_messaging import conffixture
from oslo_messaging.tests import utils as test_utils
class TestConfFixture(test_utils.BaseTestCase):
+
+ def test_fixture_wraps_set_override(self):
+ conf = self.messaging_conf.conf
+ self.assertIsNotNone(conf.set_override.wrapped)
+ self.messaging_conf._teardown_decorator()
+ self.assertFalse(hasattr(conf.set_override, 'wrapped'))
+
+ def test_fixture_wraps_clear_override(self):
+ conf = self.messaging_conf.conf
+ self.assertIsNotNone(conf.clear_override.wrapped)
+ self.messaging_conf._teardown_decorator()
+ self.assertFalse(hasattr(conf.clear_override, 'wrapped'))
+
+ def test_fixture_setup_teardown_decorator(self):
+ conf = cfg.ConfigOpts()
+ self.assertFalse(hasattr(conf.set_override, 'wrapped'))
+ self.assertFalse(hasattr(conf.clear_override, 'wrapped'))
+ fixture = conffixture.ConfFixture(conf)
+ self.assertFalse(hasattr(conf.set_override, 'wrapped'))
+ self.assertFalse(hasattr(conf.clear_override, 'wrapped'))
+ self.useFixture(fixture)
+ self.assertTrue(hasattr(conf.set_override, 'wrapped'))
+ self.assertTrue(hasattr(conf.clear_override, 'wrapped'))
+ fixture._teardown_decorator()
+ self.assertFalse(hasattr(conf.set_override, 'wrapped'))
+ self.assertFalse(hasattr(conf.clear_override, 'wrapped'))
+
+ def test_fixture_properties(self):
+ conf = self.messaging_conf.conf
+ self.messaging_conf.transport_driver = 'fake'
+ self.assertEqual('fake',
+ self.messaging_conf.transport_driver)
+ self.assertEqual('fake',
+ conf.rpc_backend)
+
def test_old_notifications_config_override(self):
conf = self.messaging_conf.conf
conf.set_override(
@@ -31,3 +69,14 @@ class TestConfFixture(test_utils.BaseTestCase):
conf.oslo_messaging_notifications.transport_url)
self.assertEqual(['topic1'],
conf.oslo_messaging_notifications.topics)
+
+ conf.clear_override("notification_driver")
+ conf.clear_override("notification_transport_url")
+ conf.clear_override("notification_topics")
+
+ self.assertEqual([],
+ conf.oslo_messaging_notifications.driver)
+ self.assertEqual(None,
+ conf.oslo_messaging_notifications.transport_url)
+ self.assertEqual(['notifications'],
+ conf.oslo_messaging_notifications.topics) \ No newline at end of file