
    gw                        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 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l-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2d dl3Z3d dl4m5Z5 d dl4Z4d Z6 G d de(      Z7 G d de8      Z9 G d de8      Z: G d de:      Z; G d de9e      Z< G d de9e      Z= G d de;e      Z> G d  d!e;e      Z? G d" d#e;e      Z@ G d$ d%e      ZA G d& d'e      ZB G d( d)e      ZCe# G d* d+e:e             ZD G d, d-e4j                        ZFy).    )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                     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__     O/var/www/openai/venv/lib/python3.12/site-packages/tornado/test/iostream_test.py_server_ssl_optionsr/   /   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    r.   getzHelloHandler.get7   s    

7r-   N)__name__
__module____qualname__r7   r,   r-   r.   r1   r1   6   s    r-   r1   c                   4   e Zd Zd Zd Zdej                  fdZedej                  fd       Z	edej                  fd       Z
edej                  fd       Zedej                  fd       Zedej                  fd	       Zedej                  fd
       Zy)TestIOStreamWebMixinc                     t               NNotImplementedErrorr5   s    r.   _make_client_iostreamz*TestIOStreamWebMixin._make_client_iostream<       !##r-   c                 &    t        dt        fg      S )N/)r   r1   r5   s    r.   get_appzTestIOStreamWebMixin.get_app?   s    S,/011r-   r6   c                 N    | j                  dddi      }|j                          y )NrD   
Connectionclose)headers)fetchrethrow)r6   responses     r.   test_connection_closedz+TestIOStreamWebMixin.test_connection_closedB   s'     ::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)rA   connectget_http_portr4   read_until_close
assertTrue
startswithendswith)r6   streamdatas      r.   test_read_until_closez*TestIOStreamWebMixin.test_read_until_closeL   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)	NrO   rP   	   s	   HTTP/1.1 r   r-      s   200)rA   rX   rR   rS   r4   
read_bytesassertEqualrH   )r6   rY   s     r.   test_read_zero_bytesz)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              #   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)NrO   %   GET / HTTP/1.0
Connection: close

rQ   )rA   rR   rS   r4   assertFalsedoner   WaitIteratornextappendcurrent_futurer_   rT   rU   rW   rH   )r6   rX   connect_fut	write_futitresolved_orderrY   s          r.   test_write_while_connectingz0TestIOStreamWebMixin.test_write_while_connectingj   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.rO   rP      
s   HTTP/1.1 200 OK
   

latin1zContent-LengthrQ   N)rA   rR   rS   assertIsr4   
read_untilr_   r   parsedecodeintr^   rH   )r6   rX   connect_result
first_lineheader_datarI   content_lengthbodys           r.   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)NrO   rP      )rA   rR   rS   r4   assertRaisesr
   r^   rH   r6   rX   s     r.   test_future_close_while_readingz4TestIOStreamWebMixin.test_future_close_while_reading   sw     ++-nnk4+=+=+?@AAll45501##K00 2 2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)NrO   rb   rp   rQ      )
rA   rR   rS   r4   rs   rT   r_   r   r
   r^   )r6   rX   r{   s      r.   test_future_read_until_closez1TestIOStreamWebMixin.test_future_read_until_close   s      ++-nnk4+=+=+?@AAllIJJ,,,,..x( 01a  211s   BB<B0'	B<0B95B<N)r8   r9   r:   rA   rE   typingAnyrM   r   rZ   r`   rm   r|   r   r   r,   r-   r.   r<   r<   ;   s    $2VZZ  1FJJ 1 1 6::  & &**  * FJJ    fjj   !6:: ! !r-   r<   c                      e Zd Zd Zd Zed        Zedej                  fd       Z	edej                  fd       Z
edej                  fd       Zedej                  fd       Zed	        Zedej                  fd
       Zedej                  fd       Zedej                  fd       Zedej                  fd       Zedej                  fd       Zedej                  fd       Zedej                  fd       Zedej                  fd       Zedej                  fd       Zedej                  fd       Zed        Zedej                  fd       Zedej                  fd       Zed        Zedej                  fd       Zedej                  fd       Zedej                  fd       Zed        Zy)TestReadWriteMixinc                     t         r>   r?   )r6   kwargss     r.   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>   )testr   )r6   r   r   s      r.   __init__zFTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__init__   s     	$r-   c                    K    | j                   j                  di | j                   d {   | _        | j                  S 7 w)Nr,   )r   r   r   pairr5   s    r.   
