
    [4%eϸ                        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          ZBe# G d( d)e:e                      ZC G d* d+e4jD                  ZEdS ),    )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                            t          j                            t
                    d          t          j                            t          j                            t
                    d                    S )Ntest.crttest.key)certfilekeyfile)dictospathjoindirname__file__     :lib/python3.11/site-packages/tornado/test/iostream_test.py_server_ssl_optionsr/   /   s[    bgooh77DDRW__X66
CC   r-   c                       e Zd Zd ZdS )HelloHandlerc                 0    |                      d           d S )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                      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dS )TestIOStreamWebMixinc                     t                      NNotImplementedErrorr5   s    r.   _make_client_iostreamz*TestIOStreamWebMixin._make_client_iostream<       !###r-   c                 0    t          dt          fg          S )N/)r   r1   r5   s    r.   get_appzTestIOStreamWebMixin.get_app?   s    S,/0111r-   r6   c                 `    |                      dddi          }|                                 d S )NrD   
Connectionclose)headers)fetchrethrow)r6   responses     r.   test_connection_closedz+TestIOStreamWebMixin.test_connection_closedB   s6     ::cL'+B:CCr-   c              #   ~  K   |                                  }|                    d|                                 f          V  |                    d           |                                V }|                     |                    d                     |                     |                    d                     d S )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   s      ++--nnk4+=+=+?+?@AAAAA.///,,....88999h//00000r-   c              #   .  K   |                                  | _        | j                            d|                                 f          V  | j                            d           | j                            d          V }|                     |d           | j                            d          V }|                     |d           | j                            d          V }|                     |d           | j                                         d S )	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2k!!;0B0B0D0D"EFFFFF3444 [++A....|,,, [++A....s### [++A....v&&&r-   c              #     K   |                                  }|                    d|                                 f          }|                    d          }|                     |                                           t          j        ||          }g }|                                sD|                                V  |	                    |j
                   |                                D|                     |||g           |                                V }|                     |                    d                     |                                 d S )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   s3     ++--nnk43E3E3G3G%HII LL!OPP	))++,,, k955'')) 	5''))OOO!!""3444 '')) 	5 	+y)ABBB,,....h//000r-   c              #   d  K   |                                  }|                    d|                                 f          V }|                     ||           |                    d          V  |                    d          V }|                     |d           |                    d          V }t          j        |	                    d                    }t          |d                   }|                    |          V }|                     |d           |                                 d	S )
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<P.QRRRRnf---ll455555!,,W5555
%;<<<"--k::::#K$6$6x$@$@AAW%5677&&~6666x(((r-   c              #   p  K   |                                  }|                    d|                                 f          V  |                    d          V  |                     t
                    5  |                    d          V  d d d            n# 1 swxY w Y   |                                 d S )NrO   rP      )rA   rR   rS   r4   assertRaisesr
   r^   rH   )r6   rX   s     r.   test_future_close_while_readingz4TestIOStreamWebMixin.test_future_close_while_reading   s      ++--nnk4+=+=+?+?@AAAAAll455555011 	1 	1##K00000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   3BBBc              #     K   |                                  }|                    d|                                 f          V  |                    d          V  |                    d          V  |                                V }|                     |d           |                     t                    5  |	                    d           d d d            d S # 1 swxY w Y   d S )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   s1      ++--nnk4+=+=+?+?@AAAAAllIJJJJJ,,,,,,,....x((( 011 	! 	!a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   6CC CN)r8   r9   r:   rA   rE   typingAnyrM   r   rZ   r`   rm   r|   r   r   r,   r-   r.   r<   r<   ;   sE       $ $ $2 2 2VZ     1FJ 1 1 1 X1 6:    X& &*    X* FJ    X  fj    X !6: ! ! ! X! ! !r-   r<   c                   Z   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dS )TestReadWriteMixinc                     t           r>   r?   )r6   kwargss     r.   make_iostream_pairz%TestReadWriteMixin.make_iostream_pair   s    !!r-   c                 4     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dS )=TestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContextc                 "    || _         || _        d S r>   )testr   )r6   r   r   s      r.   __init__zFTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__init__   s     	$r-   c                 X   K    | j         j        di | j         d {V | _        | j        S )Nr,   )r   r   r   pairr5   s    r.   
__aenter__zHTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aenter__   s>      ">$)">"M"M"M"MMMMMMM	y r-   c                 F   K   | j         D ]}|                                 d S r>   )r   rH   )r6   typvaluetbss        r.   	__aexit__zGTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aexit__   s0        AGGIIII r-   N)r8   r9   r:   r   r   r   r,   r-   r.   IOStreamPairContextr      sA        % % %! ! !    r-   r   r,   )r6   r   r   s      r.   iostream_pairz TestReadWriteMixin.iostream_pair   s?    	 	 	 	 	 	 	 	 #"4000r-   c              #      K   |                                  V \  }}|                    d          V  |                                 |                                 d S )Nr-   )r   r4   rH   )r6   rswss      r.   test_write_zero_bytesz(TestReadWriteMixin.test_write_zero_bytes   sW       ..0000Bhhsmm









