
    MhS                     <   d dl mZ d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2d dl3Z3d dl4Z4d dl5Z5d dl6Z6d dl7m8Z8 d dl7Z7d Z9 G d de+          Z:e) G d de!                      Z;e) G d de!                      Z<e) G d de<                      Z= G d dee;          Z> G d de e;          Z? G d d e=          Z@ G d! d"e=          ZA G d# d$e=          ZB G d% d&e!          ZC G d' d(e!          ZD G d) d*e!          ZEe& G d+ d,e<e!                      ZF G d- d.e7jG                  ZHdS )/    )Future)gen)netutil)IOLoop)IOStreamSSLIOStreamPipeIOStreamStreamClosedError_StreamBuffer)AsyncHTTPClientHTTPResponse)HTTPHeaders)	ConditionEvent)gen_log)ssl_options_to_contextssl_wrap_socket)AddThreadSelectorEventLoop)	TCPServer)AsyncHTTPTestCaseAsyncHTTPSTestCaseAsyncTestCasebind_unused_port	ExpectLoggen_test)skipIfNonUnixrefusing_portignore_deprecationabstract_base_test)RequestHandlerApplicationN)mockc                  $   t          t          j                            t          j                            t
                    d          t          j                            t          j                            t
                    d                    S )Ntest.crttest.key)certfilekeyfile)dictospathjoindirname__file__     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/iostream_test.py_server_ssl_optionsr1   0   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    r0   getzHelloHandler.get8   s    

7r/   N)__name__
__module____qualname__r9   r.   r/   r0   r3   r3   7   s#            r/   r3   c            	           e Zd Zd Zd ZdefdZ	 ddedede	j
        defd	Zd
 Zed             Zed             Zed             Zed             Zed             Zed             ZdS )TestIOStreamWebMixinc                     t                      NNotImplementedErrorr7   s    r0   _make_client_iostreamz*TestIOStreamWebMixin._make_client_iostreamG       !###r/   c                 0    t          dt          fg          S )N/)r!   r3   r7   s    r0   mixin_get_appz"TestIOStreamWebMixin.mixin_get_appJ   s    S,/0111r/   returnc                     t                      r@   rA   r7   s    r0   get_http_portz"TestIOStreamWebMixin.get_http_portM   rD   r/   Fr*   raise_errorkwargsc                     t                      r@   rA   )r8   r*   rK   rL   s       r0   fetchzTestIOStreamWebMixin.fetchP   s     "###r/   c                    t          j                    j                            d          r,t	          j                    dk    r|                     d           |                     dddi          }|                                 d S )NCurlAsyncHTTPClientDarwinz:libcurl doesn't handle closed connections cleanly on macOSrF   
Connectionclose)headers)	r   configured_classr:   endswithplatformsystemskipTestrN   rethrow)r8   responses     r0   test_connection_closedz+TestIOStreamWebMixin.test_connection_closedV   s     ,..7@@AVWW	X!!X-- MMVWWW::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)rC   connectrJ   r6   read_until_close
assertTrue
startswithrV   )r8   streamdatas      r0   test_read_until_closez*TestIOStreamWebMixin.test_read_until_closei   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 )	Nr^   r_   	   s	   HTTP/1.1 r   r/      s   200)rC   re   ra   rJ   r6   
read_bytesassertEqualrS   )r8   rf   s     r0   test_read_zero_bytesz)TestIOStreamWebMixin.test_read_zero_bytess   s     002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 )Nr^   %   GET / HTTP/1.0
Connection: close

