
    <|h`                        d dl mZ d dlmZmZ d dlZd dlZd dlZd dlZd dl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 ej$                  d        Z G d	 d
ej(                        Z G d de      Z G d de      Zd=dZd Zd\  ZZZ G d de      ZdZdZej"                  rej@                  sejB                  sejD                  rdZ G d de      Z# G d de#      Z$ejJ                   G d de#             Z&ejJ                   G d de#             Z' G d d e      Z( G d! d"e      Z)d# 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      Z/ G d. d/e      Z0d0 Z1 G d1 d2e      Z2d d3l	m3Z3  ejh                   e5e	jl                  d4      d5       G d6 d7e             Z7 G d8 d9ej(                        Z8 G d: d;e      Z9e:d<k(  r ejv                          yy)>    )print_function)timesleepN)
ThreadPool)InvalidThreadUseErrorExpectedException)PYPYc               #      K   t        j                         } t        j                          	 d  | rt        j                          y y # | rt        j                          w w xY wwN)gc	isenableddisableenable)was_enableds    \/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__threadpool.pydisabled_gcr      sD     ,,.KJJLIIK ;IIK s   )A$A A$A!!A$c                   Z    e Zd Zej                  ZdZdZeZ	d Z
ej                  fdZd Zy)TestCaseN c                     | j                   S r   )ClassUnderTestselfs    r   _FUTzTestCase._FUT*   s    """    c                      | j                         |      x| _        }| xj                  |fz  c_        |r|| j                  _        |S r   )r   pool
_all_poolssize)r   maxsizecreate_all_worker_threadsr   s       r   _makeOnezTestCase._makeOne-   s>    &499;w//	DD7"$$DIINr   c                     d | _         | j                  dc}| _        |D ]%  }t        |dd       xs t        |d      } |        ~' t        j                  r%t        d      D ]  }t        j                           y y )Nr   killshutdown   )r   r   getattr	greentestRUN_LEAKCHECKSranger   collect)r   	all_poolsr   r%   _s        r   cleanupzTestCase.cleanup5   sz    	%)__b"	4? 	D4.K'$
2KDF	
 ## 1X 

 $r   )__name__
__module____qualname__r)   LARGE_TIMEOUT__timeout__r   r   r   r   r   r*   r#   r/   r   r   r   r   r   #   s7    ))KDJN# ;D:R:R r   r   c                   2    e Zd Zd Zd Zd Zde_        d Zy)PoolBasicTestsc                 P   | j                  d      }g }|j                  |j                  d      }|j                          | j	                  |dg       t        j                  d       |j                  |j                  d       | j	                  |dg       |j                  |j                  d       | j	                  |dg       |j                  |j                  d       | j	                  |dg       t        j                  d       | j                  t        |      g d       y )	N      r   )r8   )r'   )   {Gz?)r9   r8   r'   r:   )
r#   spawnappendgetassertEqualgeventr   apply_asyncassertEqualFlakyRaceConditionsorted)r   r   rfirsts       r   test_execute_asyncz!PoolBasicTests.test_execute_asyncI   s    }}Q

188Q'		QC Q5)QC 5)QC 5)QC T**6!9lCr   c                 p    | j                  d      }|j                  d d      }| j                  |d       y )Nr9   c                 
    d| fS )Nfoor   )as    r   <lambda>z+PoolBasicTests.test_apply.<locals>.<lambda>^   s
    uaj r   )r9   )rI   r9   )r#   applyr?   )r   r   results      r   
test_applyzPoolBasicTests.test_apply\   s1    }}Q0%8,r   c                     | j                  d      }d }| j                  t              5  |j                  |       d d d        y # 1 sw Y   y xY w)Nr9   c                      t               r   r   r   r   r   raiserz0PoolBasicTests.test_apply_raises.<locals>.raiserd   s    #%%r   )r#   assertRaisesr	   rL   )r   r   rQ   s      r   test_apply_raisesz PoolBasicTests.test_apply_raisesa   sG    }}Q	& 01 	JJv	 	 	s   AAFc                     d| _         | j                  t              5  | j                  d       d d d        y # 1 sw Y   y xY w)NF)switch_expectedrR   
ValueErrorr#   r   s    r   test_init_valueerrorz#PoolBasicTests.test_init_valueerrorn   s9    $z* 	MM"	 	 	s	   8AN)r0   r1   r2   rF   rN   rS   error_fatalrX   r   r   r   r6   r6   G   s"    D&-
 %*!r   r6   c                       e Zd Zd Zd Zy)TimingWrapperc                      || _         d | _        y r   )funcelapsed)r   the_funcs     r   __init__zTimingWrapper.__init__y   s    	r   c                     t               }	  | j                  |i |t               |z
  | _        S # t               |z
  | _        w xY wr   )r   r]   r^   )r   argskwdsts       r   __call__zTimingWrapper.__call__}   s<    F	&499d+d+6A:DL46A:DLs	   0 AN)r0   r1   r2   r`   re   r   r   r   r[   r[   w   s    &r   r[   c                 "    t        |       | | z  S r   )r   )xwaits     r   sqrri      s    	$Kq5Lr   c                 L    t        t        j                         dz         | | z  S )N皙?)r   randomrg   s    r   sqr_random_sleeprn      s    	&--/C
 q5Lr   )gˡE?gQ?gQ?c                   >    e Zd ZdZdZd Zej                  d        Zy)_AbstractPoolTestr9   Fc                 x    t         j                  j                  |        | j                  | j                         y r   )r)   r   setUpr#   r    r   s    r   rr   z_AbstractPoolTest.setUp   s&      &dii r   c                      j                   j                  } j                  r fd} j                   |t        t        d            t        t        t        t        d                          j                   |t        t        d            t        t        t        t        d                          j                   j                           ` ~y )Nc                 N    t        j                  j                  | |            S r   )listr   map)fir   s     r   rK   z,_AbstractPoolTest.test_map.<locals>.<lambda>   s    TYY]]1a%8 9 r   
   d   )r   rv   
