B
    18™\ù#  ã            
   @   s¶   d Z ddlZddlZddlZddlZddlZddlZeedƒsHe d¡‚ye 	¡  W n: e
k
rŽ Z zejejkr|e d¡‚‚ W ddZ[X Y nX G dd„ dejƒZedkr²e ¡  dS )	z
Tests for epoll wrapper.
é    NÚepollztest works only on Linux 2.6zkernel doesn't support epoll()c               @   st   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d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	TestEPollc             C   s.   t   ¡ | _| j d¡ | j ¡  | jg| _d S )N)z	127.0.0.1r   )ÚsocketÚserverSocketÚbindÚlistenÚconnections)Úself© r
   úS/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_epoll.pyÚsetUp+   s    

zTestEPoll.setUpc             C   s   x| j D ]}| ¡  qW d S )N)r   Úclose)r	   Zsktr
   r
   r   ÚtearDown1   s    zTestEPoll.tearDownc          
   C   s”   t   ¡ }| d¡ y| d| j ¡ d f¡ W n6 tk
rd } z|  |jd tj	¡ W d d }~X Y n
X t
dƒ‚| j ¡ \}}| j ||f¡ ||fS )NFz	127.0.0.1é   r   z&Connect should have raised EINPROGRESS)r   ÚsetblockingÚconnectr   ÚgetsocknameÚOSErrorÚassertEqualÚargsÚerrnoZEINPROGRESSÚAssertionErrorÚacceptr   Úextend)r	   ÚclientÚeÚserverÚaddrr
   r
   r   Ú_connected_pair5   s    
&zTestEPoll._connected_pairc          
   C   sÈ   yt  d¡}W n. tk
r< } ztt|ƒƒ‚W d d }~X Y nX |  | ¡ dk| ¡ ¡ |  |j ¡ | ¡  |  |j¡ |  	t
|j¡ tt dƒrÄt  dt j¡ ¡  t jt jd ¡  t jdd ¡  d S )Né   r   ÚEPOLL_CLOEXECéÿÿÿÿ)Úflags)Úselectr   r   r   ÚstrÚ
assertTrueÚfilenoÚclosedr   ÚassertRaisesÚ
ValueErrorÚhasattrr    )r	   Úepr   r
   r
   r   Útest_createC   s    
zTestEPoll.test_createc             C   s¸   |   ttjddd¡ |   ttjd¡ |   ttjd ¡ |   ttjd¡ |   ttjdg¡ |   ttji ¡ |   ttjd¡ |   ttjd¡ | j ttjdd ttd	ƒr´| j ttjd
d d S )Nr   é   é   Zfoor
   r   éþÿÿÿ)Úsizehintr    iD0  )r"   )r(   Ú	TypeErrorr#   r   r)   r*   r   )r	   r
   r
   r   Útest_badcreateS   s    
zTestEPoll.test_badcreatec          	   C   sP   t  d¡"}|  | ¡ d¡ |  |j¡ W d Q R X |  |j¡ |  t|j¡ d S )Nr   r   )	r#   r   ÚassertGreaterr&   ÚassertFalser'   r%   r(   r)   )r	   r+   r
   r
   r   Útest_context_managerb   s
    zTestEPoll.test_context_managerc             C   sN  |   ¡ \}}t d¡}z4| | ¡ tjtjB ¡ | | ¡ tjtjB ¡ W d | ¡  X t d¡}z,| |tjtjB ¡ | |tjtjB ¡ W d | ¡  X t d¡}zœ|  t	|jt
ƒ tjtjB ¡ |  t	|jd tjtjB ¡ |  t|jdtjtjB ¡ |  t|jdtjtjB ¡ | |tjtjB ¡ |  t|j|tjtjB ¡ W d | ¡  X d S )Nr-   r!   i'  )r   r#   r   Úregisterr&   ÚEPOLLINÚEPOLLOUTr   r(   r1   Úobjectr)   r   )r	   r   r   r+   r
   r
   r   Útest_addi   s2    




