From 52ccff7cbc26af0738d7a0a7d6e99330421b61d1 Mon Sep 17 00:00:00 2001 From: Oleksii Zamiatin Date: Fri, 4 Dec 2015 21:47:18 +0200 Subject: [PATCH] Properly skip zmq tests without ZeroMQ being installed In this change import_zmq() doesn't raise ImportError any more for the benefit of skipping tests. Alarm about zmq unavailability moved to driver's init. Change-Id: I6e6acc39f42c979333510064d9e845228400d233 Closes-Bug: #1522920 --- oslo_messaging/_drivers/impl_zmq.py | 6 ++++++ .../_drivers/zmq_driver/zmq_async.py | 4 +--- .../tests/drivers/zmq/test_impl_zmq.py | 1 + .../tests/drivers/zmq/test_zmq_async.py | 20 +++++++++---------- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/oslo_messaging/_drivers/impl_zmq.py b/oslo_messaging/_drivers/impl_zmq.py index 17bfe41e4..f8bf1378e 100644 --- a/oslo_messaging/_drivers/impl_zmq.py +++ b/oslo_messaging/_drivers/impl_zmq.py @@ -26,7 +26,9 @@ from oslo_messaging._drivers import common as rpc_common from oslo_messaging._drivers.zmq_driver.client import zmq_client from oslo_messaging._drivers.zmq_driver.client import zmq_client_light from oslo_messaging._drivers.zmq_driver.server import zmq_server +from oslo_messaging._drivers.zmq_driver import zmq_async from oslo_messaging._executors import impl_pooledexecutor # FIXME(markmc) +from oslo_messaging._i18n import _LE pformat = pprint.pformat @@ -162,6 +164,10 @@ class ZmqDriver(base.BaseDriver): :param allowed_remote_exmods: remote exception passing options :type allowed_remote_exmods: list """ + zmq = zmq_async.import_zmq() + if zmq is None: + raise ImportError(_LE("ZeroMQ is not available!")) + conf.register_opts(zmq_opts) conf.register_opts(impl_pooledexecutor._pool_opts) conf.register_opts(base.base_opts) diff --git a/oslo_messaging/_drivers/zmq_driver/zmq_async.py b/oslo_messaging/_drivers/zmq_driver/zmq_async.py index 4de248f39..093544118 100644 --- a/oslo_messaging/_drivers/zmq_driver/zmq_async.py +++ b/oslo_messaging/_drivers/zmq_driver/zmq_async.py @@ -30,12 +30,10 @@ def import_zmq(zmq_concurrency='eventlet'): _raise_error_if_invalid_config_value(zmq_concurrency) imported_zmq = importutils.try_import(ZMQ_MODULES[zmq_concurrency], - default='zmq') + default=None) if imported_zmq is None: - errmsg = _LE("ZeroMQ not found!") LOG.error(_LE("ZeroMQ not found!")) - raise ImportError(errmsg) return imported_zmq diff --git a/oslo_messaging/tests/drivers/zmq/test_impl_zmq.py b/oslo_messaging/tests/drivers/zmq/test_impl_zmq.py index a11b61f59..4062f17c7 100644 --- a/oslo_messaging/tests/drivers/zmq/test_impl_zmq.py +++ b/oslo_messaging/tests/drivers/zmq/test_impl_zmq.py @@ -224,6 +224,7 @@ class TestZmqBasics(ZmqBaseTestCase): class TestPoller(test_utils.BaseTestCase): + @testtools.skipIf(zmq is None, "zmq not available") def setUp(self): super(TestPoller, self).setUp() self.poller = zmq_async.get_poller() diff --git a/oslo_messaging/tests/drivers/zmq/test_zmq_async.py b/oslo_messaging/tests/drivers/zmq/test_zmq_async.py index 28e091a0e..ccfae3348 100644 --- a/oslo_messaging/tests/drivers/zmq/test_zmq_async.py +++ b/oslo_messaging/tests/drivers/zmq/test_zmq_async.py @@ -11,15 +11,19 @@ # under the License. import mock +import testtools from oslo_messaging._drivers.zmq_driver.poller import green_poller from oslo_messaging._drivers.zmq_driver.poller import threading_poller from oslo_messaging._drivers.zmq_driver import zmq_async from oslo_messaging.tests import utils as test_utils +zmq = zmq_async.import_zmq() + class TestImportZmq(test_utils.BaseTestCase): + @testtools.skipIf(zmq is None, "zmq not available") def setUp(self): super(TestImportZmq, self).setUp() @@ -29,12 +33,12 @@ class TestImportZmq(test_utils.BaseTestCase): zmq_async.importutils.try_import.return_value = 'mock zmq module' self.assertEqual('mock zmq module', zmq_async.import_zmq('native')) - mock_try_import.assert_called_with('zmq', default='zmq') + mock_try_import.assert_called_with('zmq', default=None) zmq_async.importutils.try_import.return_value = 'mock eventlet module' self.assertEqual('mock eventlet module', zmq_async.import_zmq('eventlet')) - mock_try_import.assert_called_with('eventlet.green.zmq', default='zmq') + mock_try_import.assert_called_with('eventlet.green.zmq', default=None) def test_when_no_args_then_default_zmq_module_is_loaded(self): mock_try_import = mock.Mock() @@ -42,14 +46,7 @@ class TestImportZmq(test_utils.BaseTestCase): zmq_async.import_zmq() - mock_try_import.assert_called_with('eventlet.green.zmq', default='zmq') - - def test_when_import_fails_then_raise_ImportError(self): - zmq_async.importutils.try_import = mock.Mock() - zmq_async.importutils.try_import.return_value = None - - with self.assertRaisesRegexp(ImportError, "ZeroMQ not found!"): - zmq_async.import_zmq('native') + mock_try_import.assert_called_with('eventlet.green.zmq', default=None) def test_invalid_config_value_raise_ValueError(self): invalid_opt = 'x' @@ -61,6 +58,7 @@ class TestImportZmq(test_utils.BaseTestCase): class TestGetPoller(test_utils.BaseTestCase): + @testtools.skipIf(zmq is None, "zmq not available") def setUp(self): super(TestGetPoller, self).setUp() @@ -100,6 +98,7 @@ class TestGetPoller(test_utils.BaseTestCase): class TestGetReplyPoller(test_utils.BaseTestCase): + @testtools.skipIf(zmq is None, "zmq not available") def setUp(self): super(TestGetReplyPoller, self).setUp() @@ -134,6 +133,7 @@ class TestGetReplyPoller(test_utils.BaseTestCase): class TestGetExecutor(test_utils.BaseTestCase): + @testtools.skipIf(zmq is None, "zmq not available") def setUp(self): super(TestGetExecutor, self).setUp()