
    i5                     $   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j        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                     dS dS )    N)socket)Waiterget_hub)NativeStrIO)get_this_psutil_process皙?c                       e Zd Zd ZdS )TestCloseSocketWhilePollingc                    t          j                     }|                     |           t                      j                            d          }|                    |j                   |                     t           j                  5  	 |	                    d           |                                 n# |                                 w xY w	 d d d            n# 1 swxY w Y   t          j        d           d S )Nr   )z
python.orgQ   )r   _close_on_teardownr   looptimerstartcloseassertRaiseserrorconnectgeventsleep)selfsockts      A/usr/local/lib/python3.11/dist-packages/gevent/tests/test__hub.pytestz TestCloseSocketWhilePolling.test(   s   }%%%IIN  ##	
v|,, 	 	/000											 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Qs*   C
B4C4C

CC!CN__name__
__module____qualname__r        r   r
   r
   &   s#            r!   r
   c                       e Zd Zd ZdS )TestExceptionInMainloopc                    t          j                     }t          j        t                     t          j                     |z
  }t          dz  }|                     |t          |z
  t          |z              t          j        d          fd}t                      j        	                    d          5 }|
                    |           |                                  t          j                     }t          j        t                     t          j                     |z
  }|                                |                     |t          |z
  t          |z              d d d            d S # 1 swxY w Y   d S )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SS+,UVV	 	 	 	 	 YY^!!%(( 
	XAGGDMMM!!###IKKELIKK%'EE***&&uek.A5;CVWWW
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	X 
	Xs   4B)E**E.1E.N)r   r   r   r2   r    r!   r   r#   r#   6   s(        X X X X Xr!   r#   c                       e Zd Zd Zd ZdS )	TestSleepc                 .    t          j        |           d S r&   r   r   )r   timeouts     r   waitzTestSleep.waitV   s    Wr!   c                 .    t          j        d           d S )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   s2              r!   r4   c                   $     e Zd Z fdZd Z xZS )TestWaiterGetc                 |    t          t          |                                            t                      | _        d S r&   )superr=   setUpr   waiter)r   	__class__s    r   r@   zTestWaiterGet.setUp_   s.    mT""((***hhr!   c                     t                      j                            |          5 }|                    | j        j        d            | j                                        cd d d            S # 1 swxY w Y   d S r&   )r   r   r   r   rA   switchget)r   r7   evts      r   r8   zTestWaiterGet.waitc   s    YY^!!'** 	%cIIdk($///;??$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   9A--A14A1)r   r   r   r@   r8   __classcell__rB   s   @r   r=   r=   ]   sG            % % % % % % %r!   r=   c                       e Zd Zd ZdS )
