def build_device(self, mon_sub=b"", in_prefix=b'in', out_prefix=b'out'): self.device = devices.ThreadMonitoredQueue(zmq.PAIR, zmq.PAIR, zmq.PUB, in_prefix, out_prefix) alice = self.context.socket(zmq.PAIR) bob = self.context.socket(zmq.PAIR) mon = self.context.socket(zmq.SUB) aport = alice.bind_to_random_port('tcp://127.0.0.1') bport = bob.bind_to_random_port('tcp://127.0.0.1') mport = mon.bind_to_random_port('tcp://127.0.0.1') mon.setsockopt(zmq.SUBSCRIBE, mon_sub) self.device.connect_in("tcp://127.0.0.1:%i" % aport) self.device.connect_out("tcp://127.0.0.1:%i" % bport) self.device.connect_mon("tcp://127.0.0.1:%i" % mport) self.device.start() time.sleep(.2) try: # this is currenlty necessary to ensure no dropped monitor messages # see LIBZMQ-248 for more info mon.recv_multipart(zmq.NOBLOCK) except zmq.ZMQError: pass self.sockets.extend([alice, bob, mon]) return alice, bob, mon
def test_router_router(self): """test router-router MQ devices""" if zmq.zmq_version() >= '4.0.0': raise SkipTest("Only for libzmq < 4") dev = devices.ThreadMonitoredQueue(zmq.ROUTER, zmq.ROUTER, zmq.PUB, asbytes('in'), asbytes('out')) dev.setsockopt_in(zmq.LINGER, 0) dev.setsockopt_out(zmq.LINGER, 0) dev.setsockopt_mon(zmq.LINGER, 0) binder = self.context.socket(zmq.DEALER) porta = binder.bind_to_random_port('tcp://127.0.0.1') portb = binder.bind_to_random_port('tcp://127.0.0.1') binder.close() time.sleep(0.1) a = self.context.socket(zmq.DEALER) a.identity = asbytes('a') b = self.context.socket(zmq.DEALER) b.identity = asbytes('b') a.connect('tcp://127.0.0.1:%i' % porta) dev.bind_in('tcp://127.0.0.1:%i' % porta) b.connect('tcp://127.0.0.1:%i' % portb) dev.bind_out('tcp://127.0.0.1:%i' % portb) dev.start() time.sleep(0.2) msg = [asbytes(m) for m in ('hello', 'there')] a.send_multipart([asbytes('b')] + msg) bmsg = self.recv_multipart(b) self.assertEquals(bmsg, [asbytes('a')] + msg) b.send_multipart(bmsg) amsg = self.recv_multipart(a) self.assertEquals(amsg, [asbytes('b')] + msg)
def build_device(self, mon_sub=asbytes(""), in_prefix=asbytes('in'), out_prefix=asbytes('out')): if zmq.zmq_version() >= '3': raise SkipTest( "MonitoredQueues don't work reliably on libzmq >= 3.0.0") self.device = devices.ThreadMonitoredQueue(zmq.PAIR, zmq.PAIR, zmq.PUB, in_prefix, out_prefix) alice = self.context.socket(zmq.PAIR) bob = self.context.socket(zmq.PAIR) mon = self.context.socket(zmq.SUB) aport = alice.bind_to_random_port('tcp://127.0.0.1') bport = bob.bind_to_random_port('tcp://127.0.0.1') mport = mon.bind_to_random_port('tcp://127.0.0.1') mon.setsockopt(zmq.SUBSCRIBE, mon_sub) self.device.connect_in("tcp://127.0.0.1:%i" % aport) self.device.connect_out("tcp://127.0.0.1:%i" % bport) self.device.connect_mon("tcp://127.0.0.1:%i" % mport) time.sleep(.2) self.device.start() self.sockets.extend([alice, bob, mon]) return alice, bob, mon
def test_default_mq_args(self): self.device = dev = devices.ThreadMonitoredQueue(zmq.ROUTER, zmq.DEALER, zmq.PUB) dev.setsockopt_in(zmq.LINGER, 0) dev.setsockopt_out(zmq.LINGER, 0) dev.setsockopt_mon(zmq.LINGER, 0) # this will raise if default args are wrong dev.start() self.teardown_device()
def test_router_router(self): """test router-router MQ devices""" dev = devices.ThreadMonitoredQueue(zmq.ROUTER, zmq.ROUTER, zmq.PUB, b'in', b'out') self.device = dev dev.setsockopt_in(zmq.LINGER, 0) dev.setsockopt_out(zmq.LINGER, 0) dev.setsockopt_mon(zmq.LINGER, 0) binder = self.context.socket(zmq.DEALER) porta = binder.bind_to_random_port('tcp://127.0.0.1') portb = binder.bind_to_random_port('tcp://127.0.0.1') binder.close() time.sleep(0.1) a = self.context.socket(zmq.DEALER) a.identity = b'a' b = self.context.socket(zmq.DEALER) b.identity = b'b' self.sockets.extend([a, b]) a.connect('tcp://127.0.0.1:%i' % porta) dev.bind_in('tcp://127.0.0.1:%i' % porta) b.connect('tcp://127.0.0.1:%i' % portb) dev.bind_out('tcp://127.0.0.1:%i' % portb) dev.start() time.sleep(0.2) if zmq.zmq_version_info() >= (3, 1, 0): # flush erroneous poll state, due to LIBZMQ-280 ping_msg = [b'ping', b'pong'] for s in (a, b): s.send_multipart(ping_msg) try: s.recv(zmq.NOBLOCK) except zmq.ZMQError: pass msg = [b'hello', b'there'] a.send_multipart([b'b'] + msg) bmsg = self.recv_multipart(b) self.assertEqual(bmsg, [b'a'] + msg) b.send_multipart(bmsg) amsg = self.recv_multipart(a) self.assertEqual(amsg, [b'b'] + msg) self.teardown_device()
def build_device(self, mon_sub="".encode(), in_prefix='in'.encode(), out_prefix='out'.encode()): self.device = devices.ThreadMonitoredQueue(zmq.PAIR, zmq.PAIR, zmq.PUB, in_prefix, out_prefix) alice = self.context.socket(zmq.PAIR) bob = self.context.socket(zmq.PAIR) mon = self.context.socket(zmq.SUB) aport = alice.bind_to_random_port('tcp://127.0.0.1') bport = bob.bind_to_random_port('tcp://127.0.0.1') mport = mon.bind_to_random_port('tcp://127.0.0.1') mon.setsockopt(zmq.SUBSCRIBE, mon_sub) self.device.connect_in("tcp://127.0.0.1:%i"%aport) self.device.connect_out("tcp://127.0.0.1:%i"%bport) self.device.connect_mon("tcp://127.0.0.1:%i"%mport) time.sleep(.2) self.device.start() self.sockets.extend([alice, bob, mon]) return alice, bob, mon