o
    oÃiÌ'  ã                   @   s.  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Z	d dl
mZ d dl	m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	jjjƒZe d¡G dd„ de	jjjƒƒZe eedƒd¡e d¡G dd„ de	jjjƒƒƒZG dd„ dejƒZe d¡G dd„ dejƒƒZedkr•e ¡  dS dS )é    N)Úcontextmanager)Úpatch)Úget_hub)Úos©Úselect)Úsocket)Útimingc                   @   s   e Zd Zdd„ ZdS )Ú
TestSelectc                 C   s   t   g g g |¡ d S ©Nr   )ÚselfÚtimeout© r   úX/var/www/html/pca-backend/venv/lib/python3.10/site-packages/gevent/tests/test__select.pyÚwait   s   zTestSelect.waitN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r
      s    r
   zCant select on filesc                   @   s0   e Zd Zdd„ Ze ej d¡d¡dd„ ƒZ	dS )ÚTestSelectReadc              	   C   sP   t  ¡ \}}zt |gg g |¡ W t  |¡ t  |¡ d S t  |¡ t  |¡ w r   )r   Úpiper   Úclose)r   r   ÚrÚwr   r   r   r      s   

ÿzTestSelectRead.waitÚfreebsdz*skip because of a FreeBSD bug: kern/155606c                 C   s¦   t tdƒD}| ¡ }| ¡  zt |gg g d¡ W n ty3 } z|  |jtj¡ W Y d }~nd }~ww |  	d¡ W d   ƒ d S W d   ƒ d S 1 sLw   Y  d S )NÚrbr   zexception not raised)
ÚopenÚ__file__Úfilenor   r   ÚOSErrorÚassertEqualÚerrnoÚEBADFÚfail)r   ÚfpÚfdÚerrr   r   r   Ú
test_errno#   s   €þ÷"ùzTestSelectRead.test_errnoN)
r   r   r   r   ÚunittestÚskipIfÚsysÚplatformÚ
startswithr&   r   r   r   r   r      s    	ÿr   Úpollz
Needs pollzCant poll on filesc                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestPollReadc              	   C   sv   t  ¡ \}}z$t ¡ }| |tj¡ | |d ¡ W | |¡ t  |¡ t  |¡ d S | |¡ t  |¡ t  |¡ w )Niè  )r   r   r   r,   ÚregisterÚPOLLINÚ
unregisterr   )r   r   r   r   r,   r   r   r   r   6   s   


þ
zTestPollRead.waitc                 C   s   t  ¡ }|  t|jd¡ d S )Né   )r   r,   ÚassertRaisesÚKeyErrorr1   )r   r,   r   r   r   Ú test_unregister_never_registeredD   s   z-TestPollRead.test_unregister_never_registeredc                 C   s~   |   d¡ ttdƒ+}| ¡ }t ¡ }| |tj¡ | ¡  | d¡}|  	||tj
fg¡ W d   ƒ d S 1 s8w   Y  d S )NzŸlibev >= 4.27 aborts the process if built with EV_VERIFY >= 2. For libuv, depending on whether the fileno is reused or not this either crashes or does nothing.r   r   )ÚskipTestr   r   r   r   r,   r/   r0   r   r   ÚPOLLNVAL)r   r#   r$   r,   Úresultr   r   r   Útest_poll_invalidK   s   ÿ
"özTestPollRead.test_poll_invalidN)r   r   r   r   r5   r9   r   r   r   r   r.   3   s    r.   c                   @   r-   )ÚTestSelectTypesc                 C   s<   t   ¡ }zt t| ¡ ƒgg g d¡ W | ¡  d S | ¡  w )Nçü©ñÒMbP?)r   r   Úintr   r   ©r   Úsockr   r   r   Útest_int^   s   zTestSelectTypes.test_intc                    s@   t   ¡ ‰ ‡ fdd„}zt |ƒ g g d¡ W ˆ  ¡  d S ˆ  ¡  w )Nc                   3   s    t ˆ  ¡ ƒV  d S r   )r<   r   r   ©r>   r   r   Úfileno_iterh   s   €z2TestSelectTypes.test_iterable.<locals>.fileno_iterr;   )r   r   r   )r   rA   r   r@   r   Útest_iterablee   s
   zTestSelectTypes.test_iterablec                 C   s"   d| _ |  ttjdgg g d¡ d S )NFÚhellor;   )Úswitch_expectedr3   Ú	TypeErrorr   ©r   r   r   r   Útest_stringp   s   zTestSelectTypes.test_stringN)r   r   r   r?   rB   rG   r   r   r   r   r:   \   s    r:   z*Things like os.close don't work on Windowsc                   @   sL   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	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__selectors.py
    c                 C   sj   t   ¡ }|  |j¡ t |j¡ tjtddd t |gddtj	¡ W d   ƒ d S 1 s.w   Y  d S ©NÚ_original_select©r   r   r   ©Úreturn_valuer   )
