From 386f5daee6be77eac6a19c0f8d5ba15210a0c99a Mon Sep 17 00:00:00 2001
From: James Page <james.page@ubuntu.com>
Date: Mon, 5 Jan 2015 09:23:09 +0000
Subject: [PATCH] zmq: Refactor test case shared code

A number of the ZMQ test cases shared the same setUp method; refactor
and introduce a base test case class to share this code across all
appropriate ZMQ test cases.

Change-Id: I59300464af001c343efcd4f3f33d34c972da2b87
---
 oslo_messaging/tests/drivers/test_impl_zmq.py | 139 +++++-------------
 tests/drivers/test_impl_zmq.py                | 137 +++++------------
 2 files changed, 66 insertions(+), 210 deletions(-)

diff --git a/oslo_messaging/tests/drivers/test_impl_zmq.py b/oslo_messaging/tests/drivers/test_impl_zmq.py
index d3b03f646..a524aa6f8 100644
--- a/oslo_messaging/tests/drivers/test_impl_zmq.py
+++ b/oslo_messaging/tests/drivers/test_impl_zmq.py
@@ -24,8 +24,6 @@ from oslo.utils import importutils
 import oslo_messaging
 from oslo_messaging.tests import utils as test_utils
 
-# NOTE(jamespage) the zmq driver implementation is currently tied
-# to eventlet so we have to monkey_patch to support testing
 # eventlet is not yet py3 compatible, so skip if not installed
 eventlet = importutils.try_import('eventlet')
 
@@ -44,6 +42,35 @@ def get_unused_port():
     return port
 
 
+class ZmqBaseTestCase(test_utils.BaseTestCase):
+    """Base test case for all ZMQ tests that make use of the ZMQ Proxy"""
+
+    @testtools.skipIf(impl_zmq is None, "zmq not available")
+    def setUp(self):
+        super(ZmqBaseTestCase, self).setUp()
+        self.messaging_conf.transport_driver = 'zmq'
+        # Get driver
+        transport = oslo_messaging.get_transport(self.conf)
+        self.driver = transport._driver
+
+        # Set config values
+        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
+        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
+                  'rpc_zmq_host': '127.0.0.1',
+                  'rpc_response_timeout': 5,
+                  'rpc_zmq_port': get_unused_port(),
+                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
+        self.config(**kwargs)
+
+        # Start RPC
+        LOG.info("Running internal zmq receiver.")
+        self.reactor = impl_zmq.ZmqProxy(self.conf)
+        self.reactor.consume_in_thread()
+
+        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
+        self.addCleanup(stopRpc(self.__dict__))
+
+
 class TestConfZmqDriverLoad(test_utils.BaseTestCase):
 
     @testtools.skipIf(impl_zmq is None, "zmq not available")
@@ -67,32 +94,7 @@ class stopRpc(object):
             self.attrs['driver'].cleanup()
 
 
