o
    ÑtPf 5  ã                   @   s&  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ dZG dd„ dejƒZG d	d
„ d
ejƒZG dd„ dejjjƒZ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G dd„ dejƒZG dd„ dejƒZedkr‘e ¡  dS dS )é    N)Úsocket)ÚWaiterÚget_hub)ÚNativeStrIO)Úget_this_psutil_processçš™™™™™¹?c                   @   ó   e Zd Zdd„ ZdS )ÚTestCloseSocketWhilePollingc              	   C   sˆ   t   ¡ }|  |¡ tƒ j d¡}| |j¡ |  t j¡ z| 	d¡ W | ¡  n| ¡  w W d   ƒ n1 s8w   Y  t
 d¡ d S )Nr   )z
python.orgéQ   )r   Ú_close_on_teardownr   ÚloopÚtimerÚstartÚcloseÚassertRaisesÚerrorÚconnectÚgeventÚsleep)ÚselfÚsockÚt© r   úW/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__hub.pyÚtest(   s   
üz TestCloseSocketWhilePolling.testN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r	   &   ó    r	   c                   @   r   )ÚTestExceptionInMainloopc                    sØ   t   ¡ }t t¡ t   ¡ | }td }|  |t| t| ¡ t d¡‰ ‡ fdd„}tƒ j 	d¡2}| 
|¡ |  ¡  t   ¡ }t t¡ t   ¡ | }| jˆ d |  |t| t| ¡ W d   ƒ d S 1 sew   Y  d S )NgÍÌÌÌÌÌì?z'TestExceptionInMainloop.test_sleep/failc                      ó   ˆ ‚©Nr   r   ©r   r   r   ÚfailC   ó   z0TestExceptionInMainloop.test_sleep.<locals>.failgü©ñÒMbP?)Úvalue)Útimer   r   ÚDELAYÚassertTimeWithinRangeÚ	greentestÚExpectedExceptionr   r   r   r   Úexpect_one_errorÚassert_error)r   r   ÚdelayÚdelay_ranger$   r   r   r#   r   Ú
test_sleep8   s    



"öz"TestExceptionInMainloop.test_sleepN)r   r   r   r0   r   r   r   r   r    6   r   r    c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú	TestSleepc                 C   s   t  |¡ d S r"   ©r   r   )r   Útimeoutr   r   r   ÚwaitV   ó   zTestSleep.waitc                 C   s   t  d¡ d S )Nr   r3   ©r   r   r   r   Útest_simpleY   r6   zTestSleep.test_simpleN)r   r   r   r5   r8   r   r   r   r   r2   T   s    r2   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestWaiterGetc                    s   t t| ƒ ¡  tƒ | _d S r"   )Úsuperr9   ÚsetUpr   Úwaiterr7   ©Ú	__class__r   r   r;   _   ó   zTestWaiterGet.setUpc                 C   sL   t ƒ j |¡}| | jjd ¡ | j ¡ W  d   ƒ S 1 sw   Y  d S r"   )r   r   r   r   r<   ÚswitchÚget)r   r4   Úevtr   r   r   r5   c   s   $þzTestWaiterGet.wait)r   r   r   r;   r5   Ú__classcell__r   r   r=   r   r9   ]   s    r9   c                   @   r   )Ú
TestWaiterc                 C   sÂ   t ƒ }|  t|ƒd¡ | d¡ |  t|ƒd¡ |  | ¡ d¡ t ƒ }| t¡ t dt|ƒ¡s6J t|ƒƒ‚|  	t|j¡ t ƒ }t
 |j¡}d|_t
 d¡ t|ƒ}|  | d¡|¡ | ¡  d S )Nz<Waiter greenlet=None>é   z<Waiter greenlet=None value=25>z6^<Waiter greenlet=None exc_info=.*ZeroDivisionError.*$ÚANamer   z!<Waiter greenlet=<Greenlet "AName)r   ÚassertEqualÚstrr@   rA   ÚthrowÚZeroDivisionErrorÚreÚmatchr   r   ÚspawnÚnamer   Ú
assertTrueÚ
startswithÚkill)r   r<   ÚgÚ
str_waiterr   r   r   r   k   s$   


ÿzTestWaiter.testNr   r   r   r   r   rD   i   r   rD   z
Racy on CIc                       s˜   e Zd Zdd„ Z‡ fdd„Z‡ fdd„Zdd„ Zd	d
„ Zddd„Ze	j
dd„ ƒZe	j
dd„ ƒZdd„ Ze	j
dd„ ƒZe	j
dd„ ƒZe	j
dd„ ƒZ‡  ZS )ÚTestPeriodicMonitoringThreadc                 C   sL   t ƒ }z|`W n	 ty   Y nw |jd ur$|j ¡  |j ¡  |`d S d S r"   )r   Úexception_streamÚAttributeErrorÚ_threadpoolÚ
threadpoolÚjoinrQ   ©r   Úhubr   r   r   Ú
_reset_hub…   s   ÿ


