o
    HXîh#  ã                   @   sr   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¡‚G dd„ dej	ƒZ
edkr7e ¡  dS dS )z
Tests for kqueue wrapper.
é    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   ú:/opt/python-3.10.19/usr/lib/python3.10/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 ]}|  t||d ¡ |  t||d¡ |  t||d¡ qqt |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 n ty7 } z|  |jd tj	¡ W Y d }~nd }~ww 	 | 
¡ \}}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 ]}
| d dd¡}	t|	ƒdkrâ n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   ó    | ]	}|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   r1   r2   r3   r4   r   r   r   r7   £   r8   g®Gáz®ï?c                 s   r1   r2   r3   r4   r   r   r   r7   ¹   r8   )Ú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Úclientr6   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   r:   Ú
socketpairrG   r"   r&   r(   rD   rE   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   )rH   )r   rO   ©r   r   r   Ú__iter__Þ   s   €ÿz4TestKQueue.test_issue30058.<locals>.BadList.__iter__N)Ú__name__Ú
__module__Ú__qualname__rX   r[   r   rZ   r   r   ÚBadListÛ   s    r_   )r   r   r:   rQ   r"   r&   r(   rD   rE   Úiterr	   )r   r   rT   rU   r_   r   rZ   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ÚintrR   r   r   r
   r   rE   )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/   rP   rW   ra   re   rg   r   r   r   r   r      s    YQr   Ú__main__)Ú__doc__rA   r   r   r:   rJ   ZunittestÚhasattrZSkipTestZTestCaser   r\   Úmainr   r   r   r   Ú<module>   s    

 wÿ