r-   r6   c              #     K   |                                  V \  }}	 |                    d           g }|                    |                    d          V            |                                 |                    |                    d          V            |                     |ddg           |                                 |                                 d S # |                                 |                                 w xY 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00B		HHUOOOFMMq!1!111333HHJJJMMq!1!111333VdD\222HHJJJHHJJJJJ HHJJJHHJJJJs   BC *Dc              #     K   |                      d          V \  }}	 |                    d           |                    d          V }|                     d|           |                                 t          j        d          V  |                    d          V }|                     d|           |                                 |                                 d S # |                                 |                                 w xY 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CCB	HHZ   s++++DZ...HHJJJ )D//!!!s++++DZ...HHJJJHHJJJJJ HHJJJHHJJJJs   BC" "*Dc              #     K   |                                  V \  }}	 |                    d           |                    d          V }|                                 |                     |d           |                                V }|                     |d           |                                 |                                 d S # |                                 |                                 w xY 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00B	HHW q))))DHHJJJT4(((,,....DT6***HHJJJHHJJJJJ HHJJJHHJJJJs   BC	 	*C3c              #   d  K   |                                  V \  }}	 t          |t                    r+t          j                    dk    rt          j        d          d}t          |          D ]}|                    d           |                    d           |	                    d          V }| 
                    t          |          |dz  dz              |                                 |                                 d S # |                                 |                                 w xY 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00B	
 2{++P244>>'(NOOOF6]] & &%%%%HHWw////DSYY(9:::HHJJJHHJJJJJ HHJJJHHJJJJs   B>D *D/c                   K   |                                  4 d {V \  }}t          j        |                    d                    }t          j        d           d {V  |                    d           d {V  |                    d           |                                 | d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S )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%  sm      %%'' 		 		 		 		 		 		 		8B&r}}W'='=>>B -$$$$$$$$$((;'''''''''HHWHHJJJHHHHHHH		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   BC
CCc                   K   |                                  4 d {V \  }}t          j        |                    d                    }|                    d           d {V  |                    d           |                                 |                     t                    5  | d {V  d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )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HHJJJ""#455                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   B	C&	B;/C;B?	?CB?	C
C#&C#c              #   >  K   d}|                                  V \  }}t                      }|                    |j                   	 |                    |           |                    d          V }|                     ||           |                                 |                    d           |                                V  |                                 |                                 d S # |                                 |                                 w xY 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00B
ei(((	HHRLLLg....CS"%%%HHJJJMM'""" **,,HHJJJHHJJJJJ HHJJJHHJJJJs   BC2 2*Dc              #     K   |                                  V \  }}dgt                      fd}|                    |           	 |                    d           |                    d          V }|                     |d           |                     d                    |                                                                 V  | 	                    d                    |                                 |                                 d S # |                                 |                                 w xY w)NFc                  :    d d<                                     d S )NTr   )notify)closedconds   r.   close_callbackzETestReadWriteMixin.test_future_close_callback.<locals>.close_callbackk  s    F1IKKMMMMMr-      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  s9      ..0000B{{	 	 	 	 	 	 	n---
	HHTNNNa((((CS$'''VAY'''HHJJJ))++OOF1I&&&HHJJJHHJJJJJ HHJJJHHJJJJs   B"D *Ec              #     K   |                                  V \  }}	 |                    d          }|                    t          d                     |V }|                     |d           |                                 |                                 d S # |                                 |                                 w xY 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00B	--""CHHZ))***99DT7+++HHJJJHHJJJJJ HHJJJHHJJJJs   AB *Cc              #   ^  K   |                                  V \  }}	 |                    dd          }|                    d           |V }|                     |d           |                    dd          }|                    d           |V }|                     |d           |                    dd          V }|                     |d	           |                                 |                                 d S # |                                 |                                 w xY 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00B	--D-11CHHX99DT8,,, --4-00CHHX99DT6*** q$7777DT3'''HHJJJHHJJJJJ HHJJJHHJJJJs   B;D *D,c              #   F  K   |                                  V \  }}t                      }|                    |j                   	 |                    dd          }|                    d           |V }|                     |d           |                    dd          }|                    d           |V }|                     |d           t          t          dt          j
                  5  |                    dd          }|                    d	           |                                V  d d d            n# 1 swxY w Y   |                                 |                                 d S # |                                 |                                 w xY 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00B
fj)))	--"-55CHHY99DT9--- --!-44CHHY99DT9--- 7$8MMM $ $mmFam88###kkmm###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
 HHJJJHHJJJJJ HHJJJHHJJJJ2   B-E6 2AE5E6 EE6 E	E6 6*F c              #     K   |                                  V \  }}t                      }|                    |j                   	 |                    d           t          t          dt          j                  5  | 	                    t                    5  |                    dd          V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                V  |                                 |                                 d S # |                                 |                                 w xY 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00B
fj)))	
 HHY7$8MMM = =&&'899 = =--!-<<<<<= = = = = = = = = = = = = = == = = = = = = = = = = = = = = ++--HHJJJHHJJJJJ HHJJJHHJJJJsT   6D ;CB<0C<C 	 CC 	CD CD CD *Ec              #   .  K   |                                  V \  }}t                      }|                    |j                   	 |                    d           t          t          dt          j                  5  |	                    dd           |
                                V  d d d            n# 1 swxY w Y   |                                 |                                 d S # |                                 |                                 w xY 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  s2     ..0000B
