
    XhS                        d dl mZ d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2d dl3Z3d dl4Z4d dl5Z5d dl6Z6d dl7m8Z8 d dl7Z7d Z9 G d de+      Z:e) G d de!             Z;e) G d de!             Z<e) G d de<             Z= G d dee;      Z> G d de e;      Z? G d d e=      Z@ G d! d"e=      ZA G d# d$e=      ZB G d% d&e!      ZC G d' d(e!      ZD G d) d*e!      ZEe& G d+ d,e<e!             ZF G d- d.e7j                        ZHy)/    )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                     t        t        j                  j                  t        j                  j	                  t
              d      t        j                  j                  t        j                  j	                  t
              d            S )Ntest.crttest.key)certfilekeyfile)dictospathjoindirname__file__     N/var/www/html/myenv/lib/python3.12/site-packages/tornado/test/iostream_test.py_server_ssl_optionsr1   0   sM    bggooh7DRWW__X6
C r/   c                       e Zd Zd Zy)HelloHandlerc                 &    | j                  d       y )NHello)writeselfs    r0   getzHelloHandler.get8   s    

7r/   N)__name__
__module____qualname__r9   r.   r/   r0   r3   r3   7   s    r/   r3   c            	           e Zd Zd Zd ZdefdZ	 ddedede	j                  defdZd	 Zed
        Zed        Zed        Zed        Zed        Zed        Zy)TestIOStreamWebMixinc                     t               NNotImplementedErrorr7   s    r0   _make_client_iostreamz*TestIOStreamWebMixin._make_client_iostreamG       !##r/   c                 &    t        dt        fg      S )N/)r!   r3   r7   s    r0   mixin_get_appz"TestIOStreamWebMixin.mixin_get_appJ   s    S,/011r/   returnc                     t               r@   rA   r7   s    r0   get_http_portz"TestIOStreamWebMixin.get_http_portM   rD   r/   r*   raise_errorkwargsc                     t               r@   rA   )r8   r*   rK   rL   s       r0   fetchzTestIOStreamWebMixin.fetchP   s     "##r/   c                     t        j                         j                  j                  d      r(t	        j
                         dk(  r| j                  d       | j                  dddi      }|j                          y )NCurlAsyncHTTPClientDarwinz:libcurl doesn't handle closed connections cleanly on macOSrF   
Connectionclose)headers)	r   configured_classr:   endswithplatformsystemskipTestrN   rethrow)r8   responses     r0   test_connection_closedz+TestIOStreamWebMixin.test_connection_closedV   sc     ,,.77@@AVW!X- MMVW::cL'+B:Cr/   c              #   8  K   | j                         }|j                  d| j                         f       |j                  d       |j	                         }| j                  |j                  d             | j                  |j                  d             y w)N	127.0.0.1   GET / HTTP/1.0

s   HTTP/1.1 200   Hello)rC   connectrJ   r6   read_until_close
assertTrue
startswithrV   )r8   streamdatas      r0   test_read_until_closez*TestIOStreamWebMixin.test_read_until_closei   sy     ++-nnk4+=+=+?@AA./,,..89h/0s   BBc              #     K   | j                         | _        | j                  j                  d| j                         f       | j                  j	                  d       | j                  j                  d      }| j                  |d       | j                  j                  d      }| j                  |d       | j                  j                  d      }| j                  |d       | j                  j                          y w)	Nr^   r_   	   s	   HTTP/1.1 r   r/      s   200)rC   re   ra   rJ   r6   
read_bytesassertEqualrS   )r8   rf   s     r0   test_read_zero_bytesz)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              #   F  K   | j                         }|j                  d| j                         f      }|j                  d      }| j	                  |j                                t        j                  ||      }g }|j                         s>|j                          |j                  |j                         |j                         s>| j                  |||g       |j                         }| j                  |j                  d             |j                          y w)Nr^   %   GET / HTTP/1.0
Connection: close

r`   )rC   ra   rJ   r6   assertFalsedoner   WaitIteratornextappendcurrent_futurerl   rb   rc   rV   rS   )r8   re   connect_fut	write_futitresolved_orderrf   s          r0   test_write_while_connectingz0TestIOStreamWebMixin.test_write_while_connecting   s     ++-nnk43E3E3G%HI LL!OP	))+, k95'')'')O!!""3"34 '') 	+y)AB,,..h/0s   CD!
AD!c              #     K   | j                         }|j                  d| j                         f      }| j                  ||       |j	                  d       |j                  d      }| j                  |d       |j                  d      }t        j                  |j                  d            }t        |d         }|j                  |      }| j                  |d       |j                          y	w)
z3Basic test of IOStream's ability to return Futures.r^   r_      
s   HTTP/1.1 200 OK
   

latin1zContent-Lengthr`   N)rC   ra   rJ   assertIsr6   
read_untilrl   r   parsedecodeintrk   rS   )r8   re   connect_result
first_lineheader_datarT   content_lengthbodys           r0   test_future_interfacez*TestIOStreamWebMixin.test_future_interface   s      ++-%~~{D<N<N<P.QRRnf-ll455!,,W55
%;<"--k::##K$6$6x$@AW%567&&~66x(s   C9C;c              #   2  K   | j                         }|j                  d| j                         f       |j                  d       | j	                  t
              5  |j                  d       d d d        |j                          y # 1 sw Y   xY ww)Nr^   r_      )rC   ra   rJ   r6   assertRaisesr
   rk   rS   r8   re   s     r0   test_future_close_while_readingz4TestIOStreamWebMixin.test_future_close_while_reading   s~     ++-nnk4+=+=+?@AAll45501 	1##K00	1	1 	1s   ABB2BBBc              #   |  K   | j                         }|j                  d| j                         f       |j                  d       |j	                  d       |j                         }| j                  |d       | j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY ww)Nr^   ro   r}   r`      )
rC   ra   rJ   r6   r   rb   rl   r   r
   rk   )r8   re   r   s      r0   test_future_read_until_closez1TestIOStreamWebMixin.test_future_read_until_close   s      ++-nnk4+=+=+?@AAllIJJ,,,,..x( 01 	!a 	! 	! 	!s   BB<B0'	B<0B95B<N)F)r:   r;   r<   rC   rG   r   rJ   strbooltypingAnyr   rN   r\   r   rg   rm   rz   r   r   r   r.   r/   r0   r>   r>   <   s    $2$s $ .3$$&*$>Djj$	$& 1 1  &  *      ! !r/   r>   c                      e Zd Zd Zd Zed        Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zed
        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zy)TestReadWriteMixinc                     t         r@   rA   )r8   rL   s     r0   make_iostream_pairz%TestReadWriteMixin.make_iostream_pair   s    !!r/   c                 (     G d d      } || |      S )zLike make_iostream_pair, but called by ``async with``.

        In py37 this becomes simpler with contextlib.asynccontextmanager.
        c                       e Zd Zd Zd Zd Zy)=TestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContextc                      || _         || _        y r@   )testrL   )r8   r   rL   s      r0   __init__zFTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__init__   s     	$r/   c                    K    | j                   j                  di | j                   d {   | _        | j                  S 7 w)Nr.   )r   r   rL   pairr7   s    r0   