MAP_IS_GENr?   ri   r+   ru   r%   )r   pmaps   ` r   test_mapz_AbstractPoolTest.test_map   s    yy}}??9Dc59-tCU2Y4G/HIc5:.SeCj5I0JK		Ir   N)	r0   r1   r2   r    r{   rr   r)   ignores_leakcheckr}   r   r   r   rp   rp      s+    DJ!   	 !	r   rp   ry   i  2   c                   l    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestPoolc                 T   ddl m} ddlm} | j                  j                  |      }| j                  ||       t        |      }| j                  d|       | j                  d|       | j                  d|       ddl	m
} dj                   |             }| j                  d	|       y )
Nr   )
getcurrent)_WorkerGreenletThreadPoolWorkerthread_identzhub=)format_run_info
z<ThreadPoolWorker)greenletr   gevent.threadpoolr   r   rL   assertIsInstancereprassertIngevent.utilr   join)r   r   r   worker_greenletrD   r   infos          r   test_greenlet_classzTestPool.test_greenlet_class   s    '5))//*5o?!(!,na(fa /yy*+)40r   c                     | j                   j                  }| j                   |t        d      t        d             | j                   |t        dddi      t        d             y )N)   r   r   rg   r'   rm   )r   rL   r?   ri   )r   papplys     r   rN   zTestPool.test_apply   sK    T*CF3R#q2C!H=r   c                     | j                   j                  t        dt        f      }t	        |j
                        }| j                   |       d       | j                  |j                  t        d       y )N   1   r9   )	r   rA   ri   TIMEOUT1r[   r>   r?   assertTimeoutAlmostEqualr^   r   resr>   s      r   
test_asynczTestPool.test_async   sR    ii##C!X8CGG$#%%ckk8Q?r   c                 V   g }| j                   j                  t        dt        f|j                        }t        |j                        }| j                   |       d       | j                  |j                  t        d       t        j                  d       | j                  |dg       y )Nr   )callbackr   r9   r   )r   rA   ri   r   r=   r[   r>   r?   r   r^   r@   r   )r   rM   r   r>   s       r   test_async_callbackzTestPool.test_async_callback   s}    ii##C!X&--#PCGG$#%%ckk8Q?Q"&r   c                 B   | j                   j                  t        dt        dz   f      }t	        |j
                        }| j                  t        j                  |t               | j                  |j                  t        d       | j                   j                          y )N   皙?timeoutr9   )r   rA   ri   TIMEOUT2r[   r>   rR   r@   Timeoutr   r^   r   r   s      r   test_async_timeoutzTestPool.test_async_timeout   sl    ii##C!X^)<=CGG$&..#x@%%ckk8Q?		r   c                     | j                   j                  t        t        t                    }| j                  t        |      t        t        t        t        t                                 y r   )r   imapri   r+   SMALL_RANGEr?   ru   rv   r   its     r   test_imap_list_smallzTestPool.test_imap_list_small   s@    YY^^C{!34b4C{1C(D#EFr   c                     | j                   j                  t        t        t                    }t        t              D ]   }| j                  t        |      ||z         " | j                  t        t        |       y r   )	r   r   ri   r+   r   r?   nextrR   StopIterationr   r   rx   s      r   test_imap_it_smallzTestPool.test_imap_it_small   Y    YY^^C{!34{# 	.AT"Xq1u-	.-r2r   c                     | j                   j                  t        t        t                    }t        t              D ]   }| j                  t        |      ||z         " | j                  t        t        |       y r   )	r   r   ri   r+   LARGE_RANGEr?   r   rR   r   r   s      r   test_imap_it_largezTestPool.test_imap_it_large   r   r   c                     | j                   j                  t        t        t                    }t        t              D ]4  }| j                  t        |      ||z         t        j                          6 | j                  t        t        |       y r   )r   r   ri   r+   r   r?   r   r   r,   rR   r   r   s      r   test_imap_gczTestPool.test_imap_gc   sd    YY^^C{!34{# 	AT"Xq1u-JJL	 	-r2r   c                    | j                   j                  t        t        t                    }g }t        t              D ]0  }|j                  t        |             t        j                          2 | j                  t              5  t        |       d d d        | j                  t        |      t        t              D cg c]  }||z  	 c}       y # 1 sw Y   CxY wc c}w r   )r   imap_unorderedri   r+   r   r=   r   r   r,   rR   r   r?   rC   )r   r   rM   r.   rg   s        r   test_imap_unordered_gczTestPool.test_imap_unordered_gc   s    YY%%c5+=>{# 	AMM$r(#JJL	 }- 	H	{9K)LA!a%)LM	 	)Ls   CC!
Cc                     | j                   j                  t        t        t                    }| j                  t        |      t        t        t        t        t                                 y r   )	r   r   rn   r+   r   r?   ru   rv   ri   r   s     r   test_imap_randomzTestPool.test_imap_random  sA    YY^^,eK.@Ab4C{1C(D#EFr   c                    | j                   j                  t        t        t                    }| j                  t        |      t        t        t        t        t                                 | j                   j                  t        t        t                    }| j                  t        |      t        t        t        t        t                                 y r   )	r   r   ri   r+   r   r?   rC   ru   rv   r   s     r   test_imap_unorderedzTestPool.test_imap_unordered  s    YY%%c5+=>T#c53E*F%GHYY%%c5+=>T#c53E*F%GHr   c                     | j                   j                  t        t        t                    }| j                  t        |      t        t        t        t        t                                 y r   )
r   r   rn   r+   r   r?   rC   ru   rv   ri   r   s     r   test_imap_unordered_randomz#TestPool.test_imap_unordered_random  sC    YY%%&6k8JKT#c53E*F%GHr   c                    | j                   xs d}| j                  j                  t        dg|dz  z        }t	        j                  d       	 | j                  d| j                   z  dz   d      5  | j                  j                          d d d        |j                          y # 1 sw Y   xY w# |j                          w xY w)Nry   rk   r8         ?r   )min_time)r    r   	map_asyncr   r@   runs_in_given_timer%   r   )r   r    rM   s      r   test_terminatezTestPool.test_terminate  s    yyB$$USETAX,>?S	((tyy3)>(K !		 ! KKM! ! KKMs$   #B1 1B%B1 %B.*B1 1Cc                 F    t        t        |      dz         t        |      S )Ng      $@)r   floatstr)r   rg   s     r   r   zTestPool.sleep  s    eAho1vr   c                     t        | j                  j                  | j                  g d            }| j                  j                  dk(  rg d}ng d}| j                  ||       y )N)ry   r9   r8   r9   )1012)r   r   r   )ru   r   r   r   r    r?   )r   rM   expecteds      r   test_imap_unordered_sleepz"TestPool.test_imap_unordered_sleep  sK    dii..tzz:FG99>>Q'H'H*r   N)r0   r1   r2   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sX    1 >
@'G333NGII+r   r   c                   4    e Zd ZdZej
                  d        Zy)	TestPool2r8   c                 x    | j                   fd}d j                  |      }| j                  |d       y )Nc                  &    j                         S r   )rL   )bps   r   rJ   z)TestPool2.test_recursive_apply.<locals>.a/  s    771:r   c                  V    t        j                          t        j                  d       y)NMbP?Br@   r   r   r   r   r   z)TestPool2.test_recursive_apply.<locals>.b2  s     LLNLLr   r   )r   rL   r?   )r   rJ   rM   r   r   s      @@r   test_recursive_applyzTestPool2.test_recursive_apply+  s5    II		 %r   N)r0   r1   r2   r    r)   r~   r   r   r   r   r   r   (  s    D  & !&r   r   c                       e Zd ZdZy)	TestPool3r'   Nr0   r1   r2   r    r   r   r   r   r   >  s    Dr   r   c                       e Zd ZdZy)
TestPool10ry   Nr   r   r   r   r   r   B  s    Dr   r   c                       e Zd ZdZ ej
                  ej                  xr ej                  xr ej                  d      d        Z	y)TestJoinEmptyFzqThis sometimes appears to crash in PyPy2 5.9.0, but never crashes on macOS or local Ubunto with same PyPy versionc                 F    | j                  d      }|j                          y Nr9   )r#   r   r   r   s     r   testzTestJoinEmpty.test[  s     }}Q		r   N)
r0   r1   r2   rV   r)   skipIfr
   LIBUVRUNNING_ON_TRAVISr   r   r   r   r   r   X  sH    OYinnXXY=X=XZ[
[
r   r   c                   X    e Zd ZdZej
                  d        Zej
                  d        Zy)	TestSpawnTc                 2   | j                  d      }| j                  t        |      d       g fd}|j                  |dd       | j                  t        |      d       |j                  |dd       | j                  t        |      d       t	        j
                  d       | j                  dg       | j                  t        |      d       t	        j
                  d       | j                  ddg       | j                  t        |      d       y )	Nr9   r   c                 <    t        |      j                  |       gS r   )r   r=   )itemsecondslogs     r   rK   z'TestSpawn.test_basics.<locals>.<lambda>m  s    U7^SZZ=M,N r   rJ   rk   r   r8   g333333?)r#   r?   lenr<   r@   r   )r   r   sleep_n_logr   s      @r   test_basicszTestSpawn.test_basicsh  s    }}QTA&N

;S)TA&

;S) 	TA&Tse$TA&TsCj)TA&r   c                     | j                  d      }| j                  d      fd}|j                  |      }| j                  t              5  |j	                          d d d        y # 1 sw Y   y xY w)Nr9   r8   c                  *     j                  d        y )Nc                       y)NHir   r   r   r   rK   zMTestSpawn.test_cannot_spawn_from_other_thread.<locals>.func.<locals>.<lambda>      r   )r<   )pool2s   r   r]   z;TestSpawn.test_cannot_spawn_from_other_thread.<locals>.func  s    KK%r   )r#   r<   rR   r   r>   )r   pool1r]   r   r   s       @r   #test_cannot_spawn_from_other_threadz-TestSpawn.test_cannot_spawn_from_other_thread{  sc    
 a a 	& kk$45 	GGI	 	 	s   A))A2N)r0   r1   r2   rV   r)   r~   r   r   r   r   r   r   r   e  s9    O  ' !'$    !r   r   c               #   :   K   d d t         j                  w)Nr9   r8   )r)   r	   r   r   r   
error_iterr     s     
G
G

%
%%s   c                       e Zd ZdZd Zd Zy)TestErrorInIteratorFc                     | j                  d      | _        | j                  t        j                  | j                  j
                  d t                      t        j                  d       y )Nr'   c                      y r   r   rm   s    r   rK   z*TestErrorInIterator.test.<locals>.<lambda>  r   r   r   )	r#   r   rR   r)   r	   rv   r   r@   r   r   s    r   r   zTestErrorInIterator.test  sD    MM!$	)55tyy}}nV`VbcUr   c                       j                  d       _         fd} j                  t        j                  |       t        j                  d       y )Nr'   c                  `    t         j                  j                  d t                           S )Nc                      y r   r   rm   s    r   rK   zGTestErrorInIterator.test_unordered.<locals>.unordered.<locals>.<lambda>  r   r   )ru   r   r   r   r   s   r   	unorderedz5TestErrorInIterator.test_unordered.<locals>.unordered  s!    		00NOOr   r   )r#   r   rR   r)   r	   r@   r   )r   r  s   ` r   test_unorderedz"TestErrorInIterator.test_unordered  s=    MM!$		P 	)55yAUr   N)r0   r1   r2   rY   r   r  r   r   r   r   r     s    K