fj)))
	 HHY7$8MMM $ $f222kkmm###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ HHJJJHHJJJJJ HHJJJHHJJJJ0   6C* ;.B5)C* 5B99C* <B9=C* **Dc              #   F  K   |                                  V \  }}t                      }|                    |j                   	 |                    dd          }|                    d           |V }|                     |d           |                    dd          }|                    d           |V }|                     |d           t          t          dt          j
                  5  |                    dd           |                    d	           |                                V  d d d            n# 1 swxY w Y   |                                 |                                 d S # |                                 |                                 w xY 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00B
fj)))	%%f%;;CHHY99DT9--- %%f%::CHHY99DT9--- 7$8MMM $ $##Fa#888###kkmm###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
 HHJJJHHJJJJJ HHJJJHHJJJJr   c              #   .  K   |                                  V \  }}t                      }|                    |j                   	 |                    d           t          t          dt          j                  5  |	                    dd           |
                                V  d d d            n# 1 swxY w Y   |                                 |                                 d S # |                                 |                                 w xY 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  s5     ..0000B
fj)))	
 HHY7$8MMM $ $##Fa#888kkmm###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ HHJJJHHJJJJJ HHJJJHHJJJJr   c              #   .  K   |                                  V \  }}t                      }|                    |j                   	 |                    d           t          t          dt          j                  5  |	                    dd           |
                                V  d d d            n# 1 swxY w Y   |                                 |                                 d S # |                                 |                                 w xY wr   r  r   s       r.   -test_read_until_regex_max_bytes_ignores_extraz@TestReadWriteMixin.test_read_until_regex_max_bytes_ignores_extra  s5     ..0000B
fj)))
	 HHY7$8MMM $ $##Fa#888kkmm###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ HHJJJHHJJJJJ HHJJJHHJJJJr   c              #     K   |                      d          V \  }}	 |                    ddz             t          d          D ]/}|                    d          V }|                     |d           0	 |                                 |                                 d S # |                                 |                                 w xY 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IIB	HH[3&'''3ZZ 4 4]]40000  {33334 HHJJJHHJJJJJ HHJJJHHJJJJs   AB! !*Cc              #     K   |                      d          V \  }}	 |                    ddz             t          d          D ]1}|                    dd          V }|                     |d           2	 |                                 |                                 d S # |                                 |                                 w xY 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IIB	HH)S01113ZZ < <]]5D]AAAA  ':;;;;< HHJJJHHJJJJJ HHJJJHHJJJJs   AB# #*Cc              #     K   d}|                      d|z            V \  }}	 |                    d|z             |                    |          V  t          j        d          V  t          d          D ]}|                    |          V  	 |                                 |                                 d S # |                                 |                                 w xY 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FFB	HHY^$$$--#####)C..    1XX ( (mmB''''''( HHJJJHHJJJJJ HHJJJHHJJJJs   A.B= =*C'c              #      K                                     V \  }} fd}	 t          d          }|                    |          }|                    d           t	          j        d          V                       |                                           |                    d           |V }                     |                                            	                    |d            	                    t          |          d           |                    |          }t	          j        d          V                       |                                           |                    d           |V }                     |                                            	                    |d            	                    t          |          d           t          d	          }|                    d
           |                    |          V } 	                    |d	            	                    t          |          d           |                    d          V } 	                    |d           |                                 |                                 d S # |                                 |                                 w xY w)Nc                  >     j                             d            d S )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#    L!!"9"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00B	; 	; 	; 	; 	;!	B--C,,s##CHHX)D//!!!OOBJJLL)))HHZ   99DRZZ\\***T2&&&U3ZZ777 ,,s##C)D//!!!OOBJJLL)))HH]###99DRZZ\\***T2&&&U3ZZ777 A,,CHH\"""c****DT1%%%U3ZZ111q))))DT:...HHJJJHHJJJJJ HHJJJHHJJJJs   IJ( (*Kc              #     K   |                                  V \  }}	 t          d          }|                    |d          }|                    d           |V }|                     |                                           |                     |d           |                     t          |          d           |                    d           |                    |d          V }|                     |d           |                     t          |          d           |                    |d          V }|                     |d	           |                     t          |          d
           |                                 |                                 d S # |                                 |                                 w xY 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  s     ..0000B	B--C,,sD,11CHHX99DRZZ\\***T1%%%U3ZZ);<<< HH()))c48888DT2&&&U3ZZ777 c48888DT1%%%U3ZZ777 HHJJJHHJJJJJ HHJJJHHJJJJs   EF *G	c              #   ~  K   |                                  V \  }}	 t                      }|                    |          }|                     |                                d           |                                 |                                 d S # |                                 |                                 w xY 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  s      ..0000B	++C,,s##CSZZ\\1---HHJJJHHJJJJJ HHJJJHHJJJJs   AB *B<c              #   Z  K   t          j        d          d|                                 V \  t          j                    t          j                    t
          j        fd            }t
          j        fd            }	  |             |            gV                                                                  k    sJ 	                                                                   d S #                                                                   w xY w)N*   i@B c               3   
  K   } | dk    ro                     dt          d|                     }t          j        |          }                    |                               |          V  | |z  } | dk    o| dk    sJ d S )Nr   r     )randintminr'   urandomupdater4   )	remainingsizerY   nbytesproduce_hashrr   s      r.   producez9TestReadWriteMixin.test_many_mixed_reads.<locals>.produce  s      Ia--yyCi$8$899z$''##D)))hhtnn$$$T!	 a-- >>>>>>r-   c               3     K   } | dk    r                                 dk    rV                    dt          d|                     }                    |          V }                    |           | |z  } nl                    dt          d|                     }t          |          }                    |          V }||k    sJ                     |           | |z  } | dk    | dk    sJ d S )Nr   g      ?r   r,  )randomr-  r.  r^   r0  r  r  )	r1  r2  rY   r!  nconsume_hashr3  r5  r   s	        r.   consumez9TestReadWriteMixin.test_many_mixed_reads.<locals>.consume  s     Ia--88::##99QD)(<(<==D!#t!4!444D ''---%II 99QD)(<(<==D#D//C ll3////A9999 '',,,%I a-- >>>>>>r-   )	r8  Randomr   hashlibsha1r   	coroutine	hexdigestrH   )	r6   r6  r;  r:  r3  r4  r5  r   r   s	      @@@@@@r.   test_many_mixed_readsz(TestReadWriteMixin.test_many_mixed_reads  sK     
 M"..0000B|~~|~~		" 	" 	" 	" 	" 	" 	" 
	" 
	" 	" 	" 	" 	" 	" 	" 
	"&	799ggii(((())++|/E/E/G/GGGGGGHHJJJHHJJJJJ HHJJJHHJJJJs   A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(  rA  r,   r-   r.   r   r      s       " " "1 1 1*   X     X vz    X2 
    X$ FJ    X0   X. FJ    X FJ    X.     X0 	FJ 	 	 	 X	 fj    X0 
    X6 vz    X$ fj    X  fj    X6 VZ    X"   X      X vz    X   X" 'VZ ' ' ' X'R VZ    X8 
    X / / X/ / /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dS )TestIOStreamMixinc                     t                      r>   r?   r6   