zTestEPoll.test_addc          
   C   sî   |   ¡ \}}t d¡}tj | ¡ ¡}| | ¡ tjtjB ¡ | | ¡ tjtjB ¡ | dd¡}| dd¡}|  	t
|ƒd¡ |  	t
|ƒd¡ | ¡  y| dd¡ W n8 tk
rÞ } z|  	|jd tj|¡ W d d }~X Y nX |  d¡ d S )Nr-   r   é   gÍÌÌÌÌÌì?r   z%epoll on closed fd didn't raise EBADF)r   r#   r   Úfromfdr&   r6   r7   r8   Úpollr   Úlenr   r   r   r   ÚEBADFÚfail)r	   r   r   r+   Zep2ÚeventsZevents2r   r
   r
   r   Útest_fromfd   s    
(zTestEPoll.test_fromfdc             C   sÊ  |   ¡ \}}t d¡}| | ¡ tjtjB tjB ¡ | | ¡ tjtjB tjB ¡ t 	¡ }| 
dd¡}t 	¡ }|  || dk|| ¡ | ¡  | ¡ tjf| ¡ tjfg}| ¡  |  ||¡ |j
ddd}|  |¡ | d¡ | d¡ t 	¡ }| 
dd¡}t 	¡ }|  || d	k¡ | ¡  | ¡ tjtjB f| ¡ tjtjB fg}| ¡  |  ||¡ | | ¡ ¡ | | ¡ tj¡ t 	¡ }| 
dd¡}t 	¡ }|  || d	k¡ | ¡ tjfg}|  ||¡ d S )
Nr   r   r;   gš™™™™™¹?gÍÌÌÌÌÌ @)ÚtimeoutZ	maxeventss   Hello!s   world!!!g{®Gáz„?)r   r#   r   r6   r&   r7   r8   ÚEPOLLETÚtimeÚ	monotonicr=   r4   Úsortr   ÚsendÚ
unregisterÚmodify)r	   r   r   r+   ÚnowrA   ÚthenÚexpectedr
   r
   r   Útest_control_and_wait¥   sH    





zTestEPoll.test_control_and_waitc             C   s,   |   ttjd¡ |   tt ¡ jdtj¡ d S )Nr/   r!   )r(   r)   r#   r   r6   r7   )r	   r
   r
   r   Útest_errorsÖ   s    zTestEPoll.test_errorsc             C   sl   |   ¡ \}}| ¡ }t d¡}| |¡ t ¡ }| dd¡}t ¡ }|  || dk¡ | 	¡  | 
|¡ d S )Nr   r   r;   g{®Gáz„?)r   r&   r#   r   r6   rE   rF   r=   r4   r   rI   )r	   r   r   Úfdr+   rK   rA   rL   r
   r
   r   Útest_unregister_closedÛ   s    

z TestEPoll.test_unregister_closedc             C   s¸   t tdƒ}|  |j¡ | ¡ }t ¡ }|  | ¡ t¡ |  	|j
¡ | ¡  |  |j
¡ |  t|j¡ | ¡  |  t|j|tj¡ |  t|jd¡ |  t|j|tj¡ |  t|j|¡ d S )NÚrbg      ð?)ÚopenÚ__file__Ú
addCleanupr   r&   r#   r   ÚassertIsInstanceÚintr4   r'   r%   r(   r)   rJ   r7   r=   r6   rI   )r	   Z	open_filerP   r   r
   r
   r   Ú
test_closeé   s    
zTestEPoll.test_closec             C   s.   t  ¡ }|  |j¡ |  t | ¡ ¡d¡ d S )NF)r#   r   rU   r   r   ÚosÚget_inheritabler&   )r	   r   r
   r
   r   Útest_fd_non_inheritable  s    z!TestEPoll.test_fd_non_inheritableN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r,   r2   r5   r:   rB   rN   rO   rQ   rX   r[   r
   r
   r
   r   r   )   s   &1r   Ú__main__)Ú__doc__r   rY   r#   r   rE   Úunittestr*   ÚSkipTestr   r   r   ZENOSYSÚTestCaser   r\   Úmainr
   r
   r
   r   Ú<module>   s$   


 _