TestWaiterc                 F   t                      }|                     t          |          d           |                    d           |                     t          |          d           |                     |                                d           t                      }|                    t                     t          j        dt          |                    sJ t          |                      | 	                    t          |j                   t                      }t          j        |j                  }d|_        t          j        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strrD   rE   throwZeroDivisionErrorrematchr   r   spawnnamer   
assertTrue
startswithkill)r   rA   g
str_waiters       r   r   zTestWaiter.testk   sU   V&>???bV&GHHHr***&'''xPRUV\R]R]^^kk`cdj`k`kkkk+VZ888L$$Q[[

--.QR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                      }	 |`n# t          $ r Y nw xY w|j        6|j                                         |j                                         |`d S d S r&   )r   exception_streamAttributeError_threadpool
threadpooljoinrX   r   hubs     r   
_reset_hubz'TestPeriodicMonitoringThread._reset_hub   sz    ii	$$ 	 	 	D	?&N!!!N!!! '&s    
  c                 >   t          t          |                                            t          j        j        | _        dt          j        _        ddlm}   |dd                      | _        d| _	        t                      | _        |                                  d S )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   s    *D1177999$m:'+$......5LLf5577	!eer!   c                 0   t                      }| j        s'|j        r |j                                         d |_        | j        t          j        _        d | _        |                                  t          t          |           
                                 d S r&   )r   rk   periodic_monitoring_threadrX   r   rj   rp   re   r?   r\   tearDown)r   rd   rB   s     r   rs   z%TestPeriodicMonitoringThread.tearDown   s    ii" 	2s'E 	2*//111-1C*'+':$"*D11::<<<<<r!   c                     | j         5  | xj        dz  c_        | j        | j                            |           d d d            d S # 1 swxY w Y   d S )N   )rm   rn   rp   addrc   s     r   _monitorz%TestPeriodicMonitoringThread._monitor   s    Y 	- 	-!#".#'',,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   2AAAc                 P    |                      dt          j        j                   d S )Nr   )rN   r   rj   max_blocking_timer:   s    r   test_configz(TestPeriodicMonitoringThread.test_config   s#    fm=>>>>>r!   Tc                 >   |                      j                   ddlm}  |                                             fd}                    |d                                                                                                 |d            d S )Nr   )	Conditionc                                                                                                                         r                                 d S d S r&   )acquire
notify_allreleaserX   )_hubcondrX   monitors    r   monitor_condzJTestPeriodicMonitoringThread._run_monitoring_threads.<locals>.monitor_cond   sR    LLNNNOOLLNNN   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   s    *+++''''''y{{	 	 	 	 	 	 	 	''d;;;		''d;;;;;r!   c                     ddl m} t                      }|                                 |                      |                       |j                                         |                      |                       d S )Nr   )gettrace)greenletr   r    start_periodic_monitoring_threadassertIsNotNonerr   rX   assertIsNone)r   r   rd   s      r   test_kill_removes_tracez4TestPeriodicMonitoringThread.test_kill_removes_trace   s~    %%%%%%ii,,...XXZZ(((&++---((**%%%%%r!   c                    t                      }t                      x}|_        |                                }|                     |           d}t                      |dz  }|                     |t          |                                                     |	                    | j
        d           |                     |dz   t          |                                                     |                     | j
        |                                d         j                   |                     d|                                d         j                   t          j        |j        j                   |j        |u sJ 	 t#          j        d           |                     |           |	                    | j
        d            |                     |t          |j                             |j        |u sJ |                                 |`ni# |	                    | j
        d            |                     |t          |j                             |j        |u sJ |                                 |`w xY w|                     | j        d           |                                }|                     d|           |                     d|           d S )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   s   ii(35%6688W%%%#$ "$$0$)$1W99;;<<	> 	> 	>''s;;;1A5W99;;<<	> 	> 	>(D(D(F(Fr(J(STTTg::<<R@GHHH 	SX5666#v----		%JsOOO((111++DM4@@@5 !>??A A A'61111LLNNN$$ ++DM4@@@5 !>??A A A'61111LLNNN$$$$$ 	 2A666  -t4440$77777s   ?)H A&I3c                 *    t                      }|j        }|                    t                     }||usJ t                                           |j                    fd}|                    |          }                     |           ||fS )Nc                      t                      _        t          j        d           t                      j        } |                     j        d           | S )Nr   r   )r   r^   r   r   rr   r   rw   )monr   r   s    r   taskz>TestPeriodicMonitoringThread._prep_worker_thread.<locals>.task
  sH    )/GII&L))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    ii^
%%g..
*$$$$ 	*?@@@	 	 	 	 	 	 $))$//^,,,6>11r!   c                 N   |                                  \  }}}|                     |           |                                 | j        5  |                     || j                   |                     |                                d           d d d            d S # 1 swxY w Y   d S )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-G*
FN 	$$^444 Y 	4 	4MM*d&9:::V__..333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   	ABB!Bc                    t                      }|j        }|                                 \  }}}|                    t          j        d          }|                     |           |                                 |                                 | j	        5  | 
                    || j                   |                     |                                d           d d d            d S # 1 swxY w Y   d S )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    ii^
-1-E-E-G-G*
FN
C00$$^444


 Y 	4 	4MM*d&9:::V__..333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   AC##C'*C'c                    t                      }|j        }|                                 \  }}}d }|                    |          }|                     |d           |                                 |                                 |                     || j                   |	                                }|                     d|           |                     d|           d S )Nc                  l    t          j        t          j        d          } |                                  d S )Ngffffff?)r   rT   r)   r   rb   )rY   s    r   r   zYTestPeriodicMonitoringThread.test_blocking_threadpool_thread_multi_greenlet.<locals>.taskJ  s&    TZ--AFFHHHHHr!   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    
 ii^
-1-E-E-G-G*
FN	 	 	 %%$$^%$@@@


 	j$"5666  -t4440$7777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 &8 ! &8P2 2 2>  4 4 ! 4$  4 4 ! 40  8 8 ! 8 8 8 8 8r!   r\   c                        e Zd Zd Zd Zd ZdS )TestLoopInterfacec                 p    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   s       r   test_implemensts_ILoopz(TestLoopInterface.test_implemensts_ILoop_  sM    )))))),,,,,,yy~E4(((((r!   c                     ddl m} ddlm} t	                      j        }|                    d           }|                    ||           d S )Nr   r   	ICallbackc                      d S r&   r    r    r!   r   <lambda>zFTestLoopInterface.test_callback_implements_ICallback.<locals>.<lambda>m  s    t r!   )r   r   r   r   r   r   run_callbackr   r   r   r   r   cbs        r   "test_callback_implements_ICallbackz4TestLoopInterface.test_callback_implements_ICallbackg  sb    ))))))000000yy~||,,Ir*****r!   c                     ddl m} ddlm} t	                      j        }|                    d           }|                    ||           d S )Nr   r   r   c                      d S r&   r    r    r!   r   r   zITestLoopInterface.test_callback_ts_implements_ICallback.<locals>.<lambda>v  s    $ r!   )r   r   r   r   r   r   run_callback_threadsafer   r   s        r   %test_callback_ts_implements_ICallbackz7TestLoopInterface.test_callback_ts_implements_ICallbackp  sb    ))))))000000yy~)),,77Ir*****r!   N)r   r   r   r   r   r   r    r!   r   r   r   ]  sA        ) ) )+ + ++ + + + +r!   r   c                       e Zd Zd Zd ZdS )TestHandleErrorc                 F    	 t                      `d S # t          $ r Y d S w xY wr&   )r   handle_errorr_   r:   s    r   rs   zTestHandleError.tearDown|  s9    			&&& 	 	 	DD	s    
  c                    d }|t                      _         G d dt                    fd}|                               5  t	          j        |                                           d d d            d S # 1 swxY w Y   d S )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dS )YTestHandleError.test_exception_in_custom_handle_error_does_not_crash.<locals>.MyExceptionN)r   r   r   r    r!   r   MyExceptionr     s        Dr!   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			 	 	 	 	) 	 	 		 	 	 	 	 {++ 	' 	'L  $$&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   'A99A= A=N)r   r   r   rs   r   r    r!   r   r   r   z  s2          ' ' ' ' '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      sd  , 
			   " " " " " "            & & & & & & & & & & & & & & 2 2 2 2 2 2    )"4    X X X X Xi0 X X X<    %A   	% 	% 	% 	% 	%FN)E 	% 	% 	%    #   2 L!!W8 W8 W8 W8 W89#5 W8 W8 "!W8t+ + + + +) + + +:' ' ' ' 'h' ' ' '2 zIN r!   