ó
L]c           @   sØ   d  d l  Z  d  d l Z d  d l m Z d  d l m Z m Z m Z m Z m Z d  d l	 m
 Z
 m Z m Z e r„ e j e j _ n  d e f d „  ƒ  YZ e rÔ d  d l Z d  d l Z d e e f d „  ƒ  YZ n  d S(	   iÿÿÿÿN(   t   devices(   t   BaseZMQTestCaset   SkipTestt   have_geventt	   GreenTestt   PYPY(   t   bytest   unicodet
   basestringt
   TestDevicec           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   sX   xQ t  j t  j t  j f D]7 } t j | t  j t  j ƒ } |  j | j | ƒ ~ q Wd  S(   N(	   t   zmqt   STREAMERt	   FORWARDERt   QUEUER    t   Devicet   PAIRt   assertEqualt   device_type(   t   selft   devtypet   dev(    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt   test_device_types   s    c         C   sz   t  j t j t j t j ƒ } |  j | j t j ƒ |  j | j t j ƒ |  j | j	 t j ƒ |  j | j
 t ƒ ~ d  S(   N(   R    R   R
   R   t   SUBt   PUBR   t   in_typet   out_typeR   t   daemont   True(   R   R   (    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt   test_device_attributes   s    c         C   so  t  j ƒ  d
 k r+ t d t  j ƒ  ƒ ‚ n  t j t  j t  j d ƒ } |  j j t  j	 ƒ } | j
 d ƒ } | j d | ƒ | j ƒ  t j d ƒ d } | j | ƒ |  j | |  j | ƒ ƒ ~ | j ƒ  t j t  j t  j d ƒ } |  j j t  j	 ƒ } | j
 d ƒ } | j d | ƒ | j ƒ  t j d ƒ d	 } | j | ƒ |  j | |  j | ƒ ƒ ~ | j ƒ  d  S(   Ns   4.1.1s   4.0.6s%   libzmq-%s broke single-socket devicesiÿÿÿÿs   tcp://127.0.0.1s   tcp://127.0.0.1:%ig      Ð?t   hellos   hello again(   s   4.1.1s   4.0.6(   R
   t   zmq_versionR   R    t   ThreadDeviceR   t   REPt   contextt   sockett   REQt   bind_to_random_portt
   connect_int   startt   timet   sleept   sendR   t   recvt   closet   connect_out(   R   R   t   reqt   portt   msg(    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt$   test_single_socket_forwarder_connect   s0    


c         C   so  t  j ƒ  d
 k r+ t d t  j ƒ  ƒ ‚ n  t j t  j t  j d ƒ } | j d ƒ } |  j j	 t  j
 ƒ } | j d | ƒ | j ƒ  t j d ƒ d } | j | ƒ |  j | |  j | ƒ ƒ ~ | j ƒ  t j t  j t  j d ƒ } | j d ƒ } |  j j	 t  j
 ƒ } | j d | ƒ | j ƒ  t j d ƒ d	 } | j | ƒ |  j | |  j | ƒ ƒ ~ | j ƒ  d  S(   Ns   4.1.1s   4.0.6s%   libzmq-%s broke single-socket devicesiÿÿÿÿs   tcp://127.0.0.1s   tcp://127.0.0.1:%ig      Ð?R   s   hello again(   s   4.1.1s   4.0.6(   R
   R   R   R    R   R   R    t   bind_in_to_random_portR!   R"   R#   t   connectR&   R'   R(   R)   R   R*   R+   (   R   R   R.   R-   R/   (    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt!   test_single_socket_forwarder_bind9   s0    


c         C   s±   t  j t j t j d ƒ } d } g  } d \ } } | j | j | d | d | ƒ| j | d | d | ƒg ƒ x: | D]2 } | | k  s• | | k rw |  j d | ƒ qw qw Wd  S(	   Niÿÿÿÿs   tcp://127.0.0.1iˆ  iº  t   min_portt   max_ports   Unexpected port number: %i(   iˆ  iº  (	   R    R   R
   t   PULLt   PUSHt   extendR1   t   bind_out_to_random_portt   fail(   R   R   t   ifacet   portst   mint   maxR.   (    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt$   test_device_bind_to_random_with_argsS   s    c         C   s€   t  j t j t j d ƒ } d } y4 x- t d ƒ D] } | j | d d d d ƒq1 WWn t j k
 rn } d  SX|  j d ƒ d  S(	   Niÿÿÿÿs   tcp://127.0.0.1i   R4   i'  R5   i'  s   Should have failed(	   R    R   R
   R6   R7   t   rangeR1   t   ZMQBindErrorR:   (   R   R   R;   t   it   e(    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt$   test_device_bind_to_random_binderror`   s    c   
      C   so  t  j ƒ  d k  r! t d ƒ ‚ n  t j t  j t  j t  j ƒ } d } | j | ƒ } | j | ƒ } | j	 | ƒ } | j
 ƒ  t j d ƒ d } |  j j t  j ƒ } | j d | | f ƒ |  j j t  j ƒ } | j d | | f ƒ |  j j t  j ƒ }	 |	 j d | | f ƒ | j | ƒ |  j j | | |	 g ƒ |  j | |  j | ƒ ƒ |  j | |  j |	 ƒ ƒ d  S(	   Ni   i   s   Proxies only in libzmq >= 3s   tcp://127.0.0.1g      Ð?R   s   %s:%i(   i   i   (   R
   t   zmq_version_infoR   R    t   ThreadProxyR6   R7   R1   R9   t   bind_mon_to_random_portR&   R'   R(   R!   R"   R2   R)   t   socketsR8   R   R*   (
   R   R   R;   R.   t   port2t   port3R/   t   pusht   pullt   mon(    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt
   test_proxym   s(    
c      	   C   sí   t  j ƒ  d
 k  r! t d ƒ ‚ n  t j t  j t  j t  j ƒ } d } g  } d \ } } | j | j | d | d | ƒ| j	 | d | d | ƒ| j
 | d | d | ƒg ƒ x: | D]2 } | | k  sÑ | | k r³ |  j d	 | ƒ q³ q³ Wd  S(   Ni   i   s   Proxies only in libzmq >= 3s   tcp://127.0.0.1iˆ  iº  R4   R5   s   Unexpected port number: %i(   i   i   (   iˆ  iº  (   R
   RE   R   R    RF   R6   R7   R8   R1   R9   RG   R:   (   R   R   R;   R<   R=   R>   R.   (    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt#   test_proxy_bind_to_random_with_argsƒ   s    (
   t   __name__t
   __module__R   R   R0   R3   R?   RD   RN   RO   (    (    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyR	      s   							t   TestDeviceGreenc           B   s   e  Z d  „  Z RS(   c         C   sð   |  j  j t j ƒ } |  j  j t j ƒ } |  j j | | g ƒ | j d ƒ } t j	 t j
 j t j | | ƒ } | j d | ƒ | j d ƒ t j d ƒ } | j ƒ  t j	 | j ƒ } |  j | j d ƒ d ƒ | j ƒ  | j d t ƒ d  S(   Ns   tcp://127.0.0.1s   tcp://127.0.0.1:%it   hii   i   t   block(   R!   R"   R
   R    R#   RH   R8   R$   t   geventt   spawnt   greent   deviceR   R2   R)   t   TimeoutR&   R*   R   t   gett   cancelt   killR   (   R   t   repR-   R.   t   gt   timeoutt   receiver(    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt   test_green_device™   s    !

(   RP   RQ   Ra   (    (    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyRR   —   s   (   R'   R
   R    t	   zmq.testsR   R   R   R   R   t   zmq.utils.strtypesR   R   R   t   ContextR   t   context_factoryR	   RU   t	   zmq.greenRR   (    (    (    s4   lib/python2.7/site-packages/zmq/tests/test_device.pyt   <module>   s   („