diff options
author | Eric Windisch <eric@cloudscaling.com> | 2013-01-03 10:53:52 -0500 |
---|---|---|
committer | Eric Windisch <eric@cloudscaling.com> | 2013-01-10 23:01:21 -0500 |
commit | bd1e5a3350305cd6554ba3b0d537d670bf6b4a75 (patch) | |
tree | 47fc0c72cf765d7efb92247548e79737b15ffead | |
parent | a8973c524c9fe901972ba61f34dafac7438417c9 (diff) | |
download | oslo-bd1e5a3350305cd6554ba3b0d537d670bf6b4a75.tar.gz oslo-bd1e5a3350305cd6554ba3b0d537d670bf6b4a75.tar.xz oslo-bd1e5a3350305cd6554ba3b0d537d670bf6b4a75.zip |
Address test_zmq setup/teardown races
Each test now consumes a new port number (9500+),
and socket directory based on an auto-incrementing
global counter (TESTCNT).
Also makes minor cleanup to test receiver setup logic.
fixes bug 1096223
Change-Id: Ie6a88c535c81f2fc12b97d32c2674a6184325d2a
-rw-r--r-- | tests/unit/rpc/test_zmq.py | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/tests/unit/rpc/test_zmq.py b/tests/unit/rpc/test_zmq.py index 2dbacb0..d43c384 100644 --- a/tests/unit/rpc/test_zmq.py +++ b/tests/unit/rpc/test_zmq.py @@ -44,10 +44,14 @@ FLAGS = cfg.CONF class _RpcZmqBaseTestCase(common.BaseRpcTestCase): - @testutils.skip_if(True, "Zmq tests broken on jenkins") + # TESTCNT needs to be a class var as each run + # by subclasses must have a unique identifier + TESTCNT = 0 + + @testutils.skip_if(not impl_zmq, "ZeroMQ library required") def setUp(self, topic='test', topic_nested='nested'): - if not impl_zmq: - return None + _RpcZmqBaseTestCase.TESTCNT += 1 + testcnt = _RpcZmqBaseTestCase.TESTCNT self.reactor = None self.rpc = impl_zmq @@ -60,21 +64,19 @@ class _RpcZmqBaseTestCase(common.BaseRpcTestCase): # We'll change this if we detect no daemon running. ipc_dir = FLAGS.rpc_zmq_ipc_dir - # Our IPC dir, if no nova-rpc-zmq_receiver is running system-wide. - internal_ipc_dir = '/tmp/openstack-zmq.ipc.test' - # Only launch the router if it isn't running. if not os.path.exists(os.path.join(ipc_dir, "zmq_topic_zmq_replies")): - LOG.info(_("Running internal zmq receiver.")) - # The normal ipc_dir default needs to run as root, - # /tmp is easier within a testing environment. + # NOTE(ewindisch): rpc_zmq_port and internal_ipc_dir must + # increment to avoid async socket + # closing/wait delays causing races + # between tearDown() and setUp() + self.config(rpc_zmq_port=9500 + testcnt) + internal_ipc_dir = "/tmp/openstack-zmq.ipc.test.%s" % testcnt self.config(rpc_zmq_ipc_dir=internal_ipc_dir) - # Value has changed. - ipc_dir = FLAGS.rpc_zmq_ipc_dir - - self.setup_receiver(ipc_dir) - elif ipc_dir != internal_ipc_dir: + LOG.info(_("Running internal zmq receiver.")) + self.setup_receiver(internal_ipc_dir) + else: LOG.warning(_("Detected zmq-receiver socket.")) LOG.warning(_("Assuming nova-rpc-zmq-receiver is running.")) LOG.warning(_("Using system zmq receiver deamon.")) @@ -108,9 +110,8 @@ class _RpcZmqBaseTestCase(common.BaseRpcTestCase): "Socket may already be in use.")) raise + @testutils.skip_if(not impl_zmq, "ZeroMQ library required") def tearDown(self): - if not impl_zmq: - return None if self.reactor: self.reactor.close() |