__aenter__zHTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aenter__   s8     ">$))">">"M"MM	yy  Ns   *AAAc                 N   K   | j                   D ]  }|j                           y wr@   )r   rS   )r8   typvaluetbss        r0   	__aexit__zGTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aexit__   s"      AGGIs   #%N)r:   r;   r<   r   r   r   r.   r/   r0   IOStreamPairContextr      s    %!r/   r   r.   )r8   rL   r   s      r0   iostream_pairz TestReadWriteMixin.iostream_pair   s    	 	 #400r/   c              #      K   | j                         \  }}|j                  d       |j                          |j                          y w)Nr/   )r   r6   rS   )r8   rswss      r0   test_write_zero_bytesz(TestReadWriteMixin.test_write_zero_bytes   s=      ..00Bhhsm



s   A
Ac              #     K   | j                         \  }}	 |j                  d       g }|j                  |j                  d             |j	                          |j                  |j                  d             | j                  |ddg       |j	                          |j	                          y # |j	                          |j	                          w xY ww)N   12r      1   2)r   r6   rt   rk   rS   rl   )r8   r   r   chunkss       r0   "test_future_delayed_close_callbackz5TestReadWriteMixin.test_future_delayed_close_callback   s      ..00B		HHUOFMMq!113HHJMMq!113VdD\2HHJHHJ HHJHHJs   CA;B5 !C5"CCc              #     K   | j                  d      \  }}	 |j                  d       |j                  d      }| j                  d|       |j	                          t        j                  d       |j                  d      }| j                  d|       |j	                          |j	                          y # |j	                          |j	                          w xY ww)N   )read_chunk_sizes   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg{Gz?)r   r6   rk   rl   rS   r   sleepr8   r   r   rf   s       r0   test_close_buffered_dataz+TestReadWriteMixin.test_close_buffered_data   s      ..s.CCB	HHZ s++DZ.HHJ ))D/!s++DZ.HHJHHJ HHJHHJs   C#BB> !C#>"C  C#c              #     K   | j                         \  }}	 |j                  d       |j                  d      }|j                          | j	                  |d       |j                         }| j	                  |d       |j                          |j                          y # |j                          |j                          w xY ww)Ns   1234r   r   s   234)r   r6   rk   rS   rl   rb   r   s       r0   !test_read_until_close_after_closez4TestReadWriteMixin.test_read_until_close_after_close  s      ..00B	HHW q))DHHJT4(,,..DT6*HHJHHJ HHJHHJs   C	A*B$ !C	$"CC	c              #   
  K   | j                         \  }}	 t        |t              r,t        j                         dk(  rt        j                  d      d}t        |      D ]  }|j                  d        |j                  d       |j                  d      }| j                  t        |      |dz  dz          |j                          |j                          y # |j                          |j                          w xY ww)NPyPyz$pypy gc causes problems with openssl   s   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr|         )r   
isinstancer   rW   python_implementationunittestSkipTestranger6   r   rl   lenrS   )r8   r   r   NUM_KBirf   s         r0   test_large_read_untilz(TestReadWriteMixin.test_large_read_until*  s     
 ..00B	
 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                   K   | j                         4 d {   \  }}t        j                  |j                  d            }t        j                  d       d {    |j                  d       d {    |j                  d       |j                          | d {    d d d       d {    y 7 7 [7 D7 7 # 1 d {  7  sw Y   y xY ww)N   done皙?   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r   asyncioensure_futurer   r   r6   rS   r8   r   r   rfs       r0   .test_read_until_with_close_after_second_packetzATestReadWriteMixin.test_read_until_with_close_after_second_packetC  s      %%' 		 		8B&&r}}W'=>B --$$$((;'''HHWHHJHH		 		 		
 %' 		 		 		 		s{   CB5CA B?B7B?4B95*B?B; B?$C/B=0C7B?9B?;B?=C?CCCCc                   K   | j                         4 d {   \  }}t        j                  |j                  d            }|j	                  d       d {    |j	                  d       |j                          | j                  t              5  | d {    d d d        d d d       d {    y 7 7 `7 !# 1 sw Y    xY w7 # 1 d {  7  sw Y   y xY ww)Nr   r   s   foo)r   r   r   r   r6   rS   r   r
   r   s       r0   'test_read_until_unsatisfied_after_closez:TestReadWriteMixin.test_read_until_unsatisfied_after_close[  s      %%' 	 	8B&&r}}W'=>B((;'''HHVHHJ""#4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              #     K   d}| j                         \  }}t               }|j                  |j                         	 |j	                  |       |j                  d      }| j                  ||       |j                          |j                  d       |j                          |j                          |j                          y # |j                          |j                          w xY ww)Ns   OK
r|   )	r   r   set_close_callbacksetr6   r   rl   rS   wait)r8   OKr   r   eventress         r0   %test_close_callback_with_pending_readz8TestReadWriteMixin.test_close_callback_with_pending_readi  s     
 ..00B
eii(	HHRLg..CS"%HHJMM'" **,HHJHHJ HHJHHJs   =C/ A)C
 )!C/
