
    R?gw                        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  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K-r-S SK.r.S SK/r/S SK0r0S SK1r1S SK2r2S SK3r3S SK4J5r5  S SK4r4S r6 " S S\(5      r7 " S S\85      r9 " S S\85      r: " S S\:5      r; " S S\9\5      r< " S S\9\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      5       rD " S, S-\4R                  5      rFg).    )Future)gen)netutil)IOLoop)IOStreamSSLIOStreamPipeIOStreamStreamClosedError_StreamBuffer)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skipPypy3V58ignore_deprecation)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__     </usr/lib/python3/dist-packages/tornado/test/iostream_test.py_server_ssl_optionsr/   /   sM    bggooh7DRWW__X6
C r-   c                       \ rS rSrS rSrg)HelloHandler6   c                 &    U R                  S5        g )NHello)writeselfs    r.   getHelloHandler.get7   s    

7r-   r,   N)__name__
__module____qualname____firstlineno__r8   __static_attributes__r,   r-   r.   r1   r1   6   s    r-   r1   c                   J   \ rS rSrS rS rS\R                  4S jr\	S\R                  4S j5       r
\	S\R                  4S j5       r\	S\R                  4S j5       r\	S\R                  4S	 j5       r\	S\R                  4S
 j5       r\	S\R                  4S j5       rSrg)TestIOStreamWebMixin;   c                     [        5       eNNotImplementedErrorr6   s    r.   _make_client_iostream*TestIOStreamWebMixin._make_client_iostream<       !##r-   c                 &    [        S[        4/5      $ )N/)r   r1   r6   s    r.   get_appTestIOStreamWebMixin.get_app?   s    S,/011r-   r7   c                 H    U R                  SSS0S9nUR                  5         g )NrJ   
Connectionclose)headers)fetchrethrow)r7   responses     r.   test_connection_closed+TestIOStreamWebMixin.test_connection_closedB   s'     ::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)rF   connectget_http_portr5   read_until_close
assertTrue
startswithendswith)r7   streamdatas      r.   test_read_until_close*TestIOStreamWebMixin.test_read_until_closeL   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)	NrW   rX   	   s	   HTTP/1.1 r   r-      s   200)rF   r`   rZ   r[   r5   
read_bytesassertEqualrO   )r7   ra   s     r.   test_read_zero_bytes)TestIOStreamWebMixin.test_read_zero_bytesV   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)NrW   %   GET / HTTP/1.0
Connection: close

rY   )rF   rZ   r[   r5   assertFalsedoner   WaitIteratornextappendcurrent_futurerh   r\   r]   r_   rO   )r7   r`   connect_fut	write_futitresolved_orderra   s          r.   test_write_while_connecting0TestIOStreamWebMixin.test_write_while_connectingj   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.rW   rX      
s   HTTP/1.1 200 OK
   

latin1zContent-LengthrY   N)rF   rZ   r[   assertIsr5   
read_untilrh   r   parsedecodeintrg   rO   )r7   r`   connect_result
first_lineheader_datarP   content_lengthbodys           r.   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)NrW   rX      )rF   rZ   r[   r5   assertRaisesr
   rg   rO   r7   r`   s     r.   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)NrW   rl   r{   rY      )
rF   rZ   r[   r5   r~   r\   rh   r   r
   rg   )r7   r`   r   s      r.   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)r`   N)r:   r;   r<   r=   rF   rK   typingAnyrT   r   rb   ri   rw   r   r   r   r>   r,   r-   r.   r@   r@   ;   s    $2VZZ  1FJJ 1 1 6::  & &**  * FJJ    fjj   !6:: ! !r-   r@   c                      \ rS rSrS rS r\S 5       r\S\R                  4S j5       r
\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S	 j5       r\S
 5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S 5       r\S\R                  4S j5       r\S\R                  4S j5       r\S 5       r\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\S 5       r Sr!g)TestReadWriteMixin   c                     [         erC   rD   )r7   kwargss     r.   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 rC   )testr   )r7   r   r   s      r.   __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   r   pairr6   s    r.   