-class TestZmqBasics(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqBasics, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = oslo_messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqBasics(ZmqBaseTestCase):
 
     def test_start_stop_listener(self):
         target = oslo_messaging.Target(topic='testtopic')
@@ -277,32 +279,7 @@ class TestZmqIncomingMessage(test_utils.BaseTestCase):
         msg.requeue()
 
 
-class TestZmqConnection(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqConnection, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = oslo_messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqConnection(ZmqBaseTestCase):
 
     @mock.patch('oslo_messaging._drivers.impl_zmq.ZmqReactor', autospec=True)
     def test_zmqconnection_create_consumer(self, mock_reactor):
@@ -379,32 +356,7 @@ class TestZmqConnection(test_utils.BaseTestCase):
         self.assertTrue(conn.reactor.consume_in_thread.called)
 
 
-class TestZmqListener(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqListener, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = oslo_messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqListener(ZmqBaseTestCase):
 
     def test_zmqlistener_no_msg(self):
         listener = impl_zmq.ZmqListener(self.driver)
@@ -424,32 +376,7 @@ class TestZmqListener(test_utils.BaseTestCase):
         self.assertEqual(resp.message, msg)
 
 
-class TestZmqDriver(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqDriver, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = oslo_messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqDriver(ZmqBaseTestCase):
 
     @mock.patch('oslo_messaging._drivers.impl_zmq._cast', autospec=True)
     @mock.patch('oslo_messaging._drivers.impl_zmq._multi_send', autospec=True)
diff --git a/tests/drivers/test_impl_zmq.py b/tests/drivers/test_impl_zmq.py
index 30277c93a..091ebe87e 100644
--- a/tests/drivers/test_impl_zmq.py
+++ b/tests/drivers/test_impl_zmq.py
@@ -42,6 +42,35 @@ def get_unused_port():
     return port
 
 
+class ZmqBaseTestCase(test_utils.BaseTestCase):
+    """Base test case for all ZMQ tests that make use of the ZMQ Proxy"""
+
+    @testtools.skipIf(impl_zmq is None, "zmq not available")
+    def setUp(self):
+        super(ZmqBaseTestCase, self).setUp()
+        self.messaging_conf.transport_driver = 'zmq'
+        # Get driver
+        transport = messaging.get_transport(self.conf)
+        self.driver = transport._driver
+
+        # Set config values
+        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
+        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
+                  'rpc_zmq_host': '127.0.0.1',
+                  'rpc_response_timeout': 5,
+                  'rpc_zmq_port': get_unused_port(),
+                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
+        self.config(**kwargs)
+
+        # Start RPC
+        LOG.info("Running internal zmq receiver.")
+        self.reactor = impl_zmq.ZmqProxy(self.conf)
+        self.reactor.consume_in_thread()
+
+        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
+        self.addCleanup(stopRpc(self.__dict__))
+
+
 class TestConfZmqDriverLoad(test_utils.BaseTestCase):
 
     @testtools.skipIf(impl_zmq is None, "zmq not available")
@@ -65,32 +94,7 @@ class stopRpc(object):
             self.attrs['driver'].cleanup()
 
 
-class TestZmqBasics(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqBasics, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqBasics(ZmqBaseTestCase):
 
     def test_start_stop_listener(self):
         target = messaging.Target(topic='testtopic')
@@ -275,32 +279,7 @@ class TestZmqIncomingMessage(test_utils.BaseTestCase):
         msg.requeue()
 
 
-class TestZmqConnection(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqConnection, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqConnection(ZmqBaseTestCase):
 
     @mock.patch('oslo.messaging._drivers.impl_zmq.ZmqReactor', autospec=True)
     def test_zmqconnection_create_consumer(self, mock_reactor):
@@ -377,32 +356,7 @@ class TestZmqConnection(test_utils.BaseTestCase):
         self.assertTrue(conn.reactor.consume_in_thread.called)
 
 
-class TestZmqListener(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqListener, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqListener(ZmqBaseTestCase):
 
     def test_zmqlistener_no_msg(self):
         listener = impl_zmq.ZmqListener(self.driver)
@@ -422,32 +376,7 @@ class TestZmqListener(test_utils.BaseTestCase):
         self.assertEqual(resp.message, msg)
 
 
-class TestZmqDriver(test_utils.BaseTestCase):
-
-    @testtools.skipIf(impl_zmq is None, "zmq not available")
-    def setUp(self):
-        super(TestZmqDriver, self).setUp()
-        self.messaging_conf.transport_driver = 'zmq'
-        # Get driver
-        transport = messaging.get_transport(self.conf)
-        self.driver = transport._driver
-
-        # Set config values
-        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
-        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
-                  'rpc_zmq_host': '127.0.0.1',
-                  'rpc_response_timeout': 5,
-                  'rpc_zmq_port': get_unused_port(),
-                  'rpc_zmq_ipc_dir': self.internal_ipc_dir}
-        self.config(**kwargs)
-
-        # Start RPC
-        LOG.info("Running internal zmq receiver.")
-        self.reactor = impl_zmq.ZmqProxy(self.conf)
-        self.reactor.consume_in_thread()
-
-        self.matchmaker = impl_zmq._get_matchmaker(host='127.0.0.1')
-        self.addCleanup(stopRpc(self.__dict__))
+class TestZmqDriver(ZmqBaseTestCase):
 
     @mock.patch('oslo.messaging._drivers.impl_zmq._cast', autospec=True)
     @mock.patch('oslo.messaging._drivers.impl_zmq._multi_send', autospec=True)