r   Ú
addCleanupr   ÚgeventÚspawnÚPatchÚobjectr   r	   ÚSMALLEST_RELIABLE_DELAYr=   r   r   r   Ú#test_closing_object_while_selecting€   s   "ÿz7TestPossibleCrashes.test_closing_object_while_selectingc                 C   s$   z|  ¡  W d S  ty   Y d S w r   )r   r   r=   r   r   r   Ú_close_invalid_sock¦   s
   ÿz'TestPossibleCrashes._close_invalid_sockc                 C   s&   zt  |¡ W d S  ty   Y d S w r   )r   r   r   )r   r$   r   r   r   Ú_close_invalid_fd®   s
   ÿz%TestPossibleCrashes._close_invalid_fdc                 C   sr   t   ¡ }|  | j|¡ t | j| ¡ ¡ tjt	ddd t	 	|gddt
j¡ W d   ƒ d S 1 s2w   Y  d S rI   )r   rN   rU   rO   rP   rV   r   rQ   rR   r   r	   rS   r=   r   r   r   Útest_closing_fd_while_selecting´   s   	"ÿz3TestPossibleCrashes.test_closing_fd_while_selectingc              	   C   s¦   t   ¡ }|  | j|¡ t | ¡ ¡ tjtddd/ |  	¡  t |gddt
j¡ W d   ƒ n1 s4w   Y  W d   ƒ d S W d   ƒ d S 1 sLw   Y  d S rI   )r   rN   rU   r   r   r   rQ   rR   r   Ú_check_os_error_on_libuvr	   rS   r=   r   r   r   Ú test_closing_fd_before_selectingÃ   s   
ÿÿ"ÿz4TestPossibleCrashes.test_closing_fd_before_selectingc                 c   s:    zd V  W d S  t y   |  dttƒ jƒj¡ Y d S w )Nzgevent.libuv)r   ÚassertInÚtyper   Úloopr   rF   r   r   r   rX   ß   s   €ÿz,TestPossibleCrashes._check_os_error_on_libuvc              	   C   sh  t   ¡ }|  |j¡ | ¡ }t |j¡ t ¡ }| |tj	¡ t
jtdddƒ d }|  ¡  | tj¡}W d   ƒ n1 s?w   Y  |d urh|  t|ƒdk¡ dd„ |D ƒ\\}}|  ||¡ |  |tj	¡ d }|  ¡  | tj¡}W d   ƒ n1 sw   Y  |d ur¢|\\}}|  ||¡ |  |tj¡ W d   ƒ d S W d   ƒ d S 1 s­w   Y  d S )NrJ   rK   rL   é   c                 S   s   g | ]}|d  t jkr|‘qS )r]   )r   r0   )Ú.0Úxr   r   r   Ú
<listcomp>ý   s    zITestPossibleCrashes.test_closing_object_while_polling.<locals>.<listcomp>)r   rN   r   r   rO   rP   r   r,   r/   r0   rQ   rR   rX   r	   rS   Ú
assertTrueÚlenr   r7   )r   r>   Úorig_filenoÚpollerÚfds_and_eventsr$   Úeventr   r   r   Ú!test_closing_object_while_pollingç   s6   
þ
ÿ
í"ðz5TestPossibleCrashes.test_closing_object_while_pollingN)r   r   r   Ú__doc__rT   rU   rV   rW   rY   r   rX   rg   r   r   r   r   rH   u   s    	&
rH   Ú__main__)r    r)   r'   Ú
contextlibr   Úunittest.mockr   rQ   Úgevent.corerO   Úgevent.testingÚtestingÚ	greentestr   r   r   r   r	   ÚAbstractGenericWaitTestCaser
   ÚskipOnWindowsr   Ú
skipUnlessÚhasattrr.   ÚTestCaser:   rH   r   Úmainr   r   r   r   Ú<module>   s2    ' ÿ