def test_poll_blocking(self): rep = self.ctx.socket(zmq.REP) rep.bind(self.ADDR_REQ) reply_poller = zmq_async.get_reply_poller() reply_poller.register(rep) def listener(): incoming, socket = reply_poller.poll() self.assertEqual(b'Hello', incoming[0]) socket.send_string('Reply') reply_poller.resume_polling(socket) executor = zmq_async.get_executor(listener) executor.execute() req1 = self.ctx.socket(zmq.REQ) req1.connect(self.ADDR_REQ) req2 = self.ctx.socket(zmq.REQ) req2.connect(self.ADDR_REQ) req1.send_string('Hello') req2.send_string('Hello') reply = req1.recv_string() self.assertEqual('Reply', reply) reply = req2.recv_string() self.assertEqual('Reply', reply)
def test_poll_blocking(self): rep = self.ctx.socket(zmq.REP) rep.bind(self.ADDR_REQ) reply_poller = zmq_async.get_reply_poller() reply_poller.register(rep) def listener(): incoming, socket = reply_poller.poll() self.assertEqual(b'Hello', incoming[0]) socket.send_string('Reply') reply_poller.resume_polling(socket) executor = zmq_async.get_executor(listener) executor.execute() req1 = self.ctx.socket(zmq.REQ) req1.connect(self.ADDR_REQ) req2 = self.ctx.socket(zmq.REQ) req2.connect(self.ADDR_REQ) req1.send_string('Hello') req2.send_string('Hello') reply = req1.recv_string() self.assertEqual('Reply', reply) reply = req2.recv_string() self.assertEqual('Reply', reply)
def test_poll_timeout(self): rep = self.ctx.socket(zmq.REP) rep.bind(self.ADDR_REQ) reply_poller = zmq_async.get_reply_poller() reply_poller.register(rep) incoming, socket = reply_poller.poll(1) self.assertIsNone(incoming) self.assertIsNone(socket)
def test_poll_timeout(self): rep = self.ctx.socket(zmq.REP) rep.bind(self.ADDR_REQ) reply_poller = zmq_async.get_reply_poller() reply_poller.register(rep) incoming, socket = reply_poller.poll(1) self.assertIsNone(incoming) self.assertIsNone(socket)
def _receive_reply(socket, request): def _receive_method(socket): return socket.recv_pyobj() # NOTE(ozamiatin): Check for retry here (no retries now) with contextlib.closing(zmq_async.get_reply_poller()) as poller: poller.register(socket, recv_method=_receive_method) reply, socket = poller.poll(timeout=request.timeout) if reply is None: raise oslo_messaging.MessagingTimeout( "Timeout %s seconds was reached" % request.timeout) if reply[zmq_names.FIELD_FAILURE]: raise rpc_common.deserialize_remote_exception( reply[zmq_names.FIELD_FAILURE], request.allowed_remote_exmods) else: return reply[zmq_names.FIELD_REPLY]
def _receive_reply(socket, request): def _receive_method(socket): return socket.recv_pyobj() # NOTE(ozamiatin): Check for retry here (no retries now) with contextlib.closing(zmq_async.get_reply_poller()) as poller: poller.register(socket, recv_method=_receive_method) reply, socket = poller.poll(timeout=request.timeout) if reply is None: raise oslo_messaging.MessagingTimeout( "Timeout %s seconds was reached" % request.timeout) if reply[zmq_names.FIELD_FAILURE]: raise rpc_common.deserialize_remote_exception( reply[zmq_names.FIELD_FAILURE], request.allowed_remote_exmods) else: return reply[zmq_names.FIELD_REPLY]
def test_invalid_config_value_raise_ValueError(self): invalid_opt = 'x' errmsg = 'Invalid zmq_concurrency value: x' with self.assertRaisesRegexp(ValueError, errmsg): zmq_async.get_reply_poller(invalid_opt)
def test_when_eventlet_is_unavailable_then_return_ThreadingPoller(self): zmq_async._is_eventlet_zmq_available = lambda: False actual = zmq_async.get_reply_poller('eventlet') self.assertTrue(isinstance(actual, threading_poller.ThreadingPoller))
def test_when_eventlet_is_available_then_return_HoldReplyPoller(self): zmq_async._is_eventlet_zmq_available = lambda: True actual = zmq_async.get_reply_poller('eventlet') self.assertTrue(isinstance(actual, green_poller.HoldReplyPoller))
def test_default_reply_poller_is_HoldReplyPoller(self): zmq_async._is_eventlet_zmq_available = lambda: True actual = zmq_async.get_reply_poller() self.assertTrue(isinstance(actual, green_poller.HoldReplyPoller))