o
    ¹it  ã                   @   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)ÚzmqÚSTREAMERÚ	FORWARDERÚQUEUEr   ÚDeviceÚPAIRÚdevice_type)ÚselfÚdevtypeÚdev© r   úP/var/www/edux/Edux_v2/venv/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ks)J ‚~d S )NT)
r   r   r	   r   ÚSUBÚPUBÚin_typeÚ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_portÚ
connect_inÚstartÚtimeÚsleepÚsendÚrecvÚcloseÚ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   r2   r1   r3   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º  ©Úmin_portÚmax_portúUnexpected port number: %i)	r   r#   r	   ÚPULLÚPUSHÚextendr5   Úbind_out_to_random_portÚfail©r   r   ÚifaceÚportsÚminÚmaxr2   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'  r9   zShould have failed)	r   r#   r	   r=   r>   Úranger5   ÚZMQBindErrorrA   )r   r   rC   Ú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   ÚThreadProxyr=   r>   r5   r@   Úbind_mon_to_random_portr*   r+   r,   r%   r&   r6   r-   Úsocketsr?   r.   )
r   r   rC   r2   Úport2Úport3r3   Ú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 )NrN   rQ   r   r8   r9   r<   )r	   rR   r   r   rS   r=   r>   r?   r5   r@   rT   rA   rB   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   r4   r7   rG   rM   r[   r\   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   hirO   rP   T)Úblock)r%   r&   r	   r$   r'   rU   r?   r(   ÚgeventÚspawnÚgreenÚdevicer   r6   r-   ÚTimeoutr*   r.   ÚgetÚcancelÚkill)r   Úrepr1   r2   ÚgÚtimeoutÚreceiverr   r   r   Útest_green_device›   s   


z!TestDeviceGreen.test_green_deviceN)r]   r^   r_   rn   r   r   r   r   r`   š   s    r`   )r+   r	   r   Ú	zmq.testsr   r   r   r   r   ÚContextr   Úcontext_factoryr   rb   Ú	zmq.greenr`   r   r   r   r   Ú<module>   s   
 û