U
    lufp)  ã                   @   sv   d dl Z d dlZd dlZd dlmZ d dlZe d¡Zd dlm	Z	 d dl
Z
d dlmZ d dlmZ G dd„ deƒZdS )	é    N)Ú	timedeltaztornado.gen)ÚIOLoop)Úfuture)ÚBaseZMQTestCasec                       s.  e Zd ZejZ‡ fdd„Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zejjeedƒ dddd„ ƒZejjeedƒ dd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(d)„ Zd*d+„ Zejjej d,¡d-dd.d/„ ƒZ d0d1„ Z!ejjej d,¡d2dd3d4„ ƒZ"‡  Z#S )5ÚTestFutureSocketc                    s   t dd| _tƒ  ¡  d S )NF)Zmake_current)r   ÚloopÚsuperÚsetUp©Úself©Ú	__class__© ú9/tmp/pip-unpacked-wheel-h6ekxre8/zmq/tests/test_future.pyr	      s    zTestFutureSocket.setUpc                    s"   t ƒ  ¡  | jr| jjdd d S )NT©Zall_fds)r   ÚtearDownr   Úcloser
   r   r   r   r      s    
zTestFutureSocket.tearDownc                 C   s*   | j  tj¡}t|tjƒst‚| ¡  d S ©N)	ÚcontextÚsocketÚzmqÚPUSHÚ
isinstancer   ZSocketÚAssertionErrorr   )r   Úsr   r   r   Útest_socket_class    s    z"TestFutureSocket.test_socket_classc                 C   sL   | j  ¡ }tj  ¡ }| ¡  | ¡  t|ƒtj ks6t‚t|ƒ| j ksHt‚d S r   )ÚContextÚinstancer   ÚtermÚtyper   )r   ÚactxÚctxr   r   r   Útest_instance_subclass_first%   s    

z-TestFutureSocket.test_instance_subclass_firstc                 C   sL   t j ¡ }| j ¡ }| ¡  | ¡  t|ƒt jks6t‚t|ƒ| jksHt‚d S r   )r   r   r   r   r   r   )r   r!   r    r   r   r   Útest_instance_subclass_second-   s    

z.TestFutureSocket.test_instance_subclass_secondc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   sT   ˆ   tjtj¡\} }| ¡ }| ¡ r(t‚|  d¡I d H  |I d H }|dgksPt‚d S )Nó   hi)Úcreate_bound_pairr   r   ÚPULLÚrecv_multipartÚdoner   Úsend)ÚaÚbÚfÚrecvdr
   r   r   Útest6   s    
z2TestFutureSocket.test_recv_multipart.<locals>.test©r   Úrun_sync©r   r.   r   r
   r   Útest_recv_multipart5   s    z$TestFutureSocket.test_recv_multipartc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   s†   ˆ   tjtj¡\} }| ¡ }| ¡ }| ¡ r0t‚| ¡ r<t‚|  ddg¡I d H  |I d H }| ¡ sft‚| ¡ dksvt‚|dks‚t‚d S ©Nr$   ó   there)	r%   r   r   r&   Úrecvr(   r   Úsend_multipartÚresult©r*   r+   Úf1Úf2r-   r
   r   r   r.   A   s    
z(TestFutureSocket.test_recv.<locals>.testr/   r1   r   r
   r   Ú	test_recv@   s    zTestFutureSocket.test_recvc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   s’   ˆ   tjtj¡\} }| ¡ }| ¡ }| ¡ s0t‚| ¡ s<t‚| ¡ rHt‚|  	ddg¡I d H  |I d H }| 
¡ srt‚| ¡ s~t‚|ddgksŽt‚d S r3   )r%   r   r   r&   r5   r'   Úcancelr   r(   r6   Z	cancelledr8   r
   r   r   r.   P   s    
z/TestFutureSocket.test_recv_cancel.<locals>.testr/   r1   r   r
   r   Útest_recv_cancelO   s    z!TestFutureSocket.test_recv_cancelZRCVTIMEOzrequires RCVTIMEO)Úreasonc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc               	   “   s   ˆ   tjtj¡\} }d|_| ¡ }d|_| ¡ }t tj	¡ |I d H  W 5 Q R X |  
ddg¡I d H  |I d H }| ¡ s|t‚|ddgksŒt‚d S )Néd   éè  r$   r4   )r%   r   r   r&   Zrcvtimeor5   r'   ÚpytestÚraisesÚAgainr6   r(   r   r8   r
   r   r   r.   a   s    
