o
    U˟i                     @   s   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 deZG d	d
 d
eZG dd deZG dd deZG dd dejZedkrge  dS dS )    N)sleep)Timeout)get_hub)
SMALL_TICK)flakyc                   @   s   e Zd ZdS )ErrorN)__name__
__module____qualname__ r   r   f/var/www/apps/myagent/mysuperagent/venv/lib/python3.10/site-packages/gevent/tests/test__api_timeout.pyr   %   s    r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_UpdateNowProxyr   c                 C   
   || _ d S Nloopselfr   r   r   r   __init__-      
z_UpdateNowProxy.__init__c                 C   s   t | j|S r   )getattrr   )r   namer   r   r   __getattr__0   s   z_UpdateNowProxy.__getattr__c                 C   s   |  j d7  _ | j  d S )N   )update_now_callsr   
update_nowr   r   r   r   r   3   s   z_UpdateNowProxy.update_nowN)r   r	   r
   r   r   r   r   r   r   r   r   r   )   s
    r   c                   @   s   e Zd Zdd ZdS )_UpdateNowWithTimerProxyc                 O   s   t | S r   )_Timer)r   _args_kwargsr   r   r   timer9   s   z_UpdateNowWithTimerProxy.timerN)r   r	   r
   r!   r   r   r   r   r   7   s    r   c                   @   s4   e Zd ZdZdZdd Zdd Zdd Zdd	 Zd
S )r   Fc                 C   r   r   r   r   r   r   r   r   A   r   z_Timer.__init__c                 O   s$   | dr
| j  d | _| _d S )NupdateT)getr   r   pendingactive)r   r   kwargsr   r   r   startD   s   

z_Timer.startc                 C   s   d | _ | _d S )NF)r%   r$   r   r   r   r   stopI   s   z_Timer.stopc                 C   s   dS )zDoes nothingNr   r   r   r   r   closeL   s    z_Timer.closeN)	r   r	   r
   r$   r%   r   r'   r(   r)   r   r   r   r   r   <   s    r   c                   @   s^   e Zd Zdd Zdd Zededee	e
fdd Zdd	 Ze d
d ZdS )Testc                 C   sx   t  }|j}t|}||_z!ttd }| |j W d    n1 s%w   Y  W ||_n||_w | d|j d S )N   r   )	r   r   r   r   DELAY
assertTruer$   assertEqualr   )r   hubr   proxytr   r   r   test_timeout_calls_update_nowR   s   z"Test.test_timeout_calls_update_nowc                 C   sH   t  }|j}t|}||_z	td W ||_n||_w | d|j d S )Ng{Gz?r   )r   r   r   r   r.   r   )r   r/   r   r0   r   r   r   test_sleep_calls_update_now`   s   
z Test.test_sleep_calls_update_nowz/Timing is flaky, especially under Py 3.4/64-bitc                 C   s  t td }| |j| | | |j| tt W d    n1 s%w   Y  | |j| ttd  | t "}t t}ttd  W d    n1 sRw   Y  W d    n1 saw   Y  | |j| | t	% t tt	d ttd  W d    n1 sw   Y  W d    n1 sw   Y  | t
# t tt
 ttd  W d    n1 sw   Y  W d    n1 sw   Y  z	dd  W td ty   | t! t tt d  ttd  td1 sw   Y  td1 s
w   Y  Y nw t t}|  ttd  W d    n	1 s,w   Y  d}t }t |d t|d  W d    n	1 sNw   Y  t | }| |d|d  t d  tt W d    n	1 svw   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ZeroDivisionErrorsysexc_infoAssertionErrorcanceltimeassertTimeWithinRange)r   r1   excr!   XDELAYr'   deltar   r   r   test_apim   sl   






zTest.test_apic                 C   sb   t  }t|}ttd | tt W d    n1 sw   Y  ~t  | | | d S )Nr+   )	r   weakrefrefr   r,   r   gccollectr6   )r   errerr_refr   r   r   test_ref   s   

zTest.test_refc              
   C   s  t td' t td d ttd d  W d    td1 s#w   Y  td1 s/w   Y  t tT}t td 8}| t }ttd  W d    n1 sVw   Y  | |j| | |j| | 	|j| W d    n1 szw   Y  | |j W d    n1 sw   Y  t td L}t t8}| t }ttd  W d    n1 sw   Y  | |j| | 	|j| | |j| W d    n1 sw   Y  W d    n1 sw   Y  | |j d S )NFr4         r5      )
r   r,   r   r?   r7   r8   r9   r6   r$   r-   )r   t1t2rC   r   r   r   test_nested_timeout   s>   


	zTest.test_nested_timeoutN)r   r	   r
   r2   r3   	greentestskipOnAppVeyorskipOnPyPy3OnCIreraises_flaky_timeoutr   r?   rF   rM   r   reraises_flaky_race_conditionrS   r   r   r   r   r*   P   s    :	r*   __main__)r=   gevent.testingtestingrT   rG   rA   rI   geventr   r   r   gevent.testing.timingr   r,   r   	Exceptionr   objectr   r   r   TestCaser*   r   mainr   r   r   r   <module>   s&    