a
    äze#  ã                   @   sj   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ƒsDe d¡‚G dd„ dejƒZ	e
dkrfe ¡  dS )é    NÚkqueueztest works only on BSDc                   @   sD   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S )Ú
TestKQueuec                 C   sT   t  ¡ }|  | ¡ dk| ¡ ¡ |  |j ¡ | ¡  |  |j¡ |  t|j¡ d S ©Nr   )Úselectr   Ú
assertTrueÚfilenoÚclosedÚcloseÚassertRaisesÚ
ValueError)ÚselfÚkq© r   ú&/usr/lib/python3.9/test/test_kqueue.pyÚtest_create_queue   s    zTestKQueue.test_create_queuec           
      C   s&  ddl m}m}m}m} t tjtj¡}|  	tj
|¡ t |¡}t d¡}|  |j|¡ |  |jtj¡ |  |jtj¡ |  |jd¡ |  |jd¡ |  |jd¡ |  ||¡ |  ||¡ |  ||k ¡ |  ||k¡ ||||fD ]4}|  t||d ¡ |  t||d¡ |  t||d¡ qât |tj¡}|  |j|¡ |  |jtj¡ |  |jtj¡ |  |jd¡ |  |jd¡ |  |jd¡ |  ||¡ |  ||¡ t |tjtj¡}|  |j|¡ |  |jtj¡ |  |jtj¡ |  |jd¡ |  |jd¡ |  |jd¡ |  ||¡ |  ||¡ t ddddd	d
¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd	¡ |  |jd
¡ |  ||¡ |  ||¡ d}	t |	ddd|	d |	¡}|  |j|	¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j|	d ¡ |  |j|	¡ |  ||¡ |  ||¡ d}	t dd|	¡}|  |jd¡ |  |jd¡ |  |j|	¡ |  |jd¡ |  |jd¡ |  |jd¡ |  ||¡ |  ||¡ d}	t ddd|	¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |j|	¡ |  |jd¡ |  |jd¡ |  ||¡ |  ||¡ d S )Nr   )ÚltÚleÚgtÚgeiè  é   Úevé   é   é   é   é   iÿ  iÿÿ  l   ÿÿ )Úoperatorr   r   r   r   ÚosÚopenÚdevnullÚO_WRONLYÚ
addCleanupr	   r   ÚkeventÚassertEqualÚidentÚfilterÚKQ_FILTER_READÚflagsÚ	KQ_EV_ADDZfflagsÚdataZudataZassertNotEqualr   r
   Ú	TypeErrorÚKQ_FILTER_WRITEZKQ_EV_ONESHOT)
r   r   r   r   r   Úfdr   ÚotherÚopZbignumr   r   r   Útest_create_event   s˜    

zTestKQueue.test_create_eventc              
   C   sö  t  d¡}t   ¡ }| d¡ z| d| ¡ d f¡ W n8 tyn } z |  |jd tj	¡ W Y d }~n
d }~0 0 | 
¡ \}}t ¡ }tj | ¡ ¡}t | ¡ tjtjtjB ¡}| |gd¡ t | ¡ tjtjtjB ¡}| |gd¡ t | ¡ tjtjtjB ¡}| |gd¡ t | ¡ tjtjtjB ¡}| |gd¡ | d dd¡}	tdd„ |	D ƒƒ}	|  |	t| ¡ tjf| ¡ tjfgƒ¡ | d	¡ | d
¡ tdƒD ]2}
| d dd¡}	t|	ƒdkrÆ qÞt d¡ q |  d¡ tdd„ |	D ƒƒ}	|  |	t| ¡ tjf| ¡ tjf| ¡ tjf| ¡ tjfgƒ¡ t | ¡ tjtj¡}| |gd¡ t | ¡ tjtj¡}| |gd¡ t | ¡ tjtj¡}| |gdd¡ | g dd¡}	tdd„ |	D ƒƒ}	|  |	t| ¡ tjfgƒ¡ | ¡  | ¡  | ¡  d S )N)ú	127.0.0.1r   Fr0   r   r   r   c                 s   s   | ]}|j |jfV  qd S ©N©r$   r%   ©Ú.0Úer   r   r   Ú	<genexpr>’   ó    z.TestKQueue.test_queue_event.<locals>.<genexpr>s   Hello!s   world!!!é
   g      ð?z'timeout waiting for event notificationsc                 s   s   | ]}|j |jfV  qd S r1   r2   r3   r   r   r   r6   £   r7   g®Gáz®ï?c                 s   s   | ]}|j |jfV  qd S r1   r2   r3   r   r   r   r6   ¹   r7   )ÚsocketÚcreate_serverÚsetblockingÚconnectÚgetsocknameÚOSErrorr#   ÚargsÚerrnoZEINPROGRESSÚacceptr   r   Úfromfdr   r"   r+   r(   ÚKQ_EV_ENABLEÚcontrolr&   ÚsetÚsendÚrangeÚlenÚtimeÚsleepZfailZKQ_EV_DELETEr	   )r   ZserverSocketÚclientr5   ZserverÚaddrr   Zkq2r   ÚeventsÚir   r   r   Útest_queue_eventp   s”    

