
    ^hS                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
JrJr  S SKJrJr  S SKJr  S SKJrJr  S S	KJr  S S
KJrJr  S SKJr  S SKJr  S SKJrJ r J!r!J"r"J#r#J$r$  S SK%J&r&J'r'J(r(J)r)  S SK*J+r+J,r,  S SK-r-S SK.r.S SK/r/S SK0r0S SK1r1S SK2r2S SK3r3S SK4r4S SK5r5S SK6r6S SK7J8r8  S SK7r7S r9 " S S\+5      r:\) " S S\!5      5       r;\) " S S\!5      5       r<\) " S S\<5      5       r= " S S\\;5      r> " S S\ \;5      r? " S S \=5      r@ " S! S"\=5      rA " S# S$\=5      rB " S% S&\!5      rC " S' S(\!5      rD " S) S*\!5      rE\& " S+ S,\<\!5      5       rF " S- S.\7R                  5      rHg)/    )Future)gen)netutil)IOLoop)IOStreamSSLIOStreamPipeIOStreamStreamClosedError_StreamBuffer)AsyncHTTPClientHTTPResponse)HTTPHeaders)	ConditionEvent)gen_log)ssl_options_to_contextssl_wrap_socket)AddThreadSelectorEventLoop)	TCPServer)AsyncHTTPTestCaseAsyncHTTPSTestCaseAsyncTestCasebind_unused_port	ExpectLoggen_test)skipIfNonUnixrefusing_portignore_deprecationabstract_base_test)RequestHandlerApplicationN)mockc                     [        [        R                  R                  [        R                  R	                  [
        5      S5      [        R                  R                  [        R                  R	                  [
        5      S5      S9$ )Ntest.crttest.key)certfilekeyfile)dictospathjoindirname__file__     T/home/james-whalen/.local/lib/python3.13/site-packages/tornado/test/iostream_test.py_server_ssl_optionsr1   0   sM    bggooh7DRWW__X6
C r/   c                       \ rS rSrS rSrg)HelloHandler7   c                 &    U R                  S5        g )NHello)writeselfs    r0   getHelloHandler.get8   s    

7r/   r.   N)__name__
__module____qualname____firstlineno__r:   __static_attributes__r.   r/   r0   r3   r3   7   s    r/   r3   c            	           \ rS rSrS rS rS\4S jr SS\S\	S\
R                  S\4S	 jjrS
 r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)TestIOStreamWebMixin<   c                     [        5       eNNotImplementedErrorr8   s    r0   _make_client_iostream*TestIOStreamWebMixin._make_client_iostreamG       !##r/   c                 &    [        S[        4/5      $ )N/)r!   r3   r8   s    r0   mixin_get_app"TestIOStreamWebMixin.mixin_get_appJ   s    S,/011r/   returnc                     [        5       erE   rF   r8   s    r0   get_http_port"TestIOStreamWebMixin.get_http_portM   rJ   r/   r*   raise_errorkwargsc                     [        5       erE   rF   )r9   r*   rS   rT   s       r0   fetchTestIOStreamWebMixin.fetchP   s     "##r/   c                    [         R                  " 5       R                  R                  S5      (       a*  [        R
                  " 5       S:X  a  U R                  S5        U R                  SSS0S9nUR                  5         g )NCurlAsyncHTTPClientDarwinz:libcurl doesn't handle closed connections cleanly on macOSrL   
Connectionclose)headers)	r   configured_classr<   endswithplatformsystemskipTestrV   rethrow)r9   responses     r0   test_connection_closed+TestIOStreamWebMixin.test_connection_closedV   sf     ,,.77@@AVWW!X- MMVW::cL'+B:Cr/   c              #   8  #    U R                  5       nUR                  SU R                  5       45      v   UR                  S5        UR	                  5       v nU R                  UR                  S5      5        U R                  UR                  S5      5        g 7f)N	127.0.0.1   GET / HTTP/1.0

s   HTTP/1.1 200   Hello)rH   connectrQ   r7   read_until_close
assertTrue
startswithr_   )r9   streamdatas      r0   test_read_until_close*TestIOStreamWebMixin.test_read_until_closei   sx     ++-nnk4+=+=+?@AA./,,..89h/0s   BBc              #     #    U R                  5       U l        U R                  R                  SU R                  5       45      v   U R                  R	                  S5        U R                  R                  S5      v nU R                  US5        U R                  R                  S5      v nU R                  US5        U R                  R                  S5      v nU R                  US5        U R                  R                  5         g 7f)	Nrh   ri   	   s	   HTTP/1.1 r   r/      s   200)rH   ro   rk   rQ   r7   
read_bytesassertEqualr\   )r9   rp   s     r0   test_read_zero_bytes)TestIOStreamWebMixin.test_read_zero_bytess   s     002kk!!;0B0B0D"EFF34 [[++A..|, [[++A..s# [[++A..v&s   DDc              #   Z  #    U R                  5       nUR                  SU R                  5       45      nUR                  S5      nU R	                  UR                  5       5        [        R                  " X#5      n/ nUR                  5       (       dD  UR                  5       v   UR                  UR                  5        UR                  5       (       d  MD  U R                  XRU/5        UR                  5       v nU R                  UR                  S5      5        UR                  5         g 7f)Nrh   %   GET / HTTP/1.0
Connection: close

rj   )rH   rk   rQ   r7   assertFalsedoner   WaitIteratornextappendcurrent_futurerw   rl   rm   r_   r\   )r9   ro   connect_fut	write_futitresolved_orderrp   s          r0   test_write_while_connecting0TestIOStreamWebMixin.test_write_while_connecting   s     ++-nnk43E3E3G%HI LL!OP	))+, k5''))'')O!!""3"34 '')) 	y)AB,,..h/0s   CD+AD+c              #     #    U R                  5       nUR                  SU R                  5       45      v nU R                  X!5        UR	                  S5      v   UR                  S5      v nU R                  US5        UR                  S5      v n[        R                  " UR                  S5      5      n[        US   5      nUR                  U5      v nU R                  US5        UR                  5         g	7f)
z3Basic test of IOStream's ability to return Futures.rh   ri      
s   HTTP/1.1 200 OK
   

latin1zContent-Lengthrj   N)rH   rk   rQ   assertIsr7   
read_untilrw   r   parsedecodeintrv   r\   )r9   ro   connect_result
first_lineheader_datar]   content_lengthbodys           r0   test_future_interface*TestIOStreamWebMixin.test_future_interface   s      ++-%~~{D<N<N<P.QRRn-ll455!,,W55
%;<"--k::##K$6$6x$@AW%567&&~66x(s   C9C;c              #   <  #    U R                  5       nUR                  SU R                  5       45      v   UR                  S5      v   U R	                  [
        5         UR                  S5      v   S S S 5        UR                  5         g ! , (       d  f       N= f7f)Nrh   ri      )rH   rk   rQ   r7   assertRaisesr
   rv   r\   r9   ro   s     r0   test_future_close_while_reading4TestIOStreamWebMixin.test_future_close_while_reading   sv     ++-nnk4+=+=+?@AAll45501##K00 2 21s   ABB2B