r`   )rC   ra   rJ   r6   assertFalsedoner   WaitIteratornextappendcurrent_futurerl   rb   rc   rV   rS   )r8   re   connect_fut	write_futitresolved_orderrf   s          r0   test_write_while_connectingz0TestIOStreamWebMixin.test_write_while_connecting   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.r^   r_      
s   HTTP/1.1 200 OK
   

latin1zContent-Lengthr`   N)rC   ra   rJ   assertIsr6   
read_untilrl   r   parsedecodeintrk   rS   )r8   re   connect_result
first_lineheader_datarT   content_lengthbodys           r0   test_future_interfacez*TestIOStreamWebMixin.test_future_interface   s(      ++--%~~{D<N<N<P<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 )Nr^   r_      )rC   ra   rJ   r6   assertRaisesr
   rk   rS   r8   re   s     r0   test_future_close_while_readingz4TestIOStreamWebMixin.test_future_close_while_reading   s      ++--nnk4+=+=+?+?@AA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 )Nr^   ro   r}   r`      )
rC   ra   rJ   r6   r   rb   rl   r   r
   rk   )r8   re   r   s      r0   test_future_read_until_closez1TestIOStreamWebMixin.test_future_read_until_close   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)F)r:   r;   r<   rC   rG   r   rJ   strbooltypingAnyr   rN   r\   r   rg   rm   rz   r   r   r   r.   r/   r0   r>   r>   <   s>       $ $ $2 2 2$s $ $ $ $ .3$ $$&*$>Dj$	$ $ $ $  & 1 1 X1   X&   X*   X    X ! ! X! ! !r/   r>   c                   *   e Zd Zd Zd Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             ZdS )TestReadWriteMixinc                     t           r@   rA   )r8   rL   s     r0   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@   )testrL   )r8   r   rL   s      r0   __init__zFTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__init__   s     	$r/   c                 X   K    | j         j        di | j         d {V | _        | j        S )Nr.   )r   r   rL   pairr7   s    r0   
__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   rS   )r8   typvaluetbss        r0   	__aexit__zGTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aexit__   s0        AGGIIII r/   N)r:   r;   r<   r   r   r   r.   r/   r0   IOStreamPairContextr      sA        % % %! ! !    r/   r   r.   )r8   rL   r   s      r0   iostream_pairz TestReadWriteMixin.iostream_pair   s?    	 	 	 	 	 	 	 	 #"4000r/   c              #      K   |                                  V \  }}|                    d          V  |                                 |                                 d S )Nr/   )r   r6   rS   )r8   rswss      r0   test_write_zero_bytesz(TestReadWriteMixin.test_write_zero_bytes   sW       ..0000Bhhsmm









r/   c              #     K   |                                  V \  }}	 |                    d           g }|                    |                    d          V            |                                 |                    |                    d          V            |                     |ddg           |                                 |                                 d S # |                                 |                                 w xY w)N   12r      1   2)r   r6   rt   rk   rS   rl   )r8   r   r   chunkss       r0   "test_future_delayed_close_callbackz5TestReadWriteMixin.test_future_delayed_close_callback   s       ..00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   r6   rk   rl   rS   r   sleepr8   r   r   rf   s       r0   test_close_buffered_dataz+TestReadWriteMixin.test_close_buffered_data   s       ..s.CC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   r6   rk   rS   rl   rb   r   s       r0   !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   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr|         )r   
isinstancer   rW   python_implementationunittestSkipTestranger6   r   rl   lenrS   )r8   r   r   NUM_KBirf   s         r0   test_large_read_untilz(TestReadWriteMixin.test_large_read_until*  s      
 ..00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_futurer   r   r6   rS   r8   r   r   rfs       r0   .test_read_until_with_close_after_second_packetzATestReadWriteMixin.test_read_until_with_close_after_second_packetC  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   r   r6   rS   r   r
   r   s       r0   'test_read_until_unsatisfied_after_closez:TestReadWriteMixin.test_read_until_unsatisfied_after_close[  s      %%'' 	 	 	 	 	 	 	8B&r}}W'='=>>B((;'''''''''HHV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
r|   )	r   r   set_close_callbacksetr6   r   rl   rS   wait)r8   OKr   r   eventress         r0   %test_close_callback_with_pending_readz8TestReadWriteMixin.test_close_callback_with_pending_readi  s      
 ..00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   r0   close_callbackzETestReadWriteMixin.test_future_close_callback.<locals>.close_callback  s    F1IKKMMMMMr/      ar   r   )
r   r   r   r6   rk   rl   rp   rS   r   rc   )r8   r   r   r   r   r   r   s        @@r0   test_future_close_callbackz-TestReadWriteMixin.test_future_close_callback  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   rk   r6   
memoryviewrl   rS   r8   r   r   futrf   s        r0   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   rj   s   world   worr   r/   )r   rk   r6   rl   rS   r   s        r0   test_read_bytes_partialz*TestReadWriteMixin.test_read_bytes_partial  s'     ..00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   r   r6   rl   r   r   loggingINFOr   rS   r8   r   r   r   r   rf   s         r0   test_read_until_max_bytesz,TestReadWriteMixin.test_read_until_max_bytes  s     ..00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   r6   r   r   r   r   r   r
   r   r   rS   r8   r   r   r   s       r0    test_read_until_max_bytes_inlinez3TestReadWriteMixin.test_read_until_max_bytes_inline  s     ..00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   r6   r   r   r   r   r   r   rS   r  s       r0   'test_read_until_max_bytes_ignores_extraz:TestReadWriteMixin.test_read_until_max_bytes_ignores_extra  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_regexr6   rl   r   r   r   r   r   rS   r  s         r0   test_read_until_regex_max_bytesz2TestReadWriteMixin.test_read_until_regex_max_bytes  s     ..00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   r6   r   r   r   r   r  r   rS   r  s       r0   &test_read_until_regex_max_bytes_inlinez9TestReadWriteMixin.test_read_until_regex_max_bytes_inline  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       r0   -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   r6   r   rk   rl   rS   r8   r   r   r   rf   s        r0   "test_small_reads_from_large_bufferz5TestReadWriteMixin.test_small_reads_from_large_buffer>  s      
 ..y.II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   r6   r   r   rl   rS   r  s        r0   (test_small_read_untils_from_large_bufferz;TestReadWriteMixin.test_small_read_untils_from_large_bufferM  s      
 ..y.II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   ri   )r   r6   rk   r   r   r   rS   )r8   MBr   r   r   s        r0   test_flow_controlz$TestReadWriteMixin.test_flow_control\  s      ..q2v.FF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/   r0   <lambda>zGTestReadWriteMixin.test_read_into.<locals>.sleep_some.<locals>.<lambda>s  s    #)D// r/   )io_looprun_syncr7   s   r0   
sleep_somez5TestReadWriteMixin.test_read_into.<locals>.sleep_somer  s#    L!!"9"9:::::r/   
   r   r$  s   world!!s
   helloworlds
   1234567890s
   !!12345678r   s	   abcdefghis   90ab   s   cdefghi)r   	bytearray	read_intor6   r   r   rc   readingrp   rl   bytesrk   rS   )r8   r   r   r(  bufr   rf   s   `      r0   test_read_intoz!TestReadWriteMixin.test_read_inton  s     ..00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,  r6   rp   r-  rl   r.  rS   )r8   r   r   r/  r   rf   s         r0   test_read_into_partialz)TestReadWriteMixin.test_read_into_partial  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,  rl   resultrS   )r8   r   r   r/  r   s        r0   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updater6   )	remainingsizerf   nbytesproduce_hashrr   s      r0   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<  rk   r>  r+  r,  )	r?  r@  rf   r/  nconsume_hashrA  rC  r   s	        r0   consumez9TestReadWriteMixin.test_many_mixed_reads.<locals>.consume  s     Ia--88::##99QD)(<(<==D!#t!4!444D ''---%II 99QD)(<(<==D#D//C ll3////A9999 '',,,%I a-- >>>>>>r/   )	rF  Randomr   hashlibsha1r   	coroutine	hexdigestrS   )	r8   rD  rI  rH  rA  rB  rC  r   r   s	      @@@@@@r0   test_many_mixed_readsz(TestReadWriteMixin.test_many_mixed_reads  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)r:   r;   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r  r   r0  r2  r6  rO  r.   r/   r0   r   r      s       