r   r   c                   6    e Zd Zd Zej
                  d        Zy)TestMaxsizec                    | j                  d      | _        g }t        j                  | j                  j                  |j                  d       t        j
                  d| j                  j                  |j                  d       t        j                  d       | j                  |g        d| j                  _        t        j                  d       | j                  |ddg       y )Nr   r9   r;   r8   g{Gz?)
r#   r   r@   r<   r=   spawn_laterr   r?   r!   rB   )r   dones     r   test_inczTestMaxsize.test_inc  s    MM!$	 	TYY__dkk154$++qATr"		T**4!Q8r   c                    | j                  d      x}| _        |j                  t        d       |j                  t        d       |j                  t        d       t	        j                  d       | j                  |j                  d       d|_        t	        j                  d       | j                  |j                  d       y )Nr'   rk   r   g333333?r8   r   )	r#   r   r<   r   r@   assertGreaterEqualr    r!   rB   r   s     r   test_setzerozTestMaxsize.test_setzero  s    ==++ty

5#

5#

5#S		1-S**499a8r   N)r0   r1   r2   r  r)   r~   r  r   r   r   r	  r	    s!    9   	9 !	9r   r	  c                   :    e Zd Z ej                         d        Zy)TestSizec                    | j                  dd      x}| _        | j                  |j                  d       d|_        | j                  |j                  d       d|_        | j                  |j                  d       d|_        | j                  |j                  d       | j	                  t
              5  d|_        d d d        | j	                  t
              5  d|_        d d d        d|_        | j                  |j                  d       d|_        | j                  |j                  d       y # 1 sw Y   uxY w# 1 sw Y   \xY w)Nr8   Fr"   r   r9   rU   r'   )r#   r   r?   r    rR   rW   r   s     r   r   zTestSize.test  s   ==e=LLtyA&	A&	A&	A&z* 	DI	 z* 	DI	 	A&	A&	 		 	s   5D1D=1D:=EN)r0   r1   r2   r)   reraises_flaky_race_conditionr   r   r   r   r  r    s    ,Y,,.' /'r   r  c                       e Zd Zd Zy)TestRefc                 l   | j                  d      x}| _        g }t               }||_        |j                  }~t               5  |j                  |t               fdt               i      }| j                  |t               t        j                  d       |j                  t        j                  |             ~~t        r(t        j                           t        j                           |D ]  }| j#                   |               | j%                  dt'        |             d d d        y # 1 sw Y   y xY w)Nr8   kwarg1rk   r:   )r#   r   	SomeClassrefsr]   r   rL   Objectr   r@   r   r=   weakrefrefr
   r   r,   assertIsNoner?   r   )r   r   r  objr]   rM   rD   s          r   r   zTestRef.test  s    ==++tykxx] 	+ ZZvxlXvx4HIF!!&&1LLKKD)*f



 '!!!#&' QD	*!	+ 	+ 	+s   CD**D3Nr0   r1   r2   r   r   r   r   r  r    s    +r   r  c                       e Zd Zy)r  Nr0   r1   r2   r   r   r   r  r    s    r   r  c                       e Zd ZdZddZy)r  Nc                     t               }| j                  j                  |||fD cg c]  }t        j                  |       c}       |S c c}w r   )r  r  extendr  r  )r   arg1r  rM   rg   s        r   r]   zSomeClass.func  s@    		42HIQ'++a.IJ Js   Ar   )r0   r1   r2   r  r]   r   r   r   r  r    s    Dr   r  c                       y r   r   r   r   r   noopr)    s    r   c                       e Zd Zd Zy)TestRefCountc                     | j                  d      }|j                  t               t        j                  d       |j                          y )Nr9   r   )r#   r<   r)  r@   r   r%   r   s     r   r   zTestRefCount.test  s0    }}Q

