
    [4%ek                     Z   d dl Z d dlmZ d dlmZ d dlmZ d dlZd dl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$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,                  Z0 G d dej,                  Z1 G d de          Z2 G d dej,                  Z3e4dk    r ej5                     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skipOnTravis)Future)Listc                      e Zd Zd Zed             Ze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       8lib/python3.11/site-packages/tornado/test/ioloop_test.pyadd_callbackzBTestIOLoop.test_add_callback_return_sequence.<locals>.add_callback2   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>7       " r'   c                      g S r)   r*   r*   r'   r%   r+   z>TestIOLoop.test_add_callback_return_sequence.<locals>.<lambda>8   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)calledr7   r   s   r%   r    z5TestIOLoop.test_add_callback_wakeup.<locals>.callbackA   s    DKIIKKKKKr'   c                  z    d_         j                                        t          j                    _        d S NF)r?   r1   r&   time
start_time)r    r   s   r%   schedule_callbackz>TestIOLoop.test_add_callback_wakeup.<locals>.schedule_callbackE   s1    DKL%%h///"ikkDOOOr'      )places)r1   r4   rC   waitassertAlmostEqualrD   
assertTruer?   )r   rE   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?)rC   sleep	stop_timer1   r&   r7   r@   s   r%   targetz@TestIOLoop.test_add_callback_wakeup_other_thread.<locals>.targetR   s>    Jt!Y[[DNL%%di00000r'   rQ   皙?)
	threadingThreadr1   r&   r8   rH   rC   rP   r9   join)r   rQ   threaddeltas   `   r%   %test_add_callback_wakeup_other_threadz0TestIOLoop.test_add_callback_wakeup_other_threadP   s    	1 	1 	1 	1 	1 !000!!&,///			dn,s###r'   c                     | j                             t          j        d          | j                   |                                  d S )Nr   )microseconds)r1   r4   r5   r6   r7   rH   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>g   s    $ r'   c                     d S r)   r*   r_   s     r%   r+   z.TestIOLoop.test_multiple_add.<locals>.<lambda>o   s    4 r'   )
r   r1   add_handlerfilenor	   READassertRaises	Exceptionremove_handlercloser   sockports      r%   test_multiple_addzTestIOLoop.test_multiple_addc   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   r1   rh   rd   ri   rj   s      r%   test_remove_without_addz"TestIOLoop.test_remove_without_addv   sY     &''
d	L''666JJLLLLLDJJLLLLs   ,A A+c                 l    | j                             | j                   |                                  d S r)   )r1   add_callback_from_signalr7   rH   r@   s    r%   test_add_callback_from_signalz(TestIOLoop.test_add_callback_from_signal   s-     	--di888		r'   c                    t                      }t          j        |j                  }|                                 |                    |j                   |                                 |                                 d S )NrR   )r	   rT   rU   r8   rq   r7   rV   ri   )r   other_iolooprW   s      r%   *test_add_callback_from_signal_other_threadz5TestIOLoop.test_add_callback_from_signal_other_thread   sl     xx!);<<<--l.?@@@r'   c                 "   t          j                    fd}t                      t          j        |          }|                                                                  t          d          D ]}                    d            d S )Nc                                           j                                                                                                          d           d S )NTall_fds)r&   r7   r8   setri   )closingrt   s   r%   rQ   z:TestIOLoop.test_add_callback_while_closing.<locals>.target   sV    %%l&7888   KKMMMt,,,,,r'   rR     c                      d S r)   r*   r*   r'   r%   r+   z<TestIOLoop.test_add_callback_while_closing.<locals>.<lambda>   s    d r'   )rT   Eventr	   rU   r8   rH   ranger&   )r   rQ   rW   ir{   rt   s       @@r%   test_add_callback_while_closingz*TestIOLoop.test_add_callback_while_closing   s     /##	- 	- 	- 	- 	- 	- xx!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	   re   r7   )r`   ra   r   s     r%   handlerz5TestIOLoop.test_read_while_writeable.<locals>.handler   s,      555		r'   rN   s   asdf)socket
socketpairr1   rc   rd   r	   re   r4   rC   	functoolspartialsendrH   rh   ri   )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)   )r1   r4   rC   r7   rH   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)   r1   r&   r7   r@   s   r%   r+   z8TestIOLoop.test_remove_timeout_cleanup.<locals>.<lambda>   s    $,*C*CDI*N*N r'   )r   r1   r4   rC   r   r&   rH   )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   )r1   r   )r   r   	t2_handles   r%   t1z7TestIOLoop.test_remove_timeout_from_timeout.<locals>.t1   s(    E!HL''	22222r'   rN   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)r1   rC   r4   r7   rO   rH   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   )secondsrF         )r   rF   r   r   )r1   r4   rC   appendr5   r6   call_at
call_laterr7   rH   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           }|                     |d u            | j                             |           d S )Nc                      d S r)   r*   r*   r'   r%   r+   z4TestIOLoop.test_add_timeout_return.<locals>.<lambda>   s    t r'   )r1   r4   rC   assertFalser   r   s     r%   test_add_timeout_returnz"TestIOLoop.test_add_timeout_return   s_     ))$,*;*;*=*=||LL4(((##F+++++r'   c                     | j                             | j                                         d           }|                     |d u            | j                             |           d S )Nc                      d S r)   r*   r*   r'   r%   r+   z0TestIOLoop.test_call_at_return.<locals>.<lambda>   s    4 r'   )r1   r   rC   r   r   r   s     r%   test_call_at_returnzTestIOLoop.test_call_at_return   s]    %%dl&7&7&9&9<<HH4(((##F+++++r'   c                     | j                             dd           }|                     |d u            | j                             |           d S )Nr   c                      d S r)   r*   r*   r'   r%   r+   z3TestIOLoop.test_call_later_return.<locals>.<lambda>   s    D r'   )r1   r   r   r   r   s     r%   test_call_later_returnz!TestIOLoop.test_call_later_return   sO    ((LL994(((##F+++++r'   c                 $    G d dt                     }t                      \  }} ||          }t                      }|                    |d t          j                   |                    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 rB   )sockobjclosed)r   r   s     r%   __init__zATestIOLoop.test_close_file_object.<locals>.SocketWrapper.__init__
  s    &#r'   c                 4    | j                                         S r)   )r   rd   r@   s    r%   rd   z?TestIOLoop.test_close_file_object.<locals>.SocketWrapper.fileno  s    |**,,,r'   c                 F    d| _         | j                                         d S r>   )r   r   ri   r@   s    r%   ri   z>TestIOLoop.test_close_file_object.<locals>.SocketWrapper.close  s#    """$$$$$r'   N)__name__