__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   rH   )r6   typvaluetbss        r.   	__aexit__zGTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aexit__   s     AGGI #s   #%N)r8   r9   r:   r   r   r   r,   r-   r.   IOStreamPairContextr      s    %!r-   r   r,   )r6   r   r   s      r.   iostream_pairz TestReadWriteMixin.iostream_pair   s    	 	 #400r-   c              #      K   | j                         \  }}|j                  d       |j                          |j                          y w)Nr-   )r   r4   rH   )r6   rswss      r.   test_write_zero_bytesz(TestReadWriteMixin.test_write_zero_bytes   s=      ..00Bhhsm



s   A
Ar6   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   r4   rg   r^   rH   r_   )r6   r   r   chunkss       r.   "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   r4   r^   r_   rH   r   sleepr6   r   r   rY   s       r.   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   r4   r^   rH   r_   rT   r   s       r.   !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   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAro         )r   
isinstancer   platformpython_implementationunittestSkipTestranger4   rs   r_   lenrH   )r6   r   r   NUM_KBirY   s         r.   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_futurers   r   r4   rH   r6   r   r   rfs       r.   .test_read_until_with_close_after_second_packetzATestReadWriteMixin.test_read_until_with_close_after_second_packet%  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   rs   r4   rH   r   r
   r   s       r.   'test_read_until_unsatisfied_after_closez: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              #     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
ro   )	r   r   set_close_callbacksetr4   rs   r_   rH   wait)r6   OKr   r   eventress         r.   %test_close_callback_with_pending_readz8TestReadWriteMixin.test_close_callback_with_pending_readK  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   r.   close_callbackzETestReadWriteMixin.test_future_close_callback.<locals>.close_callbackk  s    F1IKKMr-      ar   r   )
r   r   r   r4   r^   r_   rc   rH   r   rU   )r6   r   r   r   r   r   r   s        @@r.   test_future_close_callbackz-TestReadWriteMixin.test_future_close_callbackc  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   r^   r4   
memoryviewr_   rH   r6   r   r   futrY   s        r.   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   r]   s   world   worr   r-   )r   r^   r4   r_   rH   r   s        r.   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   rs   r4   r_   r   r   loggingINFOr   rH   r6   r   r   r   r   rY   s         r.   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# N
 HHJHHJ NM
 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   r4   r   r   r   r   r   r
   rs   r   rH   r6   r   r   r   s       r.    test_read_until_max_bytes_inlinez3TestReadWriteMixin.test_read_until_max_bytes_inline  s     ..00B