"C,,C/c              #     K   | j                         \  }}dgt               fd}|j                  |       	 |j                  d       |j	                  d      }| j                  |d       | j                  d          |j                          j                          | j                  d          |j                          |j                          y # |j                          |j                          w xY ww)NFc                  0    d d<   j                          y )NTr   )notify)closedconds   r0   close_callbackzETestReadWriteMixin.test_future_close_callback.<locals>.close_callback  s    F1IKKMr/      ar   r   )
r   r   r   r6   rk   rl   rp   rS   r   rc   )r8   r   r   r   r   r   r   s        @@r0   test_future_close_callbackz-TestReadWriteMixin.test_future_close_callback  s      ..00B{	 	n-
	HHTNa((CS$'VAY'HHJ))+OOF1I&HHJHHJ HHJHHJs   :DB C  ?!D "DDc              #   D  K   | j                         \  }}	 |j                  d      }|j                  t        d             |}| j	                  |d       |j                          |j                          y # |j                          |j                          w xY ww)N      hellos   hell)r   rk   r6   
memoryviewrl   rS   r8   r   r   futrf   s        r0   test_write_memoryviewz(TestReadWriteMixin.test_write_memoryview  s}     ..00B	--"CHHZ)*9DT7+HHJHHJ HHJHHJs   B AA; !B ;"BB c              #     K   | j                         \  }}	 |j                  dd      }|j                  d       |}| j                  |d       |j                  dd      }|j                  d       |}| j                  |d       |j                  dd      }| j                  |d	       |j	                          |j	                          y # |j	                          |j	                          w xY ww)
N2   Tpartialr   rj   s   world   worr   r/   )r   rk   r6   rl   rS   r   s        r0   test_read_bytes_partialz*TestReadWriteMixin.test_read_bytes_partial  s     ..00B	--D-1CHHX9DT8, --4-0CHHX9DT6* q$77DT3'HHJHHJ HHJHHJs   C:BC 4!C:"C77C:c              #     K   | j                         \  }}t               }|j                  |j                         	 |j	                  dd      }|j                  d       |}| j                  |d       |j	                  dd      }|j                  d       |}| j                  |d       t        t        dt        j                        5  |j	                  dd      }|j                  d	       |j                          d d d        |j                          |j                          y # 1 sw Y   *xY w# |j                          |j                          w xY ww
N   defr   	max_bytes   abcdef   Unsatisfiable readlevel      123456)r   r   r   r   r   r6   rl   r   r   loggingINFOr   rS   r8   r   r   r   r   rf   s         r0   test_read_until_max_bytesz,TestReadWriteMixin.test_read_until_max_bytes  s    ..00B
fjj)	--"-5CHHY9DT9- --!-4CHHY9DT9- 7$8M $mmFam8#kkm#$
 HHJHHJ$ $
 HHJHHJ5   ;E#BD> 7D2	D> !E#2D;7D> >"E  E#c              #   :  K   | j                         \  }}t               }|j                  |j                         	 |j	                  d       t        t        dt        j                        5  | j                  t              5  |j                  dd       d d d        d d d        |j                          |j                          |j                          y # 1 sw Y   DxY w# 1 sw Y   HxY w# |j                          |j                          w xY wwNr   r   r   r   r   r   )r   r   r   r   r6   r   r   r   r   r   r
   r   r   rS   r8   r   r   r   s       r0    test_read_until_max_bytes_inlinez3TestReadWriteMixin.test_read_until_max_bytes_inline  s     ..00B
fjj)	
 HHY7$8M =&&'89 =--!-<<== ++-HHJHHJ= == =
 HHJHHJsL   ;D1C6 /C*CC*#C6 =!DC'	#C**C3/C6 6"DDc              #     K   | j                         \  }}t               }|j                  |j                         	 |j	                  d       t        t        dt        j                        5  |j                  dd       |j                          d d d        |j                          |j                          y # 1 sw Y   *xY w# |j                          |j                          w xY wwNr   r   r   r   r   r   )r   r   r   r   r6   r   r   r   r   r   r   rS   r  s       r0   'test_read_until_max_bytes_ignores_extraz:TestReadWriteMixin.test_read_until_max_bytes_ignores_extra  s     ..00B
fjj)
	 HHY7$8M $f2kkm#$ HHJHHJ$ $ HHJHHJ4   ;C/1C
 /&B>C
 !C/>CC
 
"C,,C/c              #     K   | j                         \  }}t               }|j                  |j                         	 |j	                  dd      }|j                  d       |}| j                  |d       |j	                  dd      }|j                  d       |}| j                  |d       t        t        dt        j                        5  |j	                  dd       |j                  d	       |j                          d d d        |j                          |j                          y # 1 sw Y   *xY w# |j                          |j                          w xY wwr   )r   r   r   r   read_until_regexr6   rl   r   r   r   r   r   rS   r  s         r0   test_read_until_regex_max_bytesz2TestReadWriteMixin.test_read_until_regex_max_bytes  s&    ..00B
fjj)	%%f%;CHHY9DT9- %%f%:CHHY9DT9- 7$8M $##Fa#8#kkm#$
 HHJHHJ$ $
 HHJHHJr  c              #     K   | j                         \  }}t               }|j                  |j                         	 |j	                  d       t        t        dt        j                        5  |j                  dd       |j                          d d d        |j                          |j                          y # 1 sw Y   *xY w# |j                          |j                          w xY wwr  r   r   r   r   r6   r   r   r   r   r  r   rS   r  s       r0   &test_read_until_regex_max_bytes_inlinez9TestReadWriteMixin.test_read_until_regex_max_bytes_inline  s     ..00B
fjj)	
 HHY7$8M $##Fa#8kkm#$ HHJHHJ$ $ HHJHHJr  c              #     K   | j                         \  }}t               }|j                  |j                         	 |j	                  d       t        t        dt        j                        5  |j                  dd       |j                          d d d        |j                          |j                          y # 1 sw Y   *xY w# |j                          |j                          w xY wwr	  r  r  s       r0   -test_read_until_regex_max_bytes_ignores_extraz@TestReadWriteMixin.test_read_until_regex_max_bytes_ignores_extra-  s     ..00B