" " "1 1 1*   X   X   X2   X$   X0   X.   X   X.   X0 	 	 X	   X0   X6   X$   X    X6   X"   X    X   X   X" ' ' X'R   X8   X / / X/ / /r/   r   c                       e Zd Zd Zd Zej        d             Zed             Z	ed             Z
ed             Zeed                         Zed             Zed	             Zd
S )TestIOStreamMixinc                     t                      r@   rA   r8   
connectionrL   s      r0   _make_server_iostreamz'TestIOStreamMixin._make_server_iostream  rD   r/   c                     t                      r@   rA   rS  s      r0   rC   z'TestIOStreamMixin._make_client_iostream  rD   r/   c              +      K   t                      \  }}t                       fd}t          j        ||             j        t          j                    fi }|                    d|f          }|gV \  }} j                            |	                                           |
                                 t          j        ||f          )Nc                 J                          j        | fi            d S r@   )
set_resultrU  )rT  addressrL   r8   server_stream_futs     r0   accept_callbackz=TestIOStreamMixin.make_iostream_pair.<locals>.accept_callback   s=    ((**:@@@@    r/   r^   )r   r   r   add_accept_handlerrC   socketra   r&  remove_handlerfilenorS   r   Return)	r8   rL   listenerportr\  client_streamrv   server_streamr[  s	   ``      @r0   r   z$TestIOStreamMixin.make_iostream_pair  s      )++$"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)requiredr^   )r   
addCleanupr   r^  r   stopr   r   r   r
   ra   rc   r   errorConnectionRefusedError)r8   cleanup_funcrc  re   s       r0   test_connection_refusedz)TestIOStreamMixin.test_connection_refused  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   )r^  AF_INETSOCK_STREAMr   r   ri  r"   patchgaierrorerrnoEIOr   r
   ra   rc   r   rj  )r8   r   re   s      r0   test_gaierrorzTestIOStreamMixin.test_gaierror  s      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_readro  rp  )r   r"   rv  IOErrorassertRaisesRegexrb   rS   )r8   serverclients      r0    test_read_until_close_with_errorz2TestIOStreamMixin.test_read_until_close_with_error/  s_     #6688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   rY   r   r)   rS   r^  r`  r   rj  rk   )r8   r&  r~  r  s       r0   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)   rS   r^  r`  	__class__read_from_fd)r~  s   r0   fake_read_from_fdzJTestIOStreamMixin.test_async_read_error_logging.<locals>.fake_read_from_fdl  s>    --//000 --f55555r/   zerror on read)r   r   r   r   rk   r6   r  r   r   r   rS   )r8   r  r   r  r~  s       @r0   test_async_read_error_loggingz/TestIOStreamMixin.test_async_read_error_logging_  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   r6   )rf   r   mrG  r~  s     r0   rD  z4TestIOStreamMixin.test_future_write.<locals>.produce  sJ      !8D1XX ) )ll4(((((() )r/   c               3   ~   K   d} | k     r1                               V }| t          |          z  } | k     /d S d S r4  )rk   r   )nreadr   r  r  total_bytess     r0   rI  z4TestIOStreamMixin.test_future_write.<locals>.consume  sY      E+%%"--a0000S! +%%%%%%r/   c                 $    g | ]}             S r.   r.   ).0r   rD  s     r0   
