
    g\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(jR                  rd dl(m*Z*  G d de      Z+ G d dejX                        Z- G d de      Z. G d de      Z/ G d dejX                        Z0 G d dejX                        Z1 G d de      Z2 G d dejX                        Z3e4dk(  r ejj                          yy)    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!y)
TestIOLoopc                    d| _         | j                  }| |j                  fd}t        j                  ||      |_        |j                  d        |j                  d        |j                  t        j                  d      |j                         |j                          | j                  | j                   d       y )Nr   c                 H    xj                   dz  c_          |g|i | y N   calls)selfcallbackargskwargsold_add_callbacktests       M/var/www/openai/venv/lib/python3.12/site-packages/tornado/test/ioloop_test.pyadd_callbackzBTestIOLoop.test_add_callback_return_sequence.<locals>.add_callback2   s"    JJ!OJX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 ",,\4@*%*%++<diiH



B'r'   c                 <     fd fd} j                   j                   j                   j                         |        j                           j	                  t        j                          j
                  d        j                   j                         y )Nc                  4    d _          j                          y NT)calledr7   r   s   r%   r    z5TestIOLoop.test_add_callback_wakeup.<locals>.callbackA   s    DKIIKr'   c                  |    d_         j                  j                          t        j                         _        y NF)r?   r1   r&   time