fjj)
	 HHY7$8M $##Fa#8kkm#$ HHJHHJ$ $ HHJHHJr  c              #   Z  K   | j                  d      \  }}	 |j                  ddz         t        d      D ]'  }|j                  d      }| j	                  |d       ) 	 |j                          |j                          y # |j                          |j                          w xY ww)N (  max_buffer_sizes   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad   r   )r   r6   r   rk   rl   rS   r8   r   r   r   rf   s        r0   "test_small_reads_from_large_bufferz5TestReadWriteMixin.test_small_reads_from_large_buffer>  s     
 ..y.IIB	HH[3&'3Z 4]]400  {34 HHJHHJ HHJHHJs   B+A	B %!B+"B((B+c              #   ^  K   | j                  d      \  }}	 |j                  ddz         t        d      D ])  }|j                  dd      }| j	                  |d       + 	 |j                          |j                          y # |j                          |j                          w xY ww)Nr  r  s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
r     
r   r   )r   r6   r   r   rl   rS   r  s        r0   (test_small_read_untils_from_large_bufferz;TestReadWriteMixin.test_small_read_untils_from_large_bufferM  s     
 ..y.IIB	HH)S013Z <]]5D]AA  ':;< HHJHHJ HHJHHJs   B-AB '!B-"B**B-c              #     K   d}| j                  d|z        \  }}	 |j                  d|z         |j                  |       t        j                  d       t        d      D ]  }|j                  |        	 |j                          |j                          y # |j                          |j                          w xY ww)Nr   r   r  s
   aaaaaaaaaar   ri   )r   r6   rk   r   r   r   rS   )r8   MBr   r   r   s        r0   test_flow_controlz$TestReadWriteMixin.test_flow_control\  s     ..q2v.FFB	HHY^$--##))C.  1X (mmB''( HHJHHJ HHJHHJs   CA!B# !C#"CCc              #      K    j                         \  }} fd}	 t        d      }|j                  |      }|j                  d       t	        j
                  d        j                  |j                                |j                  d       |} j                  |j                                 j                  |d        j                  t        |      d       |j                  |      }t	        j
                  d        j                  |j                                |j                  d       |} j                  |j                                 j                  |d        j                  t        |      d       t        d	      }|j                  d
       |j                  |      } j                  |d	        j                  t        |      d       |j                  d      } j                  |d       |j                          |j                          y # |j                          |j                          w xY ww)Nc                  >     j                   j                  d        y )Nc                  ,    t        j                  d      S )N皙?)r   r   r.   r/   r0   <lambda>zGTestReadWriteMixin.test_read_into.<locals>.sleep_some.<locals>.<lambda>s  s    #))D/ r/   )io_looprun_syncr7   s   r0   