connectionr   s      r.   _make_server_iostreamz'TestIOStreamMixin._make_server_iostream  rB   r-   c                     t                      r>   r?   rE  s      r.   rA   z'TestIOStreamMixin._make_client_iostream  rB   r-   r6   c              +      K   t                      \  }}t                       fd}t          j        ||             j        t          j                    fi }|                    d|f          }|gV \  }} j                            |	                                           |
                                 t          j        ||f          )Nc                 J                          j        | fi            d S r>   )
set_resultrG  )rF  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portrN  client_streamri   server_streamrM  s	   ``      @r.   r   z$TestIOStreamMixin.make_iostream_pair  s      )++$"HH	 	 	 	 	 	 	
 	"8_===226=??MMfMM#++[$,?@@.?-M'M'M$}##HOO$5$5666j-7888r-   c              #   $  K   t                      \  }}|                     |           t          t          j                              }|                    | j                   t          t          dd          5  |                     t                    5  |
                    d|f          V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t          |j        t                    |j                   d S )Nz.*F)requiredrO   )r   
addCleanupr   rP  r   stopr   r   r   r
   rR   rU   r   errorConnectionRefusedError)r6   cleanup_funcrU  rX   s       r.   test_connection_refusedz)TestIOStreamMixin.test_connection_refused  sm     
 +__d%%%&-//**!!$),,,wu555 	: 	:""#455 : :nnk4%899999: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	
6<1GHH&,WWWWWs6   :CB;/C;B?	?CB?	CCCc              #   >  K   t          j         t           j        t           j        d          }t          |          }|                    | j                   t          j        dt          j        t          j
        d                    5  |                     t                    5  |                    d          V  d d d            n# 1 swxY w Y   |                     t          |j        t           j                             d d d            d S # 1 swxY w Y   d S )Nr   zsocket.socket.connectboomside_effect)	localhostP   )rP  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      M&.&*<a@@!!!$),,,Z#F1S1S
 
 
 	G 	G ""#455 8 8nn%6777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8OOJv|V_EEFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs6   	D$C<DC	DC	5DDDc              #     K   |                                  V \  }}	 t          j        dt          d                    5  |                     t          d          5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                 |                                 d S # |                                 |                                 w xY w)Nz.tornado.iostream.BaseIOStream._try_inline_readra  rb  )r   r    rh  IOErrorassertRaisesRegexrT   rH   )r6   serverclients      r.    test_read_until_close_with_errorz2TestIOStreamMixin.test_read_until_close_with_error  s_     #668888		@#FOO   . . ++GV<< . .++---. . . . . . . . . . . . . . .	. . . . . . . . . . . . . . . LLNNNLLNNNNN LLNNNLLNNNNsS   #C	  BA=1B=B	BB	BC	 BC	 BC	 	*C3c              #   Z  K   t          j                    }t          |j        t                    r|                     d           |                                 V \  }}	 t          j        |j	        
                                           |                     t          j                  5  |                    d           d d d            n# 1 swxY w Y   |                                 |                                 d S # |                                 |                                 w xY w)Nz(AddThreadSelectorEventLoop not supportedr   )r   currentr   selector_loopr   skipTestr   r'   rH   rP  rR  r   r\  r^   )r6   r  rp  rq  s       r.   test_inline_read_errorz(TestIOStreamMixin.test_inline_read_error  sE     ( .""!&
 
 	F MMDEEE#668888	HV]))++,,,""6<00 % %!!!$$$% % % % % % % % % % % % % % % LLNNNLLNNNNN LLNNNLLNNNNs1   A