BBc              #     #    U R                  5       nUR                  SU R                  5       45      v   UR                  S5      v   UR	                  S5      v   UR                  5       v nU R                  US5        U R                  [        5         UR                  S5        S S S 5        g ! , (       d  f       g = f7f)Nrh   r{   r   rj      )
rH   rk   rQ   r7   r   rl   rw   r   r
   rv   )r9   ro   r   s      r0   test_future_read_until_close1TestIOStreamWebMixin.test_future_read_until_close   s      ++-nnk4+=+=+?@AAllIJJ,,,,..x( 01a  211s   BCB0'	C0
B>:C)ro   N)F)r<   r=   r>   r?   rH   rM   r   rQ   strbooltypingAnyr   rV   re   r   rq   rx   r   r   r   r   r@   r.   r/   r0   rB   rB   <   s    $2$s $ .3$$&*$>Djj$	$& 1 1  &  *      ! !r/   rB   c                      \ rS rSrS rS r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)TestReadWriteMixin   c                     [         erE   rF   )r9   rT   s     r0   make_iostream_pair%TestReadWriteMixin.make_iostream_pair   s    !!r/   c                 &     " S S5      nU" X5      $ )zzLike make_iostream_pair, but called by ``async with``.

In py37 this becomes simpler with contextlib.asynccontextmanager.
c                   &    \ rS rSrS rS rS rSrg)=TestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext   c                     Xl         X l        g rE   )testrT   )r9   r   rT   s      r0   __init__FTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__init__   s     	$r/   c                    #    U R                   R                  " S0 U R                  D6I S h  vN U l        U R                  $  N7f)Nr.   )r   r   rT   pairr8   s    r0   
__aenter__HTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aenter__   s5     "&))">">"M"MM	yy  Ns   *AAAc                 R   #    U R                    H  nUR                  5         M     g 7frE   )r   r\   )r9   typvaluetbss        r0   	__aexit__GTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aexit__   s     AGGI #s   %')rT   r   r   N)r<   r=   r>   r?   r   r   r   r@   r.   r/   r0   IOStreamPairContextr      s    %!r/   r   r.   )r9   rT   r   s      r0   iostream_pair TestReadWriteMixin.iostream_pair   s    	 	 #400r/   c              #      #    U R                  5       v u  pUR                  S5      v   UR                  5         UR                  5         g 7f)Nr/   )r   r7   r\   )r9   rswss      r0   test_write_zero_bytes(TestReadWriteMixin.test_write_zero_bytes   s:      ..00hhsm



s   A	Ac              #     #    U R                  5       v u  p UR                  S5        / nUR                  UR                  S5      v 5        UR	                  5         UR                  UR                  S5      v 5        U R                  USS/5        UR	                  5         UR	                  5         g ! UR	                  5         UR	                  5         f = f7f)N   12r      1   2)r   r7   r   rv   r\   rw   )r9   r   r   chunkss       r0   "test_future_delayed_close_callback5TestReadWriteMixin.test_future_delayed_close_callback   s      ..00		HHUOFMMq!113HHJMMq!113VdD\2HHJHHJ HHJHHJs   CA;B4 !C4"CCc              #     #    U R                  SS9v u  p UR                  S5        UR                  S5      v nU R                  SU5        UR	                  5         [
        R                  " S5      v   UR                  S5      v nU R                  SU5        UR	                  5         UR	                  5         g ! UR	                  5         UR	                  5         f = f7f)N   )read_chunk_sizes   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg{Gz?)r   r7   rv   rw   r\   r   sleepr9   r   r   rp   s       r0   test_close_buffered_data+TestReadWriteMixin.test_close_buffered_data   s      ..s.CC	HHZ s++DZ.HHJ ))D/!s++DZ.HHJHHJ HHJHHJs   C BB; !C ;"CC c              #     #    U R                  5       v u  p UR                  S5        UR                  S5      v nUR                  5         U R	                  US5        UR                  5       v nU R	                  US5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)Ns   1234r   r   s   234)r   r7   rv   r\   rw   rl   r   s       r0   !test_read_until_close_after_close4TestReadWriteMixin.test_read_until_close_after_close  s      ..00	HHW q))DHHJT4(,,..DT6*HHJHHJ HHJHHJs   CA*B# !C#"CCc              #     #    U R                  5       v u  p [        U[        5      (       a/  [        R                  " 5       S:X  a  [
        R                  " S5      eSn[        U5       H  nUR                  S5        M     UR                  S5        UR                  S5      v nU R                  [        U5      US-  S-   5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)NPyPyz$pypy gc causes problems with openssl   s   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr         )r   