sleep_somez5TestReadWriteMixin.test_read_into.<locals>.sleep_somer  s    LL!!"9:r/   
   r   r$  s   world!!s
   helloworlds
   1234567890s
   !!12345678r   s	   abcdefghis   90ab   s   cdefghi)r   	bytearray	read_intor6   r   r   rc   readingrp   rl   bytesrk   rS   )r8   r   r   r(  bufr   rf   s   `      r0   test_read_intoz!TestReadWriteMixin.test_read_inton  s    ..00B	;!	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              #     K   | j                         \  }}	 t        d      }|j                  |d      }|j                  d       |}| j	                  |j                                | j                  |d       | j                  t        |      d       |j                  d       |j                  |d      }| j                  |d       | j                  t        |      d       |j                  |d      }| j                  |d	       | j                  t        |      d
       |j                          |j                          y # |j                          |j                          w xY ww)Nr)  Tr   r   r   s
   hello     s   world!1234567890s
   world!1234r   s
   5678901234)	r   r+  r,  r6   rp   r-  rl   r.  rS   )r8   r   r   r/  r   rf   s         r0   test_read_into_partialz)TestReadWriteMixin.test_read_into_partial  s3    ..00B	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   E3DE -!E3"E00E3c              #   8  K   | j                         \  }}	 t               }|j                  |      }| j                  |j	                         d       |j                          |j                          y # |j                          |j                          w xY wwNr   )r   r+  r,  rl   resultrS   )r8   r   r   r/  r   s        r0   test_read_into_zero_bytesz,TestReadWriteMixin.test_read_into_zero_bytes  sr     ..00B	+C,,s#CSZZ\1-HHJHHJ HHJHHJs   B;A5 !B5"BBc              #      K   t        j                  d      d| j                         \  t        j                         t        j                         t
        j                  fd       }t
        j                  fd       }	  |        |       g j                         j                         k(  sJ 	 j                          j                          y # j                          j                          w xY ww)N*   i@B c               3      K   } | dkD  r`j                  dt        d|             }t        j                  |      }j	                  |       j                  |       | |z  } | dkD  r`| dk(  sJ y w)Nr   r     )randintminr)   urandomupdater6   )	remainingsizerf   nbytesproduce_hashrr   s      r0   producez9TestReadWriteMixin.test_many_mixed_reads.<locals>.produce  su     Ia-yyCi$89zz$'##D)hhtn$T!	 a- >!>s   A'A3+A3c               3     K   } | dkD  rj                         dkD  rFj                  dt        d|             }j                  |      }j	                  |       | |z  } nWj                  dt        d|             }t        |      }j                  |      }||k(  sJ j	                  |       | |z  } | dkD  r| dk(  sJ y w)Nr   g      ?r   r:  )randomr;  r<  rk   r>  r+  r,  )	r?  r@  rf   r/  nconsume_hashrA  rC  r   s	        r0   consumez9TestReadWriteMixin.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	)	rF  Randomr   hashlibsha1r   	coroutine	hexdigestrS   )	r8   rD  rI  rH  rA  rB  rC  r   r   s	      @@@@@@r0   test_many_mixed_readsz(TestReadWriteMixin.test_many_mixed_reads  s     
 MM"..00B||~||~		" 
	" 
	" 
	"&	9gi(())+|/E/E/GGGGHHJHHJ HHJHHJs   BD3C) !D)"DD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   r0  r2  r6  rO  r.   r/   r0   r   r      s   
"1*      2  $  0  .    .  0 	 	  0  6  $     6  "         " ' 'R  8   / /r/   r   c                       e Zd Zd Zd Zej                  d        Zed        Z	ed        Z
ed        Zeed               Zed        Zed	        Zy
)TestIOStreamMixinc                     t               r@   rA   r8   
connectionrL   s      r0   _make_server_iostreamz'TestIOStreamMixin._make_server_iostream  rD   r/   c                     t               r@   rA   rS  s      r0   rC   z'TestIOStreamMixin._make_client_iostream  rD   r/   c              +      K   t               \  }}t                fd}t        j                  ||         j                  t        j
                         fi }|j                  d|f      }|g\  }} j                  j                  |j                                |j                          t        j                  ||f      w)Nc                 J    j                   j                  | fi        y r@   )
set_resultrU  )rT  addressrL   r8   server_stream_futs     r0   accept_callbackz=TestIOStreamMixin.make_iostream_pair.<locals>.accept_callback   s&    ((***:@@r/   r^   )r   r   r   add_accept_handlerrC   socketra   r&  remove_handlerfilenorS   r   Return)	r8   rL   listenerportr\  client_streamrv   server_streamr[  s	   ``      @r0   r   z$TestIOStreamMixin.make_iostream_pair  s     )+$"H	
 	""8_=2226==?MfM#++[$,?@.?-M'M$}##HOO$56jj-788s   CCc              #     K   t               \  }}| j                  |       t        t        j                               }|j	                  | j
                         t        t        dd      5  | j                  t              5  |j                  d|f       d d d        d d d        | j                  t        |j                  t              |j                         y # 1 sw Y   FxY w# 1 sw Y   JxY ww)Nz.*F)requiredr^   )r   
addCleanupr   r^  r   stopr   r   r   r
   ra   rc   r   errorConnectionRefusedError)r8   cleanup_funcrc  re   s       r0   test_connection_refusedz)TestIOStreamMixin.test_connection_refused  s     
 +_d%&--/*!!$)),wu5 	:""#45 :nnk4%899:	: 	
6<<1GH&,,W: :	: 	:s6   A)C4+C(CC(=C4C%	!C((C1-C4c              #   :  K   t        j                   t         j                  t         j                  d      }t        |      }|j	                  | j
                         t        j                  dt        j                  t        j                  d            5  | j                  t              5  |j                  d       d d d        | j                  t        |j                   t         j                               d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY ww)Nr   zsocket.socket.connectboomside_effect)	localhostP   )r^  AF_INETSOCK_STREAMr   r   ri  r"   patchgaierrorerrnoEIOr   r
   ra   rc   r   rj  )r8   r   re   s      r0   test_gaierrorzTestIOStreamMixin.test_gaierror  s      MM&..&*<*<a@!!!$)),ZZ#F1S
 	G ""#45 8nn%6778OOJv||V__EF	G 	G8 8	G 	Gs6   BDD+D?;D:	DD	DDDc              #     K   | j                         \  }}	 t        j                  dt        d            5  | j	                  t        d      5  |j                          d d d        d d d        |j                          |j                          y # 1 sw Y   2xY w# 1 sw Y   6xY w# |j                          |j                          w xY ww)Nz.tornado.iostream.BaseIOStream._try_inline_readro  rp  )r   r"   rv  IOErrorassertRaisesRegexrb   rS   )r8   serverclients      r0    test_read_until_close_with_errorz2TestIOStreamMixin.test_read_until_close_with_error/  s     #6688		@#FO . ++GV< .++-.	. LLNLLN	. .	. . LLNLLNsK   C B* BB!B)B* 1!CB	BB'#B* *"CCc              #   $  K   t        j                         }t        |j                  t              r| j                  d       | j                         \  }}	 t        j                  |j                  j                                | j                  t        j                        5  |j                  d       d d d        |j                          |j                          y # 1 sw Y   *xY w# |j                          |j                          w xY ww)Nz(AddThreadSelectorEventLoop not supportedr   )r   currentr   selector_loopr   rY   r   r)   rS   r^  r`  r   rj  rk   )r8   r&  r~  r  s       r0   test_inline_read_errorz(TestIOStreamMixin.test_inline_read_error=  s     & .."!!&
 MMDE#6688	HHV]]))+,""6<<0 %!!!$% LLNLLN	% % LLNLLNs7   ADAC+ $C6C+ >!DC($C+ +"DDc              #     K   | j                         \  }t               }j                  |j                         	 j	                  d       |j                  d       fd}|_        t        t        d      5  |j                          d d d        j                          |j                          y # 1 sw Y   *xY w# j                          |j                          w xY ww)Nr   r   c                      t        j                   j                  j                                 j                  j                          y r@   )r)   rS   r^  r`  	__class__read_from_fd)r~  s   r0   fake_read_from_fdzJTestIOStreamMixin.test_async_read_error_logging.<locals>.fake_read_from_fdl  s0    --/0  --f5r/   zerror on read)r   r   r   r   rk   r6   r  r   r   r   rS   )r8   r  r   r  r~  s       @r0   test_async_read_error_loggingz/TestIOStreamMixin.test_async_read_error_logging_  s       $6688!!&**-	a LL6 #4F7O4 $kkm#$ LLNLLN	$ $ LLNLLNs4   ;C*>C =B9C !C*9C>C "C''C*c              #     	K   d\  d}z  |z  	| j                  	      \  t        j                  fd       }t        j                  	fd       }	 t        |      D cg c]	  } |        c} |       gz    j	                          j	                          yc c}w # j	                          j	                          w xY ww)z?
        Test that write() Futures are never orphaned.
        )i  r:  r)  r  c               3   ^   K   dz  } t              D ]  }j                  |         y w)N   x)r   r6   )rf   r   mrG  r~  s     r0   rD  z4TestIOStreamMixin.test_future_write.<locals>.produce  s2     !8D1X )ll4(()s   *-c               3   l   K   d} | k  r(j                        }| t        |      z  } | k  r'y y wr4  )rk   r   )nreadr   r  r  total_bytess     r0   rI  z4TestIOStreamMixin.test_future_write.<locals>.consume  s?     E+%"--a00S! +%s   .44N)r   r   rM  r   rS   )
r8   
nproducersrD  rI  r   r  r  rG  r~  r  s
        @@@@@r0   test_future_writez#TestIOStreamMixin.test_future_writex  s      1
!ej(#66{6SS		) 
	)
 
	" 
	"	&+J&78798GI;FFLLNLLN 9LLNLLNs0   AC#B2 0B->B2 !C-B2 2"CCN)r:   r;   r<   rU  rC   r   rM  r   r   rm  rz  r  r   r  r  r  r.   r/   r0   rQ  rQ    s    $$ 	]]9 9" X X  G G      @  0  r/   rQ  c                       e Zd Zd Zd Zy)TestIOStreamWebHTTPc                 <    t        t        j                               S r@   )r   r^  r7   s    r0   rC   z)TestIOStreamWebHTTP._make_client_iostream  s    ((r/   c                 "    | j                         S r@   rG   r7   s    r0   get_appzTestIOStreamWebHTTP.get_app      !!##r/   Nr:   r;   r<   rC   r  r.   r/   r0   r  r    s    )$r/   r  c                       e Zd Zd Zd Zy)TestIOStreamWebHTTPSc                 p    t        t        j                         t        t        j                              S )N	cert_reqsssl_options)r   r^  r(   ssl	CERT_NONEr7   s    r0   rC   z*TestIOStreamWebHTTPS._make_client_iostream  s    6==?s}}8UVVr/   c                 "    | j                         S r@   r  r7   s    r0   r  zTestIOStreamWebHTTPS.get_app  r  r/   Nr  r.   r/   r0   r  r    s    W$r/   r  c                       e Zd Zd Zd Zy)TestIOStreamc                     t        |fi |S r@   r   rS  s      r0   rU  z"TestIOStream._make_server_iostream      