__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rC   )r   rO   )r7   typvaluetbss        r.   	__aexit__GTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aexit__   s     AGGI #s   %')r   r   r   N)r:   r;   r<   r=   r   r   r   r>   r,   r-   r.   IOStreamPairContextr      s    %!r-   r   r,   )r7   r   r   s      r.   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   r5   rO   )r7   rswss      r.   test_write_zero_bytes(TestReadWriteMixin.test_write_zero_bytes   s:      ..00hhsm



s   A	Ar7   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   r5   rq   rg   rO   rh   )r7   r   r   chunkss       r.   "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   r5   rg   rh   rO   r   sleepr7   r   r   ra   s       r.   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   r5   rg   rO   rh   r\   r   s       r.   !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   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArz         )r   
isinstancer   platformpython_implementationunittestSkipTestranger5   r~   rh   lenrO   )r7   r   r   NUM_KBira   s         r.   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   r5   rO   r7   r   r   rfs       r.   .test_read_until_with_close_after_second_packetATestReadWriteMixin.test_read_until_with_close_after_second_packet%  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~   r5   rO   r   r
   r   s       r.   '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
rz   )	r   r   set_close_callbacksetr5   r~   rh   rO   wait)r7   OKr   r   eventress         r.   %test_close_callback_with_pending_read8TestReadWriteMixin.test_close_callback_with_pending_readK  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   r.   close_callbackETestReadWriteMixin.test_future_close_callback.<locals>.close_callbackk  s    F1IKKMr-      ar   r   )
r   r   r   r5   rg   rh   rm   rO   r   r]   )r7   r   r   r   r   r   r   s        @@r.   test_future_close_callback-TestReadWriteMixin.test_future_close_callbackc  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   rg   r5   
memoryviewrh   rO   r7   r   r   futra   s        r.   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   rf   s   world   worr   r-   )r   rg   r5   rh   rO   r   s        r.   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~   r5   rh   r   r   loggingINFOr   rO   r7   r   r   r   r   ra   s         r.   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   r5   r   r   r  r  r   r
   r~   r   rO   r7   r   r   r   s       r.    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   r5   r   r   r  r  r~   r   rO   r  s       r.   '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_regexr5   rh   r   r   r  r  r   rO   r  s         r.   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   r5   r   r   r  r  r$  r   rO   r  s       r.   &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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  s       r.   -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HHJr"  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   r5   r   rg   rh   rO   r7   r   r   r   ra   s        r.   "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/  r0  s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
r2     
r   r
  )r   r5   r   r~   rh   rO   r3  s        r.   (test_small_read_untils_from_large_buffer;TestReadWriteMixin.test_small_read_untils_from_large_buffer/  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  r0  s
   aaaaaaaaaar   re   )r   r5   rg   r   r   r   rO   )r7   MBr   r   r   s        r.   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-   r.   <lambda>GTestReadWriteMixin.test_read_into.<locals>.sleep_some.<locals>.<lambda>U  s    #))D/r-   )io_looprun_syncr6   s   r.   
sleep_some5TestReadWriteMixin.test_read_into.<locals>.sleep_someT  s    LL!!"9:r-   
   r   rA  s   world!!s
   helloworlds
   1234567890s
   !!12345678r   s	   abcdefghis   90ab   s   cdefghi)r   	bytearray	read_intor5   r   r   r]   readingrm   rh   bytesrg   rO   )r7   r   r   rF  bufr   ra   s   `      r.   test_read_into!TestReadWriteMixin.test_read_intoP  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)NrH  Tr  r   r  s
   hello     s   world!1234567890s
   world!1234r  s
   5678901234)	r   rJ  rK  r5   rm   rL  rh   rM  rO   )r7   r   r   rN  r   ra   s         r.   test_read_into_partial)TestReadWriteMixin.test_read_into_partialz  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   rJ  rK  rh   resultrO   )r7   r   r   rN  r   s        r.   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updater5   )	remainingsizera   nbytesproduce_hashrr   s      r.   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   r\  )randomr]  r^  rg   r`  rJ  rK  )	ra  rb  ra   rN  nconsume_hashrc  re  r   s	        r.   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)	ri  Randomr   hashlibsha1r   	coroutine	hexdigestrO   )	r7   rf  rl  rk  rc  rd  re  r   r   s	      @@@@@@r.   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  r  r   r%  r)  r,  r4  r8  r<  rO  rR  rW  rs  r>   r,   r-   r.   r   r      s   "1*      vzz  2 

  $ FJJ  0  . FJJ   FJJ  .   0 	FJJ 	 	 fjj  0 

  6 vzz  $ fjj    fjj  6 VZZ  "       vzz    " 'VZZ ' 'R VZZ  8 

   / /r-   r   c                   N   \ rS rSrS rS r\R                  S\R                  4S j5       r
