U
    lufÂ  ã                   @   s–   d dl Z d dlZd dlZd dlmZ d dlZd dlmZmZm	Z	 dd„ Z
G dd„ deƒZG dd	„ d	eƒZe	r’d dlZd d
lmZ G dd„ deeƒZdS )é    N)Úmark)Ú	GreenTestÚPollZMQTestCaseÚhave_geventc                   C   s   t  d¡ d S )Nç      Ð?)ÚtimeÚsleep© r	   r	   ú7/tmp/pip-unpacked-wheel-h6ekxre8/zmq/tests/test_poll.pyÚwait   s    r   c                   @   sd   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Ze	j
ej d	¡d
ddd„ ƒZe	jdddd„ ƒZdS )ÚTestPollc                 C   s*  |   tjtj¡\}}tƒ  |  ¡ }| |tjtjB ¡ | |tjtjB ¡ t| 	¡ ƒ}|| tjksht
‚|| tjkszt
‚| d¡ | d¡ tƒ  t| 	¡ ƒ}|| tjtjB ks¸t
‚|| tjtjB ksÐt
‚| ¡  | ¡  t| 	¡ ƒ}|| tjksþt
‚|| tjkst
‚| |¡ | |¡ d S )Nó   msg1ó   msg2)Úcreate_bound_pairÚzmqÚPAIRr   ÚPollerÚregisterÚPOLLINÚPOLLOUTÚdictÚpollÚAssertionErrorÚsendÚrecvÚ
unregister©ÚselfÚs1Ús2ÚpollerÚsocksr	   r	   r
   Ú	test_pair   s*    


zTestPoll.test_pairc                 C   sr  |   tjtj¡\}}tƒ  |  ¡ }| |tjtjB ¡ | |tjtjB ¡ t	| 
¡ ƒ}||ksbt‚|| tjkstt‚| d¡ t	| 
¡ ƒ}||ks–t‚t d¡ t	| 
¡ ƒ}|| tjks¾t‚| ¡  t	| 
¡ ƒ}|| tjksät‚| d¡ t	| 
¡ ƒ}||kst‚t d¡ t	| 
¡ ƒ}|| tjks2t‚| ¡  t	| 
¡ ƒ}|| tjksZt‚| |¡ | |¡ d S )Nr   ç      à?r   )r   r   ZREPZREQr   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r
   Útest_reqrep4   s8    




zTestPoll.test_reqrepc                 C   sp   |   tjtj¡\}}|  ¡ }| |tjtjB ¡ | |d¡ ||ksHt‚||ksTt‚| |d¡ ||kslt‚d S )Nr   )r   r   r   r   r   r   r   r   )r   r   r   r    r	   r	   r
   Útest_no_eventsd   s    zTestPoll.test_no_eventsc                 C   s   |   tjtj¡\}}| tjd¡ tƒ  |  ¡ }| |tj	tj
B ¡ | |tj	¡ t| ¡ ƒ}|| tj
kspt‚||ks|t‚| d¡ t| ¡ ƒ}|| tj
ks¤t‚tƒ  t| ¡ ƒ}|| tj	ksÈt‚| ¡  t| ¡ ƒ}||ksèt‚| |¡ | |¡ d S )Nó    r   )r   r   ZPUBZSUBÚ
setsockoptZ	SUBSCRIBEr   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r
   Útest_pubsubn   s(    

zTestPoll.test_pubsubÚwinÚWindows)Úreasonc                 C   sž   t  ¡ \}}t  |d¡}t  |d¡}|  ¡ }| |tj¡ t| d¡ƒ}|i ksTt	‚| 
d¡ | ¡  t| d¡ƒ}|| ¡ tjiksŠt	‚| ¡  | ¡  d S )NÚrbÚwbé   ó   x)ÚosÚpipeÚfdopenr   r   r   r   r   r   r   ÚwriteÚflushÚfilenoÚclose)r   ÚrÚwÚpr!   r	   r	   r
   Útest_raw   s    
