
    Mhs.                     T   d dl 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mZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ  G d	 d
e          Z G d dej                  Z G d dej                  Z G d dej                  Z G d de          ZdS )    N)ThreadPoolExecutor)gen)IOLoop)AsyncIOLoopto_asyncio_futureAddThreadSelectorEventLoop)AsyncTestCasegen_testsetup_with_context_managerAsyncHTTPTestCase)ignore_deprecation)ApplicationRequestHandlerc                   b    e Zd Zed             Zd Zed             Zed             Zd Z	d Z
dS )AsyncIOLoopTestc                     | j         j        S N)io_loopasyncio_loopselfs    Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/asyncio_test.pyr   zAsyncIOLoopTest.asyncio_loop(   s    |((    c                 ~      fd} j                              |                                                         d S )Nc                  b   K   t          j                                         j                   d S r   )asyncioget_event_loop	call_soonstopr   s   r   add_callbackz;AsyncIOLoopTest.test_asyncio_callback.<locals>.add_callback.   s,      "$$..ty99999r   )r   run_until_completewait)r   r    s   ` r   test_asyncio_callbackz%AsyncIOLoopTest.test_asyncio_callback,   sL    	: 	: 	: 	: 	: 	,,\\^^<<<		r   c              #      K   t          j        t          j                                        d d                     V }|                     |d           d S )Nc                      dS N*    r(   r   r   <lambda>z5AsyncIOLoopTest.test_asyncio_future.<locals>.<lambda>9   s    2 r   r'   )r   ensure_futurer   run_in_executorassertEqual)r   xs     r   test_asyncio_futurez#AsyncIOLoopTest.test_asyncio_future4   s`       '"$$44T::FF
 
 
 
 	Br   c              #   x   K   t           j        d             } |            V }|                     |d           d S )Nc               3   j   K   t          j                    } |                     d d           E d {V }|S )Nc                      dS r&   r(   r(   r   r   r)   zDAsyncIOLoopTest.test_asyncio_yield_from.<locals>.f.<locals>.<lambda>B   s    B r   )r   r   r+   )
event_loopr-   s     r   fz2AsyncIOLoopTest.test_asyncio_yield_from.<locals>.f?   sB       /11J%55dJJGGGGGGGGAHr   r'   )r   	coroutiner,   )r   r3   results      r   test_asyncio_yield_fromz'AsyncIOLoopTest.test_asyncio_yield_from=   sN      		 	 
	
 qss$$$$$r   c                    t           j        d             fdfd}fd}|                     | j                                      d           |                     | j                            |          d           |                     | j                            |          d           |                     | j                                                   d           |                     | j                             |                      d           |                     | j                             |                      d           d S )Nc               3   J   K   t           j        V  t          j        d          r&   )r   momentReturnr(   r   r   tornado_coroutinez?AsyncIOLoopTest.test_asyncio_adapter.<locals>.tornado_coroutineM   s"      **R.. r   c                  (   K                  d {V S r   r(   r;   s   r    native_coroutine_without_adapterzNAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_without_adapterR   s(      **,,,,,,,,,r   c                  B   K   t                                   d {V S r   r   r=   s   r   native_coroutine_with_adapterzKAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapterU   s1      *+<+<+>+>?????????r   c                  B   K   t                                   d {V S r   r@   )r>   s   r   native_coroutine_with_adapter2zLAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2Y   s1      *+K+K+M+MNNNNNNNNNr   r'   )r   r4   r,   r   run_syncr   r!   )r   rA   rC   r>   r;   s      @@r   test_asyncio_adapterz$AsyncIOLoopTest.test_asyncio_adapterH   s   
 
	! 	! 
	!	- 	- 	- 	- 	-	@ 	@ 	@ 	@ 	@	O 	O 	O 	O 	O 	../OPPRTUUU../LMMrRRR../MNNPRSSS 	001Q1Q1S1STT	
 	
 	
 	001N1N1P1PQQ	
 	
 	
 	001O1O1Q1QRR	
 	
 	
 	
 	
r   c                     t          t          j                              }|                                 |                                 d S r   )r   r   r   closer   loops     r    test_add_thread_close_idempotentz0AsyncIOLoopTest.test_add_thread_close_idempotentp   s6    )'*@*B*BCC



r   N)__name__
__module____qualname__propertyr   r#   r
   r.   r6   rE   rJ   r(   r   r   r   r   '   s        ) ) X)       X  % % X%&
 &
 &
P    r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )LeakTestc                 J    t          d                                           d S )NFmake_current)r   rG   r   s    r   setUpzLeakTest.setUpw   s%    '''--/////r   c                     	 t          j                                                    }|                                 d S # t          $ r Y d S w xY wr   )r   get_event_loop_policyr   rG   	ExceptionrH   s     r   tearDownzLeakTest.tearDown{   sX    	022AACCD
 JJLLLLL	  	 	 	DD	s   %= 
A
Ac                    t          t          j                  }t          d          D ]i}t	          j                    5  t	          j        dt                     t                      }|	                                 d d d            n# 1 swxY w Y   jt          t          j                  |z
  }| 
                    |d           d S )N
   ignorer   )lenr   _ioloop_for_asynciorangewarningscatch_warningssimplefilterDeprecationWarningr   rG   r,   r   
orig_countirI   	new_counts        r   test_ioloop_close_leakzLeakTest.test_ioloop_close_leak   s    344
r 	 	A(**  %h0BCCC"}}

               233j@	A&&&&&s   =BB	B	c                    t          t          j                  }t          d          D ]v}t	          j                    }|                    t          j                   |                    |j                   |	                                 |
                                 wt          t          j                  |z
  }|                     |d           d S )NrZ      )r\   r   r]   r^   r   new_event_loopr   currentr   run_foreverrG   r,   rc   s        r   test_asyncio_close_leakz LeakTest.test_asyncio_close_leak   s    344
r 	 	A)++DNN6>***NN49%%%JJLLLL233j@	 	A&&&&&r   N)rK   rL   rM   rT   rX   rg   rm   r(   r   r   rP   rP   v   sP        0 0 0  	' 	' 	'' ' ' ' 'r   rP   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )SelectorThreadLeakTestc                     t          j        |                                            t          j                    | _        d S r   )r   rundummy_tornado_coroutine	threadingactive_countorig_thread_countr   s    r   rT   zSelectorThreadLeakTest.setUp   s7     	D0022333!*!7!9!9r   c                 z   t          j                     dz   }t          j                     |k     rdt          t          j                              }t	          |          | j        k    rn+t          j        d           t          j                     |k     d|                     t	          |          | j        |           d S )Nri   g?)timelistrs   	enumerater\   ru   sleepassertLessEqual)r   deadlinethreadss      r   assert_no_thread_leakz,SelectorThreadLeakTest.assert_no_thread_leak   s     9;;?ikkH$$9.0011G7||t555JsOOO	 ikkH$$
 	S\\4+A7KKKKKr   c                 0   K   t          j                     d S r   )r   rk   r   s    r   rr   z.SelectorThreadLeakTest.dummy_tornado_coroutine   s      r   c                     t          d          D ](}t          j        |                                            )|                                  d S NrZ   )r^   r   rq   rr   r~   )r   re   s     r   test_asyncio_runz'SelectorThreadLeakTest.test_asyncio_run   sN    r 	8 	8AK44667777""$$$$$r   c                 <   t          d          D ]w}t          j                    }|                    |                                            |                    |                                           |                                 x|                                  d S r   )r^   r   rj   r!   rr   shutdown_asyncgensrG   r~   r   re   rI   s      r   test_asyncio_manualz*SelectorThreadLeakTest.test_asyncio_manual   s    r 	 	A)++D##D$@$@$B$BCCC##D$;$;$=$=>>>JJLLLL""$$$$$r   c                     t          d          D ]@}t          d          }|                    | j                   |                                 A|                                  d S )NrZ   FrR   )r^   r   rD   rr   rG   r~   r   s      r   test_tornadoz#SelectorThreadLeakTest.test_tornado   se    r 	 	A u---DMM$6777JJLLLL""$$$$$r   N)	rK   rL   rM   rT   r~   rr   r   r   r   r(   r   r   ro   ro      sq        : : :L L L  % % %% % %% % % % %r   ro   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )AnyThreadEventLoopPolicyTestc                     t          | t                                 t          j        j        j        | _        t	          j                    | _        t          d          | _	        d S )Nri   )
r   r   tornadoplatformr   AnyThreadEventLoopPolicyrV   orig_policyr   executorr   s    r   rT   z"AnyThreadEventLoopPolicyTest.setUp   sU    "4);)=)=>>> $= 	% #8::*1--r   c                 j    t          j        | j                   | j                                         d S r   )r   set_event_loop_policyr   r   shutdownr   s    r   rX   z%AnyThreadEventLoopPolicyTest.tearDown   s0    %d&6777     r   c                 d    d }| j                             |          }|                                S )Nc                  T    t          j                    } |                                  | S )a#  Get the event loop. Close it if one is returned.

            Returns the (closed) event loop. This is a silly thing
            to do and leaves the thread in a broken state, but it's
            enough for this test. Closing the loop avoids resource
            leak warnings.
            r   r   rG   )rI   s    r   get_and_close_event_loopzWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loop   s$     )++DJJLLLKr   )r   submitr5   )r   r   futures      r   get_event_loop_on_threadz5AnyThreadEventLoopPolicyTest.get_event_loop_on_thread   s7    
	 
	 
	 %%&>??}}r   c                 d   t          j                    5  t          j        dt                     |                     t
          | j                            t          j	                  j
                   t          j        |                                            |                     | j                            t          j	                  
                                t          j                   | j                            d           
                                 d d d            d S # 1 swxY w Y   d S )Nr[   c                  L    t          j                                                    S r   r   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>       )?)A)A)G)G)I)I r   )r_   r`   ra   rb   assertRaisesRuntimeErrorr   r   r   r   r5   r   r   assertIsInstanceAbstractEventLoopr   s    r   test_asyncio_accessorz2AnyThreadEventLoopPolicyTest.test_asyncio_accessor   sY   $&& 	T 	T!(,>??? dm2273IJJQ   )$*G*G*I*IJJJ!!$$W%;<<CCEE)   M  !I!IJJQQSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts   DD%%D),D)c                    t          j                    5  t          j        dt                     |                     | j                            t          j                  	                                t                     | j                            d           	                                 t          j        |                                            |                     | j                            t          j                  	                                t                     | j                            d           	                                 d d d            d S # 1 swxY w Y   d S )Nr[   c                  L    t          j                                                    S r   r   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>
  r   r   c                  L    t          j                                                    S r   r   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>  r   r   )r_   r`   ra   rb   r   r   r   r   rk   r5   r   r   r   r   s    r   test_tornado_accessorz2AnyThreadEventLoopPolicyTest.test_tornado_accessor  st    $&& 		T 		T!(,>???!!$-"6"6v~"F"F"M"M"O"OQWXXX M  !I!IJJQQSSS)$*G*G*I*IJJJ!!$-"6"6v~"F"F"M"M"O"OQWXXXM  !I!IJJQQSSS		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		Ts   D9EE!EN)rK   rL   rM   rT   rX   r   r   r   r(   r   r   r   r      sg        . . .! ! !   T T T$T T T T Tr   r   c                   v    e Zd ZdZdZ ej        dd          Ze                    e           de	fdZ
d Zd	S )
SelectorThreadContextvarsTestfoo/tornado_test_ctxdefault)r   returnc                 j    | j          G fddt                    }t          | j        |fg          S )Nc                       e Zd Z fdZdS )6SelectorThreadContextvarsTest.get_app.<locals>.Handlerc                 Z   K   |                                                                 d S r   )writeget)r   r   s    r   r   z:SelectorThreadContextvarsTest.get_app.<locals>.Handler.get  s.       

+//1122222r   N)rK   rL   rM   r   )r   s   r   Handlerr     s.        
3 
3 
3 
3 
3 
3 
3r   r   )r   r   r   test_endpoint)r   r   r   s     @r   get_appz%SelectorThreadContextvarsTest.get_app  s[    0	3 	3 	3 	3 	3 	3 	3n 	3 	3 	3 T/9:;;;r   c                     |                      | j        |                     | j                  j                                                   d S r   )r,   	ctx_valuefetchr   bodydecoder   s    r   test_context_varsz/SelectorThreadContextvarsTest.test_context_vars)  s>    D4F)G)G)L)S)S)U)UVVVVVr   N)rK   rL   rM   r   r   contextvars
ContextVarr   setr   r   r   r(   r   r   r   r     sz        IM-{-.@)TTT###< < < < <$W W W W Wr   r   ) r   r   rs   rw   unittestr_   concurrent.futuresr   tornado.platform.asyncior   r   tornado.ioloopr   r   r   r   tornado.testingr	   r
   r   r   tornado.test.utilr   tornado.webr   r   r   TestCaserP   ro   r   r   r(   r   r   <module>r      s#               1 1 1 1 1 1           ! ! ! ! ! !         
            1 0 0 0 0 0 3 3 3 3 3 3 3 3L L L L Lm L L L^%' %' %' %' %'x  %' %' %'P0% 0% 0% 0% 0%X. 0% 0% 0%f=T =T =T =T =T8#4 =T =T =T@W W W W W$5 W W W W Wr   