4Q		r   Nr!  r   r   r   r+  r+  	  s    r   r+  )monkeyThreadPoolExecutorzRequires ThreadPoolExecutorc                       e Zd ZdZdZed        ZdZed        Zed        Z	ed        Z
ej                  d        Zej                  d	        Zej                  d
        Zy)TestTPEr9   Tc                 6    t         j                  j                  S r   )r@   
threadpoolr.  r   s    r   r   zTestTPE.ClassUnderTest  s      333r   Fc                     ddl m} |S )Nr   )TimeoutError)concurrent.futuresr4  )r   FutureTimeoutErrors     r   r6  zTestTPE.FutureTimeoutError#  s    I!!r   c                     ddl m} |S )Nr   )rh   )r5  rh   )r   cf_waits     r   r8  zTestTPE.cf_wait(  s
    6r   c                     ddl m} |S )Nr   )as_completed)r5  r:  )r   cf_as_completeds     r   r;  zTestTPE.cf_as_completed-  s    Fr   c                   	 | j                  t        j                  d      | j                         | j                  }g 	d }d }|j                  |      }d|_        |j                  |       | j                  | j                  |j                  d       d }t        j                  |      }| j                  |j                         d       | j                  |j                                | j                  |j!                                t        j"                          | j                  |j                  d	       | j                  |j%                                | j                  |j&                  d
       |j                  	fd       | j                  	dg       | j)                  |f      \  }}| j                  t+        |      |g       | j                  t+        | j-                  |f            |g       | j                  |j                  d	       t        j"                          | j                  |j                  d	       |j/                          ~~| `y )N	threadingc                  .    t        j                  d       yNr   *   r   r   r   r   fnzTestTPE.test_future.<locals>.fn:      LLr   c                 V    | xj                   dz  c_         t        j                  d      )Nr9   zExpected, ignored)