D  )C?D  CD  CD   *D*c              #   ,  K   |                                  V \  }t                      }                    |j                   	                     d           |                    d           fd}|_        t          t          d          5  |	                                V  d d d            n# 1 swxY w Y   
                                 |
                                 d S # 
                                 |
                                 w xY w)Nr   r   c                      t          j         j                                                    j                                        d S r>   )r'   rH   rP  rR  	__class__read_from_fd)rp  s   r.   fake_read_from_fdzJTestIOStreamMixin.test_async_read_error_logging.<locals>.fake_read_from_fdO  s>    --//000 --f55555r-   zerror on read)r   r   r   r   r^   r4   r{  r   r   r   rH   )r6   rq  r   r|  rp  s       @r.   test_async_read_error_loggingz/TestIOStreamMixin.test_async_read_error_loggingA  sL     
  $668888!!&*---	a   LL6 6 6 6 6 #4F7O44 $ $kkmm###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ LLNNNLLNNNNN LLNNNLLNNNNs1   AC) B4(C) 4B88C) ;B8<C) )*Dc              #     K   d\  d}z  |z  |                                V \  t          j        fd            t          j        fd            }	 fdt          |          D              |            gz   V                                                                    dS #                                                                   w xY w)z?
        Test that write() Futures are never orphaned.
        )i  r,  r  r  c               3   h   K   dz  } t                    D ]}                    |           V  d S )N   x)r   r4   )rY   r   mr9  rp  s     r.   r6  z4TestIOStreamMixin.test_future_write.<locals>.produceg  sJ      !8D1XX ) )ll4(((((() )r-   c               3   ~   K   d} | k     r1                               V }| t          |          z  } | k     /d S d S r&  )r^   r   )nreadr   rq  r  total_bytess     r.   r;  z4TestIOStreamMixin.test_future_write.<locals>.consumem  sY      E+%%"--a0000S! +%%%%%%r-   c                 $    g | ]}             S r,   r,   ).0r   r6  s     r.   
<listcomp>z7TestIOStreamMixin.test_future_write.<locals>.<listcomp>u  s    8887799888r-   N)r   r   r?  r   rH   )	r6   
nproducersr;  rq  r  r9  r6  rp  r  s	      @@@@@@r.   test_future_writez#TestIOStreamMixin.test_future_write[  s$      1
!ej(#66{6SSSS		) 	) 	) 	) 	) 	) 
	)
 
	" 	" 	" 	" 	" 	" 
	"	8888eJ&7&7888GGII;FFFFLLNNNLLNNNNN LLNNNLLNNNNs   &)B9 9*C#N)r8   r9   r:   rG  rA   r   r?  r   r   r   r   r_  rl  rr  r   r   rw  r}  r  r,   r-   r.   rC  rC    s`       $ $ $$ $ $ 	]9 9 9 9 ]9" Xfj X X X XX  GFJ G G G XG  vz    X VZ    X \ ]@   X \0   X  r-   rC  c                       e Zd Zd ZdS )TestIOStreamWebHTTPc                 B    t          t          j                              S r>   )r   rP  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dS )TestIOStreamWebHTTPSc                 v    t          t          j                    t          t          j                            S )N	cert_reqsssl_options)r   rP  r&   ssl	CERT_NONEr5   s    r.   rA   z*TestIOStreamWebHTTPS._make_client_iostream  s(    6=??s}8U8U8UVVVVr-   Nr  r,   r-   r.   r  r    s(        W W W W Wr-   r  c                       e Zd Zd Zd ZdS )TestIOStreamc                     t          |fi |S r>   r   rE  s      r.   rG  z"TestIOStream._make_server_iostream      
--f---r-   c                     t          |fi |S r>   r  rE  s      r.   rA   z"TestIOStream._make_client_iostream  r  r-   Nr8   r9   r:   rG  rA   r,   r-   r.   r  r    s2        . . .. . . . .r-   r  c                       e Zd Zd Zd ZdS )TestIOStreamSSLc                     t          t                      d          }|                    |dd          }t          |fi |S )NT)server_sideFr  do_handshake_on_connect)r   r/   wrap_socketr   )r6   rF  r   ssl_ctxs       r.   rG  z%TestIOStreamSSL._make_server_iostream  sV    ()<)>)>DQQQ(($) ) 
 


 :00000r-   c                 P    t          |fdt          t          j                  i|S )Nr  r  )r   r&   r  r  rE  s      r.   rA   z%TestIOStreamSSL._make_client_iostream  s9    
 