-f--r/   c                     t        |fi |S r@   r  rS  s      r0   rC   z"TestIOStream._make_client_iostream  r  r/   Nr:   r;   r<   rU  rC   r.   r/   r0   r  r    s    ..r/   r  c                       e Zd Zd Zd Zy)TestIOStreamSSLc                 l    t        t               d      }|j                  |dd      }t        |fi |S )NT)server_sideFr  do_handshake_on_connect)r   r1   wrap_socketr   )r8   rT  rL   ssl_ctxs       r0   rU  z%TestIOStreamSSL._make_server_iostream  sB    ()<)>DQ(($) ) 


 :000r/   c                 N    t        |fdt        t        j                        i|S )Nr  r  )r   r(   r  r  rS  s      r0   rC   z%TestIOStreamSSL._make_client_iostream  s+    
$(3==$A
EK
 	
r/   Nr  r.   r/   r0   r  r    s    1
r/   r  c                       e Zd Zd Zd Zy)TestIOStreamSSLContextc                    t        j                  t         j                  j                        }|j	                  t
        j                  j                  t
        j                  j                  t              d      t
        j                  j                  t
        j                  j                  t              d             t        ||dd      }t        |fi |S Nr$   r%   TFr  )r  create_default_contextPurposeCLIENT_AUTHload_cert_chainr)   r*   r+   r,   r-   r   r   r8   rT  rL   contexts       r0   rU  z,TestIOStreamSSLContext._make_server_iostream  s    ,,S[[-D-DEGGLL2J?GGLL2J?	
 %T5

 :000r/   c                     t        j                  t         j                  j                        }d|_        t         j
                  |_        t        |fd|i|S )NFr  )r  r  r  SERVER_AUTHcheck_hostnamer  verify_moder   r  s       r0   rC   z,TestIOStreamSSLContext._make_client_iostream  sE    ,,S[[-D-DE!&!mm:E7EfEEr/   Nr  r.   r/   r0   r  r    s    	1Fr/   r  c                        e Zd Z fdZ fdZd Zej                  d        Zej                  d        Z	ddZ
ddZed        Zed	        Zed
        Zed        Z xZS )TestIOStreamStartTLSc                    	 t         |           t               \  | _        | _        d | _        t               | _        t        j                  | j                  | j                         t        t        j                               | _        | j                  j                  | j                  j!                  d| j                  f      | j"                         | j%                          | j                  j                  | j                  | j"                         | j%                          y # t&        $ r}t)        |        d }~ww xY w)Nr^   )supersetUpr   rb  rc  re  r   server_acceptedr   r]  acceptr   r^  rd  r&  
add_futurera   ri  r   	Exceptionprint)r8   er  s     r0   r  z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 /D;;E c                 T   | j                   | j                   j                          | j                  | j                  j                          | j                  j	                  | j
                  j                                | j
                  j                          t        | !          y r@   )	re  rS   rd  r&  r_  rb  r`  r  tearDownr8   r  s    r0   r  zTestIOStreamStartTLS.tearDown  sy    )$$&)$$&##DMM$8$8$:;r/   c                     | j                   | j                  d       t        |      | _         | j                  j	                  d        y )Nzshould only get one connection)re  failr   r  rY  )r8   rT  rZ  s      r0   r  zTestIOStreamStartTLS.accept  s<    )II67%j1''-r/   c              #      K   | j                   J | j                   j                  |       | j                  J | j                  j                  d      }| j	                  ||       y wNr|   )rd  r6   re  r   rl   r8   line	recv_lines      r0   client_send_linez%TestIOStreamStartTLS.client_send_line  g     !!---  &!!---,,77@@	y)   A(A*c              #      K   | j                   J | j                   j                  |       | j                  J | j                  j                  d      }| j	                  ||       y wr  )re  r6   rd  r   rl   r  s      r0   server_send_linez%TestIOStreamStartTLS.server_send_line  r  r  c                 j    | j                   J | j                   }d | _         |j                  d||      S )NF)rd  	start_tls)r8   r  server_hostnamerd  s       r0   client_start_tlsz%TestIOStreamStartTLS.client_start_tls
  s<    !!---**!&&uk?KKr/   c                 h    | j                   J | j                   }d | _         |j                  d|      S )NT)re  r  )r8   r  re  s      r0   server_start_tlsz%TestIOStreamStartTLS.server_start_tls  s:    !!---**!&&t[99r/   c              #     K   | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  t        t        j
                              }| j                  t                     }|| _        || _	        | j                  t        | j                  t                     | j                  t        | j                  t                     | j                  d       | j                  d       y w)	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  r1   rd  re  rc   r   r   )r8   client_futureserver_futures      r0   test_start_tls_smtpz(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   E Ec              #     K   | j                  t                     }t        t        d      5  | j	                  d      }| j                  t        j                        5  | d d d        | j                  t        j                  t        j                  f      5  | d d d        d d d        y # 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   y xY ww)N	SSL Errorrr  r  )
r  r1   r   r   r  r   r  SSLErrorr^  rj  r8   r  r  s      r0   test_handshake_failz(TestIOStreamStartTLS.test_handshake_fail+  s     --.A.CDw, 	$ 11+1NM""3<<0 $##$""CLL&,,#?@ $##$		$ 	$$ $$ $		$ 	$sL   *C2CB0#7CB<C'	C0B9	5C<C	CCCc              #     K   | j                  t                     }t        t        d      5  | j	                  t        j                         d      }| j                  t
        j                        5  | d d d        | j                  t              5  | d d d        d d d        y # 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr  r^   r  )
r  r1   r   r   r  r  r  r   r  r  r  s      r0   test_check_hostnamez(TestIOStreamStartTLS.test_check_hostname6  s      --.A.CDw, 		$ 11**,k 2 M ""3<<0 $##$ ""9- $##$		$ 		$$ $$ $		$ 		$sM   *CAC1B)6CB5C 	C)B2	.C5B>	:CC
Cc              #   Z  K   t        t        d            j                  d      }| j                  J | j                  j	                  |       | j
                  J | j
                  j                  |j                        }| j                  t        |      t        |             y w)Nrs  L)	r   r.  castre  r6   rd  rk   rA  rl   )r8   r/  recvs      r0   test_typed_memoryviewz*TestIOStreamStartTLS.test_typed_memoryviewE  s      r#((-!!---  &&s++!!---''223::>>teCj1s   B)B+)NNr@   )r:   r;   r<   r  r  r  r   rM  r  r  r  r  r   r  r  r  r  __classcell__r  s   @r0   r  r    s    (. 	]]* * 	]]* *L: I I( $ $ $ $ 2 2r/   r  c                   `    e Zd Zej                  d        Zed        Zed        Zed        Z	y)WaitForHandshakeTestc              #     K   d x}}	 t               \  }} |t                     }|j                  |       t        j                  t        j
                  j                        }d|_        t        j                  |_	        t               5  |xj                  t        t        dd      z  c_        t        t        j                         |      }d d d        |j                  d|f       | j!                  |j                  j#                                ||j%                          ||j'                          y y # 1 sw Y   mxY w# ||j%                          ||j'                          w w xY ww)Nr  FOP_NO_TLSv1_3r   r^   )r   r1   