start_time)r    r   s   r%   schedule_callbackz>TestIOLoop.test_add_callback_wakeup.<locals>.schedule_callbackE   s)    DKLL%%h/"iikDOr'      )places)r1   r4   rC   waitassertAlmostEqualrD   
assertTruer?   )r   rE   r    s   ` @r%   test_add_callback_wakeupz#TestIOLoop.test_add_callback_wakeup=   si    		* 	  !2!2!46GH		tyy{DOOAF$r'   c                 ,     fd}t        j                  |      } j                  j                  |j                          j                          t        j                          j                  z
  } j                  |d       |j                          y )Nc                      t        j                  d       t        j                           _         j                  j	                   j
                         y )N{Gz?)rC   sleep	stop_timer1   r&   r7   r@   s   r%   targetz@TestIOLoop.test_add_callback_wakeup_other_thread.<locals>.targetR   s2    JJt!YY[DNLL%%dii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   sd    	1 !!0!!&,,/				dnn,s#r'   c                     | j                   j                  t        j                  d      | j                         | j                          y )Nr   )microseconds)r1   r4   r5   r6   r7   rH   r@   s    r%   test_add_timeout_timedeltaz%TestIOLoop.test_add_timeout_timedelta_   s.      !3!3!CTYYO		r'   c                    t               \  }}	 | j                  j                  |j                         d t        j
                         | j                  t        | j                  j                  |j                         d t        j
                         | j                  j                  |j                                |j                          y # | j                  j                  |j                                |j                          w xY w)Nc                      y r)   r*   fdeventss     r%   r+   z.TestIOLoop.test_multiple_add.<locals>.<lambda>g   s    $r'   c                      y r)   r*   r_   s     r%   r+   z.TestIOLoop.test_multiple_add.<locals>.<lambda>o   s    4r'   )
r   r1   add_handlerfilenor	   READassertRaises	Exceptionremove_handlercloser   sockports      r%   test_multiple_addzTestIOLoop.test_multiple_addc   s    %'
d	LL$$6
 ((' LL''6JJL LL''6JJLs   BC ;Dc                     t               \  }}	 | j                  j                  |j                                |j	                          y # |j	                          w xY wr)   )r   r1   rh   rd   ri   rj   s      r%   test_remove_without_addz"TestIOLoop.test_remove_without_addv   s@     &'
d	LL''6JJLDJJLs   )A	 	Ac                     t               5  | j                  j                  | j                         d d d        | j	                          y # 1 sw Y   xY wr)   )r   r1   add_callback_from_signalr7   rH   r@   s    r%   test_add_callback_from_signalz(TestIOLoop.test_add_callback_from_signal   s7      !LL11$))< "		 "!s   &A

Ac                 ,   t               }t        j                  |j                        }|j                          t	               5  |j                  |j                         d d d        |j                          |j                          y # 1 sw Y   *xY w)NrR   )	r	   rT   rU   r8   r   rq   r7   rV   ri   )r   other_iolooprW   s      r%   *test_add_callback_from_signal_other_threadz5TestIOLoop.test_add_callback_from_signal_other_thread   sg     x!!););<!11,2C2CD " "!s   B

Bc                     t        j                         fd}t               t        j                  |      }|j	                          j                          t        d      D ]  }j                  d         y )Nc                      j                  j                         j                           j                          j	                  d       y )NTall_fds)r&   r7   r8   setri   )closingrt   s   r%   rQ   z:TestIOLoop.test_add_callback_while_closing.<locals>.target   s=    %%l&7&78 KKMt,r'   rR     c                       y r)   r*   r*   r'   r%   r+   z<TestIOLoop.test_add_callback_while_closing.<locals>.<lambda>   s    dr'   )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]     //#	- x!!0tA%%l3 r'   c                 X    t        j                         \  }}	  fd} j                  j                  |j	                         |t
        j                          j                  j                   j                  j                         dz   t        j                  |j                  d              j                           j                  j                  |j	                                |j                          |j                          y # |j                          |j                          w xY w)Nc                 f    j                  |t        j                         j                          y r)   )assertEqualr	   re   r7   )r`   ra   r   s     r%   handlerz5TestIOLoop.test_read_while_writeable.<locals>.handler   s       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    
  **,	 LL$$V]]_gv{{KLL$$!!#d*I,=,=fkk7,S IIKLL''8LLNLLN LLNLLNs   CD "D)c                     | j                   j                  | j                   j                         | j                        }| j	                          | j                   j                  |       y r)   )r1   r4   rC   r7   rH   remove_timeoutr   handles     r%   test_remove_timeout_after_firez)TestIOLoop.test_remove_timeout_after_fire   sD    ))$,,*;*;*=tyyI		##F+r'   c                 (    t        d      D ]U  } j                  j                   j                  j                         dz   d       } j                  j	                  |       W  j                  j                   fd        j                          y )Ni  i  c                       y r)   r*   r*   r'   r%   r+   z8TestIOLoop.test_remove_timeout_cleanup.<locals>.<lambda>   s    SWr'   c                  N     j                   j                   j                        S r)   r1   r&   r7   r@   s   r%   r+   z8TestIOLoop.test_remove_timeout_cleanup.<locals>.<lambda>   s    $,,*C*CDII*Nr'   )r   r1   r4   rC   r   r&   rH   )r   r   timeouts   `  r%   test_remove_timeout_cleanupz&TestIOLoop.test_remove_timeout_cleanup   sk     tAll..t||/@/@/BT/I<XGLL''0  	!!"NO		r'   c                     ddg j                   j                         } fd} j                   j                  |dz   |       fd} j                   j                  |dz   |       j                   j                  |dz    j                         t        j                  d        j                           j                  ddg       y )NFc                  F    d d<   j                   j                         y NTr   )r1   r   )r   r   	t2_handles   r%   t1z7TestIOLoop.test_remove_timeout_from_timeout.<locals>.t1   s    E!HLL''	2r'   rN   c                      d d<   y )NTr   r*   r   s   r%   t2z7TestIOLoop.test_remove_timeout_from_timeout.<locals>.t2   s    E!Hr'   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    
 ll!	3 	  tR0	 LL,,S4Z<	  tTYY7

4		u.r'   c                 n   g }| j                   j                  | j                   j                         |j                  d       | j                   j                  t	        j
                  d      |j                  d       | j                   j                  | j                   j                         |j                  d       | j                   j                  d|j                  d       | j                   j                  d| j                         | j                          | j                  t        |      g d       y )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!4gnnaH  !3!3A!>PQRT\\..0'..!D7>>15499-		 	,7r'   c                     | j                   j                  | j                   j                         d       }| j                  |d u        | j                   j	                  |       y )Nc                       y r)   r*   r*   r'   r%   r+   z4TestIOLoop.test_add_timeout_return.<locals>.<lambda>   s    tr'   )r1   r4   rC   assertFalser   r   s     r%   test_add_timeout_returnz"TestIOLoop.test_add_timeout_return   sK     ))$,,*;*;*=|L4(##F+r'   c                     | j                   j                  | j                   j                         d       }| j                  |d u        | j                   j	                  |       y )Nc                       y r)   r*   r*   r'   r%   r+   z0TestIOLoop.test_call_at_return.<locals>.<lambda>   s    4r'   )r1   r   rC   r   r   r   s     r%   test_call_at_returnzTestIOLoop.test_call_at_return   sI    %%dll&7&7&9<H4(##F+r'   c                     | j                   j                  dd       }| j                  |d u        | j                   j                  |       y )Nr   c                       y r)   r*   r*   r'   r%   r+   z3TestIOLoop.test_call_later_return.<locals>.<lambda>   s    Dr'   )r1   r   r   r   r   s     r%   test_call_later_returnz!TestIOLoop.test_call_later_return   s<    ((L94(##F+r'   c                      G d dt               }t               \  }} ||      }t               }|j                  |d t        j                         |j                  d       | j                  |j                         y)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y)8TestIOLoop.test_close_file_object.<locals>.SocketWrapperc                      || _         d| _        y rB   )sockobjclosed)r   r   s     r%   __init__zATestIOLoop.test_close_file_object.<locals>.SocketWrapper.__init__  s    &#r'   c                 6    | j                   j                         S r)   )r   rd   r@   s    r%   rd   z?TestIOLoop.test_close_file_object.<locals>.SocketWrapper.fileno  s    ||**,,r'   c                 F    d| _         | j                  j                          y 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     s    $-%r'   r   c                      y r)   r*   r_   s     r%   r+   z3TestIOLoop.test_close_file_object.<locals>.<lambda>  s    tr'   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  sd    
	%F 
	% )*&w/(N,CV[[Qd#--.r'   c                     t               \  }g  fd} j                  j                  |t        j                         t        j                  t        j                               5 }|j                  d|f        j                          ddd        j                  j                          j                  j                  j                         |t        j                         t        j                  t        j                               5 }|j                  d|f        j                          ddd        j                  d           j                  d   j                                 j                  j                  j                                j                          y# 1 sw Y   #xY w# 1 sw Y   xY w)z>The handler callback receives the same fd object it passed in.c                     j                  |        j                         \  }}|j                          j                          y r)   )r   acceptri   r7   )r`   ra   connaddrfdsr   server_socks       r%   handle_connectionzGTestIOLoop.test_handler_callback_file_object.<locals>.handle_connection$  s2    JJrN$++-JD$JJLIIKr'   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  sG   ,.T	 	  .?M0Kd 34IIK 1 	##K0  !3!3!57H&++V0Kd 34IIK 1 	c!fk*Q!3!3!56##K$6$6$89 10
 10s   ,$F1$F>1F;>Gc                    t               \  }}d }| j                  j                  ||t        j                         | j                  t              5  | j                  j                  |j                         |t        j                         d d d        | j                  j                  |j                                |j                          y # 1 sw Y   CxY w)Nc                      y r)   r*   r_   s     r%   fz+TestIOLoop.test_mixed_fd_fileobj.<locals>.f;  s    r'   )
