
    <|h5                     h   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ej                         Z G d	 d
ej                         Z G d dej                  j&                  j(                        Z G d dej                  j&                  j(                        Z G d dej                         Z ej0                  d       G d dej                                Z G d dej                         Z G d dej                         Zedk(  r ej:                          yy)    N)socket)Waiterget_hub)NativeStrIO)get_this_psutil_process皙?c                       e Zd Zd Zy)TestCloseSocketWhilePollingc                    t        j                          }| j                  |       t               j                  j	                  d      }|j                  |j                         | j                  t         j                        5  	 |j                  d       |j                          	 d d d        t        j                  d       y # |j                          w xY w# 1 sw Y   4xY w)Nr   )z
python.orgQ   )r   _close_on_teardownr   looptimerstartcloseassertRaiseserrorconnectgeventsleep)selfsockts      U/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__hub.pytestz TestCloseSocketWhilePolling.test(   s    }}%INN  #	

v||, 	/0			 	Q 			 	s$   CCCCCC#N__name__
__module____qualname__r        r   r
   r
   &   s    r!   r
   c                       e Zd Zd Zy)TestExceptionInMainloopc                    t        j                          }t        j                  t               t        j                          |z
  }t        dz  }| j	                  |t        |z
  t        |z          t        j                  d      fd}t               j                  j                  d      5 }|j                  |       | j                          t        j                          }t        j                  t               t        j                          |z
  }| j                         | j	                  |t        |z
  t        |z          d d d        y # 1 sw Y   y xY w)Ng?z'TestExceptionInMainloop.test_sleep/failc                       Nr    )r   s   r   failz0TestExceptionInMainloop.test_sleep.<locals>.failC   s    Kr!   gMbP?)value)timer   r   DELAYassertTimeWithinRange	greentestExpectedExceptionr   r   r   r   expect_one_errorassert_error)r   r   delaydelay_ranger'   r   r   s         @r   
test_sleepz"TestExceptionInMainloop.test_sleep8   s   		U		e#ck""5%+*=u{?RS++,UV	 Y^^!!%( 
	XAGGDM!!#IIKELLIIK%'EE*&&uek.A5;CVW
	X 
	X 
	Xs   -BEEN)r   r   r   r2   r    r!   r   r#   r#   6   s    Xr!   r#   c                       e Zd Zd Zd Zy)	TestSleepc                 .    t        j                  |       y r&   r   r   )r   timeouts     r   waitzTestSleep.waitV   s    Wr!   c                 .    t        j                  d       y )Nr   r6   r   s    r   test_simplezTestSleep.test_simpleY   s    Qr!   N)r   r   r   r8   r;   r    r!   r   r4   r4   T   s    r!   r4   c                   $     e Zd Z fdZd Z xZS )TestWaiterGetc                 H    t         t        |           t               | _        y r&   )superr=   setUpr   waiter)r   	__class__s    r   r@   zTestWaiterGet.setUp_   s    mT(*hr!   c                     t               j                  j                  |      5 }|j                  | j                  j
                  d        | j                  j                         cd d d        S # 1 sw Y   y xY wr&   )r   r   r   r   rA   switchget)r   r7   evts      r   r8   zTestWaiterGet.waitc   sS    Y^^!!'* 	%cIIdkk(($/;;??$	% 	% 	%s   A A..A7)r   r   r   r@   r8   __classcell__rB   s   @r   r=   r=   ]   s    %r!   r=   c                       e Zd Zd Zy)
TestWaiterc                    t               }| j                  t        |      d       |j                  d       | j                  t        |      d       | j                  |j	                         d       t               }|j                  t               t        j                  dt        |            sJ t        |             | j                  t        |j                         t               }t        j                  |j                        }d|_        t        j                  d       t        |      }| j                  |j                  d      |       |j!                          y )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strrD   rE   throwZeroDivisionErrorrematchr   r   spawnnamer   
assertTrue
startswithkill)r   rA   g
str_waiters       r   r   zTestWaiter.testk   s   V&>?bV&GHr*&'xxPRUV\R]^k`cdj`kk^+VZZ8LL$Q[

--.QR"	$ 	
r!   Nr   r    r!   r   rJ   rJ   i   s    r!   rJ   z
Racy on CIc                        e Zd Zd Z fdZ fdZd Zd ZddZe	j                  d        Ze	j                  d        Zd	 Ze	j                  d
        Ze	j                  d        Ze	j                  d        Z xZS )TestPeriodicMonitoringThreadc                     t               }	 |`|j                  7|j                  j                          |j                  j                          |`y y # t        $ r Y Ow xY wr&   )r   exception_streamAttributeError_threadpool