__module____qualname__r   rd   ri   r*   r'   r%   SocketWrapperr   	  sA        $ $ $- - -% % % % %r'   r   c                     d S r)   r*   r_   s     r%   r+   z3TestIOLoop.test_close_file_object.<locals>.<lambda>  s    t r'   Trx   N)objectr   r	   rc   re   ri   rJ   r   )r   r   r   rl   socket_wrapperr1   s         r%   test_close_file_objectz!TestIOLoop.test_close_file_object  s    
	% 
	% 
	% 
	% 
	%F 
	% 
	% 
	% )**&w//((N,C,CV[QQQ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   acceptri   r7   )r`   ra   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   r1   rc   r	   re   
contextlibr{   r   connectrH   rh   rd   assertIsr   ri   )r   rl   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>.f8  s    Dr'   )
r   r1   rc   r	   re   rf   rg   rd   rh   ri   )r   r   rl   r   s       r%   test_mixed_fd_fileobjz TestIOLoop.test_mixed_fd_fileobj5  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   )r1   r8   rg   r7   )got_exceptionreturned_from_startr   s   r%   r    z+TestIOLoop.test_reentrant.<locals>.callbackH  sf    (""$$$)-#A&& ( ( (#'a   (IIKKKKKs   " 44r   N)r1   r&   rH   rJ   r   )r   r    r   r   s   ` @@r%   test_reentrantzTestIOLoop.test_reentrantC  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>W  
    !a% r'   Exception in callbackN)r1   r&   r7   r   r   rH   r@   s    r%   test_exception_loggingz!TestIOLoop.test_exception_loggingU  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>.callback_  s(    L%%di000EEEEr'   r   N)r   	coroutiner1   r&   r   r   rH   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>.callbackk  s5       L%%dl&?KKKEEEEr'   r   N)r1   r&   r   r   rH   r   s   ` r%   "test_exception_logging_native_coroz-TestIOLoop.test_exception_logging_native_coroh  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>x  r   r'   r   c                      ddz  S r   r*   r*   r'   r%   r+   z0TestIOLoop.test_spawn_callback.<locals>.<lambda>~  s
    AE r'   )r1   r&   r7   r   r   rH   spawn_callbackr@   s    r%   test_spawn_callbackzTestIOLoop.test_spawn_callbacku  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   recvr1   rh   )r`   ra   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'   rS   )r   r   r   r1   rc   re   r   r7   rH   r   ri   )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 )Nr0   Fmake_current)r   r	   ri   )r   r:   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)   )r1   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'   rF   )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_loopr   )asyncionew_event_loopr	   r  rf   RuntimeErrorri   )r   r  r:   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;   r   rK   rY   r\   rm   ro   rr   ru   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, , ,, , ,