add_socketr  r  r  r  r  r  r  r   optionsgetattrr   r^  ra   assertIsNotNonecipherri  rS   )r8   
server_clsr~  r  sockrc  r  s          r0   connect_to_serverz&WaitForHandshakeTest.connect_to_serverR  s.    	)+JD$,?,ABFd#001H1HIG%*G""%--G $% K73#CC$V]]_'JK ..+t!455  !5!5!78!! "K K !! "s7   E0BE 
AD:AE &E0:E?E 'E--E0c              #   z   K   | t                G fddt              }| j                  |        y w)Nc                   @    e Zd ZfdZej
                   fd       Zy)GWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServerc                     j                  |j                  j                                j                  j	                  | j
                  |       y r@   )assertIsNoner^  r  r&  spawn_callbackhandle_connection)r8   re   rZ  r   s      r0   handle_streamzUWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_streamu  s8    !!&--"6"6"89++D,B,BFKr/   c              3   T   K   |j                          j                  d        y wr@   wait_for_handshakerY  )r8   re   handshake_futures     r0   r	  zYWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_connectiony  s$     //11 ++D1s   %(N)r:   r;   r<   r
  r   rM  r	  r  r   s   r0   
TestServerr  t  s!    L ]]2 2r/   r  r   r   r  r8   r  r  r   s     @@r0   test_wait_for_handshake_futurez3WaitForHandshakeTest.test_wait_for_handshake_futureo  s9     !8	2 	2 $$Z00   7;c              #   z   K   | t                G fddt              }| j                  |        y w)Nc                   8    e Zd Zej                   fd       Zy)VWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServerc              3      K   |j                         }j                  t        |j                          | j                  d        y wr@   )r  r   RuntimeErrorrY  )r8   re   rZ  r   r  r   s       r0   r
  zdWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServer.handle_stream  s>     //1!!,0I0IJ	 ++D1s   AA
Nr:   r;   r<   r   rM  r
  r  s   r0   r  r    s    ]]2 2r/   r  r  r  s     @@r0   -test_wait_for_handshake_already_waiting_errorzBWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error  s9     !8	2 	2 $$Z00r  c              #   r   K   t                G fddt              }| j                  |        y w)Nc                   6    e Zd Zej                   fd       Zy)RWaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServerc              3   x   K   |j                          |j                          j                  d        y wr@   r  )r8   re   rZ  r  s      r0   r
  z`WaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServer.handle_stream  s3     //11//11 ++D1s   7:Nr  )r  s   r0   r  r    s    ]]2 2r/   r  r  )r8   r  r  s     @r0   )test_wait_for_handshake_already_connectedz>WaitForHandshakeTest.test_wait_for_handshake_already_connected  s4     !8	2 	2 $$Z00s   47N)
r:   r;   r<   r   rM  r  r   r  r  r   r.   r/   r0   r  r  Q  sT    ]] 8  "     r/   r  c                   X     e Zd Z fdZ fdZed        Zed        Zed        Z xZ	S )TestIOStreamCheckHostnamec                    t         |           t               \  | _        | _        d }t        j                  | j                  |       t        j                  t        j                  j                        | _        | j                  j                  t        j                  j                  t        j                  j!                  t"              d             y )Nc                    t        j                  t         j                  j                        }|j	                  t
        j                  j                  t
        j                  j                  t              d      t
        j                  j                  t
        j                  j                  t              d             |j                  | dd      } t        |        y r  )r  r  r  r  r  r)   r*   r+   r,   r-   r  r   )rT  rZ  r  s      r0   r\  z8TestIOStreamCheckHostname.setUp.<locals>.accept_callback  s    001H1HIG##RWW__X6
CRWW__X6
C !,, (- - J
 
#r/   r$   )r  r  r   rb  rc  r   r]  r  r  r  r  client_ssl_ctxload_verify_locationsr)   r*   r+   r,   r-   )r8   r\  r  s     r0   r  zTestIOStreamCheckHostname.setUp  s    #3#5 ty	$ 	""4==/B "889P9PQ11GGLL2J?	
r/   c                     | j                   j                  | j                  j                                | j                  j	                          t
        |           y r@   )r&  r_  rb  r`  rS   r  r  r  s    r0   r  z"TestIOStreamCheckHostname.tearDown  s=    ##DMM$8$8$:;r/   c                    K   t        t        j                         | j                        }|j                  d| j                  fd       d {    |j                          y 7 w)Nr  r^   zfoo.example.comr  )r   r^  r%  ra   rc  rS   r   s     r0   
test_matchz$TestIOStreamCheckHostname.test_match  sX     V]]_$:M:MNnn$))$-  
 	
 	
 			
s   AA&A$A&c                   K   t        t        j                         | j                        }t        t        dt
        j                  t        j                         dk7        5  | j                  t        j                        5  t        t        dt
        j                        5  |j                  d| j                  fd	       d {    d d d        d d d        t        j                         dk7  rt        j                  d
       d {    d d d        y 7 Q# 1 sw Y   PxY w# 1 sw Y   TxY w7 '# 1 sw Y   y xY ww)Nr  z.*alert bad certificateWindows)r   rg  z0.*(certificate verify failed: Hostname mismatch)r   r^   bar.example.comr  r   )r   r^  r%  r   r   r   WARNINGrW   rX   r   r  SSLCertVerificationErrorra   rc  r   r   r   s     r0   test_no_matchz'TestIOStreamCheckHostname.test_no_match  s    V]]_$:M:MN%//__&)3	
 	) ""3#?#?@ 	F!// 
 !..$dii0(9 )   	  I-mmC((()	) 	) 	 	 ))	) 	)sl   A E " D4!D&##DD