ýz'TestPeriodicMonitoringThread._reset_hubc                    sT   t t| ƒ ¡  tjj| _dtj_ddlm} |ddƒƒ | _d| _	t
ƒ | _|  ¡  d S )NTr   )Úget_originalÚ	threadingÚLock)r:   rT   r;   r   ÚconfigÚmonitor_threadÚgevent.monkeyr]   ÚlockÚmonitor_firedÚsetÚmonitored_hubsr\   )r   r]   r=   r   r   r;   ‘   s   
z"TestPeriodicMonitoringThread.setUpc                    sL   t ƒ }| js|jr|j ¡  d |_| jtj_d | _|  ¡  tt	| ƒ 
¡  d S r"   )r   ra   Úperiodic_monitoring_threadrQ   r   r`   rf   r\   r:   rT   ÚtearDownrZ   r=   r   r   rh   ›   s   

z%TestPeriodicMonitoringThread.tearDownc                 C   s`   | j # |  jd7  _| jd ur| j |¡ W d   ƒ d S W d   ƒ d S 1 s)w   Y  d S )Né   )rc   rd   rf   ÚaddrZ   r   r   r   Ú_monitor¦   s   
ý"þz%TestPeriodicMonitoringThread._monitorc                 C   s   |   dtjj¡ d S )Nr   )rG   r   r`   Úmax_blocking_timer7   r   r   r   Útest_config¬   s   z(TestPeriodicMonitoringThread.test_configTc                    sb   |   ˆj¡ ddlm} |ƒ ‰ ˆ  ¡  ‡ ‡‡fdd„}ˆ |d¡ ˆ  ¡  ˆ  ¡  ˆ |d ¡ d S )Nr   )Ú	Conditionc                    s,   ˆ   ¡  ˆ  ¡  ˆ  ¡  ˆrˆ ¡  d S d S r"   )ÚacquireÚ
notify_allÚreleaserQ   )Ú_hub©ÚcondrQ   Úmonitorr   r   Úmonitor_condµ   s   ýzJTestPeriodicMonitoringThread._run_monitoring_threads.<locals>.monitor_condç{®Gáz„?)rO   Ú
should_runr^   rn   ro   Úadd_monitoring_functionr5   rq   )r   ru   rQ   rn   rv   r   rs   r   Ú_run_monitoring_threads¯   s   	z4TestPeriodicMonitoringThread._run_monitoring_threadsc                 C   s@   ddl m} tƒ }| ¡  |  |ƒ ¡ |j ¡  |  |ƒ ¡ d S )Nr   )Úgettrace)Úgreenletr{   r   Ú start_periodic_monitoring_threadÚassertIsNotNonerg   rQ   ÚassertIsNone)r   r{   r[   r   r   r   Útest_kill_removes_traceÄ   s   
z4TestPeriodicMonitoringThread.test_kill_removes_tracec                 C   s€  t ƒ }tƒ  }|_| ¡ }|  |¡ d}tƒ d ur|d7 }|  |t| ¡ ƒ¡ | 	| j
d¡ |  |d t| ¡ ƒ¡ |  | j
| ¡ d j¡ |  d| ¡ d j¡ t |jj¡ |j|u s_J ‚z)t d¡ |  |¡ W | 	| j
d ¡ |  |t|jƒ¡ |j|u s‚J ‚| ¡  |`n| 	| j
d ¡ |  |t|jƒ¡ |j|u s J ‚| ¡  |`w |  | jd¡ | ¡ }|  d|¡ |  d|¡ d S )Nri   r   éÿÿÿÿç333333Ó?úappears to be blockedÚPeriodicMonitoringThread)r   r   rU   r}   r~   r   rG   ÚlenÚmonitoring_functionsry   rk   ÚfunctionÚperiodr   r   r   Úapprox_timer_resolutionr'   rz   Ú_monitoring_functionsrQ   ÚassertGreaterEqualrd   ÚgetvalueÚassertIn)r   r[   Ústreamru   Úbasic_monitor_func_countÚdatar   r   r   Útest_blocking_this_threadÍ   sN   


ÿ

