
    <|hH              
          d dl mZmZm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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 d
dlmZ  G d de      Z G d de      Z  G d de      Z! G d dejD                        Z#d Z$e%fdZ& G d de'      Z(d Z) G d de      Z* G d  d!e*ee e!ee("      Z
y)#    )absolute_importprint_functiondivisionN)contextmanager)TestCasewraps)LazyOnClass)perf_counter)get_clock_info)get_hub_if_exists   )sysinfo)params)	leakcheck)errorhandler)flaky)get_switch_expectedc                       e Zd Z ej                         d	d       Zej                  rd Znd Ze	d
d       Z
ej                  sej                  sdndfdZy)TimeAssertMixinNc                 x    	 | j                  |||||       y # t        $ r t        j                          Y y w xY w)N)placesmsgdelta)assertAlmostEqualAssertionErrorr   reraiseFlakyTestTimeout)selffirstsecondr   r   r   s         V/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/testing/testcase.pyassertTimeoutAlmostEqualz(TimeAssertMixin.assertTimeoutAlmostEqual+   s<    	,""5&SPU"V 	,))+	,s    99c                      y N r   
time_takenmin_timemax_times       r!   assertTimeWithinRangez%TimeAssertMixin.assertTimeWithinRange5   s        c                 L    | j                  ||       | j                  ||       y r$   )assertLessEqualassertGreaterEqualr&   s       r!   r*   z%TimeAssertMixin.assertTimeWithinRange8   s"      X6##J9r+   c              #   z  K   |+t         j                  st         j                  r|dz  }n|dz  }||n||z
  }||z   }t               }||f t               |z
  }	 | j	                  ||cxk  xr |k  nc d|d|d|d|d|dt        d	             y # t        $ r t        j                          Y y w xY ww)
Ng      @g       @z
Expected: z; elapsed: z; min: z; max: z; fuzzy z; clock_info: r   )	r   EXPECT_POOR_TIMER_RESOLUTIONLIBUVr   
assertTruer   r   r   reraiseFlakyTestRaceCondition)r   expectedfuzzyr(   r)   startelapseds          r!   runs_in_given_timez"TimeAssertMixin.runs_in_given_time<   s     =33w}} 3 3'38E9Ie#"".5(	2OOG/x/gx5.Q_B`
  	2//1	2s*   AB;;B B;B85B;7B88B;g{Gz?g      ?c                 &    | j                  d|      S )Ng        )r8   )r   r5   s     r!   runs_in_no_timezTimeAssertMixin.runs_in_no_timeR   s     &&sE22r+   NNN)NN)__name__