threadpooljoinrX   r   hubs     r   
_reset_hubz'TestPeriodicMonitoringThread._reset_hub   s^    i	$ ??&NN!NN! '  		s   A 	AAc                    t         t        |           t        j                  j
                  | _        dt        j                  _        ddlm}   |dd             | _        d| _	        t               | _        | j                          y )NTr   )get_original	threadingLock)r?   r\   r@   r   configmonitor_threadgevent.monkeyrg   lockmonitor_firedsetmonitored_hubsre   )r   rg   rB   s     r   r@   z"TestPeriodicMonitoringThread.setUp   sa    *D79$mm::'+$.5Lf57	!er!   c                    t               }| j                  s-|j                  r!|j                  j                          d |_        | j                  t        j
                  _        d | _        | j                          t        t        | +          y r&   )r   rk   periodic_monitoring_threadrX   r   rj   rp   re   r?   r\   tearDown)r   rd   rB   s     r   rs   z%TestPeriodicMonitoringThread.tearDown   sg    i""s'E'E**//1-1C*'+':':$"*D:<r!   c                     | j                   5  | xj                  dz  c_        | j                  | j                  j                  |       d d d        y # 1 sw Y   y xY w)N   )rm   rn   rp   addrc   s     r   _monitorz%TestPeriodicMonitoringThread._monitor   sO    YY 	-!#"".##'',	- 	- 	-s   =AAc                 X    | j                  dt        j                  j                         y )Nr   )rN   r   rj   max_blocking_timer:   s    r   test_configz(TestPeriodicMonitoringThread.test_config   s    fmm==>r!   c                    | j                  j                         ddlm}  |       j	                          fd}j                  |d       j                          j                          j                  |d        y )Nr   )	Conditionc                     j                          j                          j                          rj                          y y r&   )acquire
notify_allreleaserX   )_hubcondrX   monitors    r   monitor_condzJTestPeriodicMonitoringThread._run_monitoring_threads.<locals>.monitor_cond   s2    LLNOOLLN  r!   {Gz?)rV   
should_runrh   r|   r~   add_monitoring_functionr8   r   )r   r   rX   r|   r   r   s    ``  @r   _run_monitoring_threadsz4TestPeriodicMonitoringThread._run_monitoring_threads   sa    **+'{	 	''d;		''d;r!   c                     ddl m} t               }|j                          | j	                   |              |j
                  j                          | j                   |              y )Nr   )gettrace)greenletr   r    start_periodic_monitoring_threadassertIsNotNonerr   rX   assertIsNone)r   r   rd   s      r   test_kill_removes_tracez4TestPeriodicMonitoringThread.test_kill_removes_trace   sJ    %i,,.XZ(&&++-(*%r!   c                 >   t               }t               x}|_        |j                         }| j	                  |       d}t               |dz  }| j                  |t        |j                                      |j                  | j                  d       | j                  |dz   t        |j                                      | j                  | j                  |j                         d   j                         | j                  d|j                         d   j                         t        j                  |j                  j                          |j                  |u sJ 	 t#        j                  d       | j%                  |       |j                  | j                  d        | j                  |t        |j&                               |j                  |u sJ |j)                          |`| j+                  | j,                  d       |j/                         }| j1                  d|       | j1                  d|       y # |j                  | j                  d        | j                  |t        |j&                               |j                  |u sJ |j)                          |`w xY w)Nru   r   333333?appears to be blockedPeriodicMonitoringThread)r   r   r^   r   r   r   rN   lenmonitoring_functionsr   rw   functionperiodr   r   r   approx_timer_resolutionr)   r   _monitoring_functionsrX   assertGreaterEqualrn   getvalueassertIn)r   rd   streamr   basic_monitor_func_countdatas         r   test_blocking_this_threadz6TestPeriodicMonitoringThread.test_blocking_this_thread   s5   i(35%668W%#$ "$0$)$1W99;<	>''s;1A5W99;<	>(D(D(Fr(J(S(STg::<R@GGH 	SXX556##v---		%JJsO((1++DMM4@5 !>!>?A''6111LLN$ 	 2 2A6 -t40$7 ++DMM4@5 !>!>?A''6111LLN$s   &H7 7A%Jc                     t               }|j                  }|j                  t               }||usJ t                j	                  |j
                          fd}|j                  |      } j                  |       ||fS )Nc                      t               _        t        j                  d       t               j                  } | j                  j                  d       | S )Nr   r   )r   r^   r   r   rr   r   rw   )monr   r   s    r   taskz>TestPeriodicMonitoringThread._prep_worker_thread.<locals>.task
  s?    )/GI&LL)66C''s;Jr!   )r   ra   applyr   r   rr   r   )r   rd   ra   