r   r1   rc   r	   re   rf   rg   rd   rh   ri   )r   r   rl   r   s       r%   test_mixed_fd_fileobjz TestIOLoop.test_mixed_fd_fileobj8  s    ,.T	 	  a=y) LL$$[%7%7%91fkkJ * 	##K$6$6$89 *)s   :CCc                      dgdg fd} j                   j                  |        j                           j                  d           j	                  d          y)z:Calling start() twice should raise an error, not deadlock.Fc                      	 j                   j                          dd<   j                          y # t        $ r d d<   Y !w xY wr   )r1   r8   rg   r7   )got_exceptionreturned_from_startr   s   r%   r    z+TestIOLoop.test_reentrant.<locals>.callbackK  sI    (""$)-#A& IIK  (#'a (s   3 AAr   N)r1   r&   rH   rJ   r   )r   r    r   r   s   ` @@r%   test_reentrantzTestIOLoop.test_reentrantF  sY    $g	 	!!(+		a(),Q/0r'   c                     | j                   j                  d        | j                   j                  | j                         t        t        d      5  | j                          ddd       y# 1 sw Y   yxY w)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>Z      !a%r'   Exception in callbackN)r1   r&   r7   r   r   rH   r@   s    r%   test_exception_loggingz!TestIOLoop.test_exception_loggingX  sJ    !!-0!!$)),w 78IIK 988s   A,,A5c                      t         j                   fd       } j                  j                  |       t	        t
        d      5   j                          ddd       y# 1 sw Y   yxY w)z:The IOLoop examines exceptions from Futures and logs them.c                  Z     j                   j                   j                         ddz   y r   r   r@   s   r%   r    z:TestIOLoop.test_exception_logging_future.<locals>.callbackb  s     LL%%dii0Er'   r   N)r   	coroutiner1   r&   r   r   rH   r   r    s   ` r%   test_exception_logging_futurez(TestIOLoop.test_exception_logging_future_  sO     
	 
	 	!!(+w 78IIK 988s   AA(c                       fd} j                   j                  |       t        t        d      5   j	                          ddd       y# 1 sw Y   yxY w)z=The IOLoop examines exceptions from awaitables and logs them.c                     K    j                   j                   j                   j                   j                         ddz   y wr   r   r@   s   r%   r    z?TestIOLoop.test_exception_logging_native_coro.<locals>.callbackn  s2      LL%%dll&?&?KEs   AAr   N)r1   r&   r   r   rH   r   s   ` r%   "test_exception_logging_native_coroz-TestIOLoop.test_exception_logging_native_corok  s<    	 	!!(+w 78IIK 988s   AAc                    | j                   j                  d        | j                   j                  | j                         t        t        d      5  | j                          d d d        | j                   j                  d        | j                   j                  | j                         t        t        d      5  | j                          d d d        y # 1 sw Y   txY w# 1 sw Y   y xY w)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Er'   )r1   r&   r7   r   r   rH   spawn_callbackr@   s    r%   test_spawn_callbackzTestIOLoop.test_spawn_callbackx  s     	!!-0!!$)),w 78IIK 9 	##M2!!$)),w 78IIK 98 98 98s   C<C"C"C+c                 t    t        j                         \  	 j                  d       j                  d       g  fd} j                  j	                  | j                  j
                          j                  j	                  | j                  j
                          j                  j                  d j                          j                           j                  dg       j                          j                          y # j                          j                          w xY w)Ns   abcc                     j                  | j                  d             | u rj                  j                         y j                  j                         y )Ni   )r   recvr1   rh   )r`   ra   chunksr   r   r   s     r%   handle_readz@TestIOLoop.test_remove_handler_from_handler.<locals>.handle_read  sB    bggdm,<LL//7LL//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  s      **,	KKKK F8 LL$$V[$,,:K:KLLL$$V[$,,:K:KLLL##C3IIK VfX.LLNLLN LLNLLNs   CD "D7c           	   #      K   d }t        j                  t        d      D cg c]  }| j                  j	                  d |        c}       y c c}w w)Nc                  \    t        d      D ]  } t        d      }|j                            y )Nr0   Fmake_current)r   r	   ri   )r   r:   s     r%   r   z*TestIOLoop.test_init_close_race.<locals>.f  s#    2Y51

 r'   rF   )r   multir   r1   run_in_executor)r   r   r   s      r%   test_init_close_racezTestIOLoop.test_init_close_race  sC     	
 iiaQ155dA>QRRQs    A#AAc                     t        j                         }t        |d      }|j                  |u sJ | j	                  t
              5  t        |d       d d d        |j                          y # 1 sw Y   xY w)NF)asyncio_loopr   )asyncionew_event_loopr	   r   rf   RuntimeErrorri   )r   r   r:   s      r%   test_explicit_asyncio_loopz%TestIOLoop.test_explicit_asyncio_loop  sa    --/<eD  L000|,5A - 	

 -,s   A..A7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&  *,/.8,,
,
/821$
  8 S  Sr'   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestIOLoopCurrentc                 b    t        | t                      d | _        t        j                          y r)   )r   r   r1   r	   clear_currentr@   s    r%   setUpzTestIOLoopCurrent.setUp  s#    "4);)=>r'   c                 R    | j                   | j                   j                          y y r)   r1   ri   r@   s    r%   tearDownzTestIOLoopCurrent.tearDown  s!    <<#LL  $r'   c                     t        d       _         j                  t        j                  d             t	        d      D ]  } fd} j                  j                  |        j                  j                           j                   j                   j                          j                  t        j                  d              y )NFr   )instancer   c                      t        j                          _         j                  J  j                  j	                          y r)   )r	   currentcurrent_io_loopr1   r7   r@   s   r%   r   z-TestIOLoopCurrent.test_non_current.<locals>.f  s2    '-~~'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&..%89 qA$
 LL%%a(LL MM$..=fnne<= r'   c                     t        d      | _        | j                  | j                  t        j                                y )NTr   )r	   r1   r   r  r@   s    r%   test_force_currentz$TestIOLoopCurrent.test_force_current  s'    40dllFNN$45r'   N)r   r   r   r  r
  r  r  r*   r'   r%   r  r    s    
!>&6r'   r  c                   .     e Zd Z fdZed        Z xZS )TestIOLoopCurrentAsyncc                 J    t         |           t        | t                      y r)   )superr  r   r   )r   	__class__s    r%   r  zTestIOLoopCurrentAsync.setUp  s    "4);)=>r'   c              #      K   t        d      5 }|j                  t        j                         d d d        y # 1 sw Y   y xY wwr   )r   submitr	   r  )r   es     r%   test_clear_without_currentz1TestIOLoopCurrentAsync.test_clear_without_current  s2     
  "a((6//00 #""s   A"9	AAA)r   r   r   r  r   r  __classcell__)r  s   @r%   r  r    s    ? 1 1r'   r  c                   B    e Zd Zd Zed        Zed        Zed        Zy)TestIOLoopFuturesc                 \    t        j                  d      5 }d } j                  j                  |j	                  |       fd        j                         } j                  |j                                 j                  |j                         d u        d d d        y # 1 sw Y   y xY w)Nr   c                       y r)   r*   r*   r'   r%   dummyz8TestIOLoopFutures.test_add_future_threads.<locals>.dummy  s    r'   c                 &    j                  |       S r)   r7   )futurer   s    r%   r+   z;TestIOLoopFutures.test_add_future_threads.<locals>.<lambda>  s    499V3Dr'   )	r   r   r1   
