U
    lufc  ã                   @   sÔ   d dl Z d dlZd dlZd dlZd dlZd dlZzd dlZd dlmZ W n e	k
r`   dZY nX ej
 d¡Zejdd„ ƒZejdd„ ƒZej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 )é    N)Ú	zmqstreamZio_loopc                 Ã   s@   t  | tjƒ¡}t  | tjƒ¡}| d¡}| d| ¡ ||fS )Nútcp://127.0.0.1ztcp://127.0.0.1:%i)r   Ú	ZMQStreamÚzmqÚPUSHÚPULLÚbind_to_random_portÚconnect)ÚsocketÚpushÚpullÚport© r   ú</tmp/pip-unpacked-wheel-h6ekxre8/zmq/tests/test_zmqstream.pyÚ	push_pull   s
    
r   c                 C   s   | \}}|S ©Nr   ©r   r   r   r   r   r   r   "   s    r   c                 C   s   | \}}|S r   r   r   r   r   r   r   (   s    r   c              	   Ã   s€   |   dd„ ¡ |  dd„ ¡ t t¡ |  d¡ W 5 Q R X t t¡ |   d¡ W 5 Q R X t t¡ |  t¡ W 5 Q R X dS )zEnsure callable check works.c                  W   s   d S r   r   ©Úargsr   r   r   Ú<lambda>1   ó    z%test_callable_check.<locals>.<lambda>c                  W   s   d S r   r   r   r   r   r   r   2   r   é   N)Zon_sendÚon_recvÚpytestZraisesÚAssertionErrorr   )r   r   r   r   Útest_callable_check.   s    r   c                 ƒ   sR   dg}|   |¡ t ¡ ‰ ‡ fdd„}| |¡ tjˆ ddI d H }||ksNt‚d S )Ns   basicc                    s   ˆ   | ¡ d S r   ©Ú
set_result©Úmsg©Úfr   r   Úcallback@   s    z$test_on_recv_basic.<locals>.callbacké   ©Útimeout)Úsend_multipartÚasyncioÚFuturer   Úwait_forr   ©r   r   Úsentr"   Úrecvdr   r    r   Útest_on_recv_basic;   s    

r-   c                 Ã   sX   dg}t  ¡ }| |j¡ t  d¡I d H  |  |¡ t j|ddI d H }||ksTt‚d S )Nó   wakeç      à?r#   r$   )r'   r(   r   r   Úsleepr&   r)   r   )r   r   r+   r!   r,   r   r   r   Útest_on_recv_wakeH   s    
r1   c                 ƒ   st   t jdk rt ¡  dg}t ¡ ‰ ‡ fdd„}| |¡ t d¡I d H  |  |¡ tj	ˆ ddI d H }||kspt
‚d S )N)r#   r.   c                 “   s   t  d¡I d H  ˆ  | ¡ d S )Nçš™™™™™¹?)r'   r0   r   r   r    r   r   r"   Z   s    z$test_on_recv_async.<locals>.callbackr/   r#   r$   )ÚtornadoÚversion_infor   Úskipr'   r(   r   r0   r&   r)   r   r*   r   r    r   Útest_on_recv_asyncS   s    


r6   c              	   ƒ   s¸   dg}t  ¡ ‰ ‡ fdd„}| |¡ t  d¡I d H  |jtjtjj	d@ |  
|¡ t jˆ ddI d H }||kstt‚t  d¡I d H  W 5 Q R X d	d
„ | d¡D ƒ}dd |¡ks´t‚d S )Nr.   c                 “   s   ˆ   | ¡ dd  d S )Nr   r   r   r   r    r   r   r"   j   s    
z*test_on_recv_async_error.<locals>.callbackr2   )Úloggerr#   r$   r/   c                 S   s    g | ]}|j tjj kr|j‘qS r   )Únamer   Úgen_logÚmessage)Ú.0Úxr   r   r   Ú
<listcomp>w   s   þz,test_on_recv_async_error.<locals>.<listcomp>Úcallz(Uncaught exception in ZMQStream callbackÚ
)r'   r(   r   r0   Zat_levelÚloggingÚERRORr   r9   r8   r&   r)   r   Zget_recordsÚjoin)r   r   Úcaplogr+   r"   r,   Úmessagesr   r    r   Útest_on_recv_async_errore   s    

þrE   c              
   Ã   sr   | j tjtjjdT}t t¡ t 	|¡}W 5 Q R X t
|j ƒtjksJt‚|j j|jks\t‚| ¡  W 5 Q R X d S )N)Zsocket_class)r
   r   r   r'   ÚSocketr   ZwarnsÚRuntimeWarningr   r   Útyper   Z
underlyingÚclose)Úcontextr
   Ústreamr   r   r   Útest_shadow_socket   s    rL   c           
   
   Ã   sü   |   tj¡}|   tj¡x}d |_|_| d¡}| d|› ¡ tj |¡}t	 
|¡}tdƒD ]}| t|ƒ¡ q`| ¡  | t¡ | ¡  W 5 Q R X W 5 Q R X tjdd}t d¡I d H  W 5 Q R X d d	d
„ |D ƒ¡}	d|	ksêt‚d|jksøt‚d S )Nr   r   ztcp://127.0.0.1:é
   T)Úrecordgš™™™™™É?r?   c                 s   s   | ]}t |jƒV  qd S r   )Ústrr:   )r;   Úrr   r   r   Ú	<genexpr>   s     z+test_shadow_socket_close.<locals>.<genexpr>zafter closing socketzclosed socket)r
   r   r   r   Zlingerr   r	   rF   Zshadowr   r   ÚrangeZsend_stringrO   Úrecvr   ÚprintrI   ÚwarningsÚcatch_warningsr'   r0   rB   r   Útext)
rJ   rC   r   r   r   Zshadow_pullrK   ÚiÚrecordsZwarning_textr   r   r   Útest_shadow_socket_closeˆ   s     


rZ   )r'   r@   rU   r   r   Zzmq.asyncior3   Zzmq.eventloopr   ÚImportErrorÚmarkZusefixturesZ
pytestmarkZfixturer   r   r   r   r-   r1   r6   rE   rL   rZ   r   r   r   r   Ú<module>   s0   



	