DD&7D4
D2D4	E DD#D&&D/	+D44D=9E c                    K   d| j                   _        t        t        j                         | j                         }|j	                  d| j
                  fd       d {    y 7 w)NFr  r^   r,  r  )r%  r  r   r^  ra   rc  r   s     r0   test_check_disabledz-TestIOStreamCheckHostname.test_check_disabled  sX      .3*V]]_$:M:MNnn$))$-  
 	
 	
s   AA'A% A')
r:   r;   r<   r  r  r   r)  r/  r1  r  r  s   @r0   r"  r"    sI    

4
   ) )0 
 
r/   r"  c                   P    e Zd Zej                  d        Zed        Zed        Zy)TestPipeIOStreamc                 `    t        j                         \  }}t        |fi |t        |fi |fS r@   )r)   piper	   )r8   rL   rC  ws       r0   r   z#TestPipeIOStream.make_iostream_pair  s0    wwy1A((,q*CF*CCCr/   c              #     K   | j                         \  }}|j                  d       |j                  d       |j                  d      }| j                  |d       |j	                  d      }| j                  |d       |j                          |j                         }| j                  |d       |j                          y w)Ns   hels   lo world    s   hello rj   r   s   ld)r   r6   r   rl   rk   rS   rb   r   s       r0   test_pipe_iostreamz#TestPipeIOStream.test_pipe_iostream  s     ..00B

]]4((y)]]1%%v&

((**u%

s   CC	c              #      K   | j                         \  }}d}|j                  d|z         |j                  |      }| j                  |d|z         |j	                          |j	                          y w)Nr   r   )r   r6   rk   rl   rS   )r8   r   r   	NUM_BYTESrf   s        r0   test_pipe_iostream_big_writez-TestPipeIOStream.test_pipe_iostream_big_write  sk     ..00B	 		!"]]9--ti/0



s   A5A7N)	r:   r;   r<   r   rM  r   r   r9  r<  r.   r/   r0   r3  r3    sB    ]]D D
  &  r/   r3  c                   <    e Zd ZdZd Zd Zd
dZd Zd Zd Z	d Z
y	)TestStreamBufferz9
    Unit tests for the private _StreamBuffer class.
    c                 8    t        j                  d      | _         y )Nr8  )rF  rJ  r7   s    r0   r  zTestStreamBuffer.setUp$  s    mmB'r/   c                     t        |t        t        f      rt        |      S t        |t              r|j	                         S t        |      r@   )r   r.  r+  r   tobytes	TypeError)r8   bs     r0   to_byteszTestStreamBuffer.to_bytes'  s:    a%+,8O:&99;A,r/   c                 D    t               }|j                  sJ ||_        |S r@   )r   _large_buf_threshold)r8   large_buf_thresholdr/  s      r0   make_streambufferz"TestStreamBuffer.make_streambuffer/  s%    o''''#6 
r/   c                 D   d}|dt        |      z  k  r| j                  |j                  |            }| j                  |       | j	                  t        |      |       | j                  |j                  |      ||f       |dz  dz   dz  }|dt        |      z  k  ry y )Nr   r   rj   )r   rD  peekrc   assertLessEqualrd   )r8   r/  expectedr@  gots        r0   
check_peekzTestStreamBuffer.check_peek5  s    QX&&--/COOC   S40OOH//4xoF1HqLQ&D QX&&r/   c                    | j                  t        |      d       d}|D ]T  }||z  }|j                   ||             | j                  t        |      t        |             | j                  ||       V |rw| j                  j                  dt        |      dz         }||d  }|j                  |       | j                  t        |      t        |             | j                  ||       |rw| j                  t        |      d       y )Nr   r/   r   )rl   r   rt   rN  rF  	randrangeadvance)r8   r/  objs
input_typerL  orG  s          r0   check_append_all_then_skip_allz/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*  	S1%r/   c                 >   g d}| j                         }| j                  ||t               | j                         }| j                  ||t               | j                         }| j                  ||t               | j                  d      }t        d      D ]  }|j                  d        | j                  t        |j                        d       t        d      D ]  }|j                  d        | j                  t        |j                        d       |j                  d       | j                  t        |j                        d       |j                  d       | j                  t        |j                        d       | j                  t        |      d       y )	N)r   s   345s   67s   89a   bcdes   fghs   ijklmnr)  ri   r  r   r      r   rH  rU  r.  r+  r   r   rt   rl   r   _buffersrQ  r8   rR  r/  r   s       r0   
test_smallzTestStreamBuffer.test_smallR  sE   I$$&++Cu=$$&++CyA$$&++CzB $$R(q 	AJJt	S\\*A.q 	AJJt	S\\*A.BS\\*A.AS\\*A.S1%r/   c                    g d}| j                         }| j                  ||t               | j                         }| j                  ||t               | j                         }| j                  ||t               | j                  d      }t        d      D ]  }|j                  d        | j                  t        |j                        d       |j                  d       | j                  t        |j                        d       |j                  d       | j                  t        |j                        d       |j                  d       | j                  t        |j                        d	       |j                  d
       | j                  t        |j                        d       | j                  t        |      d       y )N)s
   1212121212s   345345s(   6767676767676767676767676767676767676767s$   89a89a89a89a89a89a89a89a89a89a89a89arW  s   fghfghfghfghfghfghfghs   ijklmnijklmnr)  rj   s   xxxxxxxxxxx   yr      z!   r   r   r   rY  r[  s       r0   
test_largezTestStreamBuffer.test_largel  s[   
 $$&++Cu=$$&++CyA$$&++CzB $$R(q 	"AJJy!	"S\\*A.

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

4S\\*A.BS\\*A.AS\\*A.S1%r/   N)r)  )r:   r;   r<   __doc__r  rD  rH  rN  rU  r\  ra  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   rx  rK  r   r)   rW   rF  r^  r  r   r   r"   r1   r3   r>   r   rQ  r  r  r  r  r  r  r  r"  r3  TestCaser>  r.   r/   r0   <module>rr     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/   