fjj)	
 HHY7$8M&&'89--!-<< : N ++-HHJHHJ :9 NM
 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   r4   r   r   r   r   rs   r   rH   r   s       r.   '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# N HHJHHJ NM 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_regexr4   r_   r   r   r   r   r   rH   r   s         r.   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# N
 HHJHHJ NM
 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   r4   r   r   r   r   r   r   rH   r   s       r.   &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# N HHJHHJ NM 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       r.   -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# N HHJHHJ NM 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   r4   r   r^   r_   rH   r6   r   r   r   rY   s        r.   "test_small_reads_from_large_bufferz5TestReadWriteMixin.test_small_reads_from_large_buffer   s     
 ..y.IIB	HH[3&'3Z]]400  {3   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   r4   r   rs   r_   rH   r  s        r.   (test_small_read_untils_from_large_bufferz;TestReadWriteMixin.test_small_read_untils_from_large_buffer/  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   r\   )r   r4   r^   r   r   r   rH   )r6   MBr   r   r   s        r.   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-   r.   <lambda>zGTestReadWriteMixin.test_read_into.<locals>.sleep_some.<locals>.<lambda>U  s    #))D/r-   )io_looprun_syncr5   s   r.   
sleep_somez5TestReadWriteMixin.test_read_into.<locals>.sleep_someT  s    LL!!"9:r-   
   r   r  s   world!!s
   helloworlds
   1234567890s
   !!12345678r   s	   abcdefghis   90ab   s   cdefghi)r   	bytearray	read_intor4   r   r   rU   readingrc   r_   bytesr^   rH   )r6   r   r   r  bufr   rY   s   `      r.   test_read_intoz!TestReadWriteMixin.test_read_intoP  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  r4   rc   r   r_   r!  rH   )r6   r   r   r"  r   rY   s         r.   test_read_into_partialz)TestReadWriteMixin.test_read_into_partialz  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  r_   resultrH   )r6   r   r   r"  r   s        r.   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updater4   )	remainingsizerY   nbytesproduce_hashrr   s      r.   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/  r^   r1  r  r  )	r2  r3  rY   r"  nconsume_hashr4  r6  r   s	        r.   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	)	r9  Randomr   hashlibsha1r   	coroutine	hexdigestrH   )	r6   r7  r<  r;  r4  r5  r6  r   r   s	      @@@@@@r.   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) r8   r9   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r#  r%  r)  rB  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                   <   e Zd Zd Zd Zej                  dej                  fd       Z	e
dej                  fd       Ze
dej                  fd       Ze
dej                  fd       Zeee
dej                  fd                     Zee
d	               Ze
d
        Zy)TestIOStreamMixinc                     t               r>   r?   r6   
connectionr   s      r.   _make_server_iostreamz'TestIOStreamMixin._make_server_iostream  rB   r-   c                     t               r>   r?   rF  s      r.   rA   z'TestIOStreamMixin._make_client_iostream  rB   r-   r6   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_resultrH  )rG  addressr   r6   server_stream_futs     r.   accept_callbackz=TestIOStreamMixin.make_iostream_pair.<locals>.accept_callback  s&    ((***:@@r-   rO   )r   r   r   add_accept_handlerrA   socketrR   r  remove_handlerfilenorH   r   Return)	r6   r   listenerportrO  client_streamri   server_streamrN  s	   ``      @r.   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)requiredrO   )r   
addCleanupr   rQ  r   stopr   r   r   r
   rR   rU   r   errorConnectionRefusedError)r6   cleanup_funcrV  rX   s       r.   test_connection_refusedz)TestIOStreamMixin.test_connection_refused  s     
 +_d%&--/*!!$)),wu5""#45nnk4%899 6 6 	
6<<1GH&,,W 65 65s6   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   )rQ  AF_INETSOCK_STREAMr   r   r\  r    patchgaierrorerrnoEIOr   r
   rR   rU   r   r]  )r6   r   rX   s      r.   test_gaierrorz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              #     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_readrb  rc  )r   r    ri  IOErrorassertRaisesRegexrT   rH   )r6   serverclients      r.    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   skipTestr   r'   rH   rQ  rS  r   r]  r^   )r6   r  rq  rr  s       r.   test_inline_read_errorz(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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'   rH   rQ  rS  	__class__read_from_fd)rq  s   r.   fake_read_from_fdzJTestIOStreamMixin.test_async_read_error_logging.<locals>.fake_read_from_fdO  s0    --/0  --f5r-   zerror on read)r   r   r   r   r^   r4   r|  r   r   r   rH   )r6   rr  r   r}  rq  s       @r.   test_async_read_error_loggingz/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   ;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   r4   )rY   r   mr:  rq  s     r.   r7  z4TestIOStreamMixin.test_future_write.<locals>.produceg  s-     !8D1Xll4(( s   *-c               3   l   K   d} | k  r(j                        }| t        |      z  } | k  r'y y wr'  )r^   r   )nreadr   rr  r  total_bytess     r.   r<  z4TestIOStreamMixin.test_future_write.<locals>.consumem  s?     E+%"--a00S! +%s   .44N)r   r   r@  r   rH   )
r6   
nproducersr7  r<  r   rr  r  r:  rq  r  s
        @@@@@r.   test_future_writez#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#B2 0B->B2 !C-B2 2"CCN)r8   r9   r:   rH  rA   r   r@  r   r   r   r   r`  rm  rs  r   r   rx  r~  r  r,   r-   r.   rD  rD    s    $$ 	]]9 9 9" Xfjj X X  GFJJ G G  vzz   VZZ    @   0  r-   rD  c                       e Zd Zd Zy)TestIOStreamWebHTTPc                 <    t        t        j                               S r>   )r   rQ  r5   s    r.   rA   z)TestIOStreamWebHTTP._make_client_iostream|  s    ((r-   Nr8   r9   r:   rA   r,   r-   r.   r  r  {  s    )r-   r  c                       e Zd Zd Zy)TestIOStreamWebHTTPSc                 p    t        t        j                         t        t        j                              S )N	cert_reqsssl_options)r   rQ  r&   ssl	CERT_NONEr5   s    r.   rA   z*TestIOStreamWebHTTPS._make_client_iostream  s    6==?s}}8UVVr-   Nr  r,   r-   r.   r  r    s    Wr-   r  c                       e Zd Zd Zd Zy)TestIOStreamc                     t        |fi |S r>   r   rF  s      r.   rH  z"TestIOStream._make_server_iostream      