add_futurer  rH   rJ   doneresult)r   poolr"  r%  s   `   r%   test_add_future_threadsz)TestIOLoopFutures.test_add_future_threads  s}    ''*d LL##E"$D YY[FOOFKKM*OOFMMOt34 +**s   BB""B+c              #   &  K   t        j                         }t        j                         }d }t        j                         j	                  d |||      t        j                         j	                  d |||      g}| j                  ||g|       y w)Nc                 F    | j                          |j                          | 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event2r1  ress        r%   test_run_in_executor_genz*TestIOLoopFutures.test_run_in_executor_gen  s~     ""	 NN,,T9ffMNN,,T9ffM
 

 	&&)3/s   BBc              #      K   t        j                         }t        j                         }d fd} |||       |||      g}| j                  ||g|       y w)Nc                 F    | j                          |j                          | S r)   r-  r.  s     r%   r1  z@TestIOLoopFutures.test_run_in_executor_native.<locals>.sync_func  s    NNr'   c                 l   K   t        j                         j                  d | |       d {   S 7 wr)   )r	   r  r   )r/  r0  r1  s     r%   async_wrapperzDTestIOLoopFutures.test_run_in_executor_native.<locals>.async_wrapper  s4     )99i[   s   *424)rT   r~   r   )r   r2  r3  r9  r4  r1  s        @r%   test_run_in_executor_nativez-TestIOLoopFutures.test_run_in_executor_native  s[     ""		
 #662M&&4QRR&&)3/s   AAc              #   h  K   dg G fddt         j                        }t        j                         fd} |d      }t	        j
                         }|j                  |       |j                  d |       | j                  dd          | j                  j                                y w)Nr   c                   "     e Zd Z fdZ xZS )?TestIOLoopFutures.test_set_default_executor.<locals>.MyExecutorc                 >    dxx   dz  cc<   t        |   |g| S )Nr   r   )r  r  )r   funcr!   r  counts      r%   r  zFTestIOLoopFutures.test_set_default_executor.<locals>.MyExecutor.submit-  s$    aAw~d2T22r'   )r   r   r   r  r  )r  r@  s   @r%   
