o
    HXîh$  ã                
   @   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ƒs$e d¡‚ze 	¡  W n e
yB Z zejejkr=e d¡‚‚ dZ[ww G dd„ dejƒZedkrVe ¡  dS 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  d¡| _| jg| _d S )N)ú	127.0.0.1r   )ÚsocketÚcreate_serverÚserverSocketÚconnections©Úself© r   ú9/opt/python-3.10.19/usr/lib/python3.10/test/test_epoll.pyÚsetUp+   s   zTestEPoll.setUpc                 C   s   | j D ]}| ¡  qd S )N)r   Úclose)r
   Zsktr   r   r   ÚtearDown/   s   

ÿzTestEPoll.tearDownc              
   C   s”   t   ¡ }| d¡ z| d| j ¡ d f¡ W t
dƒ‚ ty6 } z|  |jd tj	¡ W Y d }~nd }~ww | j ¡ \}}| j ||f¡ ||fS )NFr   é   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_pair3   s   
ý €ÿzTestEPoll._connected_pairc              
   C   sÂ   zt  d¡}W n ty } ztt|ƒƒ‚d }~ww |  | ¡ 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 d S )Né   r   ÚEPOLL_CLOEXECéÿÿÿÿ©Úflags)Úselectr   r   r   ÚstrÚ
assertTrueÚfilenoÚclosedr   ÚassertRaisesÚ
ValueErrorÚhasattrr!   )r
   Úepr   r   r   r   Útest_createA   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 d S )Nr   é   é   Zfoor   r   éþÿÿÿ)Úsizehintr!   iD0  r#   )r*   Ú	TypeErrorr%   r   r+   r,   r   r	   r   r   r   Útest_badcreateQ   s   
ÿzTestEPoll.test_badcreatec                 C   sd   t  d¡}|  | ¡ d¡ |  |j¡ W d   ƒ n1 sw   Y  |  |j¡ |  t|j¡ d S )Nr    r   )	r%   r   ZassertGreaterr(   ÚassertFalser)   r'   r*   r+   )r
   r-   r   r   r   Útest_context_manager`   s   þzTestEPoll.test_context_managerc                 C   sd  |   ¡ \}}t d¡}z| | ¡ tjtjB ¡ | | ¡ tjtjB ¡ W | ¡  n| ¡  w t d¡}z| |tjtjB ¡ | |tjtjB ¡ W | ¡  n| ¡  w t d¡}zS|  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 S | ¡  w )Nr/   r"   i'  )r   r%   r   Úregisterr(   ÚEPOLLINÚEPOLLOUTr   r*   r3   Úobjectr+   r   )r
   r   r   r-   r   r   r   Útest_addg   s<   



ÿ
ÿ
ÿ
ÿ
ÿzTestEPoll.test_addc              
   C   s
  |   ¡ \}}t d¡D}tj | ¡ ¡}| | ¡ tjtjB ¡ | | ¡ tjtjB ¡ | dd¡}| dd¡}|  	t
|ƒd¡ |  	t
|ƒd¡ W d   ƒ n1 sRw   Y  z| dd¡ W n ty} } z|  	|jd tj|¡ W Y d }~d S d }~ww |  d¡ d S )Nr/   r   é   gÍÌÌÌÌÌì?r   z%epoll on closed fd didn't raise EBADF)r   r%   r   Úfromfdr(   r7   r8   r9   Úpollr   Úlenr   r   r   ÚEBADFZ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}|  t|ƒt|ƒ¡ |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|ƒt|ƒ¡ | | ¡ ¡ | | ¡ tj¡ t 	¡ }| 
dd¡}t 	¡ }|  || d	k¡ | ¡ tjfg}|  ||¡ d S )
Nr    r   r<   gš™™™™™¹?)ÚtimeoutZ	maxeventss   Hello!s   world!!!ç      ð?ç{®Gáz„?)r   r%   r   r7   r(   r8   r9   ÚEPOLLETÚtimeÚ	monotonicr>   r5   r   ÚsortedÚsendallÚ
unregisterÚmodify)r
   r   r   r-   ÚnowrA   ÚthenZ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 )Nr1   r"   )r*   r+   r%   r   r7   r8   r	   r   r   r   Útest_errorsÑ   s   ÿzTestEPoll.test_errorsc           	      C   s¨   |   ¡ \}}| ¡ }t d¡}| |¡ t ¡ }| dd¡}t ¡ }|  || dk¡ | 	¡  |  
t¡}| |¡ W d   ƒ n1 sDw   Y  |  |jjtj¡ d S )Nr    r   r<   rE   )r   r(   r%   r   r7   rG   rH   r>   r5   r   r*   r   rK   r   Ú	exceptionr   r@   )	r
   r   r   Úfdr-   rM   rA   rN   Úcmr   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ÚrbrD   )ÚopenÚ__file__Ú
addCleanupr   r(   r%   r   ZassertIsInstanceÚintr5   r)   r'   r*   r+   rL   r8   r>   r7   rK   )r
   Z	open_filerR   r   r   r   r   Ú
test_closeç   s   
zTestEPoll.test_closec                 C   s.   t  ¡ }|  |j¡ |  t | ¡ ¡d¡ d S )NF)r%   r   rX   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.   r4   r6   r;   rB   rO   rP   rT   rZ   r]   r   r   r   r   r   )   s    &/r   Ú__main__)Ú__doc__r   r[   r%   r   rG   Zunittestr,   ZSkipTestr   r   r   ZENOSYSZTestCaser   r^   Úmainr   r   r   r   Ú<module>   s,   


€ý ]ÿ