zTestPoll.test_rawé   ©Zrerunsc                 C   sÈ   |   tjtj¡\}}|  ¡ }| |tj¡ t ¡ }| d¡ t ¡ }|| dk  t ¡ }| d¡ t ¡ }|| dk szt	‚|| dksŠt	‚t ¡ }| d¡ t ¡ }|| dk s´t	‚|| dksÄt	‚dS )	zAmake sure Poller.poll timeout has the right units (milliseconds).ç{®Gázt?r#   é2   g{®Gáz„?iô  r.   çš™™™™™¹?N)
r   r   r   r   r   r   r   Úperf_counterr   r   )r   r   r   r    ÚticÚtocr	   r	   r
   Útest_timeoutŸ   s"    


zTestPoll.test_timeoutN)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r$   r%   r(   r   ZskipifÚsysÚplatformÚ
startswithr:   ÚflakyrC   r	   r	   r	   r
   r      s   0
!

r   c                   @   s(   e Zd Zdd„ Zejdddd„ ƒZdS )Ú
TestSelectc                 C   sn   |   tjtj¡\}}tƒ  t ||g||g||g¡\}}}||ksFt‚||ksRt‚||ks^t‚||ksjt‚d S )N)r   r   r   r   Úselectr   )r   r   r   ZrlistZwlistZxlistr	   r	   r
   r"   ¶   s     zTestSelect.test_pairr;   r<   c                 C   s¬   |   tjtj¡\}}t ¡ }t ||gg g d¡\}}}t ¡ }|| dk sNt‚|| dks^t‚t ¡ }t ||gg g d¡\}}}t ¡ }|| dk s˜t‚|| dks¨t‚dS )z7make sure select timeout has the right units (seconds).r=   r.   gü©ñÒMbP?r   r?   N)r   r   r   r   r@   rL   r   )r   r   r   rA   r7   r8   ÚxrB   r	   r	   r
   rC   Â   s    zTestSelect.test_timeoutN)rD   rE   rF   r"   r   rJ   rC   r	   r	   r	   r
   rK   µ   s   
rK   )Úgreenc                   @   s"   e Zd ZejZdd„ Zdd„ ZdS )ÚTestPollGreenc                    sz   |   tjtj¡\‰}|  ¡ ‰ ˆ  |tj¡ t ¡ }t 	‡ fdd„¡}t 	‡fdd„¡}| 
¡  t ¡ }|| dk svt‚d S )Nc                      s
   ˆ   d¡S ©Ni'  ©r   r	   )r    r	   r
   Ú<lambda>à   r&   z+TestPollGreen.test_wakeup.<locals>.<lambda>c                      s
   ˆ   d¡S ©Nr   ©r   r	   ©r   r	   r
   rR   á   r&   r.   )r   r   r   r   r   r   r   r@   ÚgeventÚspawnÚjoinr   )r   r   rA   r7   ÚsrB   r	   )r    r   r
   Útest_wakeupÚ   s    zTestPollGreen.test_wakeupc                    sd   |   tjtj¡\‰ ‰t ¡ }t ‡fdd„¡}t ‡ fdd„¡}| ¡  t ¡ }|| dk s`t‚d S )Nc                      s
   ˆ   d¡S rP   rQ   r	   )r   r	   r
   rR   ê   r&   z0TestPollGreen.test_socket_poll.<locals>.<lambda>c                      s
   ˆ   d¡S rS   rT   r	   rU   r	   r
   rR   ë   r&   r.   )	r   r   r   r   r@   rV   rW   rX   r   )r   rA   r7   rY   rB   r	   )r   r   r
   Útest_socket_pollæ   s    zTestPollGreen.test_socket_pollN)rD   rE   rF   Úgzmqr   rZ   r[   r	   r	   r	   r
   rO   ×   s   rO   )r0   rG   r   Zpytestr   r   Z	zmq.testsr   r   r   r   r   rK   rV   rN   r\   rO   r	   r	   r	   r
   Ú<module>   s    $