MyExecutorr=  ,  s    3 3r'   rA  c                  &     j                          y r)   )rz   )events   r%   r1  z>TestIOLoopFutures.test_set_default_executor.<locals>.sync_func3  s    IIKr'   r   )r   r   rT   r~   r	   r  set_default_executorr   r   rJ   is_set)r   rA  r1  executorr:   r@  rC  s        @@r%   test_set_default_executorz+TestIOLoopFutures.test_set_default_executor(  s     	333 	3
 !	 a=~~!!(+""433E!H%'s   B.B2N)r   r   r   r*  r   r5  r:  rG  r*   r'   r%   r  r    sC    5 0 0* 0 0* ( (r'   r  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestIOLoopRunSyncc                 &    t        d      | _        y )NFr   )r	   r1   r@   s    r%   r  zTestIOLoopRunSync.setUp?  s    51r'   c                 8    | j                   j                          y r)   r	  r@   s    r%   r
  zTestIOLoopRunSync.tearDownB  s    r'   c                     | j                  t        j                        5  | j                  j	                  d        d d d        y # 1 sw Y   y xY w)Nc                       yN*   r*   r*   r'   r%   r+   z4TestIOLoopRunSync.test_sync_result.<locals>.<lambda>G  s    "r'   )rf   r   BadYieldErrorr1   run_syncr@   s    r%   test_sync_resultz"TestIOLoopRunSync.test_sync_resultE  s4    s001LL!!*- 211s   AAc                     | j                  t              5  | j                  j                  d        d d d        y # 1 sw Y   y xY w)Nc                      ddz  S r   r*   r*   r'   r%   r+   z7TestIOLoopRunSync.test_sync_exception.<locals>.<lambda>K  r   r'   )rf   ZeroDivisionErrorr1   rQ  r@   s    r%   test_sync_exceptionz%TestIOLoopRunSync.test_sync_exceptionI  s/    01LL!!-0 211s	   <Ac                     t         j                  d        }| j                  | j                  j	                  |      d       y )Nc               3   X   K   t         j                   t        j                  d      wrN  )r   momentReturnr*   r'   r%   r   z.TestIOLoopRunSync.test_async_result.<locals>.fN  s     ****R. s   (*rO  )r   r   r   r1   rQ  r   r   s     r%   test_async_resultz#TestIOLoopRunSync.test_async_resultM  s9    		! 
	! 	..q126r'   c                     t         j                  d        }| j                  t              5  | j                  j                  |       d d d        y # 1 sw Y   y xY w)Nc               3   :   K   t         j                   ddz   y wr   r   rY  r*   r'   r%   r   z1TestIOLoopRunSync.test_async_exception.<locals>.fV  s     **E   )r   r   rf   rU  r1   rQ  r[  s     r%   test_async_exceptionz&TestIOLoopRunSync.test_async_exceptionU  sG    		 
	 01LL!!!$ 211s   AAc                 F      fd} j                   j                  |       y )Nc                  b     j                  t        j                          j                         y r)   )r   r	   r  r1   r@   s   r%   r   z)TestIOLoopRunSync.test_current.<locals>.f_  s    MM&..*DLL9r'   )r1   rQ  r[  s   ` r%   test_currentzTestIOLoopRunSync.test_current^  s    	: 	a r'   c                     t         j                  d        }| j                  t        | j                  j
                  |d       y )Nc               3   :   K   t        j                  d       y wr   )r   rO   r*   r'   r%   r   z)TestIOLoopRunSync.test_timeout.<locals>.fe  s     ))A,r`  rN   )r   )r   r   rf   r
   r1   rQ  r[  s     r%   test_timeoutzTestIOLoopRunSync.test_timeoutd  s;    		 
	 	,(=(=q$Or'   c                 r    t         j                  d        fd}| j                  j                  |       y )Nc               3   0   K   t         j                   y wr)   r_  r*   r'   r%   f1z3TestIOLoopRunSync.test_native_coroutine.<locals>.f1l  s     **s   c                  0   K             d {    y 7 wr)   r*   )rj  s   r%   f2z3TestIOLoopRunSync.test_native_coroutine.<locals>.f2p  s     $JJs   )r   r   r1   rQ  )r   rl  rj  s     @r%   test_native_coroutinez'TestIOLoopRunSync.test_native_coroutinek  s2    		 
		 	b!r'   N)r   r   r   r  r
  rR  rV  r\  ra  rd  rg  rm  r*   r'   r%   rI  rI  >  s0    2.17%!P"r'   rI  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestPeriodicCallbackMathc                     g }d}||_         |D ]=  }|j                  |       |j                  |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_callsw  sU     AOOC LL))*""Q&C  r'   c                      y r)   r*   r@   s    r%   r"  zTestPeriodicCallbackMath.dummy  s    r'   c                     t        | j                  d      }| j                  | j                  |dgdz        g d       y )N'  r            i    r   r"  r   rv  r   rs  s     r%   