z0TestFutureSocket.test_recv_timeout.<locals>.testr/   r1   r   r
   r   Útest_recv_timeout_   s    z"TestFutureSocket.test_recv_timeoutZSNDTIMEOzrequires SNDTIMEOc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc               	   “   s>   ˆ   tj¡} d| _t tj¡ |  d¡I d H  W 5 Q R X d S )Nr?   ó   not going anywhere)r   r   r   ZsndtimeorA   rB   rC   r)   ©r   r
   r   r   r.   r   s    z0TestFutureSocket.test_send_timeout.<locals>.testr/   r1   r   r
   r   Útest_send_timeoutp   s    z"TestFutureSocket.test_send_timeoutc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc               	   “   s>   ˆ   tj¡} t tj¡ | jdtjdI d H  W 5 Q R X d S ©NrE   )Úflags)r   r   r   rA   rB   rC   r)   ÚNOBLOCKrF   r
   r   r   r.   {   s    z0TestFutureSocket.test_send_noblock.<locals>.testr/   r1   r   r
   r   Útest_send_noblockz   s    z"TestFutureSocket.test_send_noblockc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc               	   “   s@   ˆ   tj¡} t tj¡ | jdgtjdI d H  W 5 Q R X d S rH   )r   r   r   rA   rB   rC   r6   rJ   rF   r
   r   r   r.   ƒ   s    z:TestFutureSocket.test_send_multipart_noblock.<locals>.testr/   r1   r   r
   r   Útest_send_multipart_noblock‚   s    z,TestFutureSocket.test_send_multipart_noblockc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   sr   ˆ   tjtj¡\} }| ¡ }| ¡ r(t‚d}|  |¡I d H  |I d H }| ¡ sRt‚| ¡ |ksbt‚||ksnt‚d S )Nu   Ï€Ã¸Ã¸Ï€)	r%   r   r   r&   Zrecv_stringr(   r   Zsend_stringr7   )r*   r+   r,   Úmsgr-   r
   r   r   r.   ‹   s    
z/TestFutureSocket.test_recv_string.<locals>.testr/   r1   r   r
   r   Útest_recv_stringŠ   s    z!TestFutureSocket.test_recv_stringc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   sx   ˆ   tjtj¡\} }| ¡ }| ¡ r(t‚tdd}|  |¡I d H  |I d H }| ¡ sXt‚| 	¡ |ksht‚||kstt‚d S ©Né   ©r*   )
r%   r   r   r&   Ú	recv_jsonr(   r   ÚdictÚ	send_jsonr7   ©r*   r+   r,   Úobjr-   r
   r   r   r.   ™   s    

z-TestFutureSocket.test_recv_json.<locals>.testr/   r1   r   r
   r   Útest_recv_json˜   s    zTestFutureSocket.test_recv_jsonc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc               	   “   sÞ   ˆ   tjtj¡\} }| ¡ }| ¡ r(t‚| ¡  t 	d¡I d H  t
dd}|  |¡I d H  t tj¡ |I d H }W 5 Q R X | ¡ sˆt‚|jddI d H }|s¢t‚t 	d¡I d H  t tdd| ¡ ¡I d H }||ksÚt‚d S )Nr   rP   rQ   ©Útimeout)Úseconds)r%   r   r   r&   rR   r(   r   r<   ÚgenÚsleeprS   rT   rA   rB   r   ZCancelledErrorÚpollZwith_timeoutr   )r*   r+   r,   rV   r-   Úeventsr
   r   r   r.   §   s    
z7TestFutureSocket.test_recv_json_cancelled.<locals>.testr/   r1   r   r
   r   Útest_recv_json_cancelled¦   s    z)TestFutureSocket.test_recv_json_cancelledc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   sx   ˆ   tjtj¡\} }| ¡ }| ¡ r(t‚tdd}|  |¡I d H  |I d H }| ¡ sXt‚| 	¡ |ksht‚||kstt‚d S rO   )
r%   r   r   r&   Z
recv_pyobjr(   r   rS   Z
send_pyobjr7   rU   r
   r   r   r.   ¾   s    

z.TestFutureSocket.test_recv_pyobj.<locals>.testr/   r1   r   r
   r   Útest_recv_pyobj½   s    z TestFutureSocket.test_recv_pyobjc                    s0   dd„ ‰dd„ ‰ ‡ ‡‡fdd„}ˆj  |¡ d S )Nc                 S   s8   g }|  |  dg ¡¡ t | d ¡ d¡}| |¡ |S )NÚ
identitiesÚcontentÚutf8)ÚextendÚgetÚjsonÚdumpsÚencodeÚappend)rM   Úframesrb   r   r   r   Ú	serializeÌ   s
    
z9TestFutureSocket.test_custom_serialize.<locals>.serializec                 S   s*   | d d… }t  | d  d¡¡}||dœS )Néÿÿÿÿrc   )ra   rb   )rf   ÚloadsÚdecode)rj   ra   rb   r   r   r   ÚdeserializeÓ   s
    þz;TestFutureSocket.test_custom_serialize.<locals>.deserializec                  “   sª   ˆ  tjtj¡\} }ddddœi}|  |ˆ¡I d H  | ˆ ¡I d H }|d |d ksXt‚|d sdt‚| |ˆ¡I d H  |  ˆ ¡I d H }|d |d ksšt‚|d r¦t‚d S )Nrb   rP   Úbee©r*   r+   ra   )r%   r   ÚDEALERÚROUTERÚsend_serializedÚrecv_serializedr   )r*   r+   rM   r-   Zr2©ro   r   rk   r   r   r.   Û   s    þÿz4TestFutureSocket.test_custom_serialize.<locals>.testr/   r1   r   rv   r   Útest_custom_serializeË   s    z&TestFutureSocket.test_custom_serializec                    s   ‡ fdd„}ˆ j  |¡ d S )Nc               	   “   sˆ   ˆ   tjtj¡\} }ddddœi}t t¡ |  ttj	¡I d H  W 5 Q R X |  
