U
    luf†  ã                   @   sZ   d dl Z d dlZd dlZd dlmZ d dlmZmZmZ erFejej	_
G dd„ deƒZdS )é    N)Údevices)ÚPYPYÚBaseZMQTestCaseÚSkipTestc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestProxySteerablec                 C   sJ  t  ¡ dk rtdƒ‚t t jt jt jt j¡}d}| |¡}| 	|¡}| 
|¡}| |¡}| ¡  t d¡ d}| j t j¡}| d||f ¡ | j t j¡}	|	 d||f ¡ | j t j¡}
|
 d||f ¡ | j t j¡}| d||f ¡ | |¡ | j ||	|
|g¡ ||  |	¡ks t‚||  |
¡ks4t‚| d¡ | ¡  d S )N©é   é   ú'Steerable Proxies only in libzmq >= 4.1útcp://127.0.0.1ç      Ð?ó   helloú%s:%ió	   TERMINATE)ÚzmqÚzmq_version_infor   r   ÚThreadProxySteerableÚPULLÚPUSHÚPAIRÚbind_in_to_random_portÚbind_out_to_random_portÚbind_mon_to_random_portÚbind_ctrl_to_random_portÚstartÚtimeÚsleepÚcontextÚsocketÚconnectÚsendÚsocketsÚextendÚrecvÚAssertionErrorÚjoin)ÚselfÚdevÚifaceÚportÚport2Úport3Úport4ÚmsgÚpushÚpullÚmonÚctrl© r2   úB/tmp/pip-unpacked-wheel-h6ekxre8/zmq/tests/test_proxy_steerable.pyÚtest_proxy_steerable   s2    






z'TestProxySteerable.test_proxy_steerablec              
   C   sª   t  ¡ dk rtdƒ‚t t jt jt jt j¡}d}g }d\}}| |j	|||d|j
|||d|j|||d|j|||dg¡ |D ]"}||k s–||kr‚|  d| ¡ q‚d S )Nr   r
   r   )iˆ  iº  )Zmin_portZmax_portzUnexpected port number: %i)r   r   r   r   r   r   r   r   r"   r   r   r   r   Zfail)r&   r'   r(   ZportsÚminÚmaxr)   r2   r2   r3   Ú-test_proxy_steerable_bind_to_random_with_args,   s     üÿz@TestProxySteerable.test_proxy_steerable_bind_to_random_with_argsc                 C   s¼  t  ¡ dk rtdƒ‚t t jt jt jt j¡}d}| |¡}| 	|¡}| 
|¡}| |¡}| ¡  t d¡ d}| j t j¡}| d||f ¡ | j t j¡}	|	 d||f ¡ | j t j¡}
|
 d||f ¡ | j t j¡}| d||f ¡ | |¡ | j ||	|
|g¡ ||  |	¡ks t‚||  |
¡ks4t‚| d¡ |  |¡}dd	„ |D ƒ}d
|d ksht‚t|ƒ|d
 ks~t‚d
|d kst‚t|ƒ|d ks¦t‚| d¡ | ¡  d S )N)r   é   z STATISTICS only in libzmq >= 4.3r   r   r   r   s
   STATISTICSc                 S   s   g | ]}t  d |¡d ‘qS )z=Qr   )ÚstructÚunpack)Ú.0Úxr2   r2   r3   Ú
<listcomp>Y   s     zFTestProxySteerable.test_proxy_steerable_statistics.<locals>.<listcomp>r	   r   é   é   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Zrecv_multipartÚlenr%   )r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   ÚstatsZ	stats_intr2   r2   r3   Útest_proxy_steerable_statistics?   s@    








z2TestProxySteerable.test_proxy_steerable_statisticsN)Ú__name__Ú
__module__Ú__qualname__r4   r7   rB   r2   r2   r2   r3   r      s   r   )r9   r   r   r   Z	zmq.testsr   r   r   ÚContextZDeviceZcontext_factoryr   r2   r2   r2   r3   Ú<module>   s   