test_basicz#TestPeriodicCallbackMath.test_basic  s9    djj%0QC!G,.L	
r'   c                     g d}g d}t        | j                  d      }| j                  | j                  ||      |       y )N)	   r  r0         r  #   r  r   r   r   )r|  r}  r~  r  i.  iL  ij  i  i  i  i  ry  r  )r   call_durationsexpectedrs  s       r%   test_overrunz%TestPeriodicCallbackMath.test_overrun  s@     A
 djj%0,,R@(Kr'   c                     t        | j                  d      }| j                  | j                  |g d      g d       | j                  | j                  |g d      g d       y )Nry  )r  r   r{  )ir   r   )r|  r}  r~  r  r  s     r%   test_clock_backwardsz-TestPeriodicCallbackMath.test_clock_backwards  sV    djj%0
 	$78:X	
 	,,R>@RSr'   c                    g dg d}dgt              z  }t        | j                  dd      }fd}t        j                  d|      5  | j                  | j                  ||      |       d d d        y # 1 sw Y   y xY w)	N)      ?r   r   g      ?)r|  g     @r~  g     E@r   ry  r  )jitterc                  &     j                  d      S )Nr   )pop)random_timess   r%   mock_randomz9TestPeriodicCallbackMath.test_jitter.<locals>.mock_random  s    ##A&&r'   zrandom.random)lenr   r"  r   patchr   rv  )r   r  r  rs  r  r  s        @r%   test_jitterz$TestPeriodicCallbackMath.test_jitter  sn    (0s<00djj%<	' ZZ5T00^DhO 655s   #A88Bc                     t        d t        j                  dd            }d}| j                  |j                  |       y )Nc                       y r)   r*   r*   r'   r%   r+   z9TestPeriodicCallbackMath.test_timedelta.<locals>.<lambda>  s    dr'   r      )minutesr   i8D )r   r5   r6   r   callback_time)r   rs  expected_callback_times      r%   test_timedeltaz'TestPeriodicCallbackMath.test_timedelta  s9    lH,>,>qRT,UV!&))+ABr'   N)