isinstancer   r`   python_implementationunittestSkipTestranger7   r   rw   lenr\   )r9   r   r   NUM_KBirp   s         r0   test_large_read_until(TestReadWriteMixin.test_large_read_until*  s     
 ..00	
 2{++224>''(NOOF6]% #HHWw//DSY(9:HHJHHJ HHJHHJs   DB.C' !D'"D		Dc                   #    U R                  5        IS h  vN u  p[        R                  " UR                  S5      5      n[        R                  " S5      I S h  vN   UR                  S5      I S h  vN   UR                  S5        UR                  5         UI S h  vN   S S S 5      IS h  vN   g  N N[ ND N N! , IS h  vN  (       d  f       g = f7f)N   done皙?   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r   asyncioensure_futurer   r   r7   r\   r9   r   r   rfs       r0   .test_read_until_with_close_after_second_packetATestReadWriteMixin.test_read_until_with_close_after_second_packetC  s      %%''8B&&r}}W'=>B --$$$((;'''HHWHHJHH (''
 %'  ('''s{   CB6CAC B8C 5B:6*C  B<!C %C0B>1C8C :C <C >C CC	CCc                   #    U R                  5        IS h  vN u  p[        R                  " UR                  S5      5      nUR	                  S5      I S h  vN   UR	                  S5        UR                  5         U R                  [        5         UI S h  vN   S S S 5        S S S 5      IS h  vN   g  N N` N!! , (       d  f       N%= f N! , IS h  vN  (       d  f       g = f7f)Nr   r   s   foo)r   r   r   r   r7   r\   r   r
   r   s       r0   'test_read_until_unsatisfied_after_close:TestReadWriteMixin.test_read_until_unsatisfied_after_close[  s      %%''8B&&r}}W'=>B((;'''HHVHHJ""#45 6 ('''  65 ('''s   C)B6C)<CB8:CB<B:B<C%C)0C1C)8C:B<<
C
	CC)C&CC&"C)c              #     #    SnU R                  5       v u  p#[        5       nUR                  UR                  5         UR	                  U5        UR                  S5      v nU R                  XQ5        UR                  5         UR                  S5        UR                  5       v   UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)Ns   OK
r   )	r   r   set_close_callbacksetr7   r   rw   r\   wait)r9   OKr   r   eventress         r0   %test_close_callback_with_pending_read8TestReadWriteMixin.test_close_callback_with_pending_readi  s     
 ..00
eii(	HHRLg..CS%HHJMM'" **,HHJHHJ HHJHHJs   <C-A(C '!C-"C**C-c              #     ^^#    U R                  5       v u  pS/m[        5       mUU4S jnUR                  U5         UR                  S5        UR	                  S5      v nU R                  US5        U R                  TS   5        UR                  5         TR                  5       v   U R                  TS   5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)NFc                  0   > ST S'   TR                  5         g )NTr   )notify)closedconds   r0   close_callbackETestReadWriteMixin.test_future_close_callback.<locals>.close_callback  s    F1IKKMr/      ar   r   )
r   r   r   r7   rv   rw   r|   r\   r   rm   )r9   r   r   r  r   r   r  s        @@r0   test_future_close_callback-TestReadWriteMixin.test_future_close_callback  s      ..00{	 	n-
	HHTNa((CS$'VAY'HHJ))+OOF1I&HHJHHJ HHJHHJs   :DB C  ?!D "DDc              #   B  #    U R                  5       v u  p UR                  S5      nUR                  [        S5      5        Uv nU R	                  US5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)N      hellos   hell)r   rv   r7   
memoryviewrw   r\   r9   r   r   futrp   s        r0   test_write_memoryview(TestReadWriteMixin.test_write_memoryview  sz     ..00	--"CHHZ)*9DT7+HHJHHJ HHJHHJs   BAA: !B:"BBc              #     #    U R                  5       v u  p UR                  SSS9nUR                  S5        Uv nU R                  US5        UR                  SSS9nUR                  S5        Uv nU R                  US5        UR                  SSS9v nU R                  US	5        UR	                  5         UR	                  5         g ! UR	                  5         UR	                  5         f = f7f)
N2   Tpartialr	  ru   s   world   worr   r/   )r   rv   r7   rw   r\   r  s        r0   test_read_bytes_partial*TestReadWriteMixin.test_read_bytes_partial  s     ..00	--D-1CHHX9DT8, --4-0CHHX9DT6* q$77DT3'HHJHHJ HHJHHJs   C0BC *!C0"C--C0c              #     #    U R                  5       v u  p[        5       nUR                  UR                  5         UR	                  SSS9nUR                  S5        Uv nU R                  US5        UR	                  SSS9nUR                  S5        Uv nU R                  US5        [        [        S[        R                  S9   UR	                  SSS9nUR                  S	5        UR                  5       v   S S S 5        UR                  5         UR                  5         g ! , (       d  f       N/= f! UR                  5         UR                  5         f = f7f
N   defr  	max_bytes   abcdef   Unsatisfiable readlevel      123456)r   r   r   r   r   r7   rw   r   r   loggingINFOr   r\   r9   r   r   r   r  rp   s         r0   test_read_until_max_bytes,TestReadWriteMixin.test_read_until_max_bytes  s    ..00
fjj)	--"-5CHHY9DT9- --!-4CHHY9DT9- 7$8MmmFam8#kkm# N
 HHJHHJ NM
 HHJHHJ5   :EBD6 4D%<D6 !E%
D3/D6 6"EEc              #   @  #    U R                  5       v u  p[        5       nUR                  UR                  5         UR	                  S5        [        [        S[        R                  S9   U R                  [        5         UR                  SSS9v   S S S 5        S S S 5        UR                  5       v   UR                  5         UR                  5         g ! , (       d  f       NI= f! , (       d  f       NR= f! UR                  5         UR                  5         f = f7fNr!  r  r  r  r   r  )r   r   r   r   r7   r   r   r"  r#  r   r
   r   r   r\   r9   r   r   r   s       r0    test_read_until_max_bytes_inline3TestReadWriteMixin.test_read_until_max_bytes_inline  s     ..00
fjj)	
 HHY7$8M&&'89--!-<< : N ++-HHJHHJ :9 NM
 HHJHHJsL   :D.C9 +C(CC(C9 6!D
C%	!C((
C62C9 9"DDc              #     #    U R                  5       v u  p[        5       nUR                  UR                  5         UR	                  S5        [        [        S[        R                  S9   UR                  SSS9  UR                  5       v   S S S 5        UR                  5         UR                  5         g ! , (       d  f       N/= f! UR                  5         UR                  5         f = f7fNr  r  r  r  r   r  )r   r   r   r   r7   r   r   r"  r#  r   r   r\   r*  s       r0   'test_read_until_max_bytes_ignores_extra:TestReadWriteMixin.test_read_until_max_bytes_ignores_extra  s     ..00
fjj)
	 HHY7$8Mf2kkm# N HHJHHJ NM HHJHHJ4   :C-.C +#B7C !C-7
CC "C**C-c              #     #    U R                  5       v u  p[        5       nUR                  UR                  5         UR	                  SSS9nUR                  S5        Uv nU R                  US5        UR	                  SSS9nUR                  S5        Uv nU R                  US5        [        [        S[        R                  S9   UR	                  SSS9  UR                  S	5        UR                  5       v   S S S 5        UR                  5         UR                  5         g ! , (       d  f       N/= f! UR                  5         UR                  5         f = f7fr  )r   r   r   r   read_until_regexr7   rw   r   r   r"  r#  r   r\   r$  s         r0   test_read_until_regex_max_bytes2TestReadWriteMixin.test_read_until_regex_max_bytes  s    ..00
fjj)	%%f%;CHHY9DT9- %%f%:CHHY9DT9- 7$8M##Fa#8#kkm# N
 HHJHHJ NM
 HHJHHJr'  c              #     #    U R                  5       v u  p[        5       nUR                  UR                  5         UR	                  S5        [        [        S[        R                  S9   UR                  SSS9  UR                  5       v   S S S 5        UR                  5         UR                  5         g ! , (       d  f       N/= f! UR                  5         UR                  5         f = f7fr)  r   r   r   r   r7   r   r   r"  r#  r3  r   r\   r*  s       r0   &test_read_until_regex_max_bytes_inline9TestReadWriteMixin.test_read_until_regex_max_bytes_inline  s     ..00
fjj)	
 HHY7$8M##Fa#8kkm# N HHJHHJ NM HHJHHJr1  c              #     #    U R                  5       v u  p[        5       nUR                  UR                  5         UR	                  S5        [        [        S[        R                  S9   UR                  SSS9  UR                  5       v   S S S 5        UR                  5         UR                  5         g ! , (       d  f       N/= f! UR                  5         UR                  5         f = f7fr.  r7  r*  s       r0   -test_read_until_regex_max_bytes_ignores_extra@TestReadWriteMixin.test_read_until_regex_max_bytes_ignores_extra-  s     ..00
fjj)
	 HHY7$8M##Fa#8kkm# N HHJHHJ NM HHJHHJr1  c              #   T  #    U R                  SS9v u  p UR                  SS-  5        [        S5       H(  nUR                  S5      v nU R	                  US5        M*     UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)N (  max_buffer_sizes   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad   r   )r   r7   r   rv   rw   r\   r9   r   r   r   rp   s        r0   "test_small_reads_from_large_buffer5TestReadWriteMixin.test_small_reads_from_large_buffer>  s     
 ..y.II	HH[3&'3Z]]400  {3   HHJHHJ HHJHHJs   B(AB "!B("B%%B(c              #   R  #    U R                  SS9v u  p UR                  SS-  5        [        S5       H'  nUR                  SSS9v nU R	                  US5        M)     UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)Nr>  r?  s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
rA     
r   r  )r   r7   r   r   rw   r\   rB  s        r0   (test_small_read_untils_from_large_buffer;TestReadWriteMixin.test_small_read_untils_from_large_bufferM  s     
 ..y.II	HH)S013Z]]5D]AA  ':;   HHJHHJ HHJHHJs   B'A
B !!B'"B$$B'c              #     #    SnU R                  SU-  S9v u  p# UR                  SU-  5        UR                  U5      v   [        R                  " S5      v   [        S5       H  nUR                  U5      v   M     UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)Nr   r   r?  s
   aaaaaaaaaar   rt   )r   r7   rv   r   r   r   r\   )r9   MBr   r   r   s        r0   test_flow_control$TestReadWriteMixin.test_flow_control\  s     ..q2v.FF	HHY^$--##))C.  1XmmB''  HHJHHJ HHJHHJs   CA$B!  !C!"CCc              #     ^ #    T R                  5       v u  pU 4S jn [        S5      nUR                  U5      nUR                  S5        [        R
                  " S5      v   T R                  UR                  5       5        UR                  S5        Uv nT R                  UR                  5       5        T R                  US5        T R                  [        U5      S5        UR                  U5      n[        R
                  " S5      v   T R                  UR                  5       5        UR                  S5        Uv nT R                  UR                  5       5        T R                  US5        T R                  [        U5      S5        [        S	5      nUR                  S
5        UR                  U5      v nT R                  US	5        T R                  [        U5      S5        UR                  S5      v nT R                  US5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)Nc                  >   > T R                   R                  S 5        g )Nc                  .    [         R                  " S5      $ )N皙?)r   r   r.   r/   r0   <lambda>GTestReadWriteMixin.test_read_into.<locals>.sleep_some.<locals>.<lambda>s  s    #))D/r/   )io_looprun_syncr8   s   r0   
sleep_some5TestReadWriteMixin.test_read_into.<locals>.sleep_somer  s    LL!!"9:r/   
   r	  rP  s   world!!s
   helloworlds
   1234567890s
   !!12345678r  s	   abcdefghis   90ab   s   cdefghi)r   	bytearray	read_intor7   r   r   rm   readingr|   rw   bytesrv   r\   )r9   r   r   rU  bufr  rp   s   `      r0   test_read_into!TestReadWriteMixin.test_read_inton  s    ..00	;!	B-C,,s#CHHX))D/!OOBJJL)HHZ 9DRZZ\*T2&U3Z7 ,,s#C))D/!OOBJJL)HH]#9DRZZ\*T2&U3Z7 A,CHH\"c**DT1%U3Z1q))DT:.HHJHHJ HHJHHJs   IG/H/ !I/"IIc              #     #    U R                  5       v u  p [        S5      nUR                  USS9nUR                  S5        Uv nU R	                  UR                  5       5        U R                  US5        U R                  [        U5      S5        UR                  S5        UR                  USS9v nU R                  US5        U R                  [        U5      S5        UR                  USS9v nU R                  US	5        U R                  [        U5      S
5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7f)NrW  Tr  r	  r   s
   hello     s   world!1234567890s
   world!1234r  s
   5678901234)	r   rY  rZ  r7   r|   r[  rw   r\  r\   )r9   r   r   r]  r  rp   s         r0   test_read_into_partial)TestReadWriteMixin.test_read_into_partial  s0    ..00	B-C,,sD,1CHHX9DRZZ\*T1%U3Z);< HH()c488DT2&U3Z7 c488DT1%U3Z7 HHJHHJ HHJHHJs   E)DE #!E)"E&&E)c              #   6  #    U R                  5       v u  p [        5       nUR                  U5      nU R                  UR	                  5       S5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f7fNr   )r   rY  rZ  rw   resultr\   )r9   r   r   r]  r  s        r0   test_read_into_zero_bytes,TestReadWriteMixin.test_read_into_zero_bytes  so     ..00	+C,,s#CSZZ\1-HHJHHJ HHJHHJs   B;A4 !B4"BBc              #   ,  ^^^^^^#    [         R                  " S5      mSmU R                  5       v u  mm[        R                  " 5       m[        R                  " 5       m[
        R                  UUUU4S j5       n[
        R                  UUUU4S j5       n U" 5       U" 5       /v   TR                  5       TR                  5       :X  d   e TR                  5         TR                  5         g ! TR                  5         TR                  5         f = f7f)N*   i@B c               3      >#    Tn U S:  ab  TR                  S[        SU 5      5      n[        R                  " U5      nTR	                  U5        TR                  U5      v   X-  n U S:  a  Mb  U S:X  d   eg 7f)Nr   r     )randintminr)   urandomupdater7   )	remainingsizerp   nbytesproduce_hashrr   s      r0   produce9TestReadWriteMixin.test_many_mixed_reads.<locals>.produce  sr     Ia-yyCi$89zz$'##D)hhtn$!	 a- >!>s   A)A7.	A7c               3     >#    Tn U S:  a  TR                  5       S:  aE  TR                  S[        SU 5      5      nTR                  U5      v nTR	                  U5        X-  n OVTR                  S[        SU 5      5      n[        U5      nTR                  U5      v nXA:X  d   eTR	                  U5        X-  n U S:  a  M  U S:X  d   eg 7f)Nr   g      ?r   rk  )randomrl  rm  rv   ro  rY  rZ  )	rp  rq  rp   r]  nconsume_hashrr  rt  r   s	        r0   consume9TestReadWriteMixin.test_many_mixed_reads.<locals>.consume  s     Ia-88:#99QD)(<=D!#t!44D ''-%I 99QD)(<=D#D/C ll3//A9$9 '',%I a- >!>s   B>C	C)	rx  Randomr   hashlibsha1r   	coroutine	hexdigestr\   )	r9   ru  r{  rz  rr  rs  rt  r   r   s	      @@@@@@r0   test_many_mixed_reads(TestReadWriteMixin.test_many_mixed_reads  s     
 MM"..00B||~||~		" 
	" 
	" 
	"&	9gi(())+|/E/E/GGGGHHJHHJ HHJHHJs   BD4C/ !D/"DDr.   N) r<   r=   r>   r?   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r%  r+  r/  r4  r8  r;  rC  rG  rK  r^  ra  rf  r  r@   r.   r/   r0   r   r      s   
"1*      2  $  0  .    .  0 	 	  0  6  $     6  "         " ' 'R  8   / /r/   r   c                       \ rS rSrS rS r\R                  S 5       r\	S 5       r
\	S 5       r\	S 5       r\\	S 5       5       r\	S	 5       r\	S
 5       rSrg)TestIOStreamMixini  c                     [        5       erE   rF   r9   
connectionrT   s      r0   _make_server_iostream'TestIOStreamMixin._make_server_iostream  rJ   r/   c                     [        5       erE   rF   r  s      r0   rH   'TestIOStreamMixin._make_client_iostream  rJ   r/   c              +     ^ ^^#    [        5       u  p#[        5       mUU U4S jn[        R                  " X$5        T R                  " [
        R
                  " 5       40 TD6nUR                  SU45      nTU/v u  puT R                  R                  UR                  5       5        UR                  5         [        R                  " Xu45      e7f)Nc                 J   > TR                  TR                  " U 40 TD65        g rE   )
set_resultr  )r  addressrT   r9   server_stream_futs     r0   accept_callback=TestIOStreamMixin.make_iostream_pair.<locals>.accept_callback   s$    ((**:@@r/   rh   )r   r   r   add_accept_handlerrH   socketrk   rS  remove_handlerfilenor\   r   Return)	r9   rT   listenerportr  client_streamr   server_streamr  s	   ``      @r0   r   $TestIOStreamMixin.make_iostream_pair  s     )+"H	
 	""8=226==?MfM#++[$,?@.?-M'M$##HOO$56jj-788s   CCc              #     #    [        5       u  pU R                  U5        [        [        R                  " 5       5      nUR	                  U R
                  5        [        [        SSS9   U R                  [        5         UR                  SU45      v   S S S 5        S S S 5        U R                  [        UR                  [        5      UR                  5        g ! , (       d  f       NK= f! , (       d  f       NT= f7f)Nz.*F)requiredrh   )r   
addCleanupr   r  r   stopr   r   r   r
   rk   rm   r   errorConnectionRefusedError)r9   cleanup_funcr  ro   s       r0   test_connection_refused)TestIOStreamMixin.test_connection_refused  s     
 +_%&--/*!!$)),wu5""#45nnk4%899 6 6 	
6<<1GH&,,W 65 65s6   A&C;(C*>CC*=C;
C'	#C**
C84C;c              #   N  #    [         R                   " [         R                  [         R                  S5      n[        U5      nUR	                  U R
                  5        [        R                  " S[         R                  " [        R                  S5      S9   U R                  [        5         UR                  S5      v   S S S 5        U R                  [        UR                   [         R                  5      5        S S S 5        g ! , (       d  f       NJ= f! , (       d  f       g = f7f)Nr   zsocket.socket.connectboomside_effect)	localhostP   )r  AF_INETSOCK_STREAMr   r   r  r"   patchgaierrorerrnoEIOr   r
   rk   rm   r   r  )r9   r   ro   s      r0   test_gaierrorTestIOStreamMixin.test_gaierror  s      MM&..&*<*<a@!!!$)),ZZ#F1S
 ""#45nn%677 6OOJv||V__EF
 
 65
 
s6   BD%D+D?;D:	D%
D	D
D"D%c              #     #    U R                  5       v u  p [        R                  " S[        S5      S9   U R	                  [        S5         UR                  5         S S S 5        S S S 5        UR                  5         UR                  5         g ! , (       d  f       N7= f! , (       d  f       N@= f! UR                  5         UR                  5         f = f7f)Nz.tornado.iostream.BaseIOStream._try_inline_readr  r  )r   r"   r  IOErrorassertRaisesRegexrl   r\   )r9   serverclients      r0    test_read_until_close_with_error2TestIOStreamMixin.test_read_until_close_with_error/  s     #6688		@#FO ++GV<++- =	 LLNLLN	 =<	  LLNLLNsK   CB1 B BB &B1 .!C
B	B  
B.*B1 1"CCc              #   :  #    [         R                  " 5       n[        UR                  [        5      (       a  U R                  S5        U R                  5       v u  p# [        R                  " UR                  R                  5       5        U R                  [        R                  5         UR                  S5        S S S 5        UR                  5         UR                  5         g ! , (       d  f       N/= f! UR                  5         UR                  5         f = f7f)Nz(AddThreadSelectorEventLoop not supportedr   )r   currentr   selector_loopr   rb   r   r)   r\   r  r  r   r  rv   )r9   rS  r  r  s       r0   test_inline_read_error(TestIOStreamMixin.test_inline_read_error=  s     & .."!!&
 
 MMDE#6688	HHV]]))+,""6<<0!!!$ 1 LLNLLN	 10 LLNLLNs7   ADAC6 *C%<C6 !D%
C3/C6 6"DDc              #     ^#    U R                  5       v u  mn[        5       nTR                  UR                  5         TR	                  S5        UR                  S5        U4S jnUTl        [        [        S5         UR                  5       v   S S S 5        TR                  5         UR                  5         g ! , (       d  f       N/= f! TR                  5         UR                  5         f = f7f)Nr   r  c                     > [         R                  " T R                  R                  5       5        T R                  R                  T 5        g rE   )r)   r\   r  r  	__class__read_from_fd)r  s   r0   fake_read_from_fdJTestIOStreamMixin.test_async_read_error_logging.<locals>.fake_read_from_fdl  s0    --/0  --f5r/   zerror on read)r   r   r   r   rv   r7   r  r   r   r   r\   )r9   r  r   r  r  s       @r0   test_async_read_error_logging/TestIOStreamMixin.test_async_read_error_logging_  s       $6688!!&**-	a LL6 #4F7O4kkm# 5 LLNLLN	 54 LLNLLNs4   ;C0?C >B:C !C0:
CC "C--C0c              #     ^^^^^	#    Su  mmSnTT-  U-  m	U R                  T	S9v u  mm[        R                  UUU4S j5       n[        R                  UUU	4S j5       n [        U5       Vs/ s H	  oB" 5       PM     snU" 5       /-   v   TR	                  5         TR	                  5         gs  snf ! TR	                  5         TR	                  5         f = f7f)z/
Test that write() Futures are never orphaned.
)i  rk  rW  r?  c               3   b   >#    ST-  n [        T5       H  nTR                  U 5      v   M     g 7f)N   x)r   r7   )rp   r   mry  r  s     r0   ru  4TestIOStreamMixin.test_future_write.<locals>.produce  s,     !8D1Xll4(( s   ,/c               3   r   >#    Sn U T:  a*  TR                  T5      v nU [        U5      -  n U T:  a  M)  g g 7frd  )rv   r   )nreadr   r  r  total_bytess     r0   r{  4TestIOStreamMixin.test_future_write.<locals>.consume  s>     E+%"--a00S! +%s   077N)r   r   r  r   r\   )
r9   
nproducersru  r{  r   r  r  ry  r  r  s
        @@@@@r0   test_future_write#TestIOStreamMixin.test_future_writex  s      1
!ej(#66{6SS		) 
	)
 
	" 
	"	&+J&78&779&78GI;FFLLNLLN 9LLNLLNs0   AC"B3 /B.?B3 !C.B3 3"CCr.   N)r<   r=   r>   r?   r  rH   r   r  r   r   r  r  r  r   r  r  r  r@   r.   r/   r0   r  r    s    $$ 	]]9 9" X X  G G      @  0  r/   r  c                        \ rS rSrS rS rSrg)TestIOStreamWebHTTPi  c                 >    [        [        R                  " 5       5      $ rE   )r   r  r8   s    r0   rH   )TestIOStreamWebHTTP._make_client_iostream  s    ((r/   c                 "    U R                  5       $ rE   rM   r8   s    r0   get_appTestIOStreamWebHTTP.get_app      !!##r/   r.   Nr<   r=   r>   r?   rH   r  r@   r.   r/   r0   r  r    s    )$r/   r  c                        \ rS rSrS rS rSrg)TestIOStreamWebHTTPSi  c                 f    [        [        R                  " 5       [        [        R                  S9S9$ )N	cert_reqsssl_options)r   r  r(   ssl	CERT_NONEr8   s    r0   rH   *TestIOStreamWebHTTPS._make_client_iostream  s    6==?s}}8UVVr/   c                 "    U R                  5       $ rE   r  r8   s    r0   r  TestIOStreamWebHTTPS.get_app  r  r/   r.   Nr  r.   r/   r0   r  r    s    W$r/   r  c                        \ rS rSrS rS rSrg)TestIOStreami  c                     [        U40 UD6$ rE   r   r  s      r0   r  "TestIOStream._make_server_iostream      
-f--r/   c                     [        U40 UD6$ rE   r  r  s      r0   rH   "TestIOStream._make_client_iostream  r  r/   r.   Nr<   r=   r>   r?   r  rH   r@   r.   r/   r0   r  r    s    ..r/   r  c                        \ rS rSrS rS rSrg)TestIOStreamSSLi  c                 `    [        [        5       SS9nUR                  USSS9n[        U40 UD6$ )NT)server_sideFr  do_handshake_on_connect)r   r1   wrap_socketr   )r9   r  rT   ssl_ctxs       r0   r  %TestIOStreamSSL._make_server_iostream  sB    ()<)>DQ(($) ) 


 :000r/   c                 H    [        U4S[        [        R                  S90UD6$ )Nr  r  )r   r(   r  r  r  s      r0   rH   %TestIOStreamSSL._make_client_iostream  s+    
$(3==$A
EK
 	
r/   r.   Nr  r.   r/   r0   r  r    s    1
r/   r  c                        \ rS rSrS rS rSrg)TestIOStreamSSLContexti  c                    [         R                  " [         R                  R                  5      nUR	                  [
        R                  R                  [
        R                  R                  [        5      S5      [
        R                  R                  [
        R                  R                  [        5      S5      5        [        XSSS9n[        U40 UD6$ Nr$   r%   TFr  )r  create_default_contextPurposeCLIENT_AUTHload_cert_chainr)   r*   r+   r,   r-   r   r   r9   r  rT   contexts       r0   r  ,TestIOStreamSSLContext._make_server_iostream  s    ,,S[[-D-DEGGLL2J?GGLL2J?	
 %T5

 :000r/   c                     [         R                  " [         R                  R                  5      nSUl        [         R
                  Ul        [        U4SU0UD6$ )NFr  )r  r  r  SERVER_AUTHcheck_hostnamer  verify_moder   r  s       r0   rH   ,TestIOStreamSSLContext._make_client_iostream  sE    ,,S[[-D-DE!&!mm:E7EfEEr/   r.   Nr  r.   r/   r0   r   r     s    	1Fr/   r   c                      ^  \ rS rSrU 4S jrU 4S jrS r\R                  S 5       r	\R                  S 5       r
SS jrSS jr\S	 5       r\S
 5       r\S 5       r\S 5       rSrU =r$ )TestIOStreamStartTLSi  c                   >  [         TU ]  5         [        5       u  U l        U l        S U l        [        5       U l        [        R                  " U R                  U R                  5        [        [        R                  " 5       5      U l        U R                  R                  U R                  R!                  SU R                  45      U R"                  5        U R%                  5         U R                  R                  U R                  U R"                  5        U R%                  5         g ! [&         a  n[)        U5        e S nAff = f)Nrh   )supersetUpr   r  r  r  r   server_acceptedr   r  acceptr   r  r  rS  
add_futurerk   r  r   	Exceptionprint)r9   er  s     r0   r  TestIOStreamStartTLS.setUp  s    	GMO'7'9$DM49!%D#)8D &&t}}dkkB!)"D LL##""**K+CDdii IIKLL##D$8$8$))DIIK 	!H	s   D$D( (
E2D>>Ec                 X  > U R                   b  U R                   R                  5         U R                  b  U R                  R                  5         U R                  R	                  U R
                  R                  5       5        U R
                  R                  5         [        TU ]!  5         g rE   )	r  r\   r  rS  r  r  r  r  tearDownr9   r  s    r0   r  TestIOStreamStartTLS.tearDown  sy    )$$&)$$&##DMM$8$8$:;r/   c                     U R                   b  U R                  S5        [        U5      U l         U R                  R	                  S 5        g )Nzshould only get one connection)r  failr   r  r  )r9   r  r  s      r0   r  TestIOStreamStartTLS.accept  s<    )II67%j1''-r/   c              #      #    U R                   c   eU R                   R                  U5        U R                  c   eU R                  R                  S5      v nU R	                  X5        g 7fNr   )r  r7   r  r   rw   r9   line	recv_lines      r0   client_send_line%TestIOStreamStartTLS.client_send_line  d     !!---  &!!---,,77@@	)   A)A+c              #      #    U R                   c   eU R                   R                  U5        U R                  c   eU R                  R                  S5      v nU R	                  X5        g 7fr#  )r  r7   r  r   rw   r$  s      r0   server_send_line%TestIOStreamStartTLS.server_send_line  r)  r*  c                 j    U R                   c   eU R                   nS U l         UR                  SX5      $ )NF)r  	start_tls)r9   r  server_hostnamer  s       r0   client_start_tls%TestIOStreamStartTLS.client_start_tls
  s:    !!---**!&&ukKKr/   c                 j    U R                   c   eU R                   nS U l         UR                  SU5      $ )NT)r  r/  )r9   r  r  s      r0   server_start_tls%TestIOStreamStartTLS.server_start_tls  s:    !!---**!&&t[99r/   c              #     #    U R                  S5      v   U R                  S5      v   U R                  S5      v   U R                  S5      v   U R                  S5      v   U R                  S5      v   U R                  [        [        R
                  S95      nU R                  [        5       5      nUv U l        Uv U l	        U R                  [        U R                  [        5      5        U R                  [        U R                  [        5      5        U R                  S5      v   U R                  S5      v   g 7f)	Ns   220 mail.example.com ready
s   EHLO mail.example.com
s   250-mail.example.com welcome
s   250 STARTTLS
s
   STARTTLS
s   220 Go ahead
r  s   250 mail.example.com welcome
)r,  r'  r1  r(   r  r  r4  r1   r  r  rm   r   r   )r9   client_futureserver_futures      r0   test_start_tls_smtp(TestIOStreamStartTLS.test_start_tls_smtp  s     ##$EFF##$@AA##$GHH##$788##O44##$788--dS]].KL--.A.CD#00#00
4#5#5{CD
4#5#5{CD##$@AA##$GHHs   D=D?c              #     #    U R                  [        5       5      n[        [        S5         U R	                  SS9nU R                  [        R                  5         Uv   S S S 5        U R                  [        R                  [        R                  45         Uv   S S S 5        S S S 5        g ! , (       d  f       NS= f! , (       d  f       N(= f! , (       d  f       g = f7f)N	SSL Errorr  r0  )
r4  r1   r   r   r1  r   r  SSLErrorr  r  r9   r8  r7  s      r0   test_handshake_fail(TestIOStreamStartTLS.test_handshake_fail+  s     --.A.CDw, 11+1NM""3<<0## 1""CLL&,,#?@## A	 -,00@@	 -,sL   *C /CB- 7CB>C$	C -
B;	7C>
C	C
CC c              #     #    U R                  [        5       5      n[        [        S5         U R	                  [
        R                  " 5       SS9nU R                  [
        R                  5         Uv   S S S 5        U R                  [        5         Uv   S S S 5        S S S 5        g ! , (       d  f       N9= f! , (       d  f       N(= f! , (       d  f       g = f7f)Nr<  rh   r=  )
r4  r1   r   r   r1  r  r  r   r>  r  r?  s      r0   test_check_hostname(TestIOStreamStartTLS.test_check_hostname6  s      --.A.CDw, 11**,k 2 M ""3<<0## 1 ""9-## . -, 10 .- -,sM   *CAC	/B'4C	B8C		C'
B5	1C	8
C	C		
CCc              #   ^  #    [        [        S5      5      R                  S5      nU R                  c   eU R                  R	                  U5      v   U R
                  c   eU R
                  R                  UR                  5      v nU R                  [        U5      [        U5      5        g 7f)Nr  L)	r
  r\  castr  r7   r  rv   rr  rw   )r9   r]  recvs      r0   test_typed_memoryview*TestIOStreamStartTLS.test_typed_memoryviewE  s      r#((-!!---  &&s++!!---''223::>>teCj1s   B+B-)r  r  r  r  r  )NNrE   )r<   r=   r>   r?   r  r  r  r   r  r'  r,  r1  r4  r   r9  r@  rC  rI  r@   __classcell__r  s   @r0   r  r    s    (. 	]]* * 	]]* *L: I I( $ $ $ $ 2 2r/   r  c                   h    \ rS rSr\R
                  S 5       r\S 5       r\S 5       r	\S 5       r
Srg)WaitForHandshakeTestiQ  c              #     #    S =p# [        5       u  pEU" [        5       S9nUR                  U5        [        R                  " [        R
                  R                  5      nSUl        [        R                  Ul	        [        5          U=R                  [        [        SS5      -  sl        [        [        R                  " 5       US9nS S S 5        UR                  SU45      v   U R!                  UR                  R#                  5       5        Ub  UR%                  5         Ub  UR'                  5         g g ! , (       d  f       Nt= f! Ub  UR%                  5         Ub  UR'                  5         f f = f7f)Nr  FOP_NO_TLSv1_3r   rh   )r   r1   
add_socketr  r  r  r  r  r  r  r   optionsgetattrr   r  rk   assertIsNotNonecipherr  r\   )r9   
server_clsr  r  sockr  r  s          r0   connect_to_server&WaitForHandshakeTest.connect_to_serverR  s    	)+JD,?,ABFd#001H1HIG%*G""%--G $%73#CC$V]]_'J & ..+t!455  !5!5!78!! " &% !! "s7   E3A?E AD6AE (E36
E E )E00E3c              #   |   ^^#    U m[        5       m " UU4S jS[        5      nU R                  U5      v   Tv   g 7f)Nc                   L   > \ rS rSrU4S jr\R                  U 4S j5       rSrg)GWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServerit  c                    > TR                  UR                  R                  5       5        TR                  R	                  U R
                  U5        g rE   )assertIsNoner  rU  rS  spawn_callbackhandle_connection)r9   ro   r  r   s      r0   handle_streamUWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_streamu  s8    !!&--"6"6"89++D,B,BFKr/   c              3   T   >#    UR                  5       v   TR                  S 5        g 7frE   wait_for_handshaker  )r9   ro   handshake_futures     r0   r`  YWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_connectiony  s#     //11 ++D1s   %(r.   N)	r<   r=   r>   r?   ra  r   r  r`  r@   rf  r   s   r0   
TestServerr\  t  s!    L ]]2 2r/   ri  r   r   rX  r9   ri  rf  r   s     @@r0   test_wait_for_handshake_future3WaitForHandshakeTest.test_wait_for_handshake_futureo  s=     !8	2 	2 	2 $$Z00   8<c              #   |   ^^#    U m[        5       m " UU4S jS[        5      nU R                  U5      v   Tv   g 7f)Nc                   B   > \ rS rSr\R
                  U U4S j5       rSrg)VWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServeri  c              3      >#    UR                  5       nTR                  [        UR                   5        Uv   TR                  S 5        g 7frE   )re  r   RuntimeErrorr  )r9   ro   r  r  rf  r   s       r0   ra  dWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServer.handle_stream  s=     //1!!,0I0IJ	 ++D1s   AA
r.   Nr<   r=   r>   r?   r   r  ra  r@   rh  s   r0   ri  rq    s    ]]2 2r/   ri  rj  rk  s     @@r0   -test_wait_for_handshake_already_waiting_errorBWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error  s=     !8	2 	2 	2 $$Z00rn  c              #   t   ^#    [        5       m " U4S jS[        5      nU R                  U5      v   Tv   g 7f)Nc                   @   > \ rS rSr\R
                  U 4S j5       rSrg)RWaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServeri  c              3   x   >#    UR                  5       v   UR                  5       v   TR                  S 5        g 7frE   rd  )r9   ro   r  rf  s      r0   ra  `WaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServer.handle_stream  s2     //11//11 ++D1s   7:r.   Nru  )rf  s   r0   ri  rz    s    ]]2 2r/   ri  rj  )r9   ri  rf  s     @r0   )test_wait_for_handshake_already_connected>WaitForHandshakeTest.test_wait_for_handshake_already_connected  s3     !8	2 	2 $$Z00s   58r.   N)r<   r=   r>   r?   r   r  rX  r   rl  rv  r}  r@   r.   r/   r0   rN  rN  Q  sT    ]] 8  "     r/   rN  c                   d   ^  \ rS rSrU 4S jrU 4S jr\S 5       r\S 5       r\S 5       r	Sr
U =r$ )TestIOStreamCheckHostnamei  c                   > [         TU ]  5         [        5       u  U l        U l        S n[
        R                  " U R                  U5        [        R                  " [        R                  R                  5      U l        U R                  R                  [        R                  R                  [        R                  R!                  ["        5      S5      5        g )Nc                    [         R                  " [         R                  R                  5      nUR	                  [
        R                  R                  [
        R                  R                  [        5      S5      [
        R                  R                  [
        R                  R                  [        5      S5      5        UR                  U SSS9n [        U 5        g r  )r  r  r  r  r  r)   r*   r+   r,   r-   r  r   )r  r  r  s      r0   r  8TestIOStreamCheckHostname.setUp.<locals>.accept_callback  s    001H1HIG##RWW__X6
CRWW__X6
C !,, (- - J
 
#r/   r$   )r  r  r   r  r  r   r  r  r  r  r  client_ssl_ctxload_verify_locationsr)   r*   r+   r,   r-   )r9   r  r  s     r0   r  TestIOStreamCheckHostname.setUp  s    #3#5 ty	$ 	""4==/B "889P9PQ11GGLL2J?	
r/   c                    > U R                   R                  U R                  R                  5       5        U R                  R	                  5         [
        TU ]  5         g rE   )rS  r  r  r  r\   r  r  r  s    r0   r  "TestIOStreamCheckHostname.tearDown  s=    ##DMM$8$8$:;r/   c                    #    [        [        R                  " 5       U R                  S9nUR                  SU R                  4SS9I S h  vN   UR                  5         g  N7f)Nr  rh   zfoo.example.comr=  )r   r  r  rk   r  r\   r   s     r0   
test_match$TestIOStreamCheckHostname.test_match  sW     V]]_$:M:MNnn$))$-  
 	
 	
 			
s   AA!	A
A!c                   #    [        [        R                  " 5       U R                  S9n[        [        S[
        R                  [        R                  " 5       S:g  S9   U R                  [        R                  5         [        [        S[
        R                  S9   UR                  SU R                  4SS	9I S h  vN   S S S 5        S S S 5        [        R                  " 5       S:w  a  [        R                  " S
5      I S h  vN   S S S 5        g  NT! , (       d  f       NX= f! , (       d  f       Na= f N1! , (       d  f       g = f7f)Nr  z.*alert bad certificateWindows)r  r  z0.*(certificate verify failed: Hostname mismatch)r  rh   bar.example.comr=  r   )r   r  r  r   r   r"  WARNINGr`   ra   r   r  SSLCertVerificationErrorrk   r  r   r   r   s     r0   test_no_match'TestIOStreamCheckHostname.test_no_match  s     V]]_$:M:MN%//__&)3	
 ""3#?#?@F!//
 !..$dii0(9 )    A  I-mmC((()
 
  A@ ))
 
sl   AE D7>D$ D<D
=DD$	:D7D5D7	ED
D!D$$
D2	.D77
EEc                    #    SU R                   l        [        [        R                  " 5       U R                   S9nUR	                  SU R
                  4SS9I S h  vN   g  N7f)NFr  rh   r  r=  )r  r  r   r  rk   r  r   s     r0   test_check_disabled-TestIOStreamCheckHostname.test_check_disabled  sW      .3*V]]_$:M:MNnn$))$-  
 	
 	
s   AA"A A")r  r  r  )r<   r=   r>   r?   r  r  r   r  r  r  r@   rK  rL  s   @r0   r  r    sI    

4
   ) )0 
 
r/   r  c                   X    \ rS rSr\R
                  S 5       r\S 5       r\S 5       r	Sr
g)TestPipeIOStreami  c                 `    [         R                  " 5       u  p#[        U40 UD6[        U40 UD64$ rE   )r)   piper	   )r9   rT   rt  ws       r0   r   #TestPipeIOStream.make_iostream_pair  s.    wwyA((,q*CF*CCCr/   c              #     #    U R                  5       v u  pUR                  S5        UR                  S5        UR                  S5      v nU R                  US5        UR	                  S5      v nU R                  US5        UR                  5         UR                  5       v nU R                  US5        UR                  5         g 7f)Ns   hels   lo world    s   hello ru   r  s   ld)r   r7   r   rw   rv   r\   rl   r   s       r0   test_pipe_iostream#TestPipeIOStream.test_pipe_iostream  s     ..00

]]4((y)]]1%%v&

((**u%

s   CCc              #      #    U R                  5       v u  pSnUR                  SU-  5        UR                  U5      v nU R                  USU-  5        UR	                  5         UR	                  5         g 7f)Nr   r   )r   r7   rv   rw   r\   )r9   r   r   	NUM_BYTESrp   s        r0   test_pipe_iostream_big_write-TestPipeIOStream.test_pipe_iostream_big_write  sh     ..00	 		!"]]9--ti/0



s   A4A6r.   N)r<   r=   r>   r?   r   r  r   r   r  r  r@   r.   r/   r0   r  r    sB    ]]D D
  &  r/   r  c                   F    \ rS rSrSrS rS rSS jrS rS r	S r
S	 rS
rg)TestStreamBufferi  z1
Unit tests for the private _StreamBuffer class.
c                 :    [         R                  " S5      U l         g )Nri  )rx  r}  r8   s    r0   r  TestStreamBuffer.setUp$  s    mmB'r/   c                     [        U[        [        45      (       a  [        U5      $ [        U[        5      (       a  UR	                  5       $ [        U5      erE   )r   r\  rY  r
  tobytes	TypeError)r9   bs     r0   to_bytesTestStreamBuffer.to_bytes'  s@    a%+,,8O:&&99;A,r/   c                 L    [        5       nUR                  (       d   eXl        U$ rE   )r   _large_buf_threshold)r9   large_buf_thresholdr]  s      r0   make_streambuffer"TestStreamBuffer.make_streambuffer/  s#    o''''#6 
r/   c                 H   SnUS[        U5      -  :  a  U R                  UR                  U5      5      nU R                  U5        U R	                  [        U5      U5        U R                  UR                  U5      X$45        US-  S-   S-  nUS[        U5      -  :  a  M  g g )Nr   r   ru   )r   r  peekrm   assertLessEqualrn   )r9   r]  expectedrq  gots        r0   
check_peekTestStreamBuffer.check_peek5  s    QX&&--/COOC   S40OOH//4xoF1HqLQ&D QX&&r/   c                 *   U R                  [        U5      S5        SnU HS  nXE-  nUR                  U" U5      5        U R                  [        U5      [        U5      5        U R                  X5        MU     U(       a{  U R                  R                  S[        U5      S-   5      nXFS  nUR                  U5        U R                  [        U5      [        U5      5        U R                  X5        U(       a  M{  U R                  [        U5      S5        g )Nr   r/   r   )rw   r   r   r  rx  	randrangeadvance)r9   r]  objs
input_typer  ory  s          r0   check_append_all_then_skip_all/TestStreamBuffer.check_append_all_then_skip_all>  s    S1%AMHJJz!}%SXs8}5OOC*	  %%aX):;A|HKKNSXs8}5OOC* h 	S1%r/   c                 @   / SQnU R                  5       nU R                  X![        5        U R                  5       nU R                  X![        5        U R                  5       nU R                  X![        5        U R                  S5      n[        S5       H  nUR                  S5        M     U R                  [        UR                  5      S5        [        S5       H  nUR                  S5        M     U R                  [        UR                  5      S5        UR                  S5        U R                  [        UR                  5      S5        UR                  S5        U R                  [        UR                  5      S5        U R                  [        U5      S5        g )	N)r   s   345s   67s   89a   bcdes   fghs   ijklmnrW  rt   r  r   r      r   r  r  r\  rY  r
  r   r   rw   r   _buffersr  r9   r  r]  r   s       r0   
test_smallTestStreamBuffer.test_smallR  s5   I$$&++Cu=$$&++CyA$$&++CzB $$R(qAJJt S\\*A.qAJJt S\\*A.BS\\*A.AS\\*A.S1%r/   c                    / SQnU R                  5       nU R                  X![        5        U R                  5       nU R                  X![        5        U R                  5       nU R                  X![        5        U R                  S5      n[        S5       H  nUR                  S5        M     U R                  [        UR                  5      S5        UR                  S5        U R                  [        UR                  5      S5        UR                  S5        U R                  [        UR                  5      S5        UR                  S5        U R                  [        UR                  5      S	5        UR                  S
5        U R                  [        UR                  5      S5        U R                  [        U5      S5        g )N)s
   1212121212s   345345s(   6767676767676767676767676767676767676767s$   89a89a89a89a89a89a89a89a89a89a89a89ar  s   fghfghfghfghfghfghfghs   ijklmnijklmnrW  ru   s   xxxxxxxxxxx   yr     z!   r   r   r   r  r  s       r0   
test_largeTestStreamBuffer.test_largel  sP   
 $$&++Cu=$$&++CyA$$&++CzB $$R(qAJJy! S\\*A.

4S\\*A.

4S\\*A.BS\\*A.AS\\*A.S1%r/   )rx  N)rW  )r<   r=   r>   r?   __doc__r  r  r  r  r  r  r  r@   r.   r/   r0   r  r    s*    ('&(&4!&r/   r  )Itornado.concurrentr   tornador   r   tornado.ioloopr   tornado.iostreamr   r   r	   r
   r   tornado.httpclientr   r   tornado.httputilr   tornado.locksr   r   tornado.logr   tornado.netutilr   r   tornado.platform.asyncior   tornado.tcpserverr   tornado.testingr   r   r   r   r   r   tornado.test.utilr   r   r   r   tornado.webr    r!   r   r  r~  r"  r)   r`   rx  r  r  r   r   r"   r1   r3   rB   r   r  r  r  r  r  r   r  rN  r  r  TestCaser  r.   r/   r0   <module>r     s   %   !  = ( *  C ? '   4     	    
   > 
 G!= G! G!T h h hV a* a aH$+-A $$-/C $.$ .
' 
&F. F&x2= x2vM= M`O
 O
d ()= ( (Vn&x(( n&r/   