Esempio n. 1
0
    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
Esempio n. 2
0
    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)
Esempio n. 3
0
    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
Esempio n. 4
0
 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()
Esempio n. 5
0
    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()
Esempio n. 6
0
 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