\S\R                  4S j5       r\S\R                  4S j5       r\S\R                  4S j5       r\\\S\R                  4S	 j5       5       5       r\\S
 5       5       r\S 5       rSrg)TestIOStreamMixini  c                     [        5       erC   rD   r7   
connectionr   s      r.   _make_server_iostream'TestIOStreamMixin._make_server_iostream  rH   r-   c                     [        5       erC   rD   rx  s      r.   rF   'TestIOStreamMixin._make_client_iostream  rH   r-   r7   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 rC   )
set_resultrz  )ry  addressr   r7   server_stream_futs     r.   accept_callback=TestIOStreamMixin.make_iostream_pair.<locals>.accept_callback  s$    ((**:@@r-   rW   )r   r   r   add_accept_handlerrF   socketrZ   rD  remove_handlerfilenorO   r   Return)	r7   r   listenerportr  client_streamrs   server_streamr  s	   ``      @r.   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)requiredrW   )r   
addCleanupr   r  r   stopr   r   r   r
   rZ   r]   r   errorConnectionRefusedError)r7   cleanup_funcr  r`   s       r.   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
   rZ   r]   r   r  )r7   r   r`   s      r.   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assertRaisesRegexr\   rO   )r7   serverclients      r.    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   skipTestr   r'   rO   r  r  r   r  rg   )r7   rD  r  r  s       r.   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 rC   )r'   rO   r  r  	__class__read_from_fd)r  s   r.   fake_read_from_fdJTestIOStreamMixin.test_async_read_error_logging.<locals>.fake_read_from_fdO  s0    --/0  --f5r-   zerror on read)r   r   r   r   rg   r5   r  r   r   r   rO   )r7   r  r   r  r  s       @r.   test_async_read_error_logging/TestIOStreamMixin.test_async_read_error_loggingA  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  r\  rH  r0  c               3   b   >#    ST-  n [        T5       H  nTR                  U 5      v   M     g 7f)N   x)r   r5   )ra   r   mrj  r  s     r.   rf  4TestIOStreamMixin.test_future_write.<locals>.produceg  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rU  )rg   r   )nreadr   r  r  total_bytess     r.   rl  4TestIOStreamMixin.test_future_write.<locals>.consumem  s>     E+%"--a00S! +%s   077N)r   r   rq  r   rO   )
r7   
nproducersrf  rl  r   r  r  rj  r  r  s
        @@@@@r.   test_future_write#TestIOStreamMixin.test_future_write[  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=   rz  rF   r   rq  r   r   r   r   r  r  r  r   r   r  r  r  r>   r,   r-   r.   rv  rv    s    $$ 	]]9 9 9" Xfjj X X  GFJJ G G  vzz   VZZ    @   0  r-   rv  c                       \ rS rSrS rSrg)TestIOStreamWebHTTPi{  c                 >    [        [        R                  " 5       5      $ rC   )r   r  r6   s    r.   rF   )TestIOStreamWebHTTP._make_client_iostream|  s    ((r-   r,   Nr:   r;   r<   r=   rF   r>   r,   r-   r.   r  r  {  s    )r-   r  c                       \ 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_NONEr6   s    r.   rF   *TestIOStreamWebHTTPS._make_client_iostream  s    6==?s}}8UVVr-   r,   Nr  r,   r-   r.   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$ rC   r   rx  s      r.   rz  "TestIOStream._make_server_iostream      
