o
    HXîh  ã                   @   s²   d dl 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d dlmZ d dlm	Z	 d dl
mZ zej W n ey?   e d¡‚w dd„ ZG dd	„ d	ejƒZed
krWe ¡  dS dS )é    N)Úcpython_only)Úthreading_helper)ÚTESTFNzselect.poll not definedc                 C   s(   g }| D ]\}}||@ r|  |¡ q|S )N)Úappend)ÚreadyÚflagÚmatchÚfdÚmode© r   ú8/opt/python-3.10.19/usr/lib/python3.10/test/test_poll.pyÚfind_ready_matching   s   
€r   c                   @   s`   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZe	j
dd„ ƒZe ed¡e	j
dd„ ƒƒZdS )Ú	PollTestsc                 C   sr  t  ¡ }d}d}t|ƒ}g }g }i }i }t|ƒD ]-}	t ¡ \}
}| |
¡ | |
t j¡ | |t j	¡ | 
|
¡ | 
|¡ |||
< |
||< qg }|r®| ¡ }t|t j	ƒ}|sZtdƒ‚t |¡}t ||¡ | ¡ }t|t jƒ}|sutdƒ‚t |¡}
t |
|¡}|  t|ƒ|¡ | 
|¡ t ||
 ¡ t |
¡ | ||
 ¡ | |
¡ | ||
 ¡ |sJ|  ||g| ¡ d S )Né   s    This is a test.zno pipes ready for writingzno pipes ready for reading)ÚselectÚpollÚlenÚrangeÚosÚpipeÚregisterÚmodifyÚPOLLINÚPOLLOUTr   r   ÚRuntimeErrorÚrandomÚchoiceÚwriteÚreadÚassertEqualÚcloseÚ
unregisterÚremove)ÚselfÚpZ	NUM_PIPESZMSGZMSG_LENÚreadersZwritersZr2wZw2rÚiZrdÚwrZbufsr   Zready_writersZready_readersÚbufr   r   r   Ú
test_poll1   sN   







ízPollTests.test_poll1c           
      C   sh  t  ¡ \}}t  |¡ t  |¡ t ¡ }| |¡ | ¡ }|  |d |tjf¡ tt	dƒ#}| 
¡ }t ¡ }| |¡ | ¡ }|  |d d |¡ W d   ƒ n1 sSw   Y  | ¡ }|  |d |tjf¡ t  t	¡ t ¡ }|  t|j|¡ |  t|j|¡ t ¡ }|  t|jd¡ t ¡ }G dd„ dƒ}G dd„ dƒ}	|  t|j|ƒ d¡ |  t|j|	ƒ d¡ d S )Nr   Úwé   c                   @   s   e Zd ZdS )z,PollTests.test_poll_unit_tests.<locals>.NopeN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚNopen   s    r/   c                   @   s   e Zd Zdd„ ZdS )z.PollTests.test_poll_unit_tests.<locals>.Almostc                 S   s   dS )NÚfilenor   )r#   r   r   r   r0   r   s   z5PollTests.test_poll_unit_tests.<locals>.Almost.filenoN)r,   r-   r.   r0   r   r   r   r   ÚAlmostq   s    r1   )r   r   r    r   r   r   r   ÚPOLLNVALÚopenr   r0   ÚunlinkÚassertRaisesÚ	TypeErrorr!   ÚKeyError)
r#   ZFDr*   r$   ÚrÚfr	   Úpollsterr/   r1   r   r   r   Útest_poll_unit_testsO   s6   



û
zPollTests.test_poll_unit_testsc           
      C   sÚ   d}t j|dt jdd}| ¡  |  |jd d d ¡ |j}t ¡ }| 	|tj
¡ dD ]A}| |¡}|g kr5q)|d \}}|tj@ rN| ¡ }	|	dkrM|  d¡ q)|tj
@ rc| ¡ }	|	s\ d S |  |	d¡ q)|  d	| ¡ q)d S )
Nz?for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; doneTr   )ÚshellÚstdoutÚbufsize)r   iè  iÐ  i   i@  i€>  éÿÿÿÿr?   r?   r?   r?   r?   r?   r?   r?   r?   ó    z6error: pipe seems to be closed, but still returns datas   testing...
z,Unexpected return value from select.poll: %s)Ú
subprocessÚPopenÚPIPEÚ	__enter__Ú
addCleanupÚ__exit__r=   r   r   r   r   ÚPOLLHUPÚreadlineÚfailr   )
r#   ÚcmdÚprocr$   r:   ZtoutZfdlistr	   ÚflagsÚliner   r   r   Ú
test_poll2{   s6   ÿ



îzPollTests.test_poll2c                 C   s„   t  ¡ }| d¡ |  t|jd¡ d}|dkr|  d¡ |  t|jdd¡ |  t|jdd¡ |  t|jdd¡ |  t|jdd¡ d S )Né   l            é   zOverflow must have occurredr   r?   )r   r   r   r5   ÚOverflowErrorrI   Ú
ValueErrorr   )r#   r:   Úxr   r   r   Ú
test_poll3˜   s   

zPollTests.test_poll3c                 C   s~   ddl m}m}m} t ¡ }| d¡ |  t|jd|d ¡ |  t|j	d|d ¡ |  t|j|d ¡ |  t|j|d ¡ d S )Nr   )Ú	USHRT_MAXÚINT_MAXÚUINT_MAXrO   )
Z	_testcapirU   rV   rW   r   r   r   r5   rQ   r   )r#   rU   rV   rW   r:   r   r   r   Útest_poll_c_limits©   s   
zPollTests.test_poll_c_limitsc              
   C   sþ   t  ¡ \}}|  t j|¡ |  t j|¡ g }tdƒD ]}t  |¡}|  t j|¡ | |¡ qt ¡ }|D ]	}| 	|tj
¡ q4tj|jd}| ¡  z*t d¡ |D ]}| |¡ qQ| 	|tj¡ |  t|j¡ W t  |d¡ | ¡  d S t  |d¡ | ¡  w )Né
   )Útargetg      à?ó   spam)r   r   rE   r    r   Údupr   r   r   r   r   Ú	threadingÚThreadÚstartÚtimeÚsleepr!   r   r5   r   r   Újoin)r#   r8   r*   Zrfdsr&   r	   r:   Útr   r   r   Útest_threaded_pollµ   s.   

ÿ
zPollTests.test_threaded_pollz!Threading required for this test.c                 C   sš   dD ]H}t  ¡ \}}t ¡ }| |tj¡ tj|j|fd}| ¡  |j	dd |  
| ¡ ¡ t  |d¡ | 	¡  |  | ¡ ¡ t  |¡ t  |¡ qd S )N)Niüÿÿr?   g      ð¿gš™™™™™¹¿g0Žä.ÿ+«)rZ   Úargsgš™™™™™¹?)Útimeoutr[   )r   r   r   r   r   r   r]   r^   r_   rb   Z
assertTrueÚis_aliver   ZassertFalser    )r#   Z
timeout_msr8   r*   r:   Zpoll_threadr   r   r   Ú!test_poll_blocks_with_negative_msÑ   s   
ïz+PollTests.test_poll_blocks_with_negative_msN)r,   r-   r.   r)   r;   rN   rT   r   rX   r   Zreap_threadsrd   ÚunittestZ
skipUnlessr]   rh   r   r   r   r   r      s    1,


r   Ú__main__)r   rA   r   r   r]   r`   ri   Ztest.supportr   r   Ztest.support.os_helperr   r   ÚAttributeErrorZSkipTestr   ZTestCaser   r,   Úmainr   r   r   r   Ú<module>   s*   

ÿ Mÿ