
    iP1                        d dl 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 d dlmZ d d	lmZ d d
lmZ  eed          Z G d de          Z G d de          Z G d deej                  Z G d deej                  Z G d de          Z ed           G d deej                              Zedk    r ej                     dS dS )    N)gettrace)settrace)get_original)thread_mod_name)NativeStrIO)verify)skipWithoutPSUtil)_monitor)config	get_identc                   H    e Zd ZdZdZd Zd ZeZd Ze	d             Z
d ZdS )MockHubNc                 `    t                      | _        t                      | _        d| _        d S )NF)r   thread_identr   exception_streamdeadselfs    F/usr/local/lib/python3.11/dist-packages/gevent/tests/test___monitor.py__init__zMockHub.__init__   s%    %KK +			    c                     | j          S Nr   r   s    r   __bool__zMockHub.__bool__   s    9}r   c                       r    )r   argss     r   handle_errorzMockHub.handle_error$   s    r   c                     | S r   r   r   s    r   loopzMockHub.loop'   s    r   c                     dS )zmock loop.reinitNr   r   s    r   reinitzMockHub.reinit+         r   )__name__
__module____qualname___threadpool	_resolverr   r   __nonzero__r   propertyr!   r#   r   r   r   r   r      s|        KI  
   K     X    r   r   c                   (     e Zd Z fdZ fdZ xZS )%_AbstractTestPeriodicMonitoringThreadc                     t          t                                                      t          j         _        t          j         _        d t          _        d _         fd}|t          _        t                       _
        t          j         j
                   _         j         j
        _         j                                        d d           _        t!           j                   _        d S )Nc                 (    t          j                    S r   )gccollect)_ss    r   <lambda>z=_AbstractTestPeriodicMonitoringThread.setUp.<locals>.<lambda>7   s    "*,, r      >[= c                 6    j         }xj         dz  c_         |S N   )tid)_f_arr   s      r   start_new_threadzE_AbstractTestPeriodicMonitoringThread.setUp.<locals>.start_new_thread9   s    AHHMHHHr   )superr-   setUpmonitorr<   _orig_start_new_threadthread_sleep_orig_thread_sleepr8   r   hubPeriodicMonitoringThreadpmtperiodic_monitoring_threadmonitoring_functionspmt_default_funcslenlen_pmt_default_funcs)r   r<   	__class__s   ` r   r>   z+_AbstractTestPeriodicMonitoringThread.setUp3   s    3T::@@BBB&-&>#")"666	 	 	 	 	
 $4 993DH==.2h+!%!>!>!@!@!C%()?%@%@"""r   c                 \   | j         t          _        | j        t          _        | j        j        j        }| j                                         t                      |u sJ t                      |f            t          d            t          t          |                                            d S r   )r@   r?   r<   rB   rA   rE   _greenlet_tracerprevious_trace_functionkillr   r   r=   r-   tearDown)r   prevrK   s     r   rP   z._AbstractTestPeriodicMonitoringThread.tearDownE   s    #'#> #6x(@zzT!!!HJJ#5!!!3T::CCEEEEEr   )r%   r&   r'   r>   rP   __classcell__)rK   s   @r   r-   r-   .   s_        
A A A A A$F F F F F F F F Fr   r-   c                   l    e Zd Zd Z ed          d             Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestPeriodicMonitoringThreadc                     |                      d| j        j                   |                      t                      | j        j                   d S )Nr4   )assertEqualrE   monitor_thread_identr   rM   r   s    r   test_constructorz-TestPeriodicMonitoringThread.test_constructorR   sB    TX%BCCCTX%>?????r   zVerifies the processc                     | j                                         }|                     |           |                     || j                                                    d S r   )rE   _get_processassertIsNotNoneassertIs)r   procs     r   test_get_processz-TestPeriodicMonitoringThread.test_get_processV   sQ    x$$&&T"""dDH113344444r   c                 8   |                      | j        | j        j                   | `t          j                     |                     | j        j                   |                     | j        j                   |                     t                                 d S r   )	r\   rC   rE   r0   r1   assertIsNoneassertFalse
should_runr   r   s    r   test_hub_wrefz*TestPeriodicMonitoringThread.test_hub_wref]   s}    dh---H

$(,''' 	,---(**%%%%%r   c                    |                      t          | j        j        d d           |                      t          | j        j        d d           d }| j                            |d           |                     | j        dz   t          | j                                                             |                     d| j                                        d         j                   | j                            |d           |                     | j        dz   t          | j                                                             |                     d| j                                        d         j                   | j                            |d            |                     | j        t          | j                                                             d S )Nr7   c                      d S r   r   r   r   r   r3   zKTestPeriodicMonitoringThread.test_add_monitoring_function.<locals>.<lambda>l   s    PT r   c                      dS )zDoes nothingNr   r   r   r   fzDTestPeriodicMonitoringThread.test_add_monitoring_function.<locals>.fn   r$   r      )	assertRaises
ValueErrorrE   add_monitoring_functionrV   rJ   rI   rG   periodr   rh   s     r   test_add_monitoring_functionz9TestPeriodicMonitoringThread.test_add_monitoring_functioni   s   *dh&FaPPP*dh&FVXYYY	 	 	 	((A...3a7TX=Z=Z=\=\9]9]^^^DH99;;A>EFFF 	((A...3a7TX=Z=Z=\=\9]9]^^^DH99;;A>EFFF 	((D1113S9V9V9X9X5Y5YZZZZZr   c                    |                      | j                                        d         j        | j                                                   d| j        _        |                      | j        j        | j                                                   d| j                                        d         _        d| j        _        | j                                         |                      | j                                        d         j        | j                                                   |                      | j                                        d         j        | j        j                   d S )Nr   rf   )rV   rE   rG   rm   calculate_sleep_time_calculated_sleep_timeinactive_sleep_timer   s    r   test_calculate_sleep_timez6TestPeriodicMonitoringThread.test_calculate_sleep_time   sC   H))++A.5H))++	- 	- 	- +,'H(H))++	
 	
 	
 57%%''*1*+'%%'''H))++A.5H))++	- 	- 	- 	H))++A.5H+	- 	- 	- 	- 	-r   c                       fd} j                             |d                                                                    j         j                   d S )Nc                 @    d } d _         t          j                     d S r   )rC   r0   r1   )_hubr   s    r   rh   z?TestPeriodicMonitoringThread.test_call_destroyed_hub.<locals>.f   s    DDHJLLLLLr   皙?rE   rl   ra   rb   rn   s   ` r   test_call_destroyed_hubz4TestPeriodicMonitoringThread.test_call_destroyed_hub   sb    	 	 	 	 	
 	((C000


,-----r   c                     d }| j                             |d           |                                   |                     | j         j                   d S )Nc                     d| _         d S )NTr   )rC   s    r   rh   z:TestPeriodicMonitoringThread.test_call_dead_hub.<locals>.f   s    CHHHr   rx   ry   rn   s     r   test_call_dead_hubz/TestPeriodicMonitoringThread.test_call_dead_hub   sU    	 	 	((C000


,-----r   c                 j    d }| j                             |d           |                                   d S )Nc                     t                      r   )
SystemExit)rw   s    r   rh   z<TestPeriodicMonitoringThread.test_call_SystemExit.<locals>.f   s    ,,r   rx   )rE   rl   rn   s     r   test_call_SystemExitz1TestPeriodicMonitoringThread.test_call_SystemExit   s<    	 	 	 	((C000




r   c                      G d dt                     fd}| j                            |d           |                               5  |                                  d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )GTestPeriodicMonitoringThread.test_call_other_error.<locals>.MyExceptionN)r%   r&   r'   r   r   r   MyExceptionr      s        Dr   r   c                                  r   r   )rw   r   s    r   rh   z=TestPeriodicMonitoringThread.test_call_other_error.<locals>.f   s    +--r   rx   )	ExceptionrE   rl   rj   )r   rh   r   s     @r   test_call_other_errorz2TestPeriodicMonitoringThread.test_call_other_error   s    	 	 	 	 	) 	 	 		  	  	  	  	  	((C000{++ 	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   
A,,A03A0c                    dd l }ddlm} d| j        _        | j        j        } || j                   |                     |                                | j        j                   |                     |dz   | j        j                   d S )Nr   )r#   rf   r7   )	os
gevent.hubr#   rE   pidrW   rC   rV   getpid)r   r   r#   old_tids       r   test_hub_reinitz,TestPeriodicMonitoringThread.test_hub_reinit   s    			%%%%%%(/txdhl3331dh&CDDDDDr   N)r%   r&   r'   rX   r	   r^   rc   ro   rt   rz   r}   r   r   r   r   r   r   rT   rT   O   s        @ @ @ -..5 5 /.5	& 	& 	&[ [ [,- - -2
. 
. 
.. . .  	 	 		E 	E 	E 	E 	Er   rT   c                        e Zd Zd Zd Zd ZdS )TestPeriodicMonitorBlockingc                    | j                                          |                     t                                 g fd}t	          |           t          j        | j                  | _         |                     t                      | j         j	                   | 
                    | j         j	        j        |           | j         	                    dd           |                     dg           d S )Nc                  2                         |            d S r   )append)r   calleds    r   rh   z:TestPeriodicMonitorBlocking.test_previous_trace.<locals>.f   s    MM$r   eventr   )r   r   )rE   rO   r`   r   r   r?   rD   rC   rV   rM   r\   rN   )r   rh   r   s     @r   test_previous_tracez/TestPeriodicMonitorBlocking.test_previous_trace   s    (**%%%	  	  	  	  	  	3DH==TX%>???dh/GKKK!!'9555./88888r   c                    |                      d| j        j        j                   | j                            dd            |                      d| j        j        j                   |                     | j        j        j                   t                      }t                      }| j                            d||f           |                      d| j        j        j                   |                     || j        j        j                   | j                            dd           |                      d| j        j        j                   |                     | j        j        j                   d S )Nr   unknownr7   switchri   r      )rV   rE   rM   greenlet_switch_counterr`   active_greenletobjectr\   )r   origintargets      r   test__greenlet_tracerz1TestPeriodicMonitorBlocking.test__greenlet_tracer   s5   DH5MNNN!!)T222DH5MNNN$(3CDDD!!(VV,<===DH5MNNNfdh7GHHH 	!!)R000DH5MNNN$(3CDDDDDr   c                 Z   ddl m} ddl m} g }|                    |j                   |                     | j                            | j                             t                      }t                      }| j        	                    d||f           |                     | j                            | j                             |                     |           | 
                    | j                            | j                             | 
                    |           t          j        ||d                    |d d = | j                                         |                     | j                            | j                             |                     |           | j                                         | 
                    | j                            | j                             d| j        _        | 
                    | j                            | j                             d S )Nr   )subscribers)IEventLoopBlockedr   rf   )gevent.eventsr   r   r   ra   rE   monitor_blockingrC   r   rM   