-f--r-   c                     t        |fi |S r>   r  rF  s      r.   rA   z"TestIOStream._make_client_iostream  r  r-   Nr8   r9   r:   rH  rA   r,   r-   r.   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   r/   wrap_socketr   )r6   rG  r   ssl_ctxs       r.   rH  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  rF  s      r.   rA   z%TestIOStreamSSL._make_client_iostream  s+    
$(3==$A
EK
 	
r-   Nr  r,   r-   r.   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   r6   rG  r   contexts       r.   rH  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       r.   rA   z,TestIOStreamSSLContext._make_client_iostream  sE    ,,S[[-D-DE!&!mm:E7EfEEr-   Nr  r,   r-   r.   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)NrO   )supersetUpr   rU  rV  rX  r   server_acceptedr   rP  acceptr   rQ  rW  r  
add_futurerR   r\  r   	Exceptionprint)r6   er{  s     r.   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>   )	rX  rH   rW  r  rR  rU  rS  r  tearDownr6   r{  s    r.   r  zTestIOStreamStartTLS.tearDown  sy    )$$&)$$&##DMM$8$8$:;r-   c                     | j                   | j                  d       t        |      | _         | j                  j	                  d        y )Nzshould only get one connection)rX  failr   r  rL  )r6   rG  rM  s      r.   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Nro   )rW  r4   rX  rs   r_   r6   line	recv_lines      r.   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  )rX  r4   rW  rs   r_   r  s      r.   server_send_linez%TestIOStreamStartTLS.server_send_line  r  r  c                 j    | j                   J | j                   }d | _         |j                  d||      S )NF)rW  	start_tls)r6   r  server_hostnamerW  s       r.   client_start_tlsz%TestIOStreamStartTLS.client_start_tls  s<    !!---**!&&uk?KKr-   c                 h    | j                   J | j                   }d | _         |j                  d|      S )NT)rX  r  )r6   r  rX  s      r.   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  r/   rW  rX  rU   r   r   )r6   client_futureserver_futures      r.   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 Errorre  r  )
r  r/   r   r   r  r   r  SSLErrorrQ  r]  r6   r  r  s      r.   test_handshake_failz(TestIOStreamStartTLS.test_handshake_fail  s     --.A.CDw, 11+1NM""3<<0## 1""CLL&,,#?@## A	 -,00@@	 -,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  rO   r  )
r  r/   r   r   r  r  r  r   r  r  r  s      r.   test_check_hostnamez(TestIOStreamStartTLS.test_check_hostname  s     
 --.A.CDw, 11**,k 2 M ""3<<0## 1 ""9-## . -, 10 .- -,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)Nrf  L)	r   r!  castrX  r4   rW  r^   r4  r_   )r6   r"  recvs      r.   test_typed_memoryviewz*TestIOStreamStartTLS.test_typed_memoryview$  s      r#((-!!---  &&s++!!---''223::>>teCj1s   B)B+)NNr>   )r8   r9   r:   r  r  r  r   r@  r  r  r  r  r   r  r  r  r  __classcell__r{  s   @r.   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   rO   )r   r/   
add_socketr  r  r  r  r  r  r  r   optionsgetattrr   rQ  rR   assertIsNotNonecipherr\  rH   )r6   
server_clsrq  rr  sockrV  r  s          r.   connect_to_serverz&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   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>   )assertIsNonerQ  r  r  spawn_callbackhandle_connection)r6   rX   rM  r   s      r.   handle_streamzUWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_streamT  s8    !!&--"6"6"89++D,B,BFKr-   c              3   T   K   |j                          j                  d        y wr>   wait_for_handshakerL  )r6   rX   handshake_futures     r.   r  zYWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_connectionX  s$     //11 ++D1s   %(N)r8   r9   r:   r  r   r@  r  r  r   s   r.   
TestServerr  S  s!    L ]]2 2r-   r  r   r   r  r6   r  r  r   s     @@r.   test_wait_for_handshake_futurez3WaitForHandshakeTest.test_wait_for_handshake_futureN  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   RuntimeErrorrL  )r6   rX   rM  r   r  r   s       r.   r  zdWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServer.handle_streamf  s>     //1!!,0I0IJ	 ++D1s   AA
Nr8   r9   r:   r   r@  r  r  s   r.   r  r  e  s    ]]2 2r-   r  r   r  s     @@r.   -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  )r6   rX   rM  r  s      r.   r  z`WaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServer.handle_streamv  s3     //11//11 ++D1s   7:Nr	  )r  s   r.   r  r  u  s    ]]2 2r-   r  r   )r6   r  r  s     @r.   )test_wait_for_handshake_already_connectedz>WaitForHandshakeTest.test_wait_for_handshake_already_connectedq  s4     !8	2 	2 $$Z00s   47N)
r8   r9   r:   r   r@  r  r   r  r
  r  r,   r-   r.   r  r  0  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   )rG  rM  r  s      r.   rO  z8TestIOStreamCheckHostname.setUp.<locals>.accept_callback  s    001H1HIG##RWW__X6
CRWW__X6
C !,, (- - J
 
#r-   r"   )r  r  r   rU  rV  r   rP  r  r  r  r  client_ssl_ctxload_verify_locationsr'   r(   r)   r*   r+   )r6   rO  r{  s     r.   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  rR  rU  rS  rH   r  r  r  s    r.   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  rO   zfoo.example.comr  )r   rQ  r  rR   rV  rH   r   s     r.   
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   rZ  z0.*(certificate verify failed: Hostname mismatch)r   rO   bar.example.comr  r   )r   rQ  r  r   r   r   WARNINGr   systemr   r  SSLCertVerificationErrorrR   rV  r   r   r   s     r.   test_no_matchz'TestIOStreamCheckHostname.test_no_match  s     V]]_$:M:MN%//__&)3	
 ""3#?#?@F!//
 !..$dii0(9 )    A  I-mmC((()
 
  A@ ))
 
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  rO   r  r  )r  r  r   rQ  rR   rV  r   s     r.   test_check_disabledz-TestIOStreamCheckHostname.test_check_disabled  sX      .3*V]]_$:M:MNnn$))$-  
 	
 	
s   AA'A% A')
r8   r9   r:   r  r  r   r  r  r!  r  r  s   @r.   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	   )r6   r   r6  ws       r.   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 r]   r   s   ld)r   r4   rs   r_   r^   rH   rT   r   s       r.   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   r4   r^   r_   rH   )r6   r   r   	NUM_BYTESrY   s        r.   test_pipe_iostream_big_writez-TestPipeIOStream.test_pipe_iostream_big_write  sk     ..00B	 		!"]]9--ti/0



s   A5A7N)	r8   r9   r:   r   r@  r   r   r)  r,  r,   r-   r.   r#  r#    sB    ]]D D
  &  r-   r#  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 )Nr+  )r9  r=  r5   s    r.   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)r6   bs     r.   to_byteszTestStreamBuffer.to_bytes  s:    a%+,8O:&99;A,r-   c                 D    t               }|j                  sJ ||_        |S r>   )r   _large_buf_threshold)r6   large_buf_thresholdr"  s      r.   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   r]   )r   r4  peekrU   assertLessEqualrV   )r6   r"  expectedr3  gots        r.   
check_peekzTestStreamBuffer.check_peek  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   )r_   r   rg   r>  r9  	randrangeadvance)r6   r"  objs
input_typer<  or:  s          r.   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  r\   r  r   r      r   r8  rE  r!  r  r   r   rg   r_   r   _buffersrA  r6   rB  r"  r   s       r.   
test_smallzTestStreamBuffer.test_small1  s;   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$   89a89a89a89a89a89a89a89a89a89a89a89arG  s   fghfghfghfghfghfghfghs   ijklmnijklmnr  r]   s   xxxxxxxxxxx   yr      z!   r   r   r   rI  rK  s       r.   
test_largezTestStreamBuffer.test_largeK  sV   
 $$&++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  )r8   r9   r:   __doc__r  r4  r8  r>  rE  rL  rQ  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   rk  r>  r   r'   r   r9  rQ  r  r   r   r    r/   r1   objectr<   r   rD  r  r  r  r  r  r  r  r  r#  TestCaser.  r,   r-   r.   <module>rb     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-   