
    i                     2   d dl Z d dlmZ 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m
Z
 d dlmZ d dlmZ  G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d dej                  Zedk    r ej                     dS dS )    N)sleep)Timeout)get_hub)
SMALL_TICK)flakyc                       e Zd ZdS )ErrorN)__name__
__module____qualname__     I/usr/local/lib/python3.11/dist-packages/gevent/tests/test__api_timeout.pyr	   r	   %   s        Dr   r	   c                   $    e Zd ZdZd Zd Zd ZdS )_UpdateNowProxyr   c                     || _         d S Nloopselfr   s     r   __init__z_UpdateNowProxy.__init__-       			r   c                 ,    t          | j        |          S r   )getattrr   )r   names     r   __getattr__z_UpdateNowProxy.__getattr__0   s    ty$'''r   c                 X    | xj         dz  c_         | j                                         d S )N   )update_now_callsr   
update_nowr   s    r   r!   z_UpdateNowProxy.update_now3   s0    "	r   N)r
   r   r   r    r   r   r!   r   r   r   r   r   )   sG          ( ( (    r   r   c                       e Zd Zd ZdS )_UpdateNowWithTimerProxyc                      t          |           S r   )_Timer)r   _args_kwargss      r   timerz_UpdateNowWithTimerProxy.timer9   s    d||r   N)r
   r   r   r)   r   r   r   r$   r$   7   s#            r   r$   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )r&   Fc                     || _         d S r   r   r   s     r   r   z_Timer.__init__A   r   r   c                 ~    |                     d          r| j                                         dx| _        | _        d S )NupdateT)getr   r!   pendingactive)r   r'   kwargss      r   startz_Timer.startD   s<    ::h 	#I  """%))t{{{r   c                 "    dx| _         | _        d S )NF)r0   r/   r"   s    r   stopz_Timer.stopI   s    %**dlllr   c                     dS )zDoes nothingNr   r"   s    r   closez_Timer.closeL   s      r   N)	r
   r   r   r/   r0   r   r2   r4   r6   r   r   r   r&   r&   <   sZ        GF  * * *
+ + +    r   r&   c                       e Zd Zd Zd Z ej        d           ej        d           ej        e	e
f          d                                     Zd Z ej                    d             ZdS )Testc                 N   t                      }|j        }t          |          }||_        	 t          t          dz            5 }|                     |j                   d d d            n# 1 swxY w Y   ||_        n# ||_        w xY w|                     d|j                   d S )N   r   )	r   r   r$   r   DELAY
assertTruer/   assertEqualr    )r   hubr   proxyts        r   test_timeout_calls_update_nowz"Test.test_timeout_calls_update_nowR   s    iix(..	## +q	***+ + + + + + + + + + + + + + + CHHtCHOOOOE233333s/   A> A+A> +A//A> 2A/3A> >	Bc                     t                      }|j        }t          |          }||_        	 t          d           ||_        n# ||_        w xY w|                     d|j                   d S )Ng{Gz?r   )r   r   r   r   r=   r    )r   r>   r   r?   s       r   test_sleep_calls_update_nowz Test.test_sleep_calls_update_now`   sm    iix%%	$KKKCHHtCHOOOOE233333s   A 	Az/Timing is flaky, especially under Py 3.4/64-bitc                 6   t          t          dz            }|                     |j        |           |5  |                     |j        |           t          t                     d d d            n# 1 swxY w Y   |                     |j        |           t          t          dz             |                     t                     5 }t          t                    5 }t          t          dz             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j        |           |                     t                    5  t          t          t          d                    5  t          t          dz             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t                    5  t          t          t                    5  t          t          dz             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   	 ddz   t          d          # t          $ r |                     t                    5  t          t          t          j                    d                   5  t          t          dz             t          d          # 1 swxY w Y   t          d          # 1 swxY w Y   Y nw xY wt          t                    5 }|                                 t          t          dz             d d d            n# 1 swxY w Y   d}t!          j                    }t          |d          5  t          |dz             d d d            n# 1 swxY w Y   t!          j                    |z
  }|                     |d|dz             t          d           5  t          t                     d d d            n# 1 swxY w Y   t          t                     d S )	Nr:   
   zOperation takes way too longr   r   should not get thereg?F)r   r;   assertFalser/   r<   r   assertRaisesassertIs	exceptionIOError
ValueErrorAssertionErrorZeroDivisionErrorsysexc_infocanceltimeassertTimeWithinRange)r   r@   excr)   XDELAYr2   deltas          r   test_apizTest.test_apim   sY   
 EAIA&&& 	 	OOAIq)))%LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	A&&&eai w'' 	"3 "1ebj!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	cmQ''' w'' 	" 	"(F G GHH " "ebj!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
 z** 	" 	"
++ " "ebj!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
		9EE !!7888 ! 	= 	= 	=""#455 = =UCLNN1$566 A A%"*%%%()?@@@A A A A A A A A %%;<<<	= = = = = = = = = =	= U^^ 	uLLNNN%!)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	VU## 	 	&1*	 	 	 	 	 	 	 	 	 	 	 	 	 	 		e#""5!VaZ888 T]] 	 	%LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	es7  0A11A58A5DD5DD	DD		DDD#F6;FF6F#	#F6&F#	'F66F:=F:H16HH1H	H1!H	"H11H58H5=I $K15-K#"'K		KK#KK##K'	'K1*K'	+K10K1,M  MM0NNNO::O>O>c                 6   t                      }t          j        |          }t          t          dz  |          5  t          t                     d d d            n# 1 swxY w Y   ~t          j                     |                      |            |           d S )Nr:   )	r	   weakrefrefr   r;   r   gccollectrG   )r   errerr_refs      r   test_refzTest.test_ref   s    gg+c""UQY$$ 	 	%LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	

G,,,,,s   AA #A c                 6   t          t          d          5  t          t          dz  d          5  t          t          dz  dz             d d d            n# 1 swxY w Y   t          d          # 1 swxY w Y   t          t                    5 }t          t          dz            5 }|                     t                     5 }t          t          dz             d d d            n# 1 swxY w Y   |                     |j        |           |                     |j        |           | 	                    |j        |           d d d            n# 1 swxY w Y   |                     |j                   d d d            n# 1 swxY w Y   t          t          dz            5 }t          t                    5 }|                     t                     5 }t          t          dz             d d d            n# 1 swxY w Y   |                     |j        |           | 	                    |j        |           |                     |j        |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j                   d S )NFrE         rF      )
r   r;   r   rM   rH   rI   rJ   rG   r/   r<   )r   t1t2rT   s       r   test_nested_timeoutzTest.test_nested_timeout   s   UE"" 	9 	9U++ & &eai"n%%%& & & & & & & & & & & & & & & !7888	9 	9 	9 	9 	9 	9 	9 	9
 U^^ 		)r$$ 0&&w// &3%"*%%%& & & & & & & & & & & & & & &cmR000  R000
B///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RZ(((		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) URZ   	1B 12&&w// &3%"*%%%& & & & & & & & & & & & & & &cmR000
B///  R0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	$$$$$s   A0A
A0A	A0A	A00A47A4E?'EC&E&C**E-C*.AEE?E	E?E	E??FF!I46IG5)I5G99I<G9=AII4I!	!I4$I!	%I44I8;I8N)r
   r   r   rA   rC   	greentestskipOnAppVeyorskipOnPyPy3OnCIreraises_flaky_timeoutr   rM   rW   r_   r   reraises_flaky_race_conditionrf   r   r   r   r8   r8   P   s        4 4 4
4 
4 
4 YOPPYPQQ%Y%w&?@@8 8 A@ RQ QP8t- - - )U(**% % +*% % %r   r8   __main__)rO   gevent.testingtestingrg   rY   rR   r[   geventr   r   r   gevent.testing.timingr   r;   r   	Exceptionr	   objectr   r$   r&   TestCaser8   r
   mainr   r   r   <module>ru      s  , 


 " " " " " "   				                   6 5 5 5 5 5            	 	 	 	 	I 	 	 	    f          
    V   (~% ~% ~% ~% ~%9 ~% ~% ~%B zIN r   