assertTruer   verifyObject ignore_current_greenlet_blocking!monitor_current_greenlet_blockingr   )r   r   r   eventsr   r   s         r   test_monitor_blockingz1TestPeriodicMonitorBlocking.test_monitor_blocking   s    	.-----3333336=)))2248<<=== !!(VV,<=== 	2248<<===    	11$(;;<<<-vay999111I 	113332248<<===    	2244411$(;;<<< !#11$(;;<<<<<r   N)r%   r&   r'   r   r   r   r   r   r   r   r      sD        9 9 9$E E E&$= $= $= $= $=r   r   c                       e Zd Zd Zd ZdS )MockProcessc                     || _         d S r   )rss)r   r   s     r   r   zMockProcess.__init__  s    r   c                     | S r   r   r   s    r   memory_full_infozMockProcess.memory_full_info!  s    r   N)r%   r&   r'   r   r   r   r   r   r   r     s2              r   r   zAccessess memory infoc                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestPeriodicMonitorMemoryr   c                      t                                           t          j         _        d t          _         fd j        _        d S )Nc                  ,    t           j                  S r   )r   r   r   s   r   r3   z1TestPeriodicMonitorMemory.setUp.<locals>.<lambda>0  s    DH(=(= r   )r-   r>   GEVENT_CONFIGmax_memory_usage_old_maxrE   rZ   r   s   `r   r>   zTestPeriodicMonitorMemory.setUp+  sB    -33D999%6)-& = = = =r   c                 \    | j         t          _        t                              |            d S r   )r   r   r   r-   rP   r   s    r   rP   z"TestPeriodicMonitorMemory.tearDown2  s&    )-&-66t<<<<<r   c                    |                      | j                                                   | j                                         |                     | j        dz   t          | j                                                             d S r6   )r   rE   can_monitor_memory_usageinstall_monitor_memory_usagerV   rJ   rI   rG   r   s    r   test_can_monitor_and_installz6TestPeriodicMonitorMemory.test_can_monitor_and_install6  st     	99;;<<< 	--///3a7TX=Z=Z=\=\9]9]^^^^^r   c                    dd l }d | j        _        |                     | j                                                   |                    d          5 }| j                                         d d d            n# 1 swxY w Y   |                     dt          |                     | 	                    t          j        |d         j                   d S )Nr   c                      d S r   r   r   r   r   r3   zKTestPeriodicMonitorMemory.test_cannot_monitor_and_install.<locals>.<lambda>A  s     r   T)recordr7   )warningsrE   rZ   ra   r   catch_warningsr   rV   rI   r\   r?   MonitorWarningcategory)r   r   wss      r   test_cannot_monitor_and_installz9TestPeriodicMonitorMemory.test_cannot_monitor_and_install?  s     ,::<<=== $$D$11 	4RH11333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	CGG$$$g,ben=====s   A::A>A>c                 b    |                      d| j                            d                      d S )Nrf   )rV   rE   monitor_memory_usager   s    r   test_monitor_no_allowedz1TestPeriodicMonitorMemory.test_monitor_no_allowedK  s.    TX::4@@AAAAAr   c                 2   ddl m} d| _        dt          _        | j                            d           }|                     ||j                   | 	                    d|j
                   | 	                    d|j                   |                     |j        t                     | j                            d           }|                     |           d| _        | j                            d           }|                     ||j                   | 	                    d|j
                   d| _        | j                            d           }|                     ||j                   | 	                    d|j
                   t!          |           | j                            d           }|                     |           d| _        | j                            d           }|                     ||j                   | 	                    d|j
                   d S )Nr   )r   ri   r7   r   )geventr   r   r   r   rE   r   assertIsInstanceMemoryUsageThresholdExceededrV   	mem_usagemax_allowedmemory_infor   r`   MemoryUsageUnderThresholdrepr)r   r   r   s      r   test_monitor_greaterz.TestPeriodicMonitorMemory.test_monitor_greaterN  s   !!!!!!)*& --d33eV%HIIIEO,,,E-...e/=== --d33%    --d33eV%HIIIEO,,, --d33eV%EFFFEO,,, 	U --d33%    --d33eV%HIIIEO,,,,,r   c                     d| _         dt          _        | j                            d           }|                     |           d S )Nr7   
   )r   r   r   rE   r   r`   )r   r   s     r   test_monitor_initial_belowz4TestPeriodicMonitorMemory.test_monitor_initial_belowy  sB    )+& --d33%     r   N)r%   r&   r'   r   r>   rP   r   r   r   r   r   r   r   r   r   r   %  s         C> > >= = =_ _ _
> 
> 
>B B B(- (- (-V! ! ! ! !r   r   __main__)r0   unittestgreenletr   r   gevent.monkeyr   gevent._compatr   r   gevent.testingr   gevent.testing.skippingr	   r   r
   r?   r   r   r   r   r   r-   TestCaserT   r   r   r   r%   mainr   r   r   <module>r      sJ   
			              & & & & & & * * * * * * & & & & & & ! ! ! ! ! ! 5 5 5 5 5 5 & & & & & & * * * * * *L+66	    f   0F F F F FF F F FBzE zE zE zE zE#H#+#4zE zE zE|L= L= L= L= L="G"*"3L= L= L=^    &    *++Y! Y! Y! Y! Y! E ( 1Y! Y! ,+Y!v zHMOOOOO r   