worker_hubr   worker_monitorr   s   `     @r   _prep_worker_threadz0TestPeriodicMonitoringThread._prep_worker_thread   s    i^^
%%g.
*$$$ 	*??@	 $))$/^,6>11r!   c                 (   | j                         \  }}}| j                  |       |j                          | j                  5  | j	                  || j
                         | j                  |j                         d       d d d        y # 1 sw Y   y xY w)N )r   r   rX   rm   r   rp   rN   r   )r   r   r   r   s       r   *test_blocking_threadpool_thread_task_queuezGTestPeriodicMonitoringThread.test_blocking_threadpool_thread_task_queue  s~     .2-E-E-G*
FN 	$$^4 YY 	4MM*d&9&9:V__.3	4 	4 	4s   =BBc                    t               }|j                  }| j                         \  }}}|j                  t        j
                  d      }| j                  |       |j                          |j                          | j                  5  | j                  || j                         | j                  |j                         d       d d d        y # 1 sw Y   y xY w)Nr   r   )r   ra   r   rT   r)   r   r   rE   rX   rm   r   rp   rN   r   )r   rd   ra   r   r   r   r   s          r   ,test_blocking_threadpool_thread_one_greenletzITestPeriodicMonitoringThread.test_blocking_threadpool_thread_one_greenlet(  s     i^^
-1-E-E-G*
FN

C0$$^4
 YY 	4MM*d&9&9:V__.3	4 	4 	4s   =CCc                    t               }|j                  }| j                         \  }}}d }|j                  |      }| j	                  |d       |j                          |j                          | j                  || j                         |j                         }| j                  d|       | j                  d|       y )Nc                  l    t        j                  t        j                  d      } | j	                          y )Ngffffff?)r   rT   r)   r   rb   )rY   s    r   r   zYTestPeriodicMonitoringThread.test_blocking_threadpool_thread_multi_greenlet.<locals>.taskJ  s    TZZ-AFFHr!   F)rX   r   r   )
r   ra   r   rT   r   rE   rX   r   rp   r   )r   rd   ra   r   r   r   r   r   s           r   .test_blocking_threadpool_thread_multi_greenletzKTestPeriodicMonitoringThread.test_blocking_threadpool_thread_multi_greenletA  s    
 i^^
-1-E-E-G*
FN	 %$$^%$@
 	j$"5"56 -t40$7r!   )T)r   r   r   re   r@   rs   rw   rz   r   r,   ignores_leakcheckr   r   r   r   r   r   rG   rH   s   @r   r\   r\      s    		=-?<*   & !&   &8 !&8P2>   4 !4$   4 !40   8 !8r!   r\   c                       e Zd Zd Zd Zd Zy)TestLoopInterfacec                 h    ddl m} ddlm} t	               j
                  }|j                  ||       y )Nr   verify)ILoop)gevent.testingr   gevent._interfacesr   r   r   verifyObject)r   r   r   r   s       r   test_implemensts_ILoopz(TestLoopInterface.test_implemensts_ILoop_  s#    ),y~~E4(r!   c                     ddl m} ddlm} t	               j
                  }|j                  d       }|j                  ||       y )Nr   r   	ICallbackc                       y r&   r    r    r!   r   <lambda>zFTestLoopInterface.test_callback_implements_ICallback.<locals>.<lambda>m      r!   )r   r   r   r   r   r   run_callbackr   r   r   r   r   cbs        r   "test_callback_implements_ICallbackz4TestLoopInterface.test_callback_implements_ICallbackg  s3    )0y~~|,Ir*r!   c                     ddl m} ddlm} t	               j
                  }|j                  d       }|j                  ||       y )Nr   r   r   c                       y r&   r    r    r!   r   r   zITestLoopInterface.test_callback_ts_implements_ICallback.<locals>.<lambda>v  r   r!   )r   r   r   r   r   r   run_callback_threadsafer   r   s        r   %test_callback_ts_implements_ICallbackz7TestLoopInterface.test_callback_ts_implements_ICallbackp  s3    )0y~~)),7Ir*r!   N)r   r   r   r   r   r   r    r!   r   r   r   ]  s    )++r!   r   c                       e Zd Zd Zd Zy)TestHandleErrorc                 8    	 t               `y # t        $ r Y y w xY wr&   )r   handle_errorr_   r:   s    r   rs   zTestHandleError.tearDown|  s!    		& 		s   
 	c                     d }|t               _         G d dt              fd}| j                        5  t	        j
                  |      j                          d d d        y # 1 sw Y   y xY w)Nc                      t         r&   )r_   )argss    r   bad_handle_errorz^TestHandleError.test_exception_in_custom_handle_error_does_not_crash.<locals>.bad_handle_error  s      r!   c                       e Zd Zy)YTestHandleError.test_exception_in_custom_handle_error_does_not_crash.<locals>.MyExceptionN)r   r   r   r    r!   r   MyExceptionr     s    r!   r   c                       r&   r    )r   s   r   raiseszTTestHandleError.test_exception_in_custom_handle_error_does_not_crash.<locals>.raises  s	    r!   )r   r   	Exceptionr   r   rT   rE   )r   r   r   r   s      @r   4test_exception_in_custom_handle_error_does_not_crashzDTestHandleError.test_exception_in_custom_handle_error_does_not_crash  s_    	! "2		) 		 {+ 	'LL $$&	' 	' 	's   $A&&A/N)r   r   r   rs   r   r    r!   r   r   r   z  s    'r!   r   __main__)rR   r)   unittestr   testingr,   gevent.testing.timingr   r   
gevent.hubr   r   gevent._compatr   r   r*   TestCaser
   r#   timingAbstractGenericWaitTestCaser4   r=   rJ   skipOnCIr\   r   r   r   mainr    r!   r   <module>r      s  , 
   "    & & 2)"4"4  Xi00 X<%%AA 	%FNN))EE 	%## 2 L!W89#5#5 W8 "W8t+)) +:'h'' '2 zINN r!   