o
    oÃiƒ  ã                   @   s   d dl Z d dl mZ d dl mZ d dlmZ d dlmZ G dd„ deƒZG dd„ deej	ƒZ
e d	¡G d
d„ dej	ƒƒZedkrFe ¡  dS dS )é    N)Úsocket)Ú	selectors)Útimingc                   @   s.   e Zd Zed
dd„ƒZdZdd„ Zdd„ Zd	S )ÚSelectorTestMixiné   c                 C   s6   | j |d}|D ]\}}| | |j|¡ t ¡  qd S ©N©Útimeout)ÚselectÚdataÚfileobjÚgeventÚsleep)Úselr	   ÚeventsÚkeyÚmask© r   ú[/var/www/html/pca-backend/venv/lib/python3.10/site-packages/gevent/tests/test__selectors.pyÚrun_selector_once   s
   
þz#SelectorTestMixin.run_selector_onceTc                 C   s8   |  d¡}|r| |¡ | jr| |¡ | ¡  d S d S )Néd   )ÚrecvÚsendÚunregister_after_sendÚ
unregisterÚclose)ÚselfÚselectorÚconnÚ_eventsr   r   r   r   Ú read_from_ready_socket_and_reply   s   


þz2SelectorTestMixin.read_from_ready_socket_and_replyc              	   C   sÌ   t  ¡ \}}d }z9| |tj| j¡ t | j|¡}d}| 	|¡ | 
d¡}|  ||¡ W | ¡  | ¡  | ¡  |d urA| d¡ n| ¡  | ¡  | ¡  |d urX| d¡ w w |  |d uob| ¡ ¡ d S )Ns   abcdefé2   é
   )r   Ú
socketpairÚregisterr   Ú
EVENT_READr    r   Úspawnr   r   r   ÚassertEqualr   ÚjoinÚ
assertTrueÚready)r   r   ÚserverÚclientÚgletÚDATAr   r   r   r   Ú_check_selector"   s,   


€üÿz!SelectorTestMixin._check_selectorN)r   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r    r/   r   r   r   r   r      s    
r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚGeventSelectorTestc                 C   s8   t  ¡ }|  |¡ W d   ƒ d S 1 sw   Y  d S ©N)r   ÚGeventSelectorr/   )r   r   r   r   r   Útest_select_using_socketpair8   s   
"ÿz/GeventSelectorTest.test_select_using_socketpairc              
   C   s€  zt j}W n ty   d }Y nw dd„ tdƒD ƒ}zŽt ¡ }t ¡ }t|ƒD ]%\}}|\}}| |tj| j	¡ | |tj|¡ t
|ƒ d¡}	| |	¡ q't ¡  | j||d d j|kr_dndd d}
|jddD ]\}}t
|jƒ d¡}|j d	¡}	|  |	|¡ |
d
7 }
qk|  |
t|ƒ¡ W | ¡  | ¡  |D ]}|D ]}| ¡  qŸq›d S | ¡  | ¡  |D ]}|D ]}| ¡  q·q³w )Nc                 S   s   g | ]}t  ¡ ‘qS r   )r   r#   )Ú.0Ú_r   r   r   Ú
<listcomp>C   s    z?GeventSelectorTest.test_select_many_sockets.<locals>.<listcomp>r"   Úasciir   éÿÿÿÿr   r   r!   é   )r   ÚAF_UNIXÚAttributeErrorÚranger   r6   Ú	enumerater$   r%   r    ÚstrÚencoder   r   Úidler   Úfamilyr
   r   r   r   r'   Úlenr   )r   r>   ÚpairsÚ
server_selÚ
client_selÚiÚpairr+   r,   r   Úfoundr   r9   ÚexpectedÚsr   r   r   Útest_select_many_sockets=   sV   
ÿ
ÿþ

ÿÿþ
ÿÿz+GeventSelectorTest.test_select_many_socketsN)r0   r1   r2   r7   rO   r   r   r   r   r4   5   s    r4   z*Things like os.close don't work on Windowsc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestPossibleCrashesa  
    Tests for the crashes and unexpected exceptions
    that happen when we try to use or create (depending on
    loop implementation) a IO watcher for a closed/invalid file descriptor.

    See https://github.com/gevent/gevent/issues/2100
    See test__select.py
    c                 C   sn   t   ¡ }|  |j¡ t |j¡ t ¡ }| |tj¡ | |j	t
jd W d   ƒ d S 1 s0w   Y  d S r   )r   Ú
addCleanupr   r   r&   r   r6   r$   r%   r
   r   ÚSMALLEST_RELIABLE_DELAY)r   Úsockr   r   r   r   Ú#test_closing_object_while_selectingy   s   "ÿz7TestPossibleCrashes.test_closing_object_while_selectingc                 C   s$   z|  ¡  W d S  ty   Y d S w r5   )r   ÚOSError)r   rS   r   r   r   Ú_close_invalid_sock‡   s
   ÿz'TestPossibleCrashes._close_invalid_sockc                 C   s‚   ddl m} t ¡ }|  | j|¡ t  |j| ¡ ¡ t 	¡ }| 
|tj¡ | |jtjd W d   ƒ d S 1 s:w   Y  d S )Nr   )Úosr   )r   rW   r   rQ   rV   r&   r   Úfilenor   r6   r$   r%   r
   r   rR   ©r   rW   rS   r   r   r   r   Útest_closing_fd_while_selecting   s   "ÿz3TestPossibleCrashes.test_closing_fd_while_selectingc                 C   st   dd l }t ¡ }|  | j|¡ | | ¡ ¡ t ¡ }|  t	d¡ | 
|tj¡ W d   ƒ d S 1 s3w   Y  d S )Nr   zInvalid file)rW   r   rQ   rV   r   rX   r   r6   ÚassertRaisesRegexÚ
ValueErrorr$   r%   rY   r   r   r   Ú test_closing_fd_before_selectingž   s   "ÿz4TestPossibleCrashes.test_closing_fd_before_selectingN)r0   r1   r2   Ú__doc__rT   rV   rZ   r]   r   r   r   r   rP   n   s    	rP   Ú__main__)r   r   r   Úgevent.testingÚtestingÚ	greentestr   Úobjectr   ÚTestCaser4   ÚskipOnWindowsrP   r0   Úmainr   r   r   r   Ú<module>   s   *ÿ9;ÿ