<listcomp>z7TestIOStreamMixin.test_future_write.<locals>.<listcomp>  s    8887799888r/   N)r   r   rM  r   rS   )	r8   
nproducersrI  r  r  rG  rD  r~  r  s	      @@@@@@r0   test_future_writez#TestIOStreamMixin.test_future_writex  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)r:   r;   r<   rU  rC   r   rM  r   r   rm  rz  r  r   r  r  r  r.   r/   r0   rQ  rQ    s       $ $ $$ $ $ 	]9 9 ]9" X X XX  G G XG    X   X ]@   X0   X  r/   rQ  c                       e Zd Zd Zd ZdS )TestIOStreamWebHTTPc                 B    t          t          j                              S r@   )r   r^  r7   s    r0   rC   z)TestIOStreamWebHTTP._make_client_iostream  s    (((r/   c                 *    |                                  S r@   rG   r7   s    r0   get_appzTestIOStreamWebHTTP.get_app      !!###r/   Nr:   r;   r<   rC   r  r.   r/   r0   r  r    s2        ) ) )$ $ $ $ $r/   r  c                       e Zd Zd Zd ZdS )TestIOStreamWebHTTPSc                 v    t          t          j                    t          t          j                            S )N	cert_reqsssl_options)r   r^  r(   ssl	CERT_NONEr7   s    r0   rC   z*TestIOStreamWebHTTPS._make_client_iostream  s(    6=??s}8U8U8UVVVVr/   c                 *    |                                  S r@   r  r7   s    r0   r  zTestIOStreamWebHTTPS.get_app  r  r/   Nr  r.   r/   r0   r  r    s5        W W W$ $ $ $ $r/   r  c                       e Zd Zd Zd ZdS )TestIOStreamc                     t          |fi |S r@   r   rS  s      r0   rU  z"TestIOStream._make_server_iostream      
--f---r/   c                     t          |fi |S r@   r  rS  s      r0   rC   z"TestIOStream._make_client_iostream  r  r/   Nr:   r;   r<   rU  rC   r.   r/   r0   r  r    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   r1   wrap_socketr   )r8   rT  rL   ssl_ctxs       r0   rU  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  rS  s      r0   rC   z%TestIOStreamSSL._make_client_iostream  s9    
 