r   r   r   rv  r"  r  r  r  r  r  r*   r'   r%   ro  ro  v  s)    "
L*T"
PCr'   ro  c                   "    e Zd Zd ZddZddZy)TestPeriodicCallbackAsyncc                      dd fd}t        |d      }|j                           j                          |j                           j	                  d       y )Nr   c                  <     dz    dk(  rj                          y y )Nr   r   r$  )r@  r   s   r%   r    z?TestPeriodicCallbackAsync.test_periodic_plain.<locals>.callback  s!    QJEz		 r'   r0   r   returnN)r   r8   rH   r7   r   )r   r    rs  r@  s   `  @r%   test_periodic_plainz-TestPeriodicCallbackAsync.test_periodic_plain  sF    	 h+

		
	"r'   Nc                      ddgt         j                  d fd       }t        |d      j                           j	                           j                  d   d        j                  d   d       y )Nr   c               3      K    dxx   dz  cc<   t        j                  d        dxx   dz  cc<    d   dk(  r6j                          j                  j	                  j                         y y wNr   r   g?r   r   rO   r7   r1   r&   countsrs  r   s   r%   r    z>TestPeriodicCallbackAsync.test_periodic_coro.<locals>.callback  s_     1INI))E""1INIayA~	))$))4 s   A1A4r0   r   r   )r  z%Generator[Future[None], object, None])r   r   r   r8   rH   r   r   r    r  rs  s   ` @@r%   test_periodic_coroz,TestPeriodicCallbackAsync.test_periodic_coro  sj    Q		5 
	5 h+

		A&A&r'   c                      ddgd fd}t        |d      j                           j                           j                  d   d        j                  d   d       y )Nr   c                     K    dxx   dz  cc<   t        j                  d       d {     dxx   dz  cc<    d   dk(  r6j                          j                  j	                  j                         y y 7 Pwr  r  r  s   r%   r    z?TestPeriodicCallbackAsync.test_periodic_async.<locals>.callback  sg     1INI))E"""1INIayA~	))$))4  #s   &A<A:AA<r0   r   r   r  )r   r8   rH   r   r  s   ` @@r%   test_periodic_asyncz-TestPeriodicCallbackAsync.test_periodic_async  sY    Q	5 h+

		A&A&r'   r  )r   r   r   r  r  r  r*   r'   r%   r  r    s    #'$'r'   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestIOLoopConfigurationc                     ddgt        |      z   }t        j                  ddj                  |      g}t	        t        j                  |            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  sX    /8
 	 dii	&:;*11$78>>@@r'   c                     | j                  d      }| j                  |d       | j                  d      }| j                  |d       y )N"print(classname(IOLoop.current()))AsyncIOMainLoopzprint(classname(IOLoop()))AsyncIOLoopr  r   r   clss     r%   test_defaultz$TestIOLoopConfiguration.test_default  sA    ooBC/0oo:;m,r'   c                 L    | j                  dd      }| j                  |d       y )Nz8IOLoop.configure("tornado.platform.asyncio.AsyncIOLoop")r  r  r  r  s     r%   test_asyncioz$TestIOLoopConfiguration.test_asyncio  s)    ooF0
 	/0r'   c                 N    | j                  ddd      }| j                  |d       y )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

 	/0r'   N)r   r   r   r  r  r  r  r*   r'   r%   r  r    s    A-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  rI  ro  r  r  r   mainr*   r'   r%   <module>r     s
    1  %      
      %  A A   
 & 	P Pj6)) 6D1] 1M( M(`5")) 5"pPCx00 PCf1' 1'h1h// 1@ zHMMO r'   