*

þ

þ

þ

þþ


ü
þ
þ
þÿzTestKQueue.test_queue_eventc                 C   s´   t  ¡ }t ¡ \}}| d¡ t  |t jt jt jB ¡}t  |t jt jt jB ¡}| 	||gdd¡}|  
|¡ |  |d jt j@ ¡ |  | |d j¡d¡ | ¡  | ¡  | ¡  d S )Ns   foor   r   )r   r   r9   Ú
socketpairrF   r"   r&   r(   rC   rD   r   ÚassertFalser'   ZKQ_EV_ERRORr#   Úrecvr)   r	   )r   r   ÚaÚbZevent1Zevent2Úrr   r   r   ÚtestPairÁ   s    

zTestKQueue.testPairc                    s–   t  ¡ }t ¡ \}}t  |t jt jt jB ¡‰ | ˆ gd¡ | ˆ fd¡ G ‡ fdd„dƒ}| |ƒ d¡ | t	ˆ gƒd¡ | 
¡  | 
¡  | 
¡  d S )Nr   c                       s    e Zd Zdd„ Z‡ fdd„ZdS )z+TestKQueue.test_issue30058.<locals>.BadListc                 S   s   dS r   r   )r   r   r   r   Ú__len__Ü   s    z3TestKQueue.test_issue30058.<locals>.BadList.__len__c                 3   s   t dƒD ]
}ˆ V  qd S )Néd   )rG   )r   rN   ©r   r   r   Ú__iter__Þ   s    z4TestKQueue.test_issue30058.<locals>.BadList.__iter__N)Ú__name__Ú
__module__Ú__qualname__rW   rZ   r   rY   r   r   ÚBadListÛ   s   r^   )r   r   r9   rP   r"   r&   r(   rC   rD   Úiterr	   )r   r   rS   rT   r^   r   rY   r   Útest_issue30058Ñ   s    zTestKQueue.test_issue30058c                 C   s‚   t tdƒ}|  |j¡ | ¡ }t ¡ }|  | ¡ t¡ |  	|j
¡ | ¡  |  |j
¡ |  t|j¡ | ¡  |  t|jd d¡ d S )NÚrbr   )r   Ú__file__r!   r	   r   r   r   ZassertIsInstanceÚintrQ   r   r   r
   r   rD   )r   Z	open_filer,   r   r   r   r   Ú
test_closeé   s    
zTestKQueue.test_closec                 C   s.   t  ¡ }|  |j¡ |  t | ¡ ¡d¡ d S )NF)r   r   r!   r	   r#   r   Úget_inheritabler   )r   r   r   r   r   Útest_fd_non_inheritableþ   s    z"TestKQueue.test_fd_non_inheritableN)
r[   r\   r]   r   r/   rO   rV   r`   rd   rf   r   r   r   r   r      s   YQr   Ú__main__)r@   r   r   r9   rI   ZunittestÚhasattrZSkipTestZTestCaser   r[   Úmainr   r   r   r   Ú<module>   s   

 w