, , ,
/ / /6  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   r1   r	   clear_currentr@   s    r%   setUpzTestIOLoopCurrent.setUp  s5    "4);)=)=>>>r'   c                 J    | j         | j                                          d S d S r)   r1   ri   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 )NFr   )instancer   c                  |    t          j                     _         j        J  j                                         d S r)   )r	   currentcurrent_io_loopr1   r7   r@   s   r%   r   z-TestIOLoopCurrent.test_non_current.<locals>.f  s;    '-~'7'7$|///!!#####r'   )	r	   r1   assertIsNoner  r   r&   r8   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 )NTr   )r	   r1   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 u            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)   r7   )futurer   s    r%   r+   z;TestIOLoopFutures.test_add_future_threads.<locals>.<lambda>  s    499V3D3D r'   )	r   r   r1   
add_futurer  rH   rJ   doneresult)r   poolr&  r)  s   `   r%   test_add_future_threadsz)TestIOLoopFutures.test_add_future_threads  s   '** 
	5d   L##E""$D$D$D$D   YY[[FOOFKKMM***OOFMMOOt3444
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5 
	5s   BB<<C C c              #   4  K   t          j                    }t          j                    }d }t          j                                        d |||          t          j                                        d |||          gV }|                     ||g|           d S )Nc                 V    |                                   |                                 | S r)   rz   rH   
self_eventother_events     r%   	sync_funcz=TestIOLoopFutures.test_run_in_executor_gen.<locals>.sync_func  s,    NN r'   )rT   r~   r	   r  r   r   )r   event1event2r5  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)   r1  r2  s     r%   r5  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   )r3  r4  r5  s     r%   async_wrapperzDTestIOLoopFutures.test_run_in_executor_native.<locals>.async_wrapper  sN      ))99i[        r'   )rT   r~   r   )r   r6  r7  r=  r8  r5  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  rD  s   @r%   
MyExecutorrA  )  s>        3 3 3 3 3 3 3 3 3 3r'   rE  c                  0                                       d S r)   )rz   )events   r%   r5  z>TestIOLoopFutures.test_set_default_executor.<locals>.sync_func0  s    IIKKKKKr'   r   )r   r   rT   r~   r	   r  set_default_executorr   r   rJ   is_set)r   rE  r5  executorr:   rD  rG  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   r9  r>  rK  r*   r'   r%   r#  r#    st        5 5 5 0 0 X0* 0 0 X0* ( ( X( ( (r'   r#  c                   D    e 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 )NFr   )r	   r1   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.tearDown?  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>D  s    " r'   )rf   r   BadYieldErrorr1   run_syncr@   s    r%   test_sync_resultz"TestIOLoopRunSync.test_sync_resultB  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>H  r   r'   )rf   ZeroDivisionErrorr1   rU  r@   s    r%   test_sync_exceptionz%TestIOLoopRunSync.test_sync_exceptionF  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          rR  )r   momentReturnr*   r'   r%   r   z.TestIOLoopRunSync.test_async_result.<locals>.fK  s"      **R.. r'   rS  )r   r   r   r1   rU  r   s     r%   test_async_resultz#TestIOLoopRunSync.test_async_resultJ  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>.fS  s!      *EEEEr'   )r   r   rf   rY  r1   rU  r   s     r%   test_async_exceptionz&TestIOLoopRunSync.test_async_exceptionR  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  r1   r@   s   r%   r   z)TestIOLoopRunSync.test_current.<locals>.f\  s'    MM&.**DL99999r'   )r1   rU  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   rO   r*   r'   r%   r   z)TestIOLoopRunSync.test_timeout.<locals>.fb  s       )A,,r'   rN   )r   )r   r   rf   r
   r1   rU  r   s     r%   test_timeoutzTestIOLoopRunSync.test_timeouta  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>.f1i  s      *r'   c                  ,   K                  d {V  d S r)   r*   )rl  s   r%   f2z3TestIOLoopRunSync.test_native_coroutine.<locals>.f2m  s"      "$$JJJJJJJJJr'   )r   r   r1   rU  )r   rn  rl  s     @r%   test_native_coroutinez'TestIOLoopRunSync.test_native_coroutineh  sU    		 	 
		 	 	 	 	 	b!!!!!r'   N)r   r   r   r  r  rV  rZ  r_  rc  rf  ri  ro  r*   r'   r%   rM  rM  ;  s        2 2 2  . . .1 1 17 7 7% % %! ! !P P P" " " " "r'   rM  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_callst  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   rx  r   ru  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  r0         r  #   r  r   r   r   )r~  r  r  r  i.  iL  ij  i  i  i  i  r{  r  )r   call_durationsexpectedru  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   rx  )r   r  r  ru  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   r5   r6   r   callback_time)r   ru  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   rx  r&  r  r  r  r  r  r*   r'   r%   rq  rq  s  s          "  
 
 
L L L*T T T"
P 
P 
PC C C C Cr'   rq  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(  )rD  r   s   r%   r    z?TestPeriodicCallbackAsync.test_periodic_plain.<locals>.callback  s-    QJEzz		 zr'   r0   r   r  N)r   r8   rH   r7   r   )r   r    ru  rD  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   rO   r7   r1   r&   countsru  r   s   r%   r    z>TestPeriodicCallbackAsync.test_periodic_coro.<locals>.callback  s      1IIINIII)E"""""1IIINIIIayA~~			))$)44444 ~r'   r0   r   r   )r  r  )r   r   r   r8   rH   r   r   r    r  ru  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'   r0   r   r   r  )r   r8   rH   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                   &    e Zd Zd Zd Zd Z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
executablerV   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'   c                 `    |                      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  r  r*   r'   r%   r  r    sS        A A A- - -1 1 11 1 1 1 1r'   r  __main__)6r  concurrent.futuresr   
concurrentr   collections.abcr   r   r5   r   r   r  r  rT   rC   r2   unittestr   tornado.escaper   tornador   tornado.ioloopr	   r
   r   tornado.logr   tornado.testingr   r   r   r   r   tornado.test.utilr   r   r   tornado.concurrentr   typingTYPE_CHECKINGr   r   TestCaser  r  r#  rM  rq  r  r  r   mainr*   r'   r%   <module>r     sk    1 1 1 1 1 1       % % % % % %               



              % % % % % %       A A A A A A A A A A                            
 & % % % % % 	 M M M M M M M Md6 6 6 6 6) 6 6 6D1 1 1 1 1] 1 1 1M( M( M( M( M( M( M( M(`5" 5" 5" 5" 5") 5" 5" 5"p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 1@ zHMOOOOO r'   