$(3=$A$A$A
EK
 
 	
r/   Nr  r.   r/   r0   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   r8   rT  rL   contexts       r0   rU  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       r0   rC   z,TestIOStreamSSLContext._make_client_iostream  sD    ,S[-DEE!&!m:EE7EfEEEr/   Nr  r.   r/   r0   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)Nr^   )supersetUpr   rb  rc  re  r   server_acceptedr   r]  acceptr   r^  rd  r&  
add_futurera   ri  r   	Exceptionprint)r8   er  s     r0   r  zTestIOStreamStartTLS.setUp  s   	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@   )	re  rS   rd  r&  r_  rb  r`  r  tearDownr8   r  s    r0   r  zTestIOStreamStartTLS.tearDown  s    )$$&&&)$$&&&##DM$8$8$:$:;;;r/   c                     | j         |                     d           t          |          | _         | j                            d            d S )Nzshould only get one connection)re  failr   r  rY  )r8   rT  rZ  s      r0   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 Nr|   )rd  r6   re  r   rl   r8   line	recv_lines      r0   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  )re  r6   rd  r   rl   r  s      r0   server_send_linez%TestIOStreamStartTLS.server_send_line  r  r/   Nc                 ^    | j         J | j         }d | _         |                    d||          S )NF)rd  	start_tls)r8   r  server_hostnamerd  s       r0   client_start_tlsz%TestIOStreamStartTLS.client_start_tls
  s9    !---*!&&uk?KKKr/   c                 \    | j         J | j         }d | _         |                    d|          S )NT)re  r  )r8   r  re  s      r0   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  r1   rd  re  rc   r   r   )r8   client_futureserver_futures      r0   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 Errorrr  r  )
r  r1   r   r   r  r   r  SSLErrorr^  rj  r8   r  r  s      r0   test_handshake_failz(TestIOStreamStartTLS.test_handshake_fail+  s     --.A.C.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  r^   r  )
r  r1   r   r   r  r  r  r   r  r  r  s      r0   test_check_hostnamez(TestIOStreamStartTLS.test_check_hostname6  s      --.A.C.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 )Nrs  L)	r   r.  castre  r6   rd  rk   rA  rl   )r8   r/  recvs      r0   test_typed_memoryviewz*TestIOStreamStartTLS.test_typed_memoryviewE  s       r##((--!--- &&s+++++!---'223:>>>>teCjj11111r/   )NNr@   )r:   r;   r<   r  r  r  r   rM  r  r  r  r  r   r  r  r  r  __classcell__r  s   @r0   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   r^   )r   r1   
add_socketr  r  r  r  r  r  r  r   optionsgetattrr   r^  ra   assertIsNotNonecipherri  rS   )r8   
server_clsr~  r  sockrc  r  s          r0   connect_to_serverz&WaitForHandshakeTest.connect_to_serverR  s     	)++JD$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@   )assertIsNoner^  r  r&  spawn_callbackhandle_connection)r8   re   rZ  r   s      r0   handle_streamzUWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_streamu  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_handshakerY  )r8   re   handshake_futures     r0   r  zYWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_connectiony  s9      //11111 ++D11111r/   N)r:   r;   r<   r  r   rM  r  r  r   s   r0   
TestServerr  t  sZ        L L L L L ]2 2 2 2 ]2 2 2r/   r  r   r   r  r8   r  r  r   s     @@r0   test_wait_for_handshake_futurez3WaitForHandshakeTest.test_wait_for_handshake_futureo  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   RuntimeErrorrY  )r8   re   rZ  r   r  r   s       r0   r  zdWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServer.handle_stream  sT      //11!!,0IJJJ			 ++D11111r/   Nr:   r;   r<   r   rM  r  r  s   r0   r  r    s?        ]2 2 2 2 2 ]2 2 2r/   r  r  r  s     @@r0   -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  )r8   re   rZ  r  s      r0   r  z`WaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServer.handle_stream  sQ      //11111//11111 ++D11111r/   Nr  )r  s   r0   r  r    s:        ]2 2 2 2 ]2 2 2r/   r  r  )r8   r  r  s     @r0   )test_wait_for_handshake_already_connectedz>WaitForHandshakeTest.test_wait_for_handshake_already_connected  ss      !88	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 $$Z00000r/   N)
r:   r;   r<   r   rM  r  r   r  r  r!  r.   r/   r0   r  r  Q  s        ]  ]8   X"   X    X  r/   r  c                   j     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                            t          j                            t          j                            t"                    d                     d S )Nc                    t          j        t           j        j                  }|                    t
          j                            t
          j                            t                    d          t
          j                            t
          j                            t                    d                     |
                    | dd          } t          |            d S r  )r  r  r  r  r  r)   r*   r+   r,   r-   r  r   )rT  rZ  r  s      r0   r\  z8TestIOStreamCheckHostname.setUp.<locals>.accept_callback  s    01HIIG##RW__X66