calledbackr)   r	   )futures    r   r   z%TestTPE.test_future.<locals>.callback>  s%    "--.ABBr   r   r   r   c                       yN  r   r   r   r   spawnedz$TestTPE.test_future.<locals>.spawnedG      r   r@  r9   rH  c                 &    j                  d      S )NTr=   )rw   rD  s    r   rK   z%TestTPE.test_future.<locals>.<lambda>[  s    :+<+<T+B r   T)r?   r-  is_module_patchedMONKEY_PATCHEDr   submitrD  add_done_callbackrR   r6  rM   r@   r<   
assertTruer  assertFalse	cancelledr   readyvaluer8  ru   r;  r%   )
r   r   rA  r   rE  rI  spawned_greenletr  	_not_donerD  s
            @r   test_futurezTestTPE.test_future2  s   11+>,,	.yy
		C R  *$116==%P	 "<<0
 	"-&))+, 	**A.(..01)//6 	  !BCdV, ,,y1idfX.d22F9=>I**A.**A.		Ir   c                    | j                  t        j                  d      | j                         | j                  }d }|j                  |      }| j                  r| j                  |fd      \  }}| j                  t        |      |g       d }t        j                  |      }| j                  |f      \  }}	| j                  t        |      |g       | j                  |j                                | j                  |j                  d       n"| j                  t        | j                  |f       |j                          ~~| `y )Nr=  c                  .    t        j                  d       yr?  r   r   r   r   rA  z4TestTPE.test_future_wait_module_function.<locals>.fnv  rB  r   r   r   c                       yrG  r   r   r   r   rI  z9TestTPE.test_future_wait_module_function.<locals>.spawned  s    r   rH  )r?   r-  rM  rN  r   rO  r8  ru   r@   r<   rQ  rT  rU  rR   AttributeErrorr%   )
r   r   rA  rE  _donenot_donerI  rV  r  rW  s
             r    test_future_wait_module_functionz(TestTPE.test_future_wait_module_functionn  s    	11+>,,	.yy	 R"llF9elDOE8T(^fX6  &||G4"llF95OD)T$Z&2OO,2245-33T: ndllVIF		Ir   c                    | j                  t        j                  d      | j                         | j                  }d }|j                  |      }d }t        j                  |      }t        j                  |f      }| j                  t        |      |g       | j                  |j                                | j                  |j                  d       |j                          ~~| `y )Nr=  c                  .    t        j                  d       yr?  r   r   r   r   rA  z4TestTPE.test_future_wait_gevent_function.<locals>.fn  rB  r   c                       yrG  r   r   r   r   rI  z9TestTPE.test_future_wait_gevent_function.<locals>.spawned  rJ  r   rH  )r?   r-  rM  rN  r   rO  r@   r<   rh   ru   rQ  rT  rU  r%   )r   r   rA  rE  rI  rV  r  s          r    test_future_wait_gevent_functionz(TestTPE.test_future_wait_gevent_function  s     	11+>,,	.yy	 R	 "<<0{{F9%dfX.(..01)//6		Ir   N)r0   r1   r2   r    r{   propertyr   rN  r6  r8  r;  r)   r~   rX  r_  rc  r   r   r   r0  r0    s     DJ4 4 N" "       9 !9v   ! !!F    !r   r0  c                       e Zd Zd Zy)TestThreadResultc                    g  G d dt               fd}t        j                  j                  d t        j                         |      fd}t        j
                  |      j                          | j                        5  t        d      D ]  }t        j                  d        	 d d d        | j                  ddg       | j                  j                         | j                  j                         y # 1 sw Y   TxY w)Nc                       e Zd Zy)MTestThreadResult.test_exception_in_on_async_doesnt_crash.<locals>.MyExceptionNr#  r   r   r   MyExceptionri    s    r   rj  c                  *    j                  d        r   rL  )rj  calleds   r   bad_when_readyzPTestThreadResult.test_exception_in_on_async_doesnt_crash.<locals>.bad_when_ready  s    MM!r   c                  J     j                  d       j                  d       y )Nr9   r@  )r=   set)rl  trs   r   wakezFTestThreadResult.test_exception_in_on_async_doesnt_crash.<locals>.wake  s    MM!FF2Jr   r   r   r9   )	Exceptionr@   r2  ThreadResultget_hubr<   r>   rR   r+   r   r?   r  rU  assertIsNotNonereceiver)r   rm  rq  r.   rj  rl  rp  s       @@@r   'test_exception_in_on_async_doesnt_crashz8TestThreadResult.test_exception_in_on_async_doesnt_crash  s     	) 		 ++D&..2BNS	 	T  {+ 	$1X $U#$	$
 	!Q("((#R[[)	$ 	$s   &DDN)r0   r1   r2   rw  r   r   r   rf  rf    s     *r   rf  c                   N     e Zd ZdZdZ fdZ fdZd Zd Zd Z	d Z
d Z xZS )	TestWorkerProfileAndTraceNc                     t         t        |           t        j                  j                         | _        t        j                  j                         | _        y r   )	superry  rr   r@   r2  _get_thread_profileold_profile_get_thread_trace	old_trace)r   	__class__s    r   rr   zTestWorkerProfileAndTrace.setUp  s>    '46!,,@@B**<<>r   c                     dd l }|j                  | j                         |j                  | j                         t
        t        |           y Nr   )r=  