$(3=$A$A$A
EK
 
 	
r-   Nr  r,   r-   r.   r  r    s2        1 1 1
 
 
 
 
r-   r  c                       e Zd Zd Zd ZdS )TestIOStreamSSLContextc                    t          j        t           j        j                  }|                    t
          j                            t
          j                            t                    d          t
          j                            t
          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   rF  r   contexts       r.   rG  z,TestIOStreamSSLContext._make_server_iostream  s    ,S[-DEEGLL22J??GLL22J??	
 	
 	
 %T5
 
 

 :00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  sD    ,S[-DEE!&!m:EE7EfEEEr-   Nr  r,   r-   r.   r  r    s7        	1 	1 	1F F F F 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                            d| j        f          | j                   |                                  | j                            | j        | j                   |                                  d S # t&          $ r}t)          |            d }~ww xY w)NrO   )supersetUpr   rT  rU  rW  r   server_acceptedr   rO  acceptr   rP  rV  r  
add_futurerR   r[  r   	Exceptionprint)r6   erz  s     r.   r  zTestIOStreamStartTLS.setUp  s   	GGMMOOO'7'9'9$DM49!%D#)88D &t}dkBBB!)" "D L##"**K+CDDdi   IIKKKL##D$8$)DDDIIKKKKK 	 	 	!HHH	s   D%D* *
E	4EE	c                 \   | j         | j                                          | j        | j                                         | j                            | j                                                   | j                                         t                                                       d S r>   )	rW  rH   rV  r  rQ  rT  rR  r  tearDown)r6   rz  s    r.   r  zTestIOStreamStartTLS.tearDown  s    )$$&&&)$$&&&##DM$8$8$:$:;;;r-   c                     | j         |                     d           t          |          | _         | j                            d            d S )Nzshould only get one connection)rW  failr   r  rK  )r6   rF  rL  s      r.   r  zTestIOStreamStartTLS.accept  sK    )II6777%j11''-----r-   c              #      K   | j         J | j                             |           | j        J | j                            d          V }|                     ||           d S Nro   )rV  r4   rW  rs   r_   r6   line	recv_lines      r.   client_send_linez%TestIOStreamStartTLS.client_send_line  s      !---  &&&!---,77@@@@	y)))))r-   c              #      K   | j         J | j                             |           | j        J | j                            d          V }|                     ||           d S r  )rW  r4   rV  rs   r_   r  s      r.   server_send_linez%TestIOStreamStartTLS.server_send_line  r  r-   Nc                 ^    | j         J | j         }d | _         |                    d||          S )NF)rV  	start_tls)r6   r  server_hostnamerV  s       r.   client_start_tlsz%TestIOStreamStartTLS.client_start_tls  s9    !---*!&&uk?KKKr-   c                 \    | j         J | j         }d | _         |                    d|          S )NT)rW  r  )r6   r  rW  s      r.   server_start_tlsz%TestIOStreamStartTLS.server_start_tls  s7    !---*!&&t[999r-   c              #     K   |                      d          V  |                     d          V  |                      d          V  |                      d          V  |                     d          V  |                      d          V  |                     t          t          j                            }|                     t                                }|V | _        |V | _	        | 
                    t          | j        t                               | 
                    t          | j	        t                               |                     d          V  |                      d          V  d S )	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/   rV  rW  rU   r   r   )r6   client_futureserver_futures      r.   test_start_tls_smtpz(TestIOStreamStartTLS.test_start_tls_smtp  sy      ##$EFFFFF##$@AAAAA##$GHHHHH##$788888##O44444##$788888--dS].K.K.KLL--.A.C.CDD#000#000
4#5{CCDDD
4#5{CCDDD##$@AAAAA##$GHHHHHHHr-   c              #     K   |                      t                                }t          t          d          5  |                     d          }|                     t          j                  5  |V  d d d            n# 1 swxY w Y   |                     t          j        t          j	        f          5  |V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N	SSL Errorrd  r  )
r  r/   r   r   r  r   r  SSLErrorrP  r\  r6   r  r  s      r.   test_handshake_failz(TestIOStreamStartTLS.test_handshake_fail  s     --.A.C.CDDw,, 	$ 	$ 11+1NNM""3<00 $ $####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $""CL&,#?@@ $ $####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $		$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$sY   6C/B 4C B	CB	.C6C;CC	CC	CC#&C#c              #     K   |                      t                                }t          t          d          5  |                     t          j                    d          }|                     t
          j                  5  |V  d d d            n# 1 swxY w Y   |                     t                    5  |V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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.CDDw,, 		$ 		$ 11*,,k 2  M ""3<00 $ $####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ""9-- $ $####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$sZ   AC BC B	C B	C 7C<C C	C C	C  C$'C$c              #   f  K   t          t          d                                        d          }| j        J | j                            |          V  | j        J | j                            |j                  V }|                     t          |          t          |                     d S )Nre  L)	r   r   castrW  r4   rV  r^   r3  r_   )r6   r!  recvs      r.   test_typed_memoryviewz*TestIOStreamStartTLS.test_typed_memoryview$  s       r##((--!--- &&s+++++!---'223:>>>>teCjj11111r-   )NNr>   )r8   r9   r:   r  r  r  r   r?  r  r  r  r  r   r  r  r  r  __classcell__)rz  s   @r.   r  r    s5           (    . . . 	]* * ]* 	]* * ]*L L L L: : : : I I XI( $ $ X$ $ $ X$  2 2 X2 2 2 2 2r-   r  c                   p    e Zd Zej        d             Zed             Zed             Zed             Z	dS )WaitForHandshakeTestc              #   (  K   d x}}	 t                      \  }} |t                                }|                    |           t          j        t          j        j                  }d|_        t          j        |_	        t                      5  |xj        t          t          dd          z  c_        t          t          j                    |          }d d d            n# 1 swxY w Y   |                    d|f          V  |                     |j                                                   ||                                 ||                                 d S d S # ||                                 ||                                 w w xY w)Nr  FOP_NO_TLSv1_3r   rO   )r   r/   
add_socketr  r  r  r  r  r  r  r   optionsgetattrr   rP  rR   assertIsNotNonecipherr[  rH   )r6   
server_clsrp  rq  sockrU  r  s          r.   connect_to_serverz&WaitForHandshakeTest.connect_to_server1  s     	)++JD$Z,?,A,ABBBFd###01HIIG%*G""%-G $%% K K73#C#CC$V]__'JJJK K K K K K K K K K K K K K K ..+t!455555  !5!5!7!7888!! "! !! "s2   BE" AC"E" "C&&E" )C&*AE" "/Fc              #      K   | t                       G fddt                    }|                     |          V  V  d S )Nc                   >    e Zd ZfdZej         fd            ZdS )GWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServerc                                          |j                                                   j                            | j        |           d S r>   )assertIsNonerP  r  r  spawn_callbackhandle_connection)r6   rX   rL  r   s      r.   handle_streamzUWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_streamT  sF    !!&-"6"6"8"8999++D,BFKKKKKr-   c              3   b   K   |                                 V                      d            d S r>   wait_for_handshakerK  )r6   rX   handshake_futures     r.   r  zYWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_connectionX  s9      //11111 ++D11111r-   N)r8   r9   r:   r  r   r?  r  r  r   s   r.   
TestServerr  S  sZ        L L L L L ]2 2 2 2 ]2 2 2r-   r  r   r   r  r6   r  r  r   s     @@r.   test_wait_for_handshake_futurez3WaitForHandshakeTest.test_wait_for_handshake_futureN  s~      !88	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 $$Z00000r-   c              #      K   | t                       G fddt                    }|                     |          V  V  d S )Nc                   6    e Zd Zej         fd            ZdS )VWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServerc              3      K   |                                 }                    t          |j                    |V                      d            d S r>   )r  r   RuntimeErrorrK  )r6   rX   rL  r   r  r   s       r.   r  zdWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServer.handle_streamf  sT      //11!!,0IJJJ			 ++D11111r-   Nr8   r9   r:   r   r?  r  r  s   r.   r  r  e  s?        ]2 2 2 2 2 ]2 2 2r-   r  r  r  s     @@r.   -test_wait_for_handshake_already_waiting_errorzBWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error`  s~      !88	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 $$Z00000r-   c              #      K   t                       G fddt                    }|                     |          V  V  d S )Nc                   4    e Zd Zej         fd            ZdS )RWaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServerc              3      K   |                                 V  |                                 V                      d            d S r>   r  )r6   rX   rL  r  s      r.   r  z`WaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServer.handle_streamv  sQ      //11111//11111 ++D11111r-   Nr  )r  s   r.   r  r
  u  s:        ]2 2 2 2 ]2 2 2r-   r  r  )r6   r  r  s     @r.   )test_wait_for_handshake_already_connectedz>WaitForHandshakeTest.test_wait_for_handshake_already_connectedq  ss      !88	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 $$Z00000r-   N)