__module____qualname__r   reraises_flaky_timeoutr"   r   r0   r*   r   r8   r1   r:   r%   r+   r!   r   r   *   sc    !U!!#, $, ++		: 2 2.  'CCGMM4_b3r+   r   c                   ,    e Zd ZdZd Zd Zd ZeZd Zy)GreenletAssertMixinz Assertions related to greenlets.c                     | j                  |j                  |       | j                  |j                         |       | j                  ||       y r$   )r2   deadreadyassertFalser   gs     r!   assert_greenlet_readyz)GreenletAssertMixin.assert_greenlet_ready[   s8    "	1%Ar+   c                 |    | j                  |j                  |       | j                  |j                         |       y r$   )rE   rC   rD   rF   s     r!   assert_greenlet_not_readyz-GreenletAssertMixin.assert_greenlet_not_ready`   s,    #A&r+   c                 t    | j                  |j                  |       | j                  |j                  |       y r$   )r2   startedrE   rC   rF   s     r!   assert_greenlet_spawnedz+GreenletAssertMixin.assert_greenlet_spawnedd   s(    		1%#r+   c                 t    | j                  |j                  |       | j                  |j                  |       y r$   )rE   rL   r2   rC   rF   s     r!   assert_greenlet_finishedz,GreenletAssertMixin.assert_greenlet_finishedk   s(    A&"r+   N)	r<   r=   r>   __doc__rH   rJ   rM   assert_greenlet_startedrO   r%   r+   r!   rA   rA   X   s!    *
'$
 6#r+   rA   c                   B    e Zd ZdZed        Zd	dZd
dZd Zd Z	d Z
y)StringAssertMixinz*
    Assertions dealing with strings.
    c                 B    dd l }|j                  d|j                        S )Nr   z-?0x[0123456789abcdef]+L?)recompileI)r   rU   s     r!   
HEX_NUM_REzStringAssertMixin.HEX_NUM_REu   s    zz5rtt<<r+   c                 :    | j                   j                  ||      S r$   )rX   sub)r   sreplaces      r!   normalize_addrz StringAssertMixin.normalize_addrz   s    ""7A..r+   Nc                 T    |t        |       j                  }|j                  ||      S r$   )typer=   r\   )r   r[   moduler\   s       r!   normalize_modulez"StringAssertMixin.normalize_module~   s'    >$Z**Fyy))r+   c                 B    | j                  | j                  |            S r$   )ra   r]   r   r[   s     r!   	normalizezStringAssertMixin.normalize   s    $$T%8%8%;<<r+   c                     t        |      }| j                  |      }| j                  |j                  |      ||f       y r$   )strrd   r2   endswithr   ovalr[   ns        r!   assert_nstr_endswithz&StringAssertMixin.assert_nstr_endswith   s3    FNN1

3!Q0r+   c                     t        |      }| j                  |      }| j                  |j                  |      ||f       y r$   )rf   rd   r2   
startswithrh   s        r!   assert_nstr_startswithz(StringAssertMixin.assert_nstr_startswith   s4    FNN1S)Aq62r+   )X)Nr`   )r<   r=   r>   rP   r
   rX   r]   ra   rd   rl   ro   r%   r+   r!   rS   rS   p   s4     = =/*=1
3r+   rS   c                   $    e Zd ZdZddZd Zd Zy)TestTimeout c                 P    t         j                  j                  | ||dd       y )Nz5: test timed out (set class __timeout__ to increase)
F)ref)geventTimeout__init__)r   timeoutmethods      r!   rx   zTestTimeout.__init__   s(    JPR	 	  	
r+   c                 d   ddl m} t        j                         j                  }d}t        |d      r&|j                         D cg c]  }t        |       }} |       }ddj                  |      ddj                  |      | _	        t        j                  j                  | ||       y c c}w )Nr   )format_run_infozN/AdebugzLoop Debug:

z
Run Info:
)gevent.utilr|   rv   get_hubloophasattrr}   rf   join_expire_inforw   _on_expiration)r   prev_greenletexr|   r   
debug_infor[   run_infos           r!   r   zTestTimeout._on_expiration   s    /~~$$
4!*.**,7Q#a&7J7"$IIj!499X#6
 	%%dM2> 8s   B-c                 b    t         j                  j                  |       }|| j                  z  }|S r$   )rv   rw   __str__r   rc   s     r!   r   zTestTimeout.__str__   s+    NN""4(	Tr+   N)z	Not Given)r<   r=   r>   r   rx   r   r   r%   r+   r!   rr   rr      s    L

?r+   rr   c                 :      S t               fd       }|S )Nc                 `    t              5   | g|i |cd d d        S # 1 sw Y   y xY wr$   )rr   )r   argskwargsrz   ry   s      r!   timeout_wrapperz&_wrap_timeout.<locals>.timeout_wrapper   s4    &) 	1$000	1 	1 	1s   $-r   )ry   rz   r   s   `` r!   _wrap_timeoutr      s+    
6]1 1 r+   c           	          t               }| j                  ||      }||ur|S |D ]  }t        |||      }||us|c S  |t        u rt        d|d| d|d      |S )Nz
Attribute z not found
r~   )objectgetgetattrAttributeError)	classDictbasesattrdefaultNONEvaluebases          r!   _get_class_attrr      sr    8DMM$%ED dD)L . 4TYZ[[Nr+   c                       e Zd Zd Zy)TestCaseMetaClassc                    |j                  dd      }|dk(  r't        |d   dd       }t        j                  r||dz  }t	        ||dd      }t	        ||dd      }t	        ||dd      }t        |j                               D ]  \  }}	|j                  d	      st        |	      s$|j                  |       t        ||	      }	t        |	d|      }|rt        j                  |	      }	|rt        j                  |	      }	|r%t        j                  rt        j                  |	      }	|	||<    t         j#                  | |||      S )
N__timeout__r   r      check_totalrefcountTerror_fataluses_handle_errortest)r   r   r   RUN_LEAKCHECKSr   listitemsrn   callablepopr   r   wrap_error_fatalwrap_restore_handle_errorr   wrap_refcountr_   __new__)
mcs	classnamer   r   ry   r   r   r   keyr   s
             r!   r   zTestCaseMetaClass.__new__   s7   
 --v6feAht<G%%'*=1-i@UW[\%itL+Iu>QSWX y01 	'JC~~f%(5/c" &gu5%e]KH(99%@E$(BB5IE&7+A+A%33E:E!&	#	' ||CE9==r+   N)r<   r=   r>   r   r%   r+   r!   r   r      s    >r+   r   c                       y r$   r%   r%   r+   r!   _noopr      s    
r+   c                   .     e Zd Z fdZd Z fdZ xZS )SubscriberCleanupMixinc                 ^    t         t        |           ddlm} |j
                  d d  | _        y Nr   )events)superr   setUprv   r   subscribers(_SubscriberCleanupMixin__old_subscribersr   r   	__class__s     r!   r   zSubscriberCleanupMixin.setUp   s'    $d13!!'!3!3A!6r+   c                 F    ddl m} |j                  j                  |       y r   )rv   r   r   append)r   rZ   r   s      r!   addSubscriberz$SubscriberCleanupMixin.addSubscriber   s    !!!#&r+   c                 h    ddl m} | j                  |j                  d d  t        t
        |           y r   )rv   r   r   r   r   r   tearDownr   s     r!   r   zSubscriberCleanupMixin.tearDown   s*    ! $ 6 61$d46r+   )r<   r=   r>   r   r   r   __classcell__r   s   @r!   r   r      s    7
'7 7r+   r   c                   "    e Zd Zej                  sej                  nej                  ZdZ	dZ
dZdZdZ fdZ fdZd Z fdZd Zd	 Zed
        Zed        Zed        Zed        ZdZeZd Zd Zd Zd ZddZddZ d Z!d Z"d Z# xZ$S )r   r   Tr%   c                 |    | j                   dk(  rt        | j                        | _         t        t        |   |i |S )Nr   )switch_expectedr   fullnamer   r   run)r   r   r   r   s      r!   r   zTestCase.run  s9    9,#6t}}#ED Xt($9&99r+   c                     t         t        |           t               }|r&|j                  r|j                  j                          g | _        | j                  | j                         y r$   )	r   r   r   r   r   
update_nowclose_on_teardown
addCleanup_tearDownCloseOnTearDown)r   hubr   s     r!   r   zTestCase.setUp"  sM    h#%  !388HH!!#556r+   c                      |        y r$   r%   )r   rz   s     r!   _callTestMethodzTestCase._callTestMethod0  s	      	r+   c                     t        | dd      r| j                  d d = y t        | dt              } |        | j                  | _        t
        t        |           y )NskipTearDownFcleanup)r   r   r   _none_errorr   r   r   )r   r   r   s     r!   r   zTestCase.tearDownB  sK    4/&&q)$	51	jjh&(r+   c                     | j                   r=| j                   j                         }t        |d|      }	  |        | j                   r<y y # t        $ r Y w xY w)Nclose)r   r   r   	Exception)r   xr   s      r!   r   z!TestCase._tearDownCloseOnTearDownL  sV    $$&&**,AAw*E	 $$
  s   A 	AAc                 <    | j                   j                  |       |S )zU
        *resource* either has a ``close`` method, or is a
        callable.
        )r   r   )r   resources     r!   _close_on_teardownzTestCase._close_on_teardownU  s    
 	%%h/r+   c                 8    t        | dd      xs t        | d      S )N_testMethodNamers   _TestCase__testMethodName)r   r   s    r!   testnamezTestCase.testname]  s    t.3awtE`7aar+   c                 N    | j                   j                  dz   | j                  z   S )N.)r   r<   r   r   s    r!   testcasenamezTestCase.testcasenamea  s     ~~&&,t}}<<r+   c                     t         j                  j                  t        j                  | j
                  j                     j                        j                  dd      d   S )Nr   r   r   )	ospathbasenamesysmodulesr   r=   __file__rsplitr   s    r!   
modulenamezTestCase.modulenamee  sE    wwDNN,E,E F O OPWWX[]^_`abbr+   c                     t         j                  j                  t         j                  j                  | j                              d   dz   | j
                  z   S )Nr   r   )r   r   splitextr   r   r   r   s    r!   r   zTestCase.fullnamei  s?    ww 0 0 AB1EKdN_N___r+   r;   c                     | j                  | j                  | j                         | j                  t	        j
                         _        y r$   )assertEqualr   r   _store_errorrv   r   handle_errorr   s    r!   expect_one_errorzTestCase.expect_one_errorq  s/    djj1(,(9(9%r+   c                     ~| j                   | j                  k7  r/t        j                         j                  j                  ||       y |||f| _         y r$   )r   r   rv   r   parentthrow)r   wheretr   tbs        r!   r   zTestCase._store_erroru  s@    ;;$**$NN##))!U3 !U+DKr+   c                     | j                   S r$   )r   r   s    r!   
peek_errorzTestCase.peek_error|  s    {{r+   c                 j    	 | j                   | j                  | _         S # | j                  | _         w xY wr$   )r   r   r   s    r!   	get_errorzTestCase.get_error  s%    	%;;**DK$**DKs    2c                 ^   || j                         }|\  }}}|>| j                  |t               | j                  |d|       t	        ||      sJ |       |>t        |t              r| j                  t        |      |       n| j                  ||       || j                  ||       |S )NzError must not be none )	r  assertIsInstancer_   assertIsNotNone
issubclass
isinstancerf   r   assertIs)r   kindr   error
where_typeecontextekindevalues           r!   assert_errorzTestCase.assert_error  s    =NN$E"'%!!$-  /468 eT*1E1*%%  Ve4fe,!!!(J7r+   c                 \   dd l }dd l}ddlm} t	        t        d|z         |      }t	        |d|      }d}	|sd}	t	        |d      }|D ]y  }
|
|v r	t	        ||
      }|j                  |      s|	s) |||
      }	 |j                         5  |j                  } ||      } ||      }d d d        | j                  j                  j                  |
       | j                  |j                  |j                  |
       | j                  |j                  |j                  |
       t        |d      rC|
|j                  |j                  f}	 | j                  |j                  |j                  |       ,| j                  |j$                  |j$                  |
       | j                  |j&                  |j&                  |
       | y # 1 sw Y    xY w# t        $ r |	r Y w xY w# t         $ r< | j#                  |j                  |       | j                  d	|j                         Y w xY w)
Nr   )get_originalzgevent.
__target__TF__implements__keywordsr   )inspectwarningsgevent.monkeyr  r   
__import__
isfunctioncatch_warningsgetfullargspec	TypeErrorr   r   varargsdefaultsr   r  r   assertIsNone
kwonlyargskwonlydefaults)r   mod_name
func_namesexcluder  r  r  gevent_modulemodule_namefuncs_given	func_namegevent_funcfuncr  
gevent_sigsigr   s                    r!   !assertMonkeyPatchedFuncSignaturesz*TestCase.assertMonkeyPatchedFuncSignatures  s   
 	.
9x+? @(Km\8DK 0@AJ# )	[IG#!-;K%%k2;Y7D,,. /%,%;%;N!/!<J(.C/ SXXz	BS[[**<*<iHS\\:+>+>	JsJ' #,,
0C0CDD$$S\\:3F3FL   1F1F	R  !3!3Z5N5NPYZS)	[/ /    & D %%cllC8$$Xz/B/BCDs=   ;GG(G'G&G	GG#"G#&AH+*H+c                 p    	 | j                  ||       y # t        $ r t        j                          Y y w xY wr$   )r   r   r   r3   )r   abs      r!   assertEqualFlakyRaceConditionz&TestCase.assertEqualFlakyRaceCondition  s2    	2Q" 	2//1	2s    55c                 J    | j                  |j                  |      ||f       y r$   )r2   rn   )r   it
has_prefixs      r!   assertStartsWithzTestCase.assertStartsWith  s    j1B
3CDr+   c                 N    ddl m} | j                  |j                                y )Nr   )monkey)rv   r7  rE   is_anything_patched)r   r7  s     r!   assertNotMonkeyPatchedzTestCase.assertNotMonkeyPatched  s    !3356r+   )NNNN)r%   r%   )%r<   r=   r>   r   RUNNING_ON_CIr   LOCAL_TIMEOUT
CI_TIMEOUTr   r   r   r   r   _TestCase__old_subscribersr   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r  r  r-  r1  r5  r9  r   r   s   @r!   r   r     s     /6.C.C&&&IZIZKO K:
7$) b b = = c c ` ` EF:,%&:[z2E7r+   r   )	metaclass)+
__future__r   r   r   r   os.pathr   
contextlibr   unittestr   BaseTestCase	functoolsr	   rv   gevent._utilr
   gevent._compatr   r   gevent._hub_localr   rs   r   r   r   r   r   patched_tests_setupr   r   r   rA   rS   rw   rr   r   r   r   r_   r   r   r   r%   r+   r!   <module>rJ     s   ( A @ 
  % -   $ ' ) /      4+3f +3\#& #03 3F&.. 8	 5C %> %>N7V 7"]7 	1D<#]7r+   