setprofiler}  settracer  r{  ry  tearDown)r   r=  r  s     r   r  z"TestWorkerProfileAndTrace.tearDown  s:    T--.4>>*'79r   c                     dd l }|j                  |        | j                  t        j                  j                         |        y r  )r=  r  assertIsr@   r2  r|  r   r=  s     r   test_get_profilez*TestWorkerProfileAndTrace.test_get_profile  s0    T"f'';;=tDr   c                     dd l }|j                  |        | j                  t        j                  j                         |        y r  )r=  r  r  r@   r2  r~  r  s     r   test_get_tracez(TestWorkerProfileAndTrace.test_get_trace  s0    4 f''99;TBr   c                   
 dd l }dd l}t        |d|z         }t        |d|z         dgfd}fd}g g 
|  G 
fddt              }|| _        | j                  dd	
      }t        ||      sJ  ||       |j                  |      }	| j                  |	d       | j                  d   d       |j                          | j                  |d |g       | j                  
||d g       y )Nr   ro  r>   c                       dxx   dz  cc<   y )Nr   r9   r   )_argsrl  s    r   r   zETestWorkerProfileAndTrace._test_func_called_in_task.<locals>.callback  s    1INIr   c                  (    j                          y)N  )ru  )getterr   s   r   taskzATestWorkerProfileAndTrace._test_func_called_in_task.<locals>.task  s      (r   c                   @    e Zd Z G  fddej                        Zy)ATestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Poolc                   &    e Zd ZfdZ fdZy)QTestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Pool._WorkerGreenletc                     j                  |       j                                 t        j                  j                  | |g|  j                                 y r   )r=   r   r   _before_run_task)r   r]   rb   before_taskr  s      r   r  zbTestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Pool._WorkerGreenlet._before_run_task  sL    &&t,&&vx0..??dRTR&&vx0r   c                     j                  |       j                                 t        j                  j                  | |g|  j                                 y r   )r=   r   r   _after_run_task)r   r]   rb   
after_taskr  s      r   r  zaTestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Pool._WorkerGreenlet._after_run_task  sL    %%d+%%fh/..>>tTQDQ%%fh/r   N)r0   r1   r2   r  r  r  r  r  s   r   r   r    s    10r   r   N)r0   r1   r2   r   r   r  s   r   Poolr    s    0 0*"<"< 0r   r  r9   Tr  r  )r=  sysr(   r   r   r#   
isinstancerL   r?   r  r%   )r   r]   r=  r  setterr   r  r  r   r   r  r  rl  r  r   s             @@@@@r   _test_func_called_in_taskz3TestWorkerProfileAndTrace._test_func_called_in_task  s   EDL1edl+		
 
	0 	0: 	0 #}}Q$}?$%%% 	x jjd#q	1- 			 	tT8&<=dHd%;<r   c                 &    | j                  d       y )Nprofiler  r   s    r   test_profile_called_in_taskz5TestWorkerProfileAndTrace.test_profile_called_in_task0  s    &&y1r   c                 &    | j                  d       y )Ntracer  r   s    r   test_trace_called_in_taskz3TestWorkerProfileAndTrace.test_trace_called_in_task3  s    &&w/r   )r0   r1   r2   r}  r  rr   r  r  r  r  r  r  __classcell__)r  s   @r   ry  ry    s5    
 KI?
:E
C
==~20r   ry  __main__)g        )<
__future__r   r   r   
contextlibrl   r  r   r   r@   r   gevent.exceptionsr   gevent.testingtestingr)   r	   r
   contextmanagerr   r   r6   objectr[   ri   rn   r   r   TIMEOUT3rp   r   r   WINRUN_COVERAGEr*   r   r   r~   r   r   r   r   r   r   r	  r  r  r  r  r)  r+  r-  
skipUnlesshasattrr2  r0  rf  ry  r0   mainr   r   r   <module>r     s   %     	  (  3 " ,   !y!! !H*X *`&F &

  2 (H , NN	)?)?YE]E] Kr+  r+j& &,      *
H 
# #J&( &9( 9:'x '2+h +<	V 	 	8  F34!#T T#Tn"*y)) "*J`0 `0H zINN r   