r8   r9   r:   r   r?  r  r   r   r  r  r,   r-   r.   r  r  0  s        ]  ]8   X"   X    X  r-   r  c                   Z    e Zd Zej        d             Zed             Zed             ZdS )TestPipeIOStreamc                 b    t          j                    \  }}t          |fi |t          |fi |fS r>   )r'   piper	   )r6   r   r5  ws       r.   r   z#TestPipeIOStream.make_iostream_pair  s<    wyy1A((((,q*C*CF*C*CCCr-   c              #     K   |                                  V \  }}|                    d           |                    d           |                    d          V }|                     |d           |                    d          V }|                     |d           |                                 |                                V }|                     |d           |                                 d S )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00B

]]4((((y)))]]1%%%%v&&&



((****u%%%





r-   c              #      K   |                                  V \  }}d}|                    d|z             |                    |          V }|                     |d|z             |                                 |                                 d S )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  s      ..0000B	 		!"""]]9----ti/000









r-   N)	r8   r9   r:   r   r?  r   r   r  r  r,   r-   r.   r  r    sh        ]D D ]D
   X&   X  r-   r  c                   >    e Zd ZdZd Zd ZddZd Zd Zd Z	d	 Z
d
S )TestStreamBufferz9
    Unit tests for the private _StreamBuffer class.
    c                 8    t          j        d          | _         d S )Nr*  )r8  r<  r5   s    r.   r  zTestStreamBuffer.setUp  s    mB''r-   c                     t          |t          t          f          rt          |          S t          |t                    r|                                S t          |          r>   )r   r   r  r   tobytes	TypeError)r6   bs     r.   to_byteszTestStreamBuffer.to_bytes  sP    a%+,, 	88O:&& 	99;;A,,r-   r  c                 B    t                      }|j        sJ ||_        |S r>   )r   _large_buf_threshold)r6   large_buf_thresholdr!  s      r.   make_streambufferz"TestStreamBuffer.make_streambuffer  s'    oo''''#6 