CCRW__X66
CC   !,, (- -  J
 
#####r/   r$   )r  r  r   rb  rc  r   r]  r  r  r  r  client_ssl_ctxload_verify_locationsr)   r*   r+   r,   r-   )r8   r\  r  s     r0   r  zTestIOStreamCheckHostname.setUp  s    #3#5#5 ty	$ 	$ 	$ 	"4=/BBB "89PQQ11GLL22J??	
 	
 	
 	
 	
r/   c                     | j                             | j                                                   | j                                         t                                                       d S r@   )r&  r_  rb  r`  rS   r  r  r  s    r0   r  z"TestIOStreamCheckHostname.tearDown  sW    ##DM$8$8$:$:;;;r/   c                    K   t          t          j                    | j                  }|                    d| j        fd           d {V  |                                 d S )Nr  r^   zfoo.example.comr  )r   r^  r&  ra   rc  rS   r   s     r0   
test_matchz$TestIOStreamCheckHostname.test_match  sz      V]__$:MNNNnn$)$-  
 
 	
 	
 	
 	
 	
 	
 	
 	r/   c                   K   t          t          j                    | j                  }t          t          dt
          j        t          j                    dk              5  | 	                    t          j                  5  t          t          dt
          j                  5  |                    d| j        f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   t          j                    dk    rt          j        d
           d {V  d d d            d S # 1 swxY w Y   d S )Nr  z.*alert bad certificateWindows)r   rg  z0.*(certificate verify failed: Hostname mismatch)r   r^   bar.example.comr  r   )r   r^  r&  r   r   r   WARNINGrW   rX   r   r  SSLCertVerificationErrorra   rc  r   r   r   s     r0   test_no_matchz'TestIOStreamCheckHostname.test_no_match  s     V]__$:MNNN%/_&&)3	
 
 
 	) 	) ""3#?@@ 	 	F!/    
 !..$di0(9 )                       	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   I--mC((((((((()	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)sZ   ! D4"C+#%CC+CC+CC+D4+C/	/D42C/	34D44D8;D8c                    K   d| j         _        t          t          j                    | j                   }|                    d| j        fd           d {V  d S )NFr  r^   r-  r  )r&  r  r   r^  ra   rc  r   s     r0   test_check_disabledz-TestIOStreamCheckHostname.test_check_disabled  s~       .3*V]__$:MNNNnn$)$-  
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r/   )
r:   r;   r<   r  r  r   r*  r0  r2  r  r  s   @r0   r#  r#    s        

 
 
 
 
4    
   X ) ) X)0 
 
 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	   )r8   rL   rC  ws       r0   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 rj   r   s   ld)r   r6   r   rl   rk   rS   rb   r   s       r0   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   r6   rk   rl   rS   )r8   r   r   	NUM_BYTESrf   s        r0   test_pipe_iostream_big_writez-TestPipeIOStream.test_pipe_iostream_big_write  s      ..0000B	 		!"""]]9----ti/000









r/   N)	r:   r;   r<   r   rM  r   r   r:  r=  r.   r/   r0   r4  r4    sh        ]D D ]D
   X&   X  r/   r4  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 )Nr8  )rF  rJ  r7   s    r0   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)r8   bs     r0   to_byteszTestStreamBuffer.to_bytes'  sP    a%+,, 	88O:&& 	99;;A,,r/   r)  c                 B    t                      }|j        sJ ||_        |S r@   )r   _large_buf_threshold)r8   large_buf_thresholdr/  s      r0   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   rj   )r   rE  peekrc   assertLessEqualrd   )r8   r/  expectedr@  gots        r0   
check_peekzTestStreamBuffer.check_peek5  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   )rl   r   rt   rO  rF  	randrangeadvance)r8   r/  objs
input_typerM  orG  s          r0   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)  ri   r  r   r      r   rI  rV  r.  r+  r   r   rt   rl   r   _buffersrR  r8   rS  r/  r   s       r0   
test_smallzTestStreamBuffer.test_smallR  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$   89a89a89a89a89a89a89a89a89a89a89a89arX  s   fghfghfghfghfghfghfghs   ijklmnijklmnr)  rj   s   xxxxxxxxxxx   yr      z!   r   r   r   rZ  r\  s       r0   
test_largezTestStreamBuffer.test_largel  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)  )r:   r;   r<   __doc__r  rE  rI  rO  rV  r]  rb  r.   r/   r0   r?  r?    s         ( ( (     ' ' '& & &(& & &4!& !& !& !& !&r/   r?  )Itornado.concurrentr   tornador   r   tornado.ioloopr   tornado.iostreamr   r   r	   r
   r   tornado.httpclientr   r   tornado.httputilr   tornado.locksr   r   tornado.logr   tornado.netutilr   r   tornado.platform.asyncior   tornado.tcpserverr   tornado.testingr   r   r   r   r   r   tornado.test.utilr   r   r   r   tornado.webr    r!   r   rx  rK  r   r)   rW   rF  r^  r  r   r   r"   r1   r3   r>   r   rQ  r  r  r  r  r  r  r  r#  r4  TestCaser?  r.   r/   r0   <module>rs     s3   % % % % % %             ! ! ! ! ! !              = < < < < < < < ( ( ( ( ( ( * * * * * * * *       C C C C C C C C ? ? ? ? ? ? ' ' ' ' ' '                           4 3 3 3 3 3 3 3     				    



              >   
 G! G! G! G! G!= G! G! G!T h h h h h h h hV a a a a a* a a aH$ $ $ $ $+-A $ $ $$ $ $ $ $-/C $ $ $. . . . .$ . . .
 
 
 
 
' 
 
 
&F F F F F. F F F&x2 x2 x2 x2 x2= x2 x2 x2vM M M M M= M M M`O
 O
 O
 O
 O
 O
 O
 O
d ( ( ( ( ()= ( ( (Vn& n& n& n& n&x( n& n& n& n& n&r/   