o
    ¹¼tft  ã                   @   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 er#ej	ej
_G dd„ deƒZer@d dlZd dlZG dd„ deeƒZdS dS )é    N)Údevices)ÚPYPYÚBaseZMQTestCaseÚ	GreenTestÚSkipTestÚhave_geventc                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )Ú
TestDevicec                 C   s<   t jt jt jfD ]}t |t jt j¡}|j|ksJ ‚~qd S )N)ÚzmqZSTREAMERZ	FORWARDERÚQUEUEr   ÚDeviceZPAIRÚdevice_type)ÚselfZdevtypeÚdev© r   ú^/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/zmq/tests/test_device.pyÚtest_device_types   s
   ýzTestDevice.test_device_typesc                 C   sX   t  tjtjtj¡}|jtjksJ ‚|jtjksJ ‚|jtjks"J ‚|j	du s)J ‚~d S )NT)
r   r   r	   r
   ZSUBZPUBZin_typeZout_typer   Údaemon)r   r   r   r   r   Útest_device_attributes   s   z!TestDevice.test_device_attributesc                 C   s  t  ¡ dv rtdt  ¡  ƒ‚t t jt jd¡}| j t j	¡}| 
d¡}| d| ¡ | ¡  t d¡ d}| |¡ ||  |¡ksCJ ‚~| ¡  t t jt jd¡}| j t j	¡}| 
d¡}| d| ¡ | ¡  t d¡ d}| |¡ ||  |¡ks}J ‚~| ¡  d S ©	N)z4.1.1z4.0.6z%libzmq-%s broke single-socket deviceséÿÿÿÿútcp://127.0.0.1útcp://127.0.0.1:%iç      Ð?ó   hellos   hello again)r	   Úzmq_versionr   r   ÚThreadDevicer
   ÚREPÚcontextÚsocketÚREQÚbind_to_random_portZ
connect_inÚstartÚtimeÚsleepÚsendÚrecvÚcloseZconnect_out)r   r   ÚreqÚportÚmsgr   r   r   Ú$test_single_socket_forwarder_connect   s0   





z/TestDevice.test_single_socket_forwarder_connectc                 C   s  t  ¡ dv rtdt  ¡  ƒ‚t t jt jd¡}| d¡}| j 	t j
¡}| d| ¡ | ¡  t d¡ d}| |¡ ||  |¡ksCJ ‚~| ¡  t t jt jd¡}| d¡}| j 	t j
¡}| d| ¡ | ¡  t d¡ d}| |¡ ||  |¡ks}J ‚~| ¡  d S r   )r	   r   r   r   r   r
   r   Úbind_in_to_random_portr   r   r   Úconnectr!   r"   r#   r$   r%   r&   )r   r   r(   r'   r)   r   r   r   Ú!test_single_socket_forwarder_bind8   s0   





z,TestDevice.test_single_socket_forwarder_bindc                 C   st   t  tjtjd¡}d}g }d\}}| |j|||d|j|||dg¡ |D ]}||k s0||kr7|  d| ¡ q&d S )Nr   r   ©iˆ  iº  ©Zmin_portZmax_portúUnexpected port number: %i)	r   r   r	   ÚPULLÚPUSHÚextendr+   Úbind_out_to_random_portÚfail©r   r   ÚifaceZportsÚminÚmaxr(   r   r   r   Ú$test_device_bind_to_random_with_argsR   s   þÿ€þz/TestDevice.test_device_bind_to_random_with_argsc              
   C   sp   t  tjtjd¡}d}ztdƒD ]
}|j|ddd qW n tjy0 } zW Y d }~d S d }~ww |  d¡ d S )Nr   r   é   i'  i'  r/   zShould have failed)	r   r   r	   r1   r2   Úranger+   ZZMQBindErrorr5   )r   r   r7   ÚiÚer   r   r   Ú$test_device_bind_to_random_binderrora   s   ÿ€ÿz/TestDevice.test_device_bind_to_random_binderrorc           
      C   s  t  ¡ dk r
tdƒ‚t 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 |||	g¡ ||  |¡kswJ ‚||  |	¡ks€J ‚d S )N©é   é   úProxies only in libzmq >= 3r   r   r   z%s:%i)r	   Úzmq_version_infor   r   ÚThreadProxyr1   r2   r+   r4   Úbind_mon_to_random_portr!   r"   r#   r   r   r,   r$   Úsocketsr3   r%   )
r   r   r7   r(   Zport2Zport3r)   ÚpushÚpullÚmonr   r   r   Ú
test_proxyl   s(   




zTestDevice.test_proxyc              	   C   s˜   t  ¡ dk r
tdƒ‚t t jt jt j¡}d}g }d\}}| |j|||d|j	|||d|j
|||dg¡ |D ]}||k sB||krI|  d| ¡ q8d S )Nr@   rC   r   r.   r/   r0   )r	   rD   r   r   rE   r1   r2   r3   r+   r4   rF   r5   r6   r   r   r   Ú#test_proxy_bind_to_random_with_args‚   s"   ýÿ€þz.TestDevice.test_proxy_bind_to_random_with_argsN)Ú__name__Ú
__module__Ú__qualname__r   r   r*   r-   r:   r?   rK   rL   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd„ ZdS )ÚTestDeviceGreenc                 C   s¬   | j  tj¡}| j  tj¡}| j ||g¡ | d¡}t 	tj
jtj||¡}| d| ¡ | d¡ t d¡}| ¡  t 	|j¡}| d¡dksJJ ‚| ¡  |jdd d S )Nr   r   s   hirA   rB   T)Úblock)r   r   r	   r   r   rG   r3   r    ÚgeventZspawnÚgreenZdevicer
   r,   r$   ÚTimeoutr!   r%   ÚgetÚcancelÚkill)r   Úrepr'   r(   ÚgÚtimeoutZreceiverr   r   r   Útest_green_device›   s   


z!TestDeviceGreen.test_green_deviceN)rM   rN   rO   r[   r   r   r   r   rP   š   s    rP   )r"   r	   r   Z	zmq.testsr   r   r   r   r   ÚContextr   Zcontext_factoryr   rR   Z	zmq.greenrP   r   r   r   r   Ú<module>   s   
 û