
    Mh:m                     V   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Z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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 d d
lmZmZmZm Z m!Z! d dl"m#Z#m$Z$ d dl%m&Z& d dl'Z'e'j(        rd dl'm)Z)  G d de          Z* G d dej+                  Z, G d de          Z- G d de          Z. G d dej+                  Z/ G d dej+                  Z0 G d de          Z1 G d dej+                  Z2e3dk    r ej4                     dS dS )    N)ThreadPoolExecutor)futures)	Generator)mock)
native_str)gen)IOLoopTimeoutErrorPeriodicCallback)app_log)AsyncTestCasebind_unused_port	ExpectLoggen_testsetup_with_context_manager)ignore_deprecationskipIfNonUnix)Future)Listc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Ze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ed             Zeed                         Zd Z dS )
TestIOLoopc                    d| _         | j        }| |j        fd}t          j        ||          |_        |                    d            |                    d            |                    t          j        d          |j                   |	                                 | 
                    | j         d           d S )Nr   c                 @    xj         dz  c_          |g|R i | d S N   calls)selfcallbackargskwargsold_add_callbacktests       X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/ioloop_test.pyadd_callbackzBTestIOLoop.test_add_callback_return_sequence.<locals>.add_callback1   s9    JJ!OJJX777777777    c                      i S N r)   r&   r$   <lambda>z>TestIOLoop.test_add_callback_return_sequence.<locals>.<lambda>6       " r&   c                      g S r(   r)   r)   r&   r$   r*   z>TestIOLoop.test_add_callback_return_sequence.<locals>.<lambda>7   r+   r&   2   )milliseconds
   )r   io_loopr%   types
MethodTypeadd_timeoutdatetime	timedeltastopstart
assertLess)r   loopr%   r"   r#   s      @@r$   !test_add_callback_return_sequencez,TestIOLoop.test_add_callback_return_sequence)   s    
|,	8 	8 	8 	8 	8 	8 ",\4@@**%%%**%%%+<<<diHHH