-f--r-   c                     [        U40 UD6$ rC   r  rx  s      r.   rF   "TestIOStream._make_client_iostream  r  r-   r,   Nr:   r;   r<   r=   rz  rF   r>   r,   r-   r.   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   r/   wrap_socketr   )r7   ry  r   ssl_ctxs       r.   rz  %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  rx  s      r.   rF   %TestIOStreamSSL._make_client_iostream  s+    
$(3==$A
EK
 	
r-   r,   Nr  r,   r-   r.   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   r7   ry  r   contexts       r.   rz  ,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       r.   rF   ,TestIOStreamSSLContext._make_client_iostream  sE    ,,S[[-D-DE!&!mm:E7EfEEr-   r,   Nr  r,   r-   r.   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)NrW   )supersetUpr   r  r  r  r   server_acceptedr   r  acceptr   r  r  rD  
add_futurerZ   r  r   	Exceptionprint)r7   er  s     r.   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 rC   )	r  rO   r  rD  r  r  r  r  tearDownr7   r  s    r.   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  )r7   ry  r  s      r.   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Nrz   )r  r5   r  r~   rh   r7   line	recv_lines      r.   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  r5   r  r~   rh   r  s      r.   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)r7   r  server_hostnamer  s       r.   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  )r7   r  r  s      r.   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  r  r&   r  r  r  r/   r  r  r]   r   r   )r7   client_futureserver_futures      r.   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  r  )
r  r/   r   r   r  r   r  SSLErrorr  r  r7   r#  r"  s      r.   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'  rW   r(  )
r  r/   r   r   r  r  r  r   r)  r  r*  s      r.   test_check_hostname(TestIOStreamStartTLS.test_check_hostname  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   rM  castr  r5   r  rg   rc  rh   )r7   rN  recvs      r.   test_typed_memoryview*TestIOStreamStartTLS.test_typed_memoryview$  s      r#((-!!---  &&s++!!---''223::>>teCj1s   B+B-)r  r  r  r  r  )NNrC   )r:   r;   r<   r=   r  r  r   r   rq  r  r  r  r  r   r$  r+  r.  r4  r>   __classcell__r  s   @r.   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)WaitForHandshakeTesti0  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   rW   )r   r/   
add_socketr  r  r  r  r  r  r  r   optionsgetattrr   r  rZ   assertIsNotNonecipherr  rO   )r7   
server_clsr  r  sockr  r  s          r.   connect_to_server&WaitForHandshakeTest.connect_to_server1  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>.TestServeriS  c                    > TR                  UR                  R                  5       5        TR                  R	                  U R
                  U5        g rC   )assertIsNoner  r@  rD  spawn_callbackhandle_connection)r7   r`   r  r   s      r.   handle_streamUWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_streamT  s8    !!&--"6"6"89++D,B,BFKr-   c              3   T   >#    UR                  5       v   TR                  S 5        g 7frC   wait_for_handshaker  )r7   r`   handshake_futures     r.   rK  YWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_connectionX  s#     //11 ++D1s   %(r,   N)	r:   r;   r<   r=   rL  r   rq  rK  r>   rQ  r   s   r.   
