def test_proxy_steerable_statistics(self):
     if zmq.zmq_version_info() < (4, 3):
         raise SkipTest("STATISTICS only in libzmq >= 4.3")
     dev = devices.ThreadProxySteerable(zmq.PULL, zmq.PUSH, zmq.PUSH,
                                        zmq.PAIR)
     iface = 'tcp://10.0.0.7'
     port = dev.bind_in_to_random_port(iface)
     port2 = dev.bind_out_to_random_port(iface)
     port3 = dev.bind_mon_to_random_port(iface)
     port4 = dev.bind_ctrl_to_random_port(iface)
     dev.start()
     time.sleep(0.25)
     msg = b'hello'
     push = self.context.socket(zmq.PUSH)
     push.connect("%s:%i" % (iface, port))
     pull = self.context.socket(zmq.PULL)
     pull.connect("%s:%i" % (iface, port2))
     mon = self.context.socket(zmq.PULL)
     mon.connect("%s:%i" % (iface, port3))
     ctrl = self.context.socket(zmq.PAIR)
     ctrl.connect("%s:%i" % (iface, port4))
     push.send(msg)
     self.sockets.extend([push, pull, mon, ctrl])
     self.assertEqual(msg, self.recv(pull))
     self.assertEqual(msg, self.recv(mon))
     ctrl.send(b'STATISTICS')
     stats = self.recv_multipart(ctrl)
     stats_int = [struct.unpack("<Q", x)[0] for x in stats]
     self.assertEqual(1, stats_int[0])
     self.assertEqual(len(msg), stats_int[1])
     self.assertEqual(1, stats_int[6])
     self.assertEqual(len(msg), stats_int[7])
     ctrl.send(b'TERMINATE')
     dev.join()
 def test_proxy_steerable(self):
     if zmq.zmq_version_info() < (4, 1):
         raise SkipTest("Steerable Proxies only in libzmq >= 4.1")
     dev = devices.ThreadProxySteerable(zmq.PULL, zmq.PUSH, zmq.PUSH,
                                        zmq.PAIR)
     iface = 'tcp://10.0.0.7'
     port = dev.bind_in_to_random_port(iface)
     port2 = dev.bind_out_to_random_port(iface)
     port3 = dev.bind_mon_to_random_port(iface)
     port4 = dev.bind_ctrl_to_random_port(iface)
     dev.start()
     time.sleep(0.25)
     msg = b'hello'
     push = self.context.socket(zmq.PUSH)
     push.connect("%s:%i" % (iface, port))
     pull = self.context.socket(zmq.PULL)
     pull.connect("%s:%i" % (iface, port2))
     mon = self.context.socket(zmq.PULL)
     mon.connect("%s:%i" % (iface, port3))
     ctrl = self.context.socket(zmq.PAIR)
     ctrl.connect("%s:%i" % (iface, port4))
     push.send(msg)
     self.sockets.extend([push, pull, mon, ctrl])
     self.assertEqual(msg, self.recv(pull))
     self.assertEqual(msg, self.recv(mon))
     ctrl.send(b'TERMINATE')
     dev.join()
 def test_proxy_steerable_bind_to_random_with_args(self):
     if zmq.zmq_version_info() < (4, 1):
         raise SkipTest("Steerable Proxies only in libzmq >= 4.1")
     dev = devices.ThreadProxySteerable(zmq.PULL, zmq.PUSH, zmq.PUSH,
                                        zmq.PAIR)
     iface = 'tcp://10.0.0.7'
     ports = []
     min, max = 5000, 5050
     ports.extend([
         dev.bind_in_to_random_port(iface, min_port=min, max_port=max),
         dev.bind_out_to_random_port(iface, min_port=min, max_port=max),
         dev.bind_mon_to_random_port(iface, min_port=min, max_port=max),
         dev.bind_ctrl_to_random_port(iface, min_port=min, max_port=max)
     ])
     for port in ports:
         if port < min or port > max:
             self.fail('Unexpected port number: %i' % port)