ÿ
ÿûÿz6TestPeriodicMonitoringThread.test_blocking_this_threadc                    s`   t ƒ }|j}| t ¡}||usJ ‚tƒ ‰ˆ  |j¡ ‡ ‡fdd„}| |¡}ˆ  |¡ |ˆ|fS )Nc                     s,   ˆt ƒ _t d¡ t ƒ j} |  ˆ jd¡ | S )Nrw   r   )r   rU   r   r   rg   ry   rk   )Úmon©r   rŽ   r   r   Útask
  s
   
z>TestPeriodicMonitoringThread._prep_worker_thread.<locals>.task)r   rX   Úapplyr   r   rg   r~   )r   r[   rX   Ú
worker_hubr”   Úworker_monitorr   r“   r   Ú_prep_worker_threadö   s   



z0TestPeriodicMonitoringThread._prep_worker_threadc                 C   sj   |   ¡ \}}}|  |¡ | ¡  | j |  || j¡ |  | ¡ d¡ W d   ƒ d S 1 s.w   Y  d S )NÚ )r˜   rz   rQ   rc   r   rf   rG   rŒ   )r   r–   rŽ   r—   r   r   r   Ú*test_blocking_threadpool_thread_task_queue  s   
"þzGTestPeriodicMonitoringThread.test_blocking_threadpool_thread_task_queuec                 C   sŒ   t ƒ }|j}|  ¡ \}}}| tjd¡}|  |¡ | ¡  | ¡  | j	 |  
|| j¡ |  | ¡ d¡ W d   ƒ d S 1 s?w   Y  d S )Nr‚   r™   )r   rX   r˜   rM   r'   r   rz   rA   rQ   rc   r   rf   rG   rŒ   )r   r[   rX   r–   rŽ   r—   r”   r   r   r   Ú,test_blocking_threadpool_thread_one_greenlet(  s   
"þzITestPeriodicMonitoringThread.test_blocking_threadpool_thread_one_greenletc                 C   s|   t ƒ }|j}|  ¡ \}}}dd„ }| |¡}| j|dd | ¡  | ¡  |  || j¡ | 	¡ }|  d|¡ |  d|¡ d S )Nc                  S   s   t  tjd¡} |  ¡  d S )Ngffffffæ?)r   rM   r'   r   rY   )rR   r   r   r   r”   J  r?   zYTestPeriodicMonitoringThread.test_blocking_threadpool_thread_multi_greenlet.<locals>.taskF)rQ   rƒ   r„   )
r   rX   r˜   rM   rz   rA   rQ   r   rf   rŒ   )r   r[   rX   r–   rŽ   r—   r”   r   r   r   r   Ú.test_blocking_threadpool_thread_multi_greenletA  s   
zKTestPeriodicMonitoringThread.test_blocking_threadpool_thread_multi_greenlet)T)r   r   r   r\   r;   rh   rk   rm   rz   r*   Úignores_leakcheckr€   r‘   r˜   rš   r›   rœ   rC   r   r   r=   r   rT   ‚   s$    



(

rT   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestLoopInterfacec                 C   s0   ddl m} ddlm} tƒ j}| ||¡ d S )Nr   ©Úverify)ÚILoop)Úgevent.testingr    Úgevent._interfacesr¡   r   r   ÚverifyObject)r   r    r¡   r   r   r   r   Útest_implemensts_ILoop_  s   z(TestLoopInterface.test_implemensts_ILoopc                 C   ó>   ddl m} ddlm} tƒ j}| dd„ ¡}| ||¡ d S )Nr   rŸ   ©Ú	ICallbackc                   S   ó   d S r"   r   r   r   r   r   Ú<lambda>m  ó    zFTestLoopInterface.test_callback_implements_ICallback.<locals>.<lambda>)r¢   r    r£   r¨   r   r   Úrun_callbackr¤   ©r   r    r¨   r   Úcbr   r   r   Ú"test_callback_implements_ICallbackg  ó
   z4TestLoopInterface.test_callback_implements_ICallbackc                 C   r¦   )Nr   rŸ   r§   c                   S   r©   r"   r   r   r   r   r   rª   v  r«   zITestLoopInterface.test_callback_ts_implements_ICallback.<locals>.<lambda>)r¢   r    r£   r¨   r   r   Úrun_callback_threadsafer¤   r­   r   r   r   Ú%test_callback_ts_implements_ICallbackp  r°   z7TestLoopInterface.test_callback_ts_implements_ICallbackN)r   r   r   r¥   r¯   r²   r   r   r   r   rž   ]  s    	rž   c                   @   r1   )ÚTestHandleErrorc                 C   s"   zt ƒ `W d S  ty   Y d S w r"   )r   Úhandle_errorrV   r7   r   r   r   rh   |  s
   ÿzTestHandleError.tearDownc                    sj   dd„ }|t ƒ _G dd„ dtƒ‰ ‡ fdd„}|  ˆ ¡ t |¡ ¡  W d   ƒ d S 1 s.w   Y  d S )Nc                  W   s   t ‚r"   )rV   )Úargsr   r   r   Úbad_handle_error„  r%   z^TestHandleError.test_exception_in_custom_handle_error_does_not_crash.<locals>.bad_handle_errorc                   @   s   e Zd ZdS )zYTestHandleError.test_exception_in_custom_handle_error_does_not_crash.<locals>.MyExceptionN)r   r   r   r   r   r   r   ÚMyException‰  s    r·   c                      r!   r"   r   r   ©r·   r   r   ÚraisesŒ  r%   zTTestHandleError.test_exception_in_custom_handle_error_does_not_crash.<locals>.raises)r   r´   Ú	Exceptionr   r   rM   rA   )r   r¶   r¹   r   r¸   r   Ú4test_exception_in_custom_handle_error_does_not_crash‚  s   "ÿzDTestHandleError.test_exception_in_custom_handle_error_does_not_crashN)r   r   r   rh   r»   r   r   r   r   r³   z  s    r³   Ú__main__)rK   r'   Úunittestr¢   Útestingr*   Úgevent.testing.timingr   r   Ú
gevent.hubr   r   Úgevent._compatr   r   r(   ÚTestCaser	   r    ÚtimingÚAbstractGenericWaitTestCaser2   r9   rD   ÚskipOnCIrT   rž   r³   r   Úmainr   r   r   r   Ú<module>   s0   	 [ÿ