TestServerrG  S  s!    L ]]2 2r-   rT  r   r   rC  r7   rT  rQ  r   s     @@r.   test_wait_for_handshake_future3WaitForHandshakeTest.test_wait_for_handshake_futureN  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>.TestServerie  c              3      >#    UR                  5       nTR                  [        UR                   5        Uv   TR                  S 5        g 7frC   )rP  r   RuntimeErrorr  )r7   r`   r  r   rQ  r   s       r.   rL  dWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServer.handle_streamf  s=     //1!!,0I0IJ	 ++D1s   AA
r,   Nr:   r;   r<   r=   r   rq  rL  r>   rS  s   r.   rT  r\  e  s    ]]2 2r-   rT  rU  rV  s     @@r.   -test_wait_for_handshake_already_waiting_errorBWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error`  s=     !8	2 	2 	2 $$Z00rY  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>.TestServeriu  c              3   x   >#    UR                  5       v   UR                  5       v   TR                  S 5        g 7frC   rO  )r7   r`   r  rQ  s      r.   rL  `WaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServer.handle_streamv  s2     //11//11 ++D1s   7:r,   Nr`  )rQ  s   r.   rT  re  u  s    ]]2 2r-   rT  rU  )r7   rT  rQ  s     @r.   )test_wait_for_handshake_already_connected>WaitForHandshakeTest.test_wait_for_handshake_already_connectedq  s3     !8	2 	2 $$Z00s   58r,   N)r:   r;   r<   r=   r   rq  rC  r   rW  ra  rh  r>   r,   r-   r.   r9  r9  0  sT    ]] 8  "     r-   r9  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   )ry  r  r  s      r.   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+   )r7   r  r  s     r.   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 rC   )rD  r  r  r  rO   r  r  r  s    r.   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  rW   zfoo.example.comr(  )r   r  ro  rZ   r  rO   r   s     r.   
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  rW   bar.example.comr(  r   )r   r  ro  r   r   r  WARNINGr   systemr   r  SSLCertVerificationErrorrZ   r  r   r   r   s     r.   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  rW   ry  r(  )ro  r  r   r  rZ   r  r   s     r.   test_check_disabled-TestIOStreamCheckHostname.test_check_disabled  sW      .3*V]]_$:M:MNnn$))$-  
 	
 	
s   AA"A A")ro  r  r  )r:   r;   r<   r=   r  r  r   ru  r}  r  r>   r6  r7  s   @r.   rk  rk    sI    

4
   ) )0 
 
r-   rk  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$ rC   )r'   piper	   )r7   r   re  ws       r.   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 rf   r  s   ld)r   r5   r~   rh   rg   rO   r\   r   s       r.   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   r5   rg   rh   rO   )r7   r   r   	NUM_BYTESra   s        r.   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   rq  r   r   r  r  r>   r,   r-   r.   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 )NrZ  )ri  rn  r6   s    r.   r  TestStreamBuffer.setUp  s    mmB'r-   c                     [        U[        [        45      (       a  [        U5      $ [        U[        5      (       a  UR	                  5       $ [        U5      erC   )r   rM  rJ  r   tobytes	TypeError)r7   bs     r.   to_bytesTestStreamBuffer.to_bytes  s@    a%+,,8O:&&99;A,r-   c                 L    [        5       nUR                  (       d   eXl        U$ rC   )r   _large_buf_threshold)r7   large_buf_thresholdrN  s      r.   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   rf   )r   r  peekr]   assertLessEqualr^   )r7   rN  expectedrb  gots        r.   
check_peekTestStreamBuffer.check_peek  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   )rh   r   rq   r  ri  	randrangeadvance)r7   rN  objs
input_typer  orj  s          r.   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   ijklmnrH  re   r  r   r      r   r  r  rM  rJ  r   r   rq   rh   r   _buffersr  r7   r  rN  r   s       r.   
test_smallTestStreamBuffer.test_small1  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   ijklmnijklmnrH  rf   s   xxxxxxxxxxx   yr      z!   r   r   r   r  r  s       r.   
test_largeTestStreamBuffer.test_largeK  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-   )ri  N)rH  )r:   r;   r<   r=   __doc__r  r  r  r  r  r  r  r>   r,   r-   r.   r  r    s*    ('&(&4!&r-   r  )Gtornado.concurrentr   tornador   r   tornado.ioloopr   tornado.iostreamr   r   r	   r
   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  ro  r  r'   r   ri  r  r  r   r   r    r/   r1   objectr@   r   rv  r  r  r  r  r  r  r9  rk  r  TestCaser  r,   r-   r.   <module>r     s\   %   !  ) *  C ? '   4     	    
   > 
l!6 l!^h hVc* cL).0A )
W/1C W
.$m .
' 
&F. F&z2= z2zM= M`O
 O
d ()= ( (Vn&x(( n&r-   