d¡I d H  t t¡ | tj¡I d H  W 5 Q R X d S )Nrb   rP   rp   rq   s   not json)r%   r   rr   rs   rA   rB   Ú	TypeErrorrt   rf   rg   r)   ru   rm   )r*   r+   rM   r
   r   r   r.   ñ   s    þÿz:TestFutureSocket.test_custom_serialize_error.<locals>.testr/   r1   r   r
   r   Útest_custom_serialize_errorð   s    z,TestFutureSocket.test_custom_serialize_errorc                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   sÐ   ˆ   tjtj¡\} }|jdd}| ¡ s,t‚| ¡ dks<t‚|jdd}| ¡ rTt‚|I d H }|dksjt‚|jdd}| ¡ r‚t‚|  ddg¡I d H  |I d H }|tj	ks®t‚| 
¡ I d H }|ddgksÌt‚d S )Nr   rX   é   r@   r$   r4   )r%   r   r   r&   r]   r(   r   r7   r6   ÚPOLLINr'   )r*   r+   r,   Úevtr-   r
   r   r   r.     s    

z(TestFutureSocket.test_poll.<locals>.testr/   r1   r   r
   r   Ú	test_poll  s    zTestFutureSocket.test_pollÚwinzWindows unsupported socket typec                    s   ‡ fdd„}ˆ j  |¡ d S )Nc                  “   sÖ   t  ¡ } d}|  t j¡}|  t j¡}ˆ j ||g¡ | |¡ | |¡ t	 
¡ }| |t j¡ |jdd}| ¡ rvt‚| ddg¡ |I d H }||t jfgks¢t‚| ¡ }|ddgksºt‚| ¡  | ¡  |  ¡  d S )Nzinproc://testr@   rX   r$   r4   )r   r   r   r   r&   Zsocketsrd   ÚbindÚconnectr   ÚPollerÚregisterr{   r]   r(   r   r6   r'   r   r   )r!   Úurlr*   r+   Zpollerr,   r|   r-   r
   r   r   r.     s&    


z4TestFutureSocket.test_poll_base_socket.<locals>.testr/   r1   r   r
   r   Útest_poll_base_socket  s    z&TestFutureSocket.test_poll_base_socketc                    sF   |   tj¡‰ ‡ fdd„}| j |¡ | jjdd d | _ˆ jsBt‚d S )Nc                   “   s   ˆ   ¡  d S r   )Z	_get_loopr   rF   r   r   Úattach9  s    z3TestFutureSocket.test_close_all_fds.<locals>.attachTr   )r   r   ZPUBr   r0   r   Úclosedr   )r   r…   r   rF   r   Útest_close_all_fds6  s    z#TestFutureSocket.test_close_all_fdsz)Windows does not support polling on filesc                 C   s   dd„ }| j  |¡ d S )Nc                  Ó   s  t  ¡ } t ¡ \}}t |d¡}t |d¡}|  |tj¡ |  |tj¡ | j	ddI d H }t
|ƒ}| ¡ |ksrt‚| ¡ |ks‚t‚|| ¡  tjks˜t‚|  |¡ | d¡ | ¡  | j	ddI d H }t
|ƒ}| ¡ |ksÞt‚|| ¡  tjksôt‚| d¡dkst‚| ¡  | ¡  d S )NÚrbÚwbrz   rX   ó   xr@   )r   r   ÚosÚpipeÚfdopenr‚   r   r{   ÚPOLLOUTr]   rS   Úfilenor   Ú
unregisterÚwriteÚflushÚreadr   )ÚpÚrÚwZevtsr   r   r   r.   F  s*    

z,TestFutureSocket.test_poll_raw.<locals>.testr/   r1   r   r   r   Útest_poll_rawA  s    zTestFutureSocket.test_poll_raw)$Ú__name__Ú
__module__Ú__qualname__r   r   r	   r   r   r"   r#   r2   r;   r=   rA   ÚmarkZskipifÚhasattrr   rD   rG   rK   rL   rN   rW   r_   r`   rw   ry   r}   ÚsysÚplatformÚ
startswithr„   r‡   r—   Ú__classcell__r   r   r   r   r      sB   

	%
 ÿ

þr   )rf   r‹   r   Údatetimer   rA   Zimportorskipr[   Ztornado.ioloopr   r   Zzmq.eventloopr   Z	zmq.testsr   r   r   r   r   r   Ú<module>   s   