r-   c                    d}|dt          |          z  k     r|                     |                    |                    }|                     |           |                     t          |          |           |                     |                    |          ||f           |dz  dz   dz  }|dt          |          z  k     d S d S )Nr   r   r]   )r   r  peekrU   assertLessEqualrV   )r6   r!  expectedr2  gots        r.   
check_peekzTestStreamBuffer.check_peek  s    QX&&&--//COOC     S4000OOH//44xoFFF1HqLQ&D QX&&&&&&&r-   c                    |                      t          |          d           d}|D ]k}||z  }|                     ||                     |                      t          |          t          |                     |                     ||           l|r| j                            dt          |          dz             }||d          }|                    |           |                      t          |          t          |                     |                     ||           ||                      t          |          d           d S )Nr   r-   r   )r_   r   rg   r)  r8  	randrangeadvance)r6   r!  objs
input_typer'  or9  s          r.   check_append_all_then_skip_allz/TestStreamBuffer.check_append_all_then_skip_all  s8   S1%%% 	+ 	+AMHJJzz!}}%%%SXXs8}}555OOC**** 	+%%aX):;;A|HKKNNNSXXs8}}555OOC***  	+ 	S1%%%%%r-   c                    g d}|                                  }|                     ||t                     |                                  }|                     ||t                     |                                  }|                     ||t                     |                      d          }t          d          D ]}|                    d           |                     t          |j	                  d           t          d          D ]}|                    d           |                     t          |j	                  d           |
                    d           |                     t          |j	                  d           |
                    d           |                     t          |j	                  d           |                     t          |          d           d S )	N)r   s   345s   67s   89a   bcdes   fghs   ijklmnr  r\   r  r   r      r   r#  r0  r   r  r   r   rg   r_   r   _buffersr,  r6   r-  r!  r   s       r.   
test_smallzTestStreamBuffer.test_small  s   III$$&&++Cu===$$&&++CyAAA$$&&++CzBBB $$R((q 	 	AJJtS\**A...q 	 	AJJtS\**A...BS\**A...AS\**A...S1%%%%%r-   c                 $   g d}|                                  }|                     ||t                     |                                  }|                     ||t                     |                                  }|                     ||t                     |                      d          }t          d          D ]}|                    d           |                     t          |j	                  d           |                    d           |                     t          |j	                  d           |                    d           |                     t          |j	                  d           |
                    d           |                     t          |j	                  d	           |
                    d
           |                     t          |j	                  d           |                     t          |          d           d S )N)s
   1212121212s   345345s(   6767676767676767676767676767676767676767s$   89a89a89a89a89a89a89a89a89a89a89a89ar2  s   fghfghfghfghfghfghfghs   ijklmnijklmnr  r]   s   xxxxxxxxxxx   yr      z!   r   r   r   r4  r6  s       r.   
test_largezTestStreamBuffer.test_large  s   
 
 
 $$&&++Cu===$$&&++CyAAA$$&&++CzBB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  r  r#  r)  r0  r7  r<  r,   r-   r.   r  r    s         ( ( (     ' ' '& & &(& & &4!& !& !& !& !&r-   r  )F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   rj  r=  r   r'   r   r8  rP  r  r   r   r    r/   r1   objectr<   r   rC  r  r  r  r  r  r  r  r  TestCaser  r,   r-   r.   <module>rM     s   % % % % % %             ! ! ! ! ! !              ) ( ( ( ( ( * * * * * * * *       C C C C C C C C ? ? ? ? ? ? ' ' ' ' ' '                           4 3 3 3 3 3 3 3     				    



              >   
l! l! l! l! l!6 l! l! l!^h h h h h h h hVc c c c c* c c cL) ) ) ) ).0A ) ) )
W W W W W/1C W W W
. . . . .$m . . .
 
 
 
 
' 
 
 
&F F F F F. F F F&z2 z2 z2 z2 z2= z2 z2 z2zM M M M M= M M M` ( ( ( ( ()= ( ( (Vn& n& n& n& n&x( n& n& n& n& n&r-   