B'''''r&   c                 <     fd fd} j                              j                                         |                                                                  t          j                     j        d                                 j                   d S )Nc                  >    d _                                           d S NT)calledr6   r   s   r$   r   z5TestIOLoop.test_add_callback_wakeup.<locals>.callback?   s    DKIIKKKKKr&   c                  z    d_         j                                        t          j                    _        d S NF)r>   r0   r%   time
start_time)r   r   s   r$   schedule_callbackz>TestIOLoop.test_add_callback_wakeup.<locals>.schedule_callbackC   s1    DKL%%h///"ikkDOOOr&      )places)r0   r3   rB   waitassertAlmostEqualrC   
assertTruer>   )r   rD   r   s   ` @r$   test_add_callback_wakeupz#TestIOLoop.test_add_callback_wakeup<   s    	 	 	 	 		* 	* 	* 	* 	* 	* 	  !2!2!4!46GHHH		ty{{DOAFFF$$$$$r&   c                 ,     fd}t          j        |          } j                            |j                                                     t          j                     j        z
  }                     |d           |	                                 d S )Nc                      t          j        d           t          j                      _         j                             j                   d S )N{Gz?)rB   sleep	stop_timer0   r%   r6   r?   s   r$   targetz@TestIOLoop.test_add_callback_wakeup_other_thread.<locals>.targetO   s>    Jt!Y[[DNL%%di00000r&   rP   皙?)
	threadingThreadr0   r%   r7   rG   rB   rO   r8   join)r   rP   threaddeltas   `   r$   %test_add_callback_wakeup_other_threadz0TestIOLoop.test_add_callback_wakeup_other_threadN   s    	1 	1 	1 	1 	1 !000!!&,///			dn,s###r&   c                     | j                             t          j        d          | j                   |                                  d S )Nr   )microseconds)r0   r3   r4   r5   r6   rG   r?   s    r$   test_add_timeout_timedeltaz%TestIOLoop.test_add_timeout_timedelta\   s;      !3!C!C!CTYOOO		r&   c                 0   t                      \  }}	 | j                            |                                d t          j                   |                     t          | j        j        |                                d t          j                   | j                            |                                           |	                                 d S # | j                            |                                           |	                                 w xY w)Nc                     d S r(   r)   fdeventss     r$   r*   z.TestIOLoop.test_multiple_add.<locals>.<lambda>d   s    $ r&   c                     d S r(   r)   r^   s     r$   r*   z.TestIOLoop.test_multiple_add.<locals>.<lambda>l   s    4 r&   )
r   r0   add_handlerfilenor	   READassertRaises	Exceptionremove_handlercloser   sockports      r$   test_multiple_addzTestIOLoop.test_multiple_add`   s    %''
d	L$$66  
 (''   L''666JJLLLLL L''666JJLLLLs   A>C ADc                     t                      \  }}	 | j                            |                                           |                                 d S # |                                 w xY wr(   )r   r0   rg   rc   rh   ri   s      r$   test_remove_without_addz"TestIOLoop.test_remove_without_adds   sY     &''
d	L''666JJLLLLLDJJLLLLs   ,A A+c                     t                      5  | j                            | j                   d d d            n# 1 swxY w Y   |                                  d S r(   )r   r0   add_callback_from_signalr6   rG   r?   s    r$   test_add_callback_from_signalz(TestIOLoop.test_add_callback_from_signal|   s      !! 	= 	=L11$)<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=		s    ;??c                 R   t          d          }t          j        |j                  }|                                 t	                      5  |                    |j                   d d d            n# 1 swxY w Y   |                                 |                                 d S )NFmake_currentrQ   )	r	   rS   rT   r7   r   rp   r6   rU   rh   )r   other_iolooprV   s      r$   *test_add_callback_from_signal_other_threadz5TestIOLoop.test_add_callback_from_signal_other_thread   s     5111!);<<<!! 	E 	E11,2CDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   A44A8;A8c                 &   t          j                    fd}t          d          t          j        |          }|                                                                  t          d          D ]}                    d            d S )Nc                                           j                                                                                                          d           d S )NTall_fds)r%   r6   r7   setrh   )closingru   s   r$   rP   z:TestIOLoop.test_add_callback_while_closing.<locals>.target   sV    %%l&7888   KKMMMt,,,,,r&   Frs   rQ     c                      d S r(   r)   r)   r&   r$   r*   z<TestIOLoop.test_add_callback_while_closing.<locals>.<lambda>   s    d r&   )rS   Eventr	   rT   r7   rG   ranger%   )r   rP   rV   ir|   ru   s       @@r$   test_add_callback_while_closingz*TestIOLoop.test_add_callback_while_closing   s     /##	- 	- 	- 	- 	- 	- 5111!000t 	4 	4A%%ll3333	4 	4r&   c                 t    t          j                    \  }}	  fd} j                            |                                |t
          j                    j                             j                                        dz   t          j
        |j        d                                                        j                            |                                           |                                 |                                 d S # |                                 |                                 w xY w)Nc                 p                         |t          j                                                    d S r(   )assertEqualr	   rd   r6   )r_   r`   r   s     r$   handlerz5TestIOLoop.test_read_while_writeable.<locals>.handler   s,      555		r&   rM   s   asdf)socket
socketpairr0   rb   rc   r	   rd   r3   rB   	functoolspartialsendrG   rg   rh   )r   clientserverr   s   `   r$   test_read_while_writeablez$TestIOLoop.test_read_while_writeable   s	   
  *,,	     L$$V]]__gv{KKKL$$!!##d*I,=fk7,S,S   IIKKKL''888LLNNNLLNNNNN LLNNNLLNNNNs   C
D *D7c                     | j                             | j                                         | j                  }|                                  | j                             |           d S r(   )r0   r3   rB   r6   rG   remove_timeoutr   handles     r$   test_remove_timeout_after_firez)TestIOLoop.test_remove_timeout_after_fire   sR    ))$,*;*;*=*=tyII		##F+++++r&   c                 .    t          d          D ]R} j                             j                                        dz   d           } j                            |           S j                             fd                                             d S )Ni  i  c                      d S r(   r)   r)   r&   r$   r*   z8TestIOLoop.test_remove_timeout_cleanup.<locals>.<lambda>   s    SW r&   c                  B     j                              j                  S r(   r0   r%   r6   r?   s   r$   r*   z8TestIOLoop.test_remove_timeout_cleanup.<locals>.<lambda>   s    $,*C*CDI*N*N r&   )r   r0   r3   rB   r   r%   rG   )r   r   timeouts   `  r$   test_remove_timeout_cleanupz&TestIOLoop.test_remove_timeout_cleanup   s     t 	1 	1Al..t|/@/@/B/BT/I<<XXGL''0000!!"N"N"N"NOOO		r&   c                     ddg j                                         } fd} j                             |dz   |           fd} j                             |dz   |           j                             |dz    j                   t          j        d                                                                  ddg           d S )NFc                  F    d d<   j                                        d S NTr   )r0   r   )r   r   	t2_handles   r$   t1z7TestIOLoop.test_remove_timeout_from_timeout.<locals>.t1   s(    E!HL''	22222r&   rM   c                      d d<   d S )NTr   r)   r   s   r$   t2z7TestIOLoop.test_remove_timeout_from_timeout.<locals>.t2   s    E!HHHr&   g{Gz?gQ?T)r0   rB   r3   r6   rN   rG   r   )r   nowr   r   r   r   s   `   @@r$    test_remove_timeout_from_timeoutz+TestIOLoop.test_remove_timeout_from_timeout   s    
 l!!	3 	3 	3 	3 	3 	3 	3 	  tR000	 	 	 	 	 L,,S4Z<<	  tTY777
4		u.....r&   c                 F   g }| j                             | j                                         |j        d           | j                             t	          j        d          |j        d           | j                             | j                                         |j        d           | j                             d|j        d           | j                             d| j                   | 	                                 | 
                    t          |          g d           d S )Nr   r   )secondsrE         )r   rE   r   r   )r0   r3   rB   appendr4   r5   call_at
call_laterr6   rG   r   sorted)r   resultss     r$   test_timeout_with_argumentsz&TestIOLoop.test_timeout_with_arguments   s      !2!2!4!4gnaHHH  !3A!>!>!>PQRRRT\..00'.!DDD7>155549---		 	,,,77777r&   c                     | j                             | j                                         d           }|                     |           | j                             |           d S )Nc                      d S r(   r)   r)   r&   r$   r*   z4TestIOLoop.test_add_timeout_return.<locals>.<lambda>   s    t r&   )r0   r3   rB   assertIsNotNoner   r   s     r$   test_add_timeout_returnz"TestIOLoop.test_add_timeout_return   s[     ))$,*;*;*=*=||LLV$$$##F+++++r&   c                     | j                             | j                                         d           }|                     |           | j                             |           d S )Nc                      d S r(   r)   r)   r&   r$   r*   z0TestIOLoop.test_call_at_return.<locals>.<lambda>   s    4 r&   )r0   r   rB   r   r   r   s     r$   test_call_at_returnzTestIOLoop.test_call_at_return   sY    %%dl&7&7&9&9<<HHV$$$##F+++++r&   c                     | j                             dd           }|                     |           | j                             |           d S )Nr   c                      d S r(   r)   r)   r&   r$   r*   z3TestIOLoop.test_call_later_return.<locals>.<lambda>   s    D r&   )r0   r   r   r   r   s     r$   test_call_later_returnz!TestIOLoop.test_call_later_return   sK    ((LL99V$$$##F+++++r&   c                     G d d          }t                      \  }} ||          t          d                              fd                               d           |                     j                   dS )	zWhen a file object is used instead of a numeric file descriptor,
        the object should be closed (by IOLoop.close(all_fds=True),
        not just the fd.
        c                        e Zd Zd Zd Zd ZdS )8TestIOLoop.test_close_file_object.<locals>.SocketWrapperc                 "    || _         d| _        d S rA   )sockobjclosed)r   r   s     r$   __init__zATestIOLoop.test_close_file_object.<locals>.SocketWrapper.__init__
  s    &#r&   c                 4    | j                                         S r(   )r   rc   r?   s    r$   rc   z?TestIOLoop.test_close_file_object.<locals>.SocketWrapper.fileno  s    |**,,,r&   c                 F    d| _         | j                                         d S r=   )r   r   rh   r?   s    r$   rh   z>TestIOLoop.test_close_file_object.<locals>.SocketWrapper.close  s#    """$$$$$r&   N)__name__
__module____qualname__r   rc   rh   r)   r&   r$   SocketWrapperr   	  sA        $ $ $- - -% % % % %r&   r   Frs   c                  H                          d t          j                  S )Nc                     d S r(   r)   r^   s     r$   r*   zETestIOLoop.test_close_file_object.<locals>.<lambda>.<locals>.<lambda>  s    4 r&   )rb   r	   rd   )r0   socket_wrappers   r$   r*   z3TestIOLoop.test_close_file_object.<locals>.<lambda>  s$    G'' 7 7  r&   Try   N)r   r	   run_syncrh   rI   r   )r   r   r   rk   r0   r   s       @@r$   test_close_file_objectz!TestIOLoop.test_close_file_object   s    
	% 
	% 
	% 
	% 
	% 
	% 
	% 
	% )**&w//e,,,    	
 	
 	

 	d###-.....r&   c                     t                      \  }g  fd} j                            |t          j                   t          j        t          j                              5 }|                    d|f            	                                 ddd           n# 1 swxY w Y    j        
                                j                                                            |t          j                   t          j        t          j                              5 }|                    d|f            	                                 ddd           n# 1 swxY w Y                        d                                         d                                                     j        
                                                                                                dS )z>The handler callback receives the same fd object it passed in.c                                          |                                            \  }}|                                                                  d S r(   )r   acceptrh   r6   )r_   r`   connaddrfdsr   server_socks       r$   handle_connectionzGTestIOLoop.test_handler_callback_file_object.<locals>.handle_connection%  sE    JJrNNN$++--JD$JJLLLIIKKKKKr&   z	127.0.0.1Nr   r   )r   r0   rb   r	   rd   
contextlibr|   r   connectrG   rg   rc   assertIsr   rh   )r   rk   r   client_sockr   r   s   `   @@r$   !test_handler_callback_file_objectz,TestIOLoop.test_handler_callback_file_object   s5   ,..T	 	 	 	 	 	 	 	  .?MMM00 	Kd 3444IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	##K000  !3!3!5!57H&+VVV00 	Kd 3444IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	c!fk***Q!3!3!5!5666##K$6$6$8$8999s$   ),B!!B%(B%#,EE"Ec                    t                      \  }}d }| j                            ||t          j                   |                     t                    5  | j                            |                                |t          j                   d d d            n# 1 swxY w Y   | j                            |                                           |	                                 d S )Nc                     d S r(   r)   r^   s     r$   fz+TestIOLoop.test_mixed_fd_fileobj.<locals>.f<  s    Dr&   )
r   r0   rb   r	   rd   re   rf   rc   rg   rh   )r   r   rk   r   s       r$   test_mixed_fd_fileobjz TestIOLoop.test_mixed_fd_fileobj9  s   ,..T	 	 	 	  a===y)) 	K 	K L$$[%7%7%9%91fkJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	##K$6$6$8$8999s   9BB!Bc                      dgdg fd} j                             |                                                                  d                                         d                    dS )z:Calling start() twice should raise an error, not deadlock.Fc                      	 j                                          dd<   n# t          $ r d d<   Y nw xY w                                 d S r   )r0   r7   rf   r6   )got_exceptionreturned_from_startr   s   r$   r   z+TestIOLoop.test_reentrant.<locals>.callbackL  sf    (""$$$)-#A&& ( ( (#'a   (IIKKKKKs   " 44r   N)r0   r%   rG   rI   assertFalse)r   r   r   r   s   ` @@r$   test_reentrantzTestIOLoop.test_reentrantG  s    $g	 	 	 	 	 	 	 	!!(+++		a())),Q/00000r&   c                     | j                             d            | j                             | j                   t          t          d          5  |                                  ddd           dS # 1 swxY w Y   dS )z-Uncaught exceptions get logged by the IOLoop.c                      ddz  S Nr   r   r)   r)   r&   r$   r*   z3TestIOLoop.test_exception_logging.<locals>.<lambda>[  
    !a% r&   Exception in callbackN)r0   r%   r6   r   r   rG   r?   s    r$   test_exception_loggingz!TestIOLoop.test_exception_loggingY  s    !!--000!!$),,,w 788 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A22A69A6c                      t           j         fd            } j                            |           t	          t
          d          5                                    ddd           dS # 1 swxY w Y   dS )z:The IOLoop examines exceptions from Futures and logs them.c                  P     j                              j                   ddz   d S r   r   r?   s   r$   r   z:TestIOLoop.test_exception_logging_future.<locals>.callbackc  s(    L%%di000EEEEr&   r   N)r   	coroutiner0   r%   r   r   rG   r   r   s   ` r$   test_exception_logging_futurez(TestIOLoop.test_exception_logging_future`  s     
	 	 	 	 
	 	!!(+++w 788 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A**A.1A.c                       fd} j                             |           t          t          d          5                                    ddd           dS # 1 swxY w Y   dS )z=The IOLoop examines exceptions from awaitables and logs them.c                  j   K    j                              j         j         j                   ddz   d S r   r   r?   s   r$   r   z?TestIOLoop.test_exception_logging_native_coro.<locals>.callbacko  s5       L%%dl&?KKKEEEEr&   r   N)r0   r%   r   r   rG   r   s   ` r$   "test_exception_logging_native_coroz-TestIOLoop.test_exception_logging_native_corol  s    	 	 	 	 	 	!!(+++w 788 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                    | j                             d            | j                             | j                   t          t          d          5  |                                  d d d            n# 1 swxY w Y   | j                             d            | j                             | j                   t          t          d          5  |                                  d d d            d S # 1 swxY w Y   d S )Nc                      ddz  S r   r)   r)   r&   r$   r*   z0TestIOLoop.test_spawn_callback.<locals>.<lambda>|  r   r&   r   c                      ddz  S r   r)   r)   r&   r$   r*   z0TestIOLoop.test_spawn_callback.<locals>.<lambda>  s
    AE r&   )r0   r%   r6   r   r   rG   spawn_callbackr?   s    r$   test_spawn_callbackzTestIOLoop.test_spawn_callbacky  s[    	!!--000!!$),,,w 788 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	##MM222!!$),,,w 788 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   A11A58A5C--C14C1c                 |    t          j                    \  	                     d                               d           g  fd} j                            | j        j                    j                            | j        j                    j                            d j                                                      	                    dg           
                                 
                                 d S # 
                                 
                                 w xY w)Ns   abcc                                          |                     d                     | u rj                                       d S j                                       d S )Ni   )r   recvr0   rg   )r_   r`   chunksr   r   r   s     r$   handle_readz@TestIOLoop.test_remove_handler_from_handler.<locals>.handle_read  s`    bggdmm,,,<<L//77777L//77777r&   rR   )r   r   r   r0   rb   rd   r   r6   rG   r   rh   )r   r   r   r   r   s   ` @@@r$    test_remove_handler_from_handlerz+TestIOLoop.test_remove_handler_from_handler  s3     *,,	KKKK F8 8 8 8 8 8 8 8 L$$V[$,:KLLLL$$V[$,:KLLLL##C333IIKKK VfX...LLNNNLLNNNNN LLNNNLLNNNNs   CD *D;c              #   t    K   d t          j         fdt          d          D                       V  d S )Nc                  r    t          d          D ]&} t          d          }|                                 'd S )Nr/   Frs   )r   r	   rh   )r   r9   s     r$   r   z*TestIOLoop.test_init_close_race.<locals>.f  s@    2YY  5111

 r&   c                 F    g | ]}j                             d           S r(   )r0   run_in_executor).0r   r   r   s     r$   
<listcomp>z3TestIOLoop.test_init_close_race.<locals>.<listcomp>  s+    QQQ155dA>>QQQr&   rE   )r   multir   r   r   s   `@r$   test_init_close_racezTestIOLoop.test_init_close_race  sS      	 	 	
 iQQQQQaQQQRRRRRRRr&   c                    t          j                    }t          |d          }|j        |u sJ |                     t
                    5  t          |d           d d d            n# 1 swxY w Y   |                                 d S )NF)asyncio_looprt   )asyncionew_event_loopr	   r  re   RuntimeErrorrh   )r   r  r9   s      r$   test_explicit_asyncio_loopz%TestIOLoop.test_explicit_asyncio_loop  s    -//<eDDD L0000|,, 	B 	B5AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	

s   
A((A,/A,N)!r   r   r   r:   rJ   rX   r[   rl   rn   rq   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r)   r&   r$   r   r   (   s       ( ( (&% % %$      &    
 
 
4 4 4&   ]*, , ,  / / /.8 8 8, , ,, , ,
, , ,
/ / /@  2  1 1 1$  
 
 
       ]8 S S X ]S    r&   r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestIOLoopCurrentc                 r    t          | t                                 d | _        t          j                     d S r(   )r   r   r0   r	   clear_currentr?   s    r$   setUpzTestIOLoopCurrent.setUp  s5    "4);)=)=>>>r&   c                 J    | j         | j                                          d S d S r(   r0   rh   r?   s    r$   tearDownzTestIOLoopCurrent.tearDown  s,    <#L      $#r&   c                     t          d           _                             t          j        d                     t	          d          D ]} fd} j                            |            j                                                               j         j                                        t          j        d                     d S )NFrs   )instancer   c                  |    t          j                     _         j        J  j                                         d S r(   )r	   currentcurrent_io_loopr0   r6   r?   s   r$   r   z-TestIOLoopCurrent.test_non_current.<locals>.f  s;    '-~'7'7$|///!!#####r&   )	r	   r0   assertIsNoner  r   r%   r7   r   r  )r   r   r   s   `  r$   test_non_currentz"TestIOLoopCurrent.test_non_current  s    5111&.%888999 q 	> 	>A$ $ $ $ $
 L%%a(((L   MM$.===fne<<<====	> 	>r&   c                     t          d          | _        |                     | j        t          j                               d S )NTrs   )r	   r0   r   r  r?   s    r$   test_force_currentz$TestIOLoopCurrent.test_force_current  s8    4000dlFN$4$455555r&   N)r   r   r   r  r  r  r  r)   r&   r$   r	  r	    sP          
! ! !> > >&6 6 6 6 6r&   r	  c                   4     e Zd Z fdZed             Z xZS )TestIOLoopCurrentAsyncc                     t                                                       t          | t                                 d S r(   )superr  r   r   )r   	__class__s    r$   r  zTestIOLoopCurrentAsync.setUp  s1    "4);)=)=>>>>>r&   c              #      K   t          d          5 }|                    t          j                  V  d d d            d S # 1 swxY w Y   d S r   )r   submitr	   r  )r   es     r$   test_clear_without_currentz1TestIOLoopCurrentAsync.test_clear_without_current  s      
  "" 	1a((6/00000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   "AAA)r   r   r   r  r   r!  __classcell__)r  s   @r$   r  r    sS        ? ? ? ? ? 1 1 X1 1 1 1 1r&   r  c                   V    e Zd Zd Zed             Zed             Zed             ZdS )TestIOLoopFuturesc                     t          j        d          5 }d } j                            |                    |           fd                                            }                     |                                                                |	                                           d d d            d S # 1 swxY w Y   d S )Nr   c                      d S r(   r)   r)   r&   r$   dummyz8TestIOLoopFutures.test_add_future_threads.<locals>.dummy  s    r&   c                 .                         |           S r(   r6   )futurer   s    r$   r*   z;TestIOLoopFutures.test_add_future_threads.<locals>.<lambda>  s    499V3D3D r&   )
r   r   r0   
add_futurer  rG   rI   doner  result)r   poolr'  r*  s   `   r$   test_add_future_threadsz)TestIOLoopFutures.test_add_future_threads  s    '** 
	/d   L##E""$D$D$D$D   YY[[FOOFKKMM***fmmoo...
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/s   BB::B>B>c              #   4  K   t          j                    }t          j                    }d }t          j                                        d |||          t          j                                        d |||          gV }|                     ||g|           d S )Nc                 V    |                                   |                                 | S r(   r{   rG   
self_eventother_events     r$   	sync_funcz=TestIOLoopFutures.test_run_in_executor_gen.<locals>.sync_func  s,    NN r&   )rS   r   r	   r  r   r   )r   event1event2r6  ress        r$   test_run_in_executor_genz*TestIOLoopFutures.test_run_in_executor_gen  s      """"	 	 	 N,,T9ffMMN,,T9ffMM
 
 

 	&&)3/////r&   c              #      K   t          j                    }t          j                    }d fd} |||           |||          gV }|                     ||g|           d S )Nc                 V    |                                   |                                 | S r(   r2  r3  s     r$   r6  z@TestIOLoopFutures.test_run_in_executor_native.<locals>.sync_func  s*    NNr&   c                 f   K   t          j                                        d | |           d {V S r(   )r	   r  r   )r4  r5  r6  s     r$   async_wrapperzDTestIOLoopFutures.test_run_in_executor_native.<locals>.async_wrapper   sN      ))99i[        r&   )rS   r   r   )r   r7  r8  r>  r9  r6  s        @r$   test_run_in_executor_nativez-TestIOLoopFutures.test_run_in_executor_native  s      """"	 	 		 	 	 	 	
 #]6622MM&&4Q4QRRR&&)3/////r&   c              #     K   dg G fddt           j                  }t          j                    fd} |d          }t	          j                    }|                    |           |                    d |          V  |                     dd                    | 	                    
                                           d S )Nr   c                   "     e Zd Z fdZ xZS )?TestIOLoopFutures.test_set_default_executor.<locals>.MyExecutorc                 X    dxx         dz  cc<    t                      j        |g|R  S )Nr   r   )r  r  )r   funcr    r  counts      r$   r  zFTestIOLoopFutures.test_set_default_executor.<locals>.MyExecutor.submit.  s6    aA%uww~d2T2222r&   )r   r   r   r  r"  )r  rE  s   @r$   
MyExecutorrB  -  s>        3 3 3 3 3 3 3 3 3 3r&   rF  c                  0                                       d S r(   )r{   )events   r$   r6  z>TestIOLoopFutures.test_set_default_executor.<locals>.sync_func4  s    IIKKKKKr&   r   )r   r   rS   r   r	   r  set_default_executorr   r   rI   is_set)r   rF  r6  executorr9   rE  rH  s        @@r$   test_set_default_executorz+TestIOLoopFutures.test_set_default_executor)  s      	3 	3 	3 	3 	3 	3 	33 	3 	3 	3
 !!	 	 	 	 	 :a==~!!(+++""433333E!H%%%'''''r&   N)r   r   r   r/  r   r:  r?  rL  r)   r&   r$   r$  r$    st        / / / 0 0 X0* 0 0 X0* ( ( X( ( (r&   r$  c                   J    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S )TestIOLoopRunSyncc                 0    t          d          | _        d S )NFrs   )r	   r0   r?   s    r$   r  zTestIOLoopRunSync.setUp@  s    5111r&   c                 8    | j                                          d S r(   r  r?   s    r$   r  zTestIOLoopRunSync.tearDownC  s    r&   c                     |                      t          j                  5  | j                            d            d d d            d S # 1 swxY w Y   d S )Nc                      dS N*   r)   r)   r&   r$   r*   z4TestIOLoopRunSync.test_sync_result.<locals>.<lambda>H  s    " r&   )re   r   BadYieldErrorr0   r   r?   s    r$   test_sync_resultz"TestIOLoopRunSync.test_sync_resultF  s    s011 	. 	.L!!**---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   A		AAc                     |                      t                    5  | j                            d            d d d            d S # 1 swxY w Y   d S )Nc                      ddz  S r   r)   r)   r&   r$   r*   z7TestIOLoopRunSync.test_sync_exception.<locals>.<lambda>L  r   r&   )re   ZeroDivisionErrorr0   r   r?   s    r$   test_sync_exceptionz%TestIOLoopRunSync.test_sync_exceptionJ  s    011 	1 	1L!!--000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   AAAc                     t           j        d             }|                     | j                            |          d           d S )Nc               3   J   K   t           j        V  t          j        d          rS  )r   momentReturnr)   r&   r$   r   z.TestIOLoopRunSync.test_async_result.<locals>.fO  s"      **R.. r&   rT  )r   r   r   r0   r   r   s     r$   test_async_resultz#TestIOLoopRunSync.test_async_resultN  sK    		! 	! 
	! 	..q11266666r&   c                     t           j        d             }|                     t                    5  | j                            |           d d d            d S # 1 swxY w Y   d S )Nc               3   0   K   t           j        V  ddz   d S r   r   r]  r)   r&   r$   r   z1TestIOLoopRunSync.test_async_exception.<locals>.fW  s!      *EEEEr&   )r   r   re   rY  r0   r   r   s     r$   test_async_exceptionz&TestIOLoopRunSync.test_async_exceptionV  s    		 	 
	 011 	% 	%L!!!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   AAAc                 F      fd} j                             |           d S )Nc                  `                          t          j                     j                   d S r(   )r   r	   r  r0   r?   s   r$   r   z)TestIOLoopRunSync.test_current.<locals>.f`  s'    MM&.**DL99999r&   )r0   r   r   s   ` r$   test_currentzTestIOLoopRunSync.test_current_  s:    	: 	: 	: 	: 	: 	a     r&   c                     t           j        d             }|                     t          | j        j        |d           d S )Nc               3   6   K   t          j        d          V  d S r   )r   rN   r)   r&   r$   r   z)TestIOLoopRunSync.test_timeout.<locals>.ff  s       )A,,r&   rM   )r   )r   r   re   r
   r0   r   r   s     r$   test_timeoutzTestIOLoopRunSync.test_timeoute  sG    		 	 
	 	,(=q$OOOOOr&   c                 p    t           j        d             fd}| j                            |           d S )Nc               3   &   K   t           j        V  d S r(   rb  r)   r&   r$   f1z3TestIOLoopRunSync.test_native_coroutine.<locals>.f1m  s      *r&   c                  ,   K                  d {V  d S r(   r)   )rl  s   r$   f2z3TestIOLoopRunSync.test_native_coroutine.<locals>.f2q  s"      "$$JJJJJJJJJr&   )r   r   r0   r   )r   rn  rl  s     @r$   test_native_coroutinez'TestIOLoopRunSync.test_native_coroutinel  sU    		 	 
		 	 	 	 	 	b!!!!!r&   c                     d }|                      t                    5 }| j                            |           d d d            n# 1 swxY w Y   dt	          |j                  v sJ d S )Nc                     K   t          j        d           d {V  t          j                                                     t          j        d           d {V  d S )NrR   r/   )r  rN   r	   r  r6   r)   r&   r$   r   z1TestIOLoopRunSync.test_stop_no_timeout.<locals>.fw  sj      -$$$$$$$$$N!!###-###########r&   zEvent loop stopped)re   r  r0   r   str	exception)r   r   cms      r$   test_stop_no_timeoutz&TestIOLoopRunSync.test_stop_no_timeoutv  s    	$ 	$ 	$
 |,, 	%L!!!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%#s2<'8'8888888s   AA	A	N)r   r   r   r  r  rV  rZ  r_  rc  rf  ri  ro  ru  r)   r&   r$   rN  rN  ?  s        2 2 2  . . .1 1 17 7 7% % %! ! !P P P" " "9 9 9 9 9r&   rN  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestPeriodicCallbackMathc                     g }d}||_         |D ];}|                    |           |                    |j                    |j         |z   }<|S )a9  Simulate a series of calls to the PeriodicCallback.

        Pass a list of call durations in seconds (negative values
        work to simulate clock adjustments during the call, or more or
        less equivalently, between calls). This method returns the
        times at which each call would be made.
        r}   )_next_timeout_update_nextr   )r   pc	durationsr   r   ds         r$   simulate_callsz'TestPeriodicCallbackMath.simulate_calls  s`      	' 	'AOOC   LL)***"Q&CCr&   c                     d S r(   r)   r?   s    r$   r'  zTestPeriodicCallbackMath.dummy  s    r&   c                     t          | j        d          }|                     |                     |dgdz            g d           d S )N'  r            i    r   r'  r   r~  r   r{  s     r$   
test_basicz#TestPeriodicCallbackMath.test_basic  sW    dj%00QC!G,,.L.L.L	
 	
 	
 	
 	
r&   c                     g d}g d}t          | j        d          }|                     |                     ||          |           d S )N)	   r  r/         r  #   r  r   r   r   )r  r  r  r  i.  iL  ij  i  i  i  i  r  r  )r   call_durationsexpectedr{  s       r$   test_overrunz%TestPeriodicCallbackMath.test_overrun  s`     A@@
 
 
 dj%00,,R@@(KKKKKr&   c                     t          | j        d          }|                     |                     |g d          g d           |                     |                     |g d          g d           d S )Nr  )r  r   r  )ir   r   )r  r  r  r  r  s     r$   test_clock_backwardsz-TestPeriodicCallbackMath.test_clock_backwards  s    dj%00
 	$7$7$788:X:X:X	
 	
 	
 	,,R>>@R@R@RSSSSSr&   c                 &   g dg d}dgt                    z  }t          | j        dd          }fd}t          j        d|          5  |                     |                     ||          |           d d d            d S # 1 swxY w Y   d S )	N)      ?r   r   g      ?)r  g     @r  g     E@r   r  r  )jitterc                  .                          d          S )Nr   )pop)random_timess   r$   mock_randomz9TestPeriodicCallbackMath.test_jitter.<locals>.mock_random  s    ##A&&&r&   zrandom.random)lenr   r'  r   patchr   r~  )r   r  r  r{  r  r  s        @r$   test_jitterz$TestPeriodicCallbackMath.test_jitter  s   (((000s<000dj%<<<	' 	' 	' 	' 	' Z55 	P 	PT00^DDhOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   +BB
B
c                     t          d t          j        dd                    }d}|                     |j        |           d S )Nc                      d S r(   r)   r)   r&   r$   r*   z9TestPeriodicCallbackMath.test_timedelta.<locals>.<lambda>  s    d r&   r      )minutesr   i8D )r   r4   r5   r   callback_time)r   r{  expected_callback_times      r$   test_timedeltaz'TestPeriodicCallbackMath.test_timedelta  sJ    llH,>qRT,U,U,UVV!&)+ABBBBBr&   N)
r   r   r   r~  r'  r  r  r  r  r  r)   r&   r$   rw  rw    s          "  
 
 
L L L*T T T"
P 
P 
PC C C C Cr&   rw  c                   $    e Zd Zd ZddZddZdS )TestPeriodicCallbackAsyncc                      dd fd}t          |d          }|                                                                   |                                                      d           d S )Nr   returnc                  J     dz    dk    r                                  d S d S )Nr   r   r)  )rE  r   s   r$   r   z?TestPeriodicCallbackAsync.test_periodic_plain.<locals>.callback  s-    QJEzz		 zr&   r/   r   r  N)r   r7   rG   r6   r   )r   r   r{  rE  s   `  @r$   test_periodic_plainz-TestPeriodicCallbackAsync.test_periodic_plain  s    	 	 	 	 	 	 	 h++



		
			"""""r&   r  Nc                 (    ddgt           j        d fd            }t          |d                                                                                                  d         d                                d         d           d S )	Nr   r  %Generator[Future[None], object, None]c               3      K    dxx         dz  cc<   t          j        d          V   dxx         dz  cc<    d         dk    r5                                 j                            j                   d S d S Nr   r   g?r   r   rN   r6   r0   r%   countsr{  r   s   r$   r   z>TestPeriodicCallbackAsync.test_periodic_coro.<locals>.callback  s      1IIINIII)E"""""1IIINIIIayA~~			))$)44444 ~r&   r/   r   r   )r  r  )r   r   r   r7   rG   r   r   r   r  r{  s   ` @@r$   test_periodic_coroz,TestPeriodicCallbackAsync.test_periodic_coro  s    Q		5 	5 	5 	5 	5 	5 	5 
	5 h++



		A&&&A&&&&&r&   c                     ddgd fd}t          |d                                                                                                  d         d                                d         d           d S )Nr   r  c                    K    dxx         dz  cc<   t          j        d           d {V   dxx         dz  cc<    d         dk    r5                                 j                            j                   d S d S r  r  r  s   r$   r   z?TestPeriodicCallbackAsync.test_periodic_async.<locals>.callback  s      1IIINIII)E"""""""""1IIINIIIayA~~			))$)44444 ~r&   r/   r   r   r  )r   r7   rG   r   r  s   ` @@r$   test_periodic_asyncz-TestPeriodicCallbackAsync.test_periodic_async  s    Q	5 	5 	5 	5 	5 	5 	5 	5 h++



		A&&&A&&&&&r&   r  )r   r   r   r  r  r  r)   r&   r$   r  r    sK        # # #' ' ' '$' ' ' ' ' 'r&   r  c                   f    e Zd Zd Zd Zd Z ej        ej	        dk    d          d             Z
dS )TestIOLoopConfigurationc                     ddgt          |          z   }t          j        dd                    |          g}t	          t          j        |                                                    S )Nz!from tornado.ioloop import IOLoopz*classname = lambda x: x.__class__.__name__z-cz; )listsys
executablerU   r   
subprocesscheck_outputstrip)r   
statements	stmt_listr    s       r$   
run_pythonz"TestIOLoopConfiguration.run_python	  sb    /8
 	 dii	&:&:;*1$7788>>@@@r&   c                     |                      d          }|                     |d           |                      d          }|                     |d           d S )N"print(classname(IOLoop.current()))AsyncIOMainLoopzprint(classname(IOLoop()))AsyncIOLoopr  r   r   clss     r$   test_defaultz$TestIOLoopConfiguration.test_default  sY    ooBCC/000oo:;;m,,,,,r&   c                 ^    |                      dd          }|                     |d           d S )Nz8IOLoop.configure("tornado.platform.asyncio.AsyncIOLoop")r  r  r  r  s     r$   test_asyncioz$TestIOLoopConfiguration.test_asyncio  s:    ooF0
 
 	/00000r&   )r      z*implicit event loop creation not availablec                 `    |                      ddd          }|                     |d           d S )Nz4from tornado.platform.asyncio import AsyncIOMainLoopzAsyncIOMainLoop().install()r  r  r  r  s     r$   test_asyncio_mainz)TestIOLoopConfiguration.test_asyncio_main  s?     ooB)0
 

 	/00000r&   N)r   r   r   r  r  r  unittestskipIfr  version_infor  r)   r&   r$   r  r    s~        A A A- - -1 1 1 X_G#%Q 1 1 1 1 1r&   r  __main__)5r  concurrent.futuresr   
concurrentr   collections.abcr   r   r4   r   r   r  r  rS   rB   r1   r  r   tornado.escaper   tornador   tornado.ioloopr	   r
   r   tornado.logr   tornado.testingr   r   r   r   r   tornado.test.utilr   r   tornado.concurrentr   typingTYPE_CHECKINGr   r   TestCaser	  r  r$  rN  rw  r  r  r   mainr)   r&   r$   <module>r     sa    1 1 1 1 1 1       % % % % % %               



              % % % % % %       A A A A A A A A A A                           & % % % % % 	 R R R R R R R Rn6 6 6 6 6) 6 6 6D1 1 1 1 1] 1 1 1M( M( M( M( M( M( M( M(`?9 ?9 ?9 ?9 ?9) ?9 ?9 ?9DPC PC PC PC PCx0 PC PC PCf1' 1' 1' 1' 1' 1' 1' 1'h 1  1  1  1  1h/  1  1  1F zHMOOOOO r&   