summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openstack/common/plugin/pluginmanager.py26
-rw-r--r--tests/unit/test_plugin.py24
2 files changed, 33 insertions, 17 deletions
diff --git a/openstack/common/plugin/pluginmanager.py b/openstack/common/plugin/pluginmanager.py
index 2e3d497..d9b6bc3 100644
--- a/openstack/common/plugin/pluginmanager.py
+++ b/openstack/common/plugin/pluginmanager.py
@@ -53,15 +53,16 @@ class PluginManager(object):
self._service_name = service_name
self.plugins = []
- # Make sure we're using the list_notifier.
- if not hasattr(CONF, "list_notifier_drivers"):
- CONF.list_notifier_drivers = []
- old_notifier = CONF.notification_driver
- drvstring = 'openstack.common.notifier.list_notifier'
- CONF.notification_driver = drvstring
- if (old_notifier and
- old_notifier != 'openstack.common.notifier.list_notifier'):
- list_notifier.add_driver(old_notifier)
+ def _force_use_list_notifier(self):
+ if (CONF.notification_driver !=
+ 'openstack.common.notifier.list_notifier'):
+ if not hasattr(CONF, "list_notifier_drivers"):
+ CONF.list_notifier_drivers = []
+ old_notifier = CONF.notification_driver
+ drvstring = 'openstack.common.notifier.list_notifier'
+ CONF.notification_driver = drvstring
+ if old_notifier:
+ list_notifier.add_driver(old_notifier)
def load_plugins(self):
self.plugins = []
@@ -76,6 +77,13 @@ class PluginManager(object):
LOG.error(_("Failed to load plugin %(plug)s: %(exc)s") %
{'plug': entrypoint, 'exc': exc})
+ # See if we need to turn on the list notifier
+ for plugin in self.plugins:
+ if plugin.notifiers:
+ self._force_use_list_notifier()
+ break
+
+ # Register individual notifiers.
for plugin in self.plugins:
for notifier in plugin.notifiers:
list_notifier.add_driver(notifier)
diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py
index cfbbb23..01665ba 100644
--- a/tests/unit/test_plugin.py
+++ b/tests/unit/test_plugin.py
@@ -16,6 +16,7 @@
import pkg_resources
import unittest
+from openstack.common import cfg
from openstack.common import notifier
from openstack.common.notifier import api as notifier_api
from openstack.common.notifier import no_op_notifier
@@ -33,6 +34,12 @@ class SimpleNotifier(object):
self.message_list.append(message)
+class SimplerNotifier(object):
+ def notify(self, context, message):
+ global simpler_notify_called
+ simpler_notify_called = True
+
+
class ManagerTestCase(test_utils.BaseTestCase):
def tearDown(self):
super(ManagerTestCase, self).tearDown()
@@ -49,13 +56,10 @@ class NotifyTestCase(test_utils.BaseTestCase):
# Set up a 'normal' notifier to make sure the plugin logic
# doesn't mess anything up.
- self.config(
- notification_driver='openstack.common.notifier.no_op_notifier')
-
- def mock_notify(cls, *args):
- self.no_op_notify_called = True
- self.stubs.Set(no_op_notifier, 'notify',
- mock_notify)
+ self.stubs.Set(cfg.CONF, 'notification_driver',
+ SimplerNotifier())
+ global simpler_notify_called
+ simpler_notify_called = False
def tearDown(self):
super(NotifyTestCase, self).tearDown()
@@ -90,7 +94,11 @@ class NotifyTestCase(test_utils.BaseTestCase):
notifier_api.WARN, dict(a=3))
self.assertEqual(len(notifier.message_list), 1)
- self.assertTrue(self.no_op_notify_called)
+
+ # Verify that the original baseline notifier is still
+ # installed and working.
+ global simpler_notify_called
+ self.assertTrue(simpler_notify_called)
class StubControllerExtension(object):