
    #/h                     :   S SK JrJr  S SKJrJrJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJrJrJrJr  S SKJr  S SKJr  S S	KJrJr  S S
KJr  S SKJr  S SK J!r!J"r"J#r#J$r$J%r%  S SK&J'r'  S SK(J)r)J*r*J+r+  S SK,J-r-  S SK.r.S SK/r/S SK0r0S SK1r1S SK2r2S SK3r3S SK4r4S SK5r5S SK6r6S SK7r7S SK8r8S SK9r:S SK;J<r<  S SK=r=\=R|                  (       a  S SK=J?r?J@r@  S rA " S S\!5      rB " S S\*5      rC\8R                  " \E" \4SS5      S:  S5      rF " S S\"5      rG " S S\H5      rI " S  S!\G\I5      rJ\F " S" S#\G\I5      5       rK\F " S$ S%\G\I5      5       rL " S& S'\G\I5      rM " S( S)\8R                  5      rO " S* S+\*5      rP " S, S-\!5      rQ " S. S/\*5      rR " S0 S1\*5      rS " S2 S3\*5      rT " S4 S5\T5      rU " S6 S7\!5      rV " S8 S9\!5      rW " S: S;\B5      rX " S< S=\"\B5      rY " S> S?\B5      rZ\8R                  " \[" \3S@5      (       + =(       d    \5R                  SA:H  SB5       " SC SD\#5      5       r] " SE SF\!5      r^ " SG SH\!5      r_ " SI SJ\_\!5      r` " SK SL\_\!5      ra " SM SN\!5      rb " SO SP\!5      rc " SQ SR\!5      rd\' " SS ST\!5      5       re " SU SV\!5      rf " SW SX\!5      rgg)Y    )gennetutil)json_decodejson_encodeutf8_unicoderecursive_unicode
native_str)HTTP1Connection)	HTTPError)
HTTPServer)HTTPHeadersHTTPMessageDelegateHTTPServerConnectionDelegateResponseStartLine)IOStream)Event)gen_logapp_log)ssl_options_to_contextSimpleAsyncHTTPClient)AsyncHTTPTestCaseAsyncHTTPSTestCaseAsyncTestCase	ExpectLoggen_test)skipOnTravis)ApplicationRequestHandlerstream_request_body)closingN)BytesIO)DictListc                    ^^#    / m " UU4S jS[         5      n[        U S5      mU" 5       nTR                  U5      I Sh  vN   UR                  UR                  SR                  T5      4$  N,7f)z]Reads an HTTP response from `stream` and returns a tuple of its
start_line, headers and body.c                   4   > \ rS rSrS rU 4S jrU4S jrSrg)"read_stream_body.<locals>.Delegate<   c                     X l         Xl        g Nheaders
start_lineselfr.   r-   s      >/usr/lib/python3/dist-packages/tornado/test/httpserver_test.pyheaders_received3read_stream_body.<locals>.Delegate.headers_received=   s    "L(O    c                 (   > TR                  U5        g r+   )append)r0   chunkchunkss     r1   data_received0read_stream_body.<locals>.Delegate.data_receivedA   s    MM% r4   c                 &   > TR                  5         g r+   )detachr0   conns    r1   finish)read_stream_body.<locals>.Delegate.finishD   s    KKMr4   r,   N)__name__
__module____qualname____firstlineno__r2   r9   r?   __static_attributes__)r8   r>   s   r1   Delegater(   <   s    	)	!	 	r4   rF   TNr4   )r   r   read_responser.   r-   join)streamrF   delegater8   r>   s      @@r1   read_stream_bodyrK   7   so      F	 	& 	 64(DzH


X
&&& 0 0#((62BBB 's   =A0A.-A0c                   $    \ rS rSrSrS rS rSrg)HandlerBaseTestCaseM   Nc                 F    [        SU R                  R                  4/5      $ N/)r   	__class__Handlerr0   s    r1   get_appHandlerBaseTestCase.get_appP   s    S$.."8"89:;;r4   c                 p    U R                   " U0 UD6nUR                  5         [        UR                  5      $ r+   )fetchrethrowr   body)r0   argskwargsresponses       r1   
fetch_jsonHandlerBaseTestCase.fetch_jsonS   s0    ::t.v.8==))r4    )rA   rB   rC   rD   rS   rU   r^   rE   r`   r4   r1   rM   rM   M   s    G<*r4   rM   c                   *    \ rS rSrSS jrS rS rSrg)HelloWorldRequestHandlerY   c                     Xl         g r+   expected_protocol)r0   protocols     r1   
initialize#HelloWorldRequestHandler.initializeZ   s    !)r4   c                     U R                   R                  U R                  :w  a  [        S5      eU R	                  S5        g )Nzunexpected protocolHello world)requestrg   rf   	Exceptionr?   rT   s    r1   getHelloWorldRequestHandler.get]   s2    <<  D$:$::122M"r4   c                 f    U R                  S[        U R                  R                  5      -  5        g )NzGot %d bytes in POST)r?   lenrl   rZ   rT   s    r1   postHelloWorldRequestHandler.postb   s#    *S1B1B-CCDr4   re   N)http)rA   rB   rC   rD   rh   rn   rr   rE   r`   r4   r1   rb   rb   Y   s    *#
Er4   rb   OPENSSL_VERSION_INFO)r   r   )   r   z(old version of ssl module and/or opensslc                       \ rS rSrS rSrg)BaseSSLTestq   c                 6    [        S[        [        SS94/5      $ )NrQ   httpsrg   )r   rb   dictrT   s    r1   rU   BaseSSLTest.get_appr   s    S":D'<RSTUUr4   r`   N)rA   rB   rC   rD   rU   rE   r`   r4   r1   rx   rx   q   s    Vr4   rx   c                       \ rS rSrS rS rS\R                  4S jrS\R                  4S jr	S\R                  4S jr
S\R                  4S jrS	rg
)SSLTestMixinv   c                 ^    [        SSU R                  5       0[        R                  " 5       D6$ )Nssl_versionr`   )r}   get_ssl_versionr   default_ssl_optionsrT   s    r1   get_ssl_optionsSSLTestMixin.get_ssl_optionsw   s1     
,,.
 446
 	
r4   c                     [        5       er+   )NotImplementedErrorrT   s    r1   r   SSLTestMixin.get_ssl_version}   s    !##r4   r0   c                 ^    U R                  S5      nU R                  UR                  S5        g )NrQ      Hello worldrX   assertEqualrZ   r0   r]   s     r1   test_sslSSLTestMixin.test_ssl   s#    ::c?7r4   c                 d    U R                  SSSS-  S9nU R                  UR                  S5        g )NrQ   POSTAi  methodrZ   s   Got 5000 bytes in POSTr   r   s     r1   test_large_postSSLTestMixin.test_large_post   s/    ::c&sTz:B(ABr4   c           
      v   [        [        S5         [        [        SSS9   U R                  [        [        45         U R                  U R                  S5      R                  SS5      SSS	S
9  S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nz(SSL Error|uncaught exception)Uncaught exceptionFrequiredrQ   https:http:  T)request_timeoutconnect_timeoutraise_error)r   r   assertRaisesIOErrorr   rX   get_urlreplacerT   s    r1   test_non_ssl_request!SSLTestMixin.test_non_ssl_request   s     w @A7$85I&&';<JJS)11(GD(,(,$(	   = J BA<< JI BAs9   B*B2B/B7B*
BB
B'	#B**
B8c                 V   [        [        S5       nU R                  [        [        45         U R                  U R                  S5      R                  SS5      SS9  S S S 5        S S S 5        U R                  WR                  5        g ! , (       d  f       N2= f! , (       d  f       N;= f)Nz	SSL ErrorrQ   r   r   T)r   )
r   r   r   r   r   rX   r   r   assertFalselogged_stack)r0   
expect_logs     r1   test_error_loggingSSLTestMixin.test_error_logging   s    w,
""GY#78

LL%--h@d   9 -
 	001	 98 -,s"   B0B	B	
B	B
B(r`   N)rA   rB   rC   rD   r   r   typingAnyr   r   r   r   rE   r`   r4   r1   r   r   v   sN    
$8vzz 8Cfjj C6:: 2 2r4   r   c                       \ rS rSrS rSrg)
SSLv23Test   c                 "    [         R                  $ r+   )sslPROTOCOL_SSLv23rT   s    r1   r   SSLv23Test.get_ssl_version   s    """r4   r`   NrA   rB   rC   rD   r   rE   r`   r4   r1   r   r      s    #r4   r   c                       \ rS rSrS rSrg)	SSLv3Test   c                 "    [         R                  $ r+   )r   PROTOCOL_SSLv3rT   s    r1   r   SSLv3Test.get_ssl_version       !!!r4   r`   Nr   r`   r4   r1   r   r          "r4   r   c                       \ rS rSrS rSrg)	TLSv1Test   c                 "    [         R                  $ r+   )r   PROTOCOL_TLSv1rT   s    r1   r   TLSv1Test.get_ssl_version   r   r4   r`   Nr   r`   r4   r1   r   r      r   r4   r   c                       \ rS rSrS rSrg)SSLContextTest   c                     [        [        R                  " U 5      SS9n[        U[        R
                  5      (       d   eU$ )NT)server_side)r   r   r   
isinstancer   
SSLContext)r0   contexts     r1   r   SSLContextTest.get_ssl_options   s:    (..t4$
 '3>>2222r4   r`   N)rA   rB   rC   rD   r   rE   r`   r4   r1   r   r      s    r4   r   c                        \ rS rSrS rS rSrg)BadSSLOptionsTest   c                 P    [        5       nU R                  [        [        USS0S9  g )Nkeyfilez/__missing__.crtssl_options)r   r   KeyErrorr   )r0   applications     r1   test_missing_arguments(BadSSLOptionsTest.test_missing_arguments   s.    !m"$67	 	 	
r4   c                    [        5       n[        R                  R                  [        5      n[        R                  R                  US5      n[        R                  R                  US5      nU R                  [        [        4[        USS0S9  U R                  [        [        4[        UUSS.S9  [        UX4S.S9  g)	z6A missing SSL key should cause an immediate exception.ztest.crtztest.keycertfilez/__mising__.crtr   z/__missing__.key)r   r   N)
r   ospathdirname__file__rH   r   
ValueErrorr   r   )r0   r   
module_direxisting_certificateexisting_keys        r1   test_missing_key"BadSSLOptionsTest.test_missing_key   s     "mWW__X.
!ww||J
Cww||J
;!#%67	 	 	
 	!0-	 	 	
 	%9S	
r4   r`   N)rA   rB   rC   rD   r   r   rE   r`   r4   r1   r   r      s    

r4   r   c                       \ rS rSrS rSrg)MultipartTestHandler   c           	         U R                  U R                  R                  S   U R                  S5      U R                  R                  S   S   R
                  [        U R                  R                  S   S   S   5      S.5        g )NzX-Header-Encoding-Testargumentfilesr   rZ   )headerr   filenamefilebody)r?   rl   r-   get_argumentr   r   r   rT   s    r1   rr   MultipartTestHandler.post   sr    ,,../GH --j9 LL..w7:CC$T\\%7%7%@%CF%KL		
r4   r`   NrA   rB   rC   rD   rr   rE   r`   r4   r1   r   r      s    
r4   r   c                   F    \ rS rSrS rS rS
S jrS rS r\	S 5       r
Srg	)HTTPConnectionTest   c                 "    S[         4S[        4/$ )Nz
/multipart/hello)r   rb   rT   s    r1   get_handlersHTTPConnectionTest.get_handlers   s    /0/0
 	
r4   c                 4    [        U R                  5       5      $ r+   )r   r   rT   s    r1   rU   HTTPConnectionTest.get_app   s    4,,.//r4   c                   ^ ^ [        [        [        R                  " 5       5      5       mT R                  R	                  U U4S j5        TR                  UR                  U[        S[        U5      -  5      /-   5      U-   U-   U-   5        T R                  R	                  U4S j5      u  pAnUsS S S 5        $ ! , (       d  f       g = f)Nc                  F   > TR                  ST R                  5       45      $ N	127.0.0.1)connectget_http_portr0   rI   s   r1   <lambda>.HTTPConnectionTest.raw_fetch.<locals>.<lambda>  s    T5G5G5I'JKr4   zContent-Length: %dc                     > [        T 5      $ r+   )rK   rI   s   r1   r  r    s    (0r4   )	r"   r   socketio_looprun_syncwriterH   r   rq   )r0   r-   rZ   newliner.   rI   s   `    @r1   	raw_fetchHTTPConnectionTest.raw_fetch   s    Xfmmo./6LL!!K LLW-ACI-M(N'OOP  )-(=(=0)%J  0//s   BB::
Cc                 t   U R                  / SQSR                  SSSR                  S5      SSR                  S	5      SS
R                  S5      SS/	5      5      n[        U5      nU R	                  SUS   5        U R	                  SUS   5        U R	                  SUS   5        U R	                  S
US   5        g )N)s   POST /multipart HTTP/1.0s6   Content-Type: multipart/form-data; boundary=1234567890s   X-Header-encoding-test:    
s-   Content-Disposition: form-data; name=argumentr4      ázutf-8s   --1234567890u;   Content-Disposition: form-data; name="files"; filename="ó"r      ús   --1234567890--   ér   r      ór   r   )r  rH   encoder   r   r0   r]   datas      r1   test_multipart_form&HTTPConnectionTest.test_multipart_form  s     >>
 LLDOOG,#U\\ OOG,%
, 8$4>24
#344
#344
#34r4   c                 ^    S H'  nU R                  S/SUS9nU R                  US5        M)     g )N)r     
s   GET /hello HTTP/1.0r4   )r  r   )r  r   )r0   r  r]   s      r1   test_newlines HTTPConnectionTest.test_newlines/  s4    'G~~'=&>W~UHX~6 (r4   c              #     #    [        [        R                  " 5       5      nUR                  SU R                  5       45      v   UR	                  SR                  / SQ5      5      v   UR                  S5      v nU R                  UR                  S5      U5        UR	                  S5        UR                  S5      v nU R                  UR                  S5      U5        UR                  S5      v n[        R                  " [        UR                  S5      5      5      nUR                  [        US	   5      5      v nU R                  US
5        UR!                  5         g 7f)Nr   r  )s   POST /hello HTTP/1.1s   Content-Length: 1024s   Expect: 100-continues   Connection: closer     

s   HTTP/1.1 100 s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   HTTP/1.1 200latin1Content-Lengths   Got 1024 bytes in POST)r   r  r   r  r
  rH   
read_until
assertTrue
startswithr   parser
   decode
read_bytesintr   close)r0   rI   r  
first_lineheader_datar-   rZ   s          r1   test_100_continue$HTTPConnectionTest.test_100_continue5  s&    
 &--/*nnk4+=+=+?@AAllLL

 
	
 &&{33(894@[!!,,W55

--o>
K"--k::##J{/A/A(/K$LM&&s73C+D'EFF89s   E"E$r`   N)r  )rA   rB   rC   rD   r   rU   r  r  r  r   r,  rE   r`   r4   r1   r   r      s/    
0 5>7  r4   r   c                        \ rS rSrS rS rSrg)EchoHandleriS  c                 `    U R                  [        U R                  R                  5      5        g r+   r
  r	   rl   	argumentsrT   s    r1   rn   EchoHandler.getT      

$T\\%;%;<=r4   c                 `    U R                  [        U R                  R                  5      5        g r+   r1  rT   s    r1   rr   EchoHandler.postW  r4  r4   r`   NrA   rB   rC   rD   rn   rr   rE   r`   r4   r1   r/  r/  S  s    >>r4   r/  c                   ,    \ rS rSrS rS rS rS rSrg)TypeCheckHandleri[  c           	      @   0 U l         S[        4S[        4S[        4S[        4S[        4S[        4S[        4S[        4/nU H,  u  p#U R                  U[        U R                  U5      U5        M.     U R                  S	[        U R                  R                  R                  5       5      S
   [        5        U R                  S[        U R                  R                  R                  5       5      S
   [        5        U R                  S[        U R                  R                  R                  5       5      S
   [        5        U R                  S[        U R                  R                  R                  5       5      S
   R                  [        5        U R                  S[        U R                  R                  R                  5       5      S
   [        5        U R                  S[        U R                  R                  R                  5       5      S
   S
   [        5        g )Nr   uriversion	remote_iprg   hostr   query
header_keyr   header_value
cookie_keycookie_valuearg_key	arg_value)errorsstr
check_typegetattrrl   listr-   keysvaluescookiesvaluer2  bytes)r0   fieldsfieldexpected_types       r1   prepareTypeCheckHandler.prepare\  s   sOCL#SMSMcN	
 %+ EOOE74<<#?O %+ 	d4<<+?+?+D+D+F&G&JCPT\\-A-A-H-H-J(KA(NPSTd4<<+?+?+D+D+F&G&JCPD!5!5!<!<!>?BHH#	

 		4(>(>(C(C(E#Fq#I3OT$,,*@*@*G*G*I%J1%Ma%PRWXr4   c                     U R                  SU R                  R                  [        5        U R	                  U R
                  5        g )NrZ   )rH  rl   rZ   rO  r
  rF  rT   s    r1   rr   TypeCheckHandler.postw  s,     1 159

4;;r4   c                 :    U R                  U R                  5        g r+   )r
  rF  rT   s    r1   rn   TypeCheckHandler.get{  s    

4;;r4   c                 T    [        U5      nX4:w  a  SU< SU< 3U R                  U'   g g )Nz	expected z, got )typerF  )r0   nameobjrR  actual_types        r1   rH  TypeCheckHandler.check_type~  s)    3i'9F TDKK (r4   )rF  N)	rA   rB   rC   rD   rS  rr   rn   rH  rE   r`   r4   r1   r9  r9  [  s    Y6  Ur4   r9  c                       \ rS rSrS rSrg)PostEchoHandleri  c                 R    U R                  [        U R                  S5      S95        g )Nr  )echo)r
  r}   r   )r0   	path_argss     r1   rr   PostEchoHandler.post  s    

4T..v678r4   r`   Nr   r`   r4   r1   r`  r`    s    9r4   r`  c                       \ rS rSrSS jrSrg)PostEchoGBKHandleri  Nc                 `     UR                  S5      $ ! [         a    [        SSU-  5      ef = f)Ngbk  zinvalid gbk bytes: %r)r&  rm   r   )r0   rN  r[  s      r1   decode_argument"PostEchoGBKHandler.decode_argument  s;    	B<<&& 	BC!85!@AA	Bs    -r`   r+   )rA   rB   rC   rD   rj  rE   r`   r4   r1   rf  rf    s    Br4   rf  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)HTTPServerTesti  c                 ^    [        S[        4S[        4S[        4S[        4S[        4/5      $ )N/echo
/typecheck//doubleslashz
/post_utf8z	/post_gbk)r   r/  r9  r`  rf  rT   s    r1   rU   HTTPServerTest.get_app  s>    +&/0 +./01
 	
r4   c                 z    U R                  S5      n[        UR                  5      nU R                  USS/05        g )Nz/echo?foo=%C3%A9foor  rX   r   rZ   r   r  s      r1   test_query_string_encoding)HTTPServerTest.test_query_string_encoding  s6    ::018==)z23r4   c                 |    U R                  S5      n[        UR                  5      nU R                  USSS/05        g )Nz/echo?foo=&foo=rt   ru  r  s      r1   test_empty_query_string&HTTPServerTest.test_empty_query_string  s8    ::/08==)Bx01r4   c                 ~    U R                  SSSS9n[        UR                  5      nU R                  US/S/S.5        g )Nro  r   z	foo=&bar=r   ry  )rt  barru  r  s      r1   test_empty_post_parameters)HTTPServerTest.test_empty_post_parameters  s=    ::gf;:G8==)tRD9:r4   c                     SS0nU R                  SUS9n[        UR                  5      nU R                  U0 5        U R                  SSSUS9n[        UR                  5      nU R                  U0 5        g )NCookiefoo=barz/typecheck?foo=barr-   rp  r   r   rZ   r-   ru  )r0   r-   r]   r  s       r1   
test_typesHTTPServerTest.test_types  sy    Y'::2G:D8==)r"::i  
 8==)r"r4   c                     U R                  S5      nU R                  SUR                  5        U R                  [        UR                  5      0 5        g )Nrq     )rX   r   coder   rZ   r   s     r1   test_double_slash HTTPServerTest.test_double_slash  s?     ::o.hmm,X]]3R8r4   c           
         SS0nSnS H  nS H  nU R                  X4S9   UR                  U5      nU(       a.  [        R                  R	                  U5      R                  S5      nU R                  SU-   S	US
U-   S9nU R                  [        UR                  5      SU05        S S S 5        M     M     g ! , (       d  f       M  = f)NzContent-Typez!application/x-www-form-urlencodedu   chinese: 张三)r   rh  )TF)encquoteasciiz/post_r   s   data=)r   r-   rZ   rb  )	subTestr  urllibr%  r  rX   r   r   rZ   )r0   r-   uni_textr  r  bin_textr]   s          r1   test_post_encodings"HTTPServerTest.test_post_encodings  s    !#FG*"C&\\c\7's3H#)<<#5#5h#?#F#Fw#O#zz 3% '&1	  *  H $$[%?&(AST 87 ' #77s   BB77
Cr`   N)rA   rB   rC   rD   rU   rv  rz  r~  r  r  r  rE   r`   r4   r1   rm  rm    s&    	
4
2
;

#9Ur4   rm  c                      ^  \ rS rSrS rU 4S jrU 4S jrS rS rS r	S r
S	 rS
 rS rS rS rS r\S 5       rSrU =r$ )HTTPServerRawTesti  c                 &    [        S[        4/5      $ )Nro  r   r/  rT   s    r1   rU   HTTPServerRawTest.get_app  s    Wk2344r4   c                    >^  [         TT ]  5         [        [        R                  " 5       5      T l        T R
                  R                  U 4S j5        g )Nc                  Z   > T R                   R                  ST R                  5       45      $ r   )rI   r   r  rT   s   r1   r  )HTTPServerRawTest.setUp.<locals>.<lambda>  s"    DKK''d6H6H6J(KLr4   )supersetUpr   r  rI   r  r	  r0   rR   s   `r1   r  HTTPServerRawTest.setUp  s3    v}}/L	
r4   c                 V   > U R                   R                  5         [        TU ]  5         g r+   )rI   r)  r  tearDownr  s    r1   r  HTTPServerRawTest.tearDown  s    r4   c                     U R                   R                  5         U R                  R                  [        R
                  " SS9U R                  5        U R                  5         g )NMbP?seconds)rI   r)  r  add_timeoutdatetime	timedeltastopwaitrT   s    r1   test_empty_request$HTTPServerRawTest.test_empty_request  s>      !3!3E!BDIIN		r4   c                   ^  [        [        S[        R                  S9   T R                  R                  S5        T R                  R                  U 4S j5      u  pnT R                  SUR                  5        T R                  SUR                  5        T R                  SUR                  5        S S S 5        g ! , (       d  f       g = f)N.*Malformed HTTP request linelevel   asdf

c                  .   > [        T R                  5      $ r+   rK   rI   rT   s   r1   r  FHTTPServerRawTest.test_malformed_first_line_response.<locals>.<lambda>      (5r4   HTTP/1.1ri  zBad Request)r   r   loggingINFOrI   r
  r  r	  r   r<  r  reasonr0   r.   r-   r]   s   `   r1   "test_malformed_first_line_response4HTTPServerRawTest.test_malformed_first_line_response  s    w ?w||TKKo.,0LL,A,A5-)J Z););<S*//2]J,=,=> UTTs   BB::
Cc                 8   [        [        S[        R                  S9   U R                  R                  S5        U R                  R                  [        R                  " SS9U R                  5        U R                  5         S S S 5        g ! , (       d  f       g = f)Nr  r  r  皙?r  r   r   r  r  rI   r
  r  r  r  r  r  r  rT   s    r1   test_malformed_first_line_log/HTTPServerRawTest.test_malformed_first_line_log  s`    w ?w||TKKo. LL$$X%7%7%EtyyQIIK UTT   A$B
Bc                 8   [        [        S[        R                  S9   U R                  R                  S5        U R                  R                  [        R                  " SS9U R                  5        U R                  5         S S S 5        g ! , (       d  f       g = f)Nz1.*Malformed HTTP message.*no colon in header liner  s   GET / HTTP/1.0
asdf

r  r  r  rT   s    r1   test_malformed_headers(HTTPServerRawTest.test_malformed_headers  sh    ?,,

 KK?@LL$$X%7%7%EtyyQIIK
 
 
r  c                    ^  T R                   R                  SR                  SS5      5        T R                  R	                  U 4S j5      u  pnT R                  [        U5      SS/05        g )Nsp   POST /echo HTTP/1.1
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

r  r  c                  .   > [        T R                  5      $ r+   r  rT   s   r1   r  =HTTPServerRawTest.test_chunked_request_body.<locals>.<lambda>      $T[[1r4   rt  r}  rI   r
  r   r  r	  r   r   r  s   `   r1   test_chunked_request_body+HTTPServerRawTest.test_chunked_request_body  i     	 Gw	
  )-(=(=1)
%
X 	X.0@Ar4   c                    ^  T R                   R                  SR                  SS5      5        T R                  R	                  U 4S j5      u  pnT R                  [        U5      SS/05        g )Nsp   POST /echo HTTP/1.1
Transfer-Encoding: Chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

r  r  c                  .   > [        T R                  5      $ r+   r  rT   s   r1   r  BHTTPServerRawTest.test_chunked_request_uppercase.<locals>.<lambda>.  r  r4   rt  r}  r  r  s   `   r1   test_chunked_request_uppercase0HTTPServerRawTest.test_chunked_request_uppercase  r  r4   c                 F  ^  T R                   R                  SR                  SS5      5        [        [        S[
        R                  S9   T R                  R                  U 4S j5      u  pnS S S 5        T R                  SWR                  5        g ! , (       d  f       N+= f)NsR   POST /echo HTTP/1.1
Transfer-Encoding: chunked

1_a
1234567890abcdef1234567890
0

r  r  z.*invalid chunk sizer  c                  .   > [        T R                  5      $ r+   r  rT   s   r1   r  JHTTPServerRawTest.test_chunked_request_body_invalid_size.<locals>.<lambda>D  r  r4   ri  )rI   r
  r   r   r   r  r  r  r	  r   r  r  s   `   r1   &test_chunked_request_body_invalid_size8HTTPServerRawTest.test_chunked_request_body_invalid_size2  s     	 Gw	
 w 6gllK,0LL,A,A5-)J L 	joo.	 LKs   
#B
B c                 &  ^  T R                   R                  S5        [        [        S[        R
                  S9   T R                  R                  U 4S j5      u  pnS S S 5        T R                  SWR                  5        g ! , (       d  f       N+= f)NsS   POST /echo HTTP/1.1
Transfer-Encoding: chunked
Transfer-encoding: chunked

2
ok
0

z/.*Unsupported Transfer-Encoding chunked,chunkedr  c                  .   > [        T R                  5      $ r+   r  rT   s   r1   r  NHTTPServerRawTest.test_chunked_request_body_duplicate_header.<locals>.<lambda>]  r  r4   ri  
rI   r
  r   r   r  r  r  r	  r   r  r  s   `   r1   *test_chunked_request_body_duplicate_header<HTTPServerRawTest.test_chunked_request_body_duplicate_headerH  sw     			
 =,,

 -1LL,A,A5-)J
 	joo.
 
   #B
Bc                 &  ^  T R                   R                  S5        [        [        S[        R
                  S9   T R                  R                  U 4S j5      u  pnS S S 5        T R                  SWR                  5        g ! , (       d  f       N+= f)Ns>   POST /echo HTTP/1.1
Transfer-Encoding: gzip, chunked

2
ok
0

z-.*Unsupported Transfer-Encoding gzip, chunkedr  c                  .   > [        T R                  5      $ r+   r  rT   s   r1   r  [HTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encoding.<locals>.<lambda>r  r  r4   ri  r  r  s   `   r1   7test_chunked_request_body_unsupported_transfer_encodingIHTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encodinga  st    
	
 DGLL
 -1LL,A,A5-)J
 	joo.
 
r  c                 &  ^  T R                   R                  S5        [        [        S[        R
                  S9   T R                  R                  U 4S j5      u  pnS S S 5        T R                  SWR                  5        g ! , (       d  f       N+= f)NsJ   POST /echo HTTP/1.1
Transfer-Encoding: chunked
Content-Length: 2

2
ok
0

z8.*Message with both Transfer-Encoding and Content-Lengthr  c                  .   > [        T R                  5      $ r+   r  rT   s   r1   r  bHTTPServerRawTest.test_chunked_request_body_transfer_encoding_and_content_length.<locals>.<lambda>  r  r4   ri  r  r  s   `   r1   >test_chunked_request_body_transfer_encoding_and_content_lengthPHTTPServerRawTest.test_chunked_request_body_transfer_encoding_and_content_lengthv  su    		
 F,,

 -1LL,A,A5-)J
 	joo.
 
r  c              #   ^  #    / SQnU H  u  p#U R                  US9   [        [        [        R                  " 5       5      5       n[	        [
        S[        R                  S9   UR                  SU R                  5       45      v   UR                  [        [        R                  " SU S35      R                  SS	5      5      5        UR                  5       v   S S S 5        S S S 5        S S S 5        M     g ! , (       d  f       N#= f! , (       d  f       N,= f! , (       d  f       GM!  = f7f)
N))
alphabeticrt  )leading plus+10)zinternal underscore1_0)r[  z(.*Only integer Content-Length is allowedr  r   z\                            POST /echo HTTP/1.1
                            Content-Length: zs
                            Connection: close

                            1234567890
                            
z
)r  r"   r   r  r   r   r  r  r   r  r
  r   textwrapdedentr   read_until_close)r0   
test_casesr[  rN  rI   s        r1   test_invalid_content_length-HTTPServerRawTest.test_invalid_content_length  s     



 &KD4('(6==?2K*LPV>!,,
 !..+t7I7I7K)LMMLL$OO%--2G 4!  &gdF3
 !1133' +M(( &  +M*L((sM   D-(DD	#A8C8	D	#D+D-8
DD		
DD
D*	$	D-r  )rA   rB   rC   rD   rU   r  r  r  r  r  r  r  r  r  r  r  r  r   r  rE   __classcell__rR   s   @r1   r  r    sZ    5

?B0B0/,/2/*/0 4 4r4   r  c                   B    \ rS rSr " S S\5      rS rS rS rS r	Sr
g	)
XHeaderTesti  c                       \ rS rSrS rSrg)XHeaderTest.Handleri  c                     U R                  SU R                  R                  5        U R                  [	        U R                  R
                  U R                  R                  S95        g )Nrequest-version)r=  remote_protocol)
set_headerrl   r<  r
  r}   r=  rg   rT   s    r1   rn   XHeaderTest.Handler.get  sI    OO-t||/C/CDJJ"ll44$(LL$9$9r4   r`   NrA   rB   rC   rD   rn   rE   r`   r4   r1   rS   r    s    	r4   rS   c                     [        SS/S9$ )NTz5.5.5.5)xheaderstrusted_downstreamr}   rT   s    r1   get_httpserver_options"XHeaderTest.get_httpserver_options  s    TykBBr4   c                 n   U R                  U R                  S5      S   S5        SS0nU R                  U R                  SUS9S   S5        SS0nU R                  U R                  SUS9S   S5        SS	0nU R                  U R                  SUS9S   S	5        SS
0nU R                  U R                  SUS9S   S	5        SS0nU R                  U R                  SUS9S   S5        SS0nU R                  U R                  SUS9S   S5        SS0nU R                  U R                  SUS9S   S5        g )NrQ   r=  r   z	X-Real-IP4.4.4.4r  X-Forwarded-Forz127.0.0.1, 4.4.4.4z2620:0:1cfe:face:b00c::3z::1, 2620:0:1cfe:face:b00c::3z4.4.4.4<script>z4.4.4.4, 5.5.5.5<script>zwww.google.comr   r^   )r0   
valid_ipv4valid_ipv4_list
valid_ipv6valid_ipv6_listinvalid_charsinvalid_chars_listinvalid_hosts           r1   test_ip_headersXHeaderTest.test_ip_headers  s   -k:KH!9-
OOCO4[A9	
 -.BCOOCO9+F		
 "#=>
OOCO4[A&	

 -.MNOOCO9+F&	

 %&78OOCO7Dk	
 01KLOOC);O<[I;	
 $%56OOCO6{C[	
r4   c                     SS0nU R                  SUS9nUR                  S   R                  S5      (       a  U R                  S5        [	        UR
                  5      nU R                  US   S	5        g )
Nr  z127.0.0.1, 4.4.4.4, 5.5.5.5rQ   r  r  zHTTP/2requires HTTP/1.xr=  r  )rX   r-   r$  skipTestr   rZ   r   )r0   r  respresults       r1   test_trusted_downstream#XHeaderTest.test_trusted_downstream  sl    ,.KLzz#z7<<)*55h?? MM-.TYY',i8r4   c                    U R                  U R                  S5      S   S5        SS0nU R                  U R                  SUS9S   S5        SS0nU R                  U R                  SUS9S   S5        SS0nU R                  U R                  SUS9S   S5        SS	0nU R                  U R                  SUS9S   S5        SS
0nU R                  U R                  SUS9S   S5        g )NrQ   r   rt   X-Schemer{   r  zX-Forwarded-Protozhttps , httpz
http,httpsunknownr  )r0   https_schemehttps_forwardedhttps_multi_forwardedhttp_multi_forwardedbad_forwardeds         r1   test_scheme_headersXHeaderTest.test_scheme_headers  s   -.?@&I"G,OOCO67HI7	
 /8OOCO9:KLg	
 "5n EOOC)>O?@QR	

 !4\BOOC)=O>?PQ	

 -i8OOCO78IJF	
r4   r`   N)rA   rB   rC   rD   r    rS   r  r  r  r&  rE   r`   r4   r1   r  r    s$    . C&
P9
r4   r  c                   4   ^  \ rS rSrS rU 4S jrS rSrU =r$ )SSLXHeaderTesti  c                 :    [        S[        R                  4/5      $ rP   )r   r  rS   rT   s    r1   rU   SSLXHeaderTest.get_app  s    S+"5"56788r4   c                 .   > [         TU ]  5       nSUS'   U$ )NTr  )r  r  )r0   outputrR   s     r1   r  %SSLXHeaderTest.get_httpserver_options  s    /1!zr4   c                     U R                  U R                  S5      S   S5        SS0nU R                  U R                  SUS9S   S5        SS0nU R                  U R                  SUS9S   S5        g )NrQ   r   r{   r  rt   r  r   r  )r0   http_scheme
bad_schemes      r1   test_request_without_xprotocol-SSLXHeaderTest.test_request_without_xprotocol  s    -.?@'J!6*OOCO56GH&	
 !),
OOCO45FG	
r4   r`   )	rA   rB   rC   rD   rU   r  r2  rE   r  r  s   @r1   r)  r)    s    9

 
r4   r)  c                   6    \ rS rSr " S S\5      rS rS rSrg)ManualProtocolTesti&  c                       \ rS rSrS rSrg)ManualProtocolTest.Handleri'  c                 \    U R                  [        U R                  R                  S95        g )Nr|   )r
  r}   rl   rg   rT   s    r1   rn   ManualProtocolTest.Handler.get(  s    JJtT\\%:%:;<r4   r`   Nr  r`   r4   r1   rS   r7  '  s    	=r4   rS   c                     [        SS9$ )Nr{   r|   r  rT   s    r1   r  )ManualProtocolTest.get_httpserver_options+  s    W%%r4   c                 L    U R                  U R                  S5      S   S5        g )NrQ   rg   r{   r  rT   s    r1   test_manual_protocol'ManualProtocolTest.test_manual_protocol.  s     -j97Cr4   r`   N)	rA   rB   rC   rD   r    rS   r  r=  rE   r`   r4   r1   r5  r5  &  s    =. =&Dr4   r5  AF_UNIXcygwinz+unix sockets not supported on this platformc                   X   ^  \ rS rSrSrU 4S jrU 4S jr\S 5       r\S 5       r	Sr
U =r$ )UnixSocketTesti2  am  HTTPServers can listen on Unix sockets too.

Why would you want to do this?  Nginx can proxy to backends listening
on unix sockets, for one thing (and managing a namespace for unix
sockets can be easier than managing a bunch of TCP port numbers).

Unfortunately, there's no way to specify a unix socket in a url for
an HTTP client, so we have to test this by hand.
c                   >^  [         TT ]  5         [        R                  " 5       T l        [
        R                  R                  T R                  S5      T l        [        R                  " T R                  5      n[        S[        4/5      n[        U5      T l        T R                  R                  U5        [!        ["        R"                  " ["        R$                  5      5      T l        T R(                  R+                  U 4S j5        g )Nz	test.sockr   c                  N   > T R                   R                  T R                  5      $ r+   )rI   r   sockfilerT   s   r1   r  &UnixSocketTest.setUp.<locals>.<lambda>J  s    dkk&9&9$--&Hr4   )r  r  tempfilemkdtemptmpdirr   r   rH   rE  r   bind_unix_socketr   rb   r   server
add_socketr   r  r?  rI   r  r	  )r0   sockapprR   s   `  r1   r  UnixSocketTest.setUpA  s    &&(T[[+>''6H&>?@A ot$v}}V^^<=HIr4   c                 (  > U R                   R                  5         U R                  R                  U R                  R
                  5        U R                  R                  5         [        R                  " U R                  5        [        TU ]-  5         g r+   )rI   r)  r  r	  rK  close_all_connectionsr  shutilrmtreerI  r  r  r  s    r1   r  UnixSocketTest.tearDownL  sZ    dkk??@dkk"r4   c              #     #    U R                   R                  S5        U R                   R                  S5      v nU R                  US5        U R                   R                  S5      v n[        R
                  " UR                  S5      5      nU R                   R                  [        US   5      5      v nU R                  US5        g 7f)Ns   GET /hello HTTP/1.0

r  s   HTTP/1.1 200 OK
r  r   r!  r   )	rI   r
  r"  r   r   r%  r&  r'  r(  )r0   r]   r+  r-   rZ   s        r1   test_unix_socketUnixSocketTest.test_unix_socketS  s     89//88#9: KK22;??##K$6$6x$@A[[++C8H0I,JKK~.s   C	Cc              #     #    [        [        S[        R                  S9   U R                  R                  S5        U R                  R                  5       v nS S S 5        U R                  WS5        g ! , (       d  f       N!= f7f)NzMalformed HTTP message fromr  s   garbage

   HTTP/1.1 400 Bad Request

)r   r   r  r  rI   r
  r  r   r   s     r1   test_unix_socket_bad_request+UnixSocketTest.test_unix_socket_bad_request]  sb      w =W\\RKK01![[99;;H S 	#FG SRs   B8A3B3
B=B)rK  rE  rI   rI  )rA   rB   rC   rD   __doc__r  r  r   rV  rZ  rE   r  r  s   @r1   rB  rB  2  s=    
	J / / H Hr4   rB  c                   `  ^  \ rS rSrSrS rU 4S jrU 4S jr\R                  S 5       r
\R                  S 5       r\R                  S 5       rS	 r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrU =r$ )KeepAliveTestig  zTests various scenarios for HTTP 1.1 keep-alive support.

These tests don't use AsyncHTTPClient because we want to control
connection reuse and closing.
c                      " S S[         5      n " S S[         5      n " S S[         5      n " S S[         5      n[        5       U l        [        S	U4S
U4SU4SU[	        U R                  S94/5      $ )Nc                        \ rS rSrS rS rSrg)+KeepAliveTest.get_app.<locals>.HelloHandlerio  c                 &    U R                  S5        g Nrk   r?   rT   s    r1   rn   /KeepAliveTest.get_app.<locals>.HelloHandler.getp      M*r4   c                 &    U R                  S5        g rc  rd  rT   s    r1   rr   0KeepAliveTest.get_app.<locals>.HelloHandler.posts  rf  r4   r`   Nr7  r`   r4   r1   HelloHandlerra  o  s    ++r4   ri  c                       \ rS rSrS rSrg)+KeepAliveTest.get_app.<locals>.LargeHandleriv  c                 d    U R                  SR                  S [        S5       5       5      5        g )Nry  c              3   D   #    U  H  n[        US -  5      S-  v   M     g7f)      N)chr).0is     r1   	<genexpr>BKeepAliveTest.get_app.<locals>.LargeHandler.get.<locals>.<genexpr>z  s     "K
13q3w<$#6
s    i   )r
  rH   rangerT   s    r1   rn   /KeepAliveTest.get_app.<locals>.LargeHandler.getw  s#     

277"Kc
"KKLr4   r`   Nr  r`   r4   r1   LargeHandlerrk  v  s    Mr4   rw  c                   8    \ rS rSr\R
                  S 5       rSrg)=KeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandleri|  c              3   R   #    U R                  S5        U R                  5       v   g 7frc  )r
  flushrT   s    r1   headBKeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandler.head}  s     

=)jjl"s   %'r`   N)rA   rB   rC   rD   r   	coroutiner|  rE   r`   r4   r1   TransferEncodingChunkedHandlerry  |  s    ]]# #r4   r  c                   D    \ rS rSrS r\R                  S 5       rS rSr	g)3KeepAliveTest.get_app.<locals>.FinishOnCloseHandleri  c                     Xl         g r+   cleanup_event)r0   r  s     r1   rh   >KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.initialize  s    %2"r4   c              3   d   #    U R                  5         U R                  R                  5       v   g 7fr+   )r{  r  r  rT   s    r1   rn   7KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.get  s#     

((--//s   .0c                 &    U R                  S5        g )Nclosedrd  rT   s    r1   on_connection_closeGKeepAliveTest.get_app.<locals>.FinishOnCloseHandler.on_connection_close  s     H%r4   r  N)
rA   rB   rC   rD   rh   r   r~  rn   r  rE   r`   r4   r1   FinishOnCloseHandlerr    s$    3 ]]0 0&r4   r  rQ   z/largez/chunkedz/finish_on_closer  )r    r   r  r   r}   )r0   ri  rw  r  r  s        r1   rU   KeepAliveTest.get_appn  s    	+> 	+	M> 	M	#^ 	#	&> 	& #Wl#<(;<&(t'9'9:		
 	
r4   c                 0   > [         TU ]  5         SU l        g )Ns   HTTP/1.1)r  r  http_versionr  s    r1   r  KeepAliveTest.setUp  s    'r4   c                   > U R                   R                  [        R                  " SS9U R                  5        U R                  5         [        U S5      (       a  U R                  R                  5         [        TU ])  5         g )Nr  r  rI   )r  r  r  r  r  r  hasattrrI   r)  r  r  r  s    r1   r  KeepAliveTest.tearDown  sY     	  !3!3E!BDIIN		4""KKr4   c              #      #    [        [        R                  " 5       5      U l        U R                  R                  SU R	                  5       45      v   g 7fr   )r   r  rI   r   r  rT   s    r1   r   KeepAliveTest.connect  s:     v}}/kk!!;0B0B0D"EFFs   AAc              #   6  #    U R                   R                  S5      v nU R                  UR                  S5      U5        U R                   R                  S5      v n[        R
                  " UR                  S5      5      n[        R                  " U5      e7f)Nr  r  r  r   )	rI   r"  r#  r$  r   r%  r&  r   Return)r0   r*  header_bytesr-   s       r1   read_headersKeepAliveTest.read_headers  sv     ;;11'::

--o>
K![[33K@@##L$7$7$ABjj!!s   BBc              #      #    U R                  5       v U l        U R                  R                  [	        U R                  S   5      5      v nU R                  SU5        g 7f)Nr!  r   )r  r-   rI   r'  r(  r   )r0   rZ   s     r1   rG   KeepAliveTest.read_response  sN     !..00[[++C=M0N,OPP.s   AA c                 <    U R                   R                  5         U ? g r+   )rI   r)  rT   s    r1   r)  KeepAliveTest.close  s    Kr4   c              #     #    U R                  5       v   U R                  R                  S5        U R                  5       v   U R                  R                  S5        U R                  5       v   U R	                  5         g 7f)N   GET / HTTP/1.1

r   rI   r
  rG   r)  rT   s    r1   test_two_requestsKeepAliveTest.test_two_requests  s^     lln34  ""34  ""

   A>B c              #   L  #    U R                  5       v   U R                  R                  S5        U R                  5       v   U R                  R	                  5       v nU R                  U(       + 5        U R                  U R                  S   S5        U R                  5         g 7f)Ns%   GET / HTTP/1.1
Connection: close


Connectionr)  )	r   rI   r
  rG   r  r#  r   r-   r)  r0   r  s     r1   test_request_close KeepAliveTest.test_request_close  sx     llnHI  ""[[1133D!l3W=

s   B"B$c              #   X  #    SU l         U R                  5       v   U R                  R                  S5        U R	                  5       v   U R                  R                  5       v nU R                  U(       + 5        U R                  SU R                  ;  5        U R                  5         g 7f)N   HTTP/1.0s   GET / HTTP/1.0

r  )	r  r   rI   r
  rG   r  r#  r-   r)  r  s     r1   test_http10KeepAliveTest.test_http10  s|     'lln34  ""[[1133D!DLL89

s   B(B*c              #     #    SU l         U R                  5       v   U R                  R                  S5        U R	                  5       v   U R                  U R                  S   S5        U R                  R                  S5        U R	                  5       v   U R                  U R                  S   S5        U R                  5         g 7f)Nr  *   GET / HTTP/1.0
Connection: keep-alive

r  
Keep-Aliver  r   rI   r
  rG   r   r-   r)  rT   s    r1   test_http10_keepalive#KeepAliveTest.test_http10_keepalive  s     'llnMN  ""l3\BMN  ""l3\B

   CCc              #     #    SU l         U R                  5       v   U R                  R                  S5        U R	                  5       v   U R                  U R                  S   S5        U R                  R                  S5        U R	                  5       v   U R                  U R                  S   S5        U R                  5         g 7f)Nr  s,   GET / HTTP/1.0
Connection: keep-alive


r  r  r  r  rT   s    r1    test_http10_keepalive_extra_crlf.KeepAliveTest.test_http10_keepalive_extra_crlf  s     'llnQR  ""l3\BMN  ""l3\B

r  c              #      #    U R                  5       v   U R                  R                  S5        U R                  5       v   U R                  5       v   U R	                  5         g 7fNs$   GET / HTTP/1.1

GET / HTTP/1.1

r  rT   s    r1   test_pipelined_requests%KeepAliveTest.test_pipelined_requests  sK     llnIJ  ""  ""

s   A#A%c              #      #    U R                  5       v   U R                  R                  S5        U R                  5       v   U R	                  5         g 7fr  r  rT   s    r1   test_pipelined_cancel#KeepAliveTest.test_pipelined_cancel  s<     llnIJ  ""

s   AAc              #      #    U R                  5       v   U R                  R                  S5        U R                  5       v   U R                  R	                  S5      v   U R                  5         g 7f)Ns   GET /large HTTP/1.1

ro  )r   rI   r
  r  r'  r)  rT   s    r1   test_cancel_during_download)KeepAliveTest.test_cancel_during_download  sQ     lln89!!kk$$T**

s   A.A0c              #      #    U R                  5       v   U R                  R                  S5        U R                  5       v   U R	                  5         U R
                  R                  5         g 7f)Ns!   GET /finish_on_close HTTP/1.1

)r   rI   r
  r  r)  r  setrT   s    r1   test_finish_while_closed&KeepAliveTest.test_finish_while_closed  sN     llnBC!!

 s   A+A-c              #     #    SU l         U R                  5       v   U R                  R                  S5        U R	                  5       v   U R                  U R                  S   S5        U R                  R                  S5        U R	                  5       v   U R                  U R                  S   S5        U R                  5         g 7f)Nr  sL   POST / HTTP/1.0
Connection: keep-alive
Transfer-Encoding: chunked

0

r  r  r  r  rT   s    r1   test_keepalive_chunked$KeepAliveTest.test_keepalive_chunked  s     'lln	
   ""l3\BMN  ""l3\B

r  c              #     #    U R                  5       v   U R                  R                  S5        U R                  5       v   U R                  R                  S5        U R                  5       v   U R	                  5         g 7f)Ns   HEAD /chunked HTTP/1.1

)r   rI   r
  r  r)  rT   s    r1   #test_keepalive_chunked_head_no_body1KeepAliveTest.test_keepalive_chunked_head_no_body0  s^     lln;<!!;<!!

r  )r  r-   r  rI   )rA   rB   rC   rD   r\  rU   r  r  r   r~  r   r  rG   r)  r   r  r  r  r  r  r  r  r  r  r  r  rE   r  r  s   @r1   r^  r^  g  sC   /
b( 	]]G G 	]]" " 	]]/ /
       	 	 	 	       ! !  $  r4   r^  c                   &    \ rS rSrS rS rS rSrg)GzipBaseTesti;  c                 &    [        S[        4/5      $ rP   r  rT   s    r1   rU   GzipBaseTest.get_app<  s    S+./00r4   c                     [        5       n[        R                  " SUS9nUR                  [	        U5      5        UR                  5         UR                  5       nU R                  SSUSS0S9$ )NwmodefileobjrQ   r   Content-Encodinggzipr  )r#   r  GzipFiler
  r   r)  getvaluerX   )r0   rZ   bytesio	gzip_filecompressed_bodys        r1   	post_gzipGzipBaseTest.post_gzip?  sh    )MMsG<	T
#!**,zz '0	  
 	
r4   c                 v    U R                  SSSS9nU R                  [        UR                  5      SS/05        g )NrQ   r   r  r   rt  r}  )rX   r   r   rZ   r   s     r1   test_uncompressedGzipBaseTest.test_uncompressedL  s6    ::c&y:AX]]3eeW5EFr4   r`   N)rA   rB   rC   rD   rU   r  r  rE   r`   r4   r1   r  r  ;  s    1
Gr4   r  c                   &    \ rS rSrS rS rS rSrg)GzipTestiQ  c                     [        SS9$ )NT)decompress_requestr  rT   s    r1   r  GzipTest.get_httpserver_optionsR  s    t,,r4   c                 v    U R                  S5      nU R                  [        UR                  5      SS/05        g )Nr  rt  r}  )r  r   r   rZ   r   s     r1   	test_gzipGzipTest.test_gzipU  s0    >>),X]]3eeW5EFr4   c                 .   [        5       n[        R                  " SUS9nUR                  [	        S5      5        UR                  5         UR                  5       nU R                  SSUSS0S9nU R                  [        UR                  5      S	S
/05        g )Nr  r  r  rQ   r   r  GZIPr  rt  r}  )r#   r  r  r
  r   r)  r  rX   r   r   rZ   )r0   r  r  r  r]   s        r1   test_gzip_case_insensitive#GzipTest.test_gzip_case_insensitiveY  s    )MMsG<	Y(!**,:: '0	  
 	X]]3eeW5EFr4   r`   N)rA   rB   rC   rD   r  r  r  rE   r`   r4   r1   r  r  Q  s    -GGr4   r  c                       \ rS rSrS rSrg)GzipUnsupportedTestii  c                     [        [        S5         U R                  S5      nS S S 5        U R                  WR                  S5        g ! , (       d  f       N+= f)Nz.*Unsupported Content-Encodingr  ri  )r   r   r  r   r  r   s     r1   test_gzip_unsupported)GzipUnsupportedTest.test_gzip_unsupportedj  sA     w @A~~i0H B, BAs   A
Ar`   N)rA   rB   rC   rD   r  rE   r`   r4   r1   r  r  i  s    -r4   r  c                   h    \ rS rSrSrSrS rS r " S S\5      r	S r
S	 rS
 rS rS rS rS rSrg)StreamingChunkSizeTestis  s2   01234567890123456789012345678901234567890123456789   c                     [        5       $ r+   r   rT   s    r1   get_http_client&StreamingChunkSizeTest.get_http_clientx       %&&r4   c                 *    [        U R                  SS9$ )NT)
chunk_sizer  )r}   
CHUNK_SIZErT   s    r1   r  -StreamingChunkSizeTest.get_httpserver_options}  s    t4HHr4   c                   ,    \ rS rSrS rS rS rS rSrg)&StreamingChunkSizeTest.MessageDelegatei  c                     Xl         g r+   
connectionr0   r  s     r1   __init__/StreamingChunkSizeTest.MessageDelegate.__init__      (Or4   c                     / U l         g r+   )chunk_lengthsr/   s      r1   r2   7StreamingChunkSizeTest.MessageDelegate.headers_received  s
    !#Dr4   c                 L    U R                   R                  [        U5      5        g r+   )r  r6   rq   )r0   r7   s     r1   r9   4StreamingChunkSizeTest.MessageDelegate.data_received  s    %%c%j1r4   c                 2   [        [        U R                  5      5      nU R                  R	                  [        SSS5      [        S[        [        U5      5      05      5        U R                  R                  U5        U R                  R                  5         g )Nr  r  OKr!  )r   r   r  r  write_headersr   r   rG  rq   r
  r?   )r0   response_bodys     r1   r?   -StreamingChunkSizeTest.MessageDelegate.finish  sq     T-?-?!@AMOO))!*c48-s3}3E/FGH OO!!-0OO""$r4   )r  r  N)	rA   rB   rC   rD   r  r2   r9   r?   rE   r`   r4   r1   MessageDelegater    s    	)	$	2	%r4   r  c                 .     " S S[         5      nU" 5       $ )Nc                       \ rS rSrS rSrg)+StreamingChunkSizeTest.get_app.<locals>.Appi  c                 ,    [         R                  U5      $ r+   )r  r  r0   server_connrequest_conns      r1   start_request9StreamingChunkSizeTest.get_app.<locals>.App.start_request  s    -==lKKr4   r`   NrA   rB   rC   rD   r  rE   r`   r4   r1   Appr    s    Lr4   r  r   r0   r  s     r1   rU   StreamingChunkSizeTest.get_app  s    	L. 	L ur4   c           	      t   U R                   " SSS0UD6nUR                  5         [        UR                  5      nU R	                  [        U R                  5      [        U5      5        U HJ  nU R                  X@R                  S[        U5      -   5        U R                  USS[        U5      -   5        ML     U$ )Nr   r   zoversized chunk: r   zempty chunk: )rQ   )rX   rY   r   rZ   r   rq   BODYsumassertLessEqualr  rG  assertGreater)r0   r\   r]   r8   r  s        r1   fetch_chunk_sizes(StreamingChunkSizeTest.fetch_chunk_sizes  s    ::;&;F;X]]+TYYV5 J  OO-@3v;-N z1oF.KL	 !
 r4   c                     [        5       n[        R                  " SUS9nUR                  U5        UR	                  5         UR                  5       n[        U5      [        U5      :  a  [        S5      eU$ )Nr  r  z#body did not shrink when compressed)r#   r  r  r
  r)  r  rq   rm   )r0   rZ   r  gzfile
compresseds        r1   compressStreamingChunkSizeTest.compress  s^    )C9T%%'
z?c$i'ABBr4   c                 ^    U R                  U R                  S9nU R                  / SQU5        g )N)rZ   )r  r  r     )r$  r   r   )r0   r8   s     r1   test_regular_body(StreamingChunkSizeTest.test_regular_body  s)    ''TYY'7&1r4   c                 Z    U R                  U R                  U R                  5      SS0S9  g )Nr  r  )rZ   r-   )r$  r)  r   rT   s    r1   test_compressed_body+StreamingChunkSizeTest.test_compressed_body  s-    tyy)4F3O 	 	
r4   c                 X   ^  U 4S jnT R                  US9nT R                  / SQU5        g )Nc                 Z   > U " TR                   S S 5        U " TR                   SS  5        g N   )r   )r
  r0   s    r1   body_producer?StreamingChunkSizeTest.test_chunked_body.<locals>.body_producer  s'    $))CR.!$))BC.!r4   )r6  )r     r     )r$  r   )r0   r6  r8   s   `  r1   test_chunked_body(StreamingChunkSizeTest.test_chunked_body  s-    	" ''m'D&1r4   c                    ^ U R                  U R                  5      mU R                  [        T5      S5        U4S jnU R	                  USS0S9  g )Nr5  c                 2   > U " TS S 5        U " TSS  5        g r4  r`   )r
  r(  s    r1   r6  EStreamingChunkSizeTest.test_chunked_compressed.<locals>.body_producer  s    *Sb/"*RS/"r4   r  r  )r6  r-   )r)  r   r#  rq   r$  )r0   r6  r(  s     @r1   test_chunked_compressed.StreamingChunkSizeTest.test_chunked_compressed  sN    ]]499-
3z?B/	# 	'2Df1M 	 	
r4   r`   N)rA   rB   rC   rD   r   r  r  r  r   r  rU   r$  r)  r-  r0  r:  r?  rE   r`   r4   r1   r  r  s  sG    @DJ'
I%- %&
2

2

r4   r  c                   6    \ rS rSr " S S\5      rS rS rSrg)InvalidOutputContentLengthTesti  c                        \ rS rSrS rS rSrg).InvalidOutputContentLengthTest.MessageDelegatei  c                     Xl         g r+   r   r  s     r1   r  7InvalidOutputContentLengthTest.MessageDelegate.__init__  r  r4   c           	          SSSSS.nU R                   R                  [        SSS5      [        S	X2S
      05      5        U R                   R	                  S5        U R                   R                  5         g )N10rt  r  r  )normalr  r  
underscorer  r  r  r!  x-test
   1234567890)r  r  r   r   r
  r?   )r0   r.   r-   content_lengthss       r1   r2   ?InvalidOutputContentLengthTest.MessageDelegate.headers_received  so    # %#	O OO))!*c48-x?P/QRS OO!!-0OO""$r4   r   N)rA   rB   rC   rD   r  r2   rE   r`   r4   r1   r  rD    s    	)	%r4   r  c                 .     " S S[         5      nU" 5       $ )Nc                       \ rS rSrS rSrg)3InvalidOutputContentLengthTest.get_app.<locals>.Appi  c                 ,    [         R                  U5      $ r+   )rB  r  r  s      r1   r  AInvalidOutputContentLengthTest.get_app.<locals>.App.start_request  s    5EElSSr4   r`   Nr  r`   r4   r1   r  rQ    s    Tr4   r  r  r  s     r1   rU   &InvalidOutputContentLengthTest.get_app  s    	T. 	T ur4   c           
         U R                  S5         U R                  SSSS0S9nUR                  5         U R                  UR                  S5        S S S 5        S Hg  nU R                  U5         [        [        S5         U R                  [        5         U R                  SSSU0S9  S S S 5        S S S 5        S S S 5        Mi     g ! , (       d  f       N|= f! , (       d  f       N4= f! , (       d  f       N== f! , (       d  f       M  = f)	NrI  rQ   GETrK  )r   r-   rL  )r  r  rJ  r   )	r  rX   rY   r   rZ   r   r   r   r   )r0   r]   tests      r1   "test_invalid_output_content_lengthAInvalidOutputContentLengthTest.test_invalid_output_content_length  s    \\(#zz#eh=QzRHX]]M: $ ADd# w(<=**95

3ux>N
O 6 > $# A	 $# 65 >= $#sH   A C0C;C*C	+C*3C;
C
C'#C**
C84C;;
D
	r`   N)	rA   rB   rC   rD   r   r  rU   rX  rE   r`   r4   r1   rB  rB    s    %- %$Pr4   rB  c                   ,    \ rS rSrS rS rS rS rSrg)MaxHeaderSizeTesti  c                 &    [        S[        4/5      $ rP   r   rb   rT   s    r1   rU   MaxHeaderSizeTest.get_app      S":;<==r4   c                     [        SS9$ )Nro  )max_header_sizer  rT   s    r1   r  (MaxHeaderSizeTest.get_httpserver_options  s    D))r4   c                     U R                  SSS0S9nUR                  5         U R                  UR                  S5        g )NrQ   X-Fillerdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r   )rX   rY   r   rZ   r   s     r1   test_small_headers$MaxHeaderSizeTest.test_small_headers  s9    ::cJ	+B:C7r4   c                 4   [        [        SSS9    U R                  SSS0SS9  U R                  S	5        S S S 5        g ! [         a=  nUR
                  b&  U R                  UR
                  R                  S
5         S nANKS nAff = f! , (       d  f       g = f)NzUnsatisfiable readFr   rQ   rd    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaT)r-   r   z did not raise expected exception)i  iW  )r   r   rX   failr   r]   assertInr  )r0   es     r1   test_large_headers$MaxHeaderSizeTest.test_large_headers  s    w 4uE?

3Z(@d
S		<= FE  ? ::)MM!**//:>?	 FEs,   B	$?
B	3B<B	BB		
Br`   N)	rA   rB   rC   rD   rU   r  rf  rm  rE   r`   r4   r1   r[  r[    s    >*8

?r4   r[  c                      ^  \ rS rSrS rS rU 4S jrU 4S jr\R                  S 5       r
\S 5       r\S 5       rS	rU =r$ )
IdleTimeoutTesti  c                 &    [        S[        4/5      $ rP   r]  rT   s    r1   rU   IdleTimeoutTest.get_app  r_  r4   c                     [        SS9$ )Ng?)idle_connection_timeoutr  rT   s    r1   r  &IdleTimeoutTest.get_httpserver_options  s    C00r4   c                 0   > [         TU ]  5         / U l        g r+   )r  r  streamsr  s    r1   r  IdleTimeoutTest.setUp  s    r4   c                 h   > [         TU ]  5         U R                   H  nUR                  5         M     g r+   )r  r  rw  r)  )r0   rI   rR   s     r1   r  IdleTimeoutTest.tearDown  s%    llFLLN #r4   c              #      #    [        [        R                  " 5       5      nUR                  SU R                  5       45      v   U R                  R                  U5        [        R                  " U5      e7fr   )r   r  r   r  rw  r6   r   r  r  s     r1   r   IdleTimeoutTest.connect$  sS     &--/*nnk4+=+=+?@AAF#jj  s   A3A5c              #      #    U R                  5       v n[        5       nUR                  UR                  5        UR	                  5       v   g 7fr+   )r   r   set_close_callbackr  r  )r0   rI   events      r1   test_unused_connection&IdleTimeoutTest.test_unused_connection+  s8     ||~%!!%)),jjls   AAc              #   T  #    U R                  5       v n[        5       nUR                  UR                  5        [	        S5       HL  nUR                  S5        UR                  S5      v   UR                  S5      v nU R                  US5        MN     UR                  5       v   g 7f)Nr,  r  r     r   )
r   r   r~  r  ru  r
  r"  r'  r   r  )r0   rI   r  rr  r  s        r1   test_idle_after_use#IdleTimeoutTest.test_idle_after_use2  s     ||~%!!%)), qALL23##K00**2..DT>2	  jjls   B&B()rw  )rA   rB   rC   rD   rU   r  r  r  r   r~  r   r   r  r  rE   r  r  s   @r1   rp  rp    sW    >1
 	]]! !    r4   rp  c                       \ rS rSrS rS rS rS rS r\	R                  " \R                  S:H  S5      S	 5       rS
 r\	R                  " \R                  S:H  S5      S 5       rS rS r\S 5       r\S 5       rSrg)BodyLimitsTestiC  c                 r     " S S[         5      n[         " S S[         5      5       n[        SU4SU4/5      $ )Nc                       \ rS rSrS rSrg)/BodyLimitsTest.get_app.<locals>.BufferedHandleriE  c                 r    U R                  [        [        U R                  R                  5      5      5        g r+   )r
  rG  rq   rl   rZ   rT   s    r1   put3BodyLimitsTest.get_app.<locals>.BufferedHandler.putF  s"    

3s4<<#4#4567r4   r`   N)rA   rB   rC   rD   r  rE   r`   r4   r1   BufferedHandlerr  E  s    8r4   r  c                   ,    \ rS rSrS rS rS rS rSrg)0BodyLimitsTest.get_app.<locals>.StreamingHandleriI  c                     SU l         g )Nr   
bytes_readrT   s    r1   rh   ;BodyLimitsTest.get_app.<locals>.StreamingHandler.initializeK  s	    "#r4   c                 p   [         R                  " [        U R                  R                  5      nSU R                  R
                  ;   a)  UR                  [        U R                  S5      5      5        SU R                  R
                  ;   a*  UR                  [        U R                  S5      5      5        g g )Nexpected_sizebody_timeout)r   castr   rl   r  r2  set_max_body_sizer(  r   set_body_timeoutfloatr=   s     r1   rS  8BodyLimitsTest.get_app.<locals>.StreamingHandler.prepareN  s    {{?DLL4K4KL"dll&<&<<**3t/@/@/Q+RS!T\\%;%;;))%0A0A.0Q*RS <r4   c                 @    U =R                   [        U5      -  sl         g r+   )r  rq   r  s     r1   r9   >BodyLimitsTest.get_app.<locals>.StreamingHandler.data_receivedU  s    3t9,r4   c                 L    U R                  [        U R                  5      5        g r+   )r
  rG  r  rT   s    r1   r  4BodyLimitsTest.get_app.<locals>.StreamingHandler.putX  s    

3t/0r4   r  N)	rA   rB   rC   rD   rh   rS  r9   r  rE   r`   r4   r1   StreamingHandlerr  I  s    $T-1r4   r  	/buffered
/streaming)r    r!   r   )r0   r  r  s      r1   rU   BodyLimitsTest.get_appD  sK    	8n 	8 
	1~ 	1 
	1" ?+l<L-MN
 	
r4   c                     [        SSS9$ )Nr   i   )r  max_body_sizer  rT   s    r1   r  %BodyLimitsTest.get_httpserver_options_  s    T::r4   c                     [        5       $ r+   r   rT   s    r1   r  BodyLimitsTest.get_http_clientb  r  r4   c                     U R                  SSSS9nU R                  UR                  S5        U R                  SSSS9nU R                  UR                  S5        g )Nr  PUTs   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   s   4096r  r   r   s     r1   test_small_bodyBodyLimitsTest.test_small_bodyg  sR    ::k%k:J0::l5{:K0r4   c                     [        [        S[        R                  S9   U R	                  SSSS-  S9nS S S 5        U R                  WR                  S5        g ! , (       d  f       N+= f)	N.*Content-Length too longr  r  r     a (  r   ri  r   r   r  r  rX   r   r  r   s     r1   test_large_body_buffered'BodyLimitsTest.test_large_body_bufferedm  sO    w ;7<<Pzz+e$,zOH Q, QP   A
A&ntzflaky on windowsc                     [        [        S[        R                  S9   U R	                  SSS S9nS S S 5        U R                  WR                  S5        g ! , (       d  f       N+= f)N.*chunked body too larger  r  r  c                     U " SS-  5      $ Nr  r  r`   r
  s    r1   r  ABodyLimitsTest.test_large_body_buffered_chunked.<locals>.<lambda>y      E$,,?r4   r   r6  ri  r  r   s     r1    test_large_body_buffered_chunked/BodyLimitsTest.test_large_body_buffered_chunkedr  sW     w :',,Ozz? " H P 	, PO   A
A$c                     [        [        S[        R                  S9   U R	                  SSSS-  S9nS S S 5        U R                  WR                  S5        g ! , (       d  f       N+= f)	Nr  r  r  r  r  r  r   ri  r  r   s     r1   test_large_body_streaming(BodyLimitsTest.test_large_body_streaming}  sO    w ;7<<Pzz,u4%<zPH Q, QPr  c                     [        [        S[        R                  S9   U R	                  SSS S9nS S S 5        U R                  WR                  S5        g ! , (       d  f       N+= f)Nr  r  r  r  c                     U " SS-  5      $ r  r`   r  s    r1   r  BBodyLimitsTest.test_large_body_streaming_chunked.<locals>.<lambda>  r  r4   r  ri  r  r   s     r1   !test_large_body_streaming_chunked0BodyLimitsTest.test_large_body_streaming_chunked  sU    w :',,Ozz? " H P 	, POr  c                 d    U R                  SSSS-  S9nU R                  UR                  S5        g )N/streaming?expected_size=10240r  r  r  r      10240r   r   s     r1   "test_large_body_streaming_override1BodyLimitsTest.test_large_body_streaming_override  s6    ::,U  
 	1r4   c                 `    U R                  SSS S9nU R                  UR                  S5        g )Nr  r  c                     U " SS-  5      $ r  r`   r  s    r1   r  KBodyLimitsTest.test_large_body_streaming_chunked_override.<locals>.<lambda>  s    dUl(;r4   r  r  r   r   s     r1   *test_large_body_streaming_chunked_override9BodyLimitsTest.test_large_body_streaming_chunked_override  s4    ::,;  

 	1r4   c              #     #    [        [        R                  " 5       5      n UR                  SU R                  5       45      v   UR	                  S5        [        [        S[        R                  S9   UR                  5       v nS S S 5        U R                  WS5        UR                  5         g ! , (       d  f       N1= f! UR                  5         f = f7f)Nr   s@   PUT /streaming?body_timeout=0.1 HTTP/1.0
Content-Length: 42

zTimeout reading bodyr  r4   )r   r  r   r  r
  r   r   r  r  r  r   r)  )r0   rI   r]   s      r1   test_timeoutBodyLimitsTest.test_timeout  s     &--/*	..+t/A/A/C!DEE LL. 7$:',,O!'!8!8!:: PXs+LLN	 PO LLNs5   CAC 3B1C  C1
B?;C CCc              #   @  #    [        [        R                  " 5       5      n UR                  SU R                  5       45      v   UR	                  S5        UR	                  SS-  5        [        U5      v u  p#nU R                  US5        UR	                  S5        [        [        S[        R                  S9   UR                  5       v nS S S 5        U R                  WS	5        UR                  5         g ! , (       d  f       N1= f! UR                  5         f = f7f)
Nr   sF   PUT /streaming?expected_size=10240 HTTP/1.1
Content-Length: 10240

r  r  r  s2   PUT /streaming HTTP/1.1
Content-Length: 10240

r  r  rY  )r   r  r   r  r
  rK   r   r   r   r  r  r  r)  )r0   rI   r.   r-   r]   r  s         r1   test_body_size_override_reset,BodyLimitsTest.test_body_size_override_reset  s      &--/*	..+t/A/A/C!DEELL1 LL&2B62J,J)JXx0LLO 7$?w||T#4466 UT#FGLLN	 UT LLNs5   DBD	 :C8D	 'D8
DD	 	DDr`   N)rA   rB   rC   rD   rU   r  r  r  r  unittestskipIfr   r[  r  r  r  r  r  r   r  r  rE   r`   r4   r1   r  r  C  s    
6;'
1-
 __RWW_&89- :--
 __RWW_&89- :-22     r4   r  c                        \ rS rSrS rS rSrg)LegacyInterfaceTesti  c                    ^  U 4S jnU$ )Nc                   > U R                   R                  S5      Tl        TR                  (       dJ  U R                  R	                  [        SSS5      [        5       5        U R                  R                  5         g SnU R                  R                  [        S[        U5      -  5      5        U R                  R                  U5        U R                  R                  5         g )NzHTTP/1.ry  r  r  r   z'HTTP/1.1 200 OK
Content-Length: %d

)r<  r$  http1r  r  r   r   r?   r
  r   rq   )rl   messager0   s     r1   handle_request3LegacyInterfaceTest.get_app.<locals>.handle_request  s     33I>DJ:: ""00%b#t4km ""))+$G$$G#g,VW $$W-%%'r4   r`   )r0   r  s   ` r1   rU   LegacyInterfaceTest.get_app  s    	(" r4   c                     U R                  S5      nU R                  (       d  U R                  S5        U R                  UR                  S5        g )NrQ   r  r   )rX   r  r  r   rZ   r   s     r1   test_legacy_interface)LegacyInterfaceTest.test_legacy_interface  s7    ::c?zzMM-.7r4   )r  N)rA   rB   rC   rD   rU   r  rE   r`   r4   r1   r  r    s    .8r4   r  )htornador   r   tornado.escaper   r   r   r   r	   r
   tornado.http1connectionr   tornado.httpclientr   tornado.httpserverr   tornado.httputilr   r   r   r   tornado.iostreamr   tornado.locksr   tornado.logr   r   tornado.netutilr   tornado.simple_httpclientr   tornado.testingr   r   r   r   r   tornado.test.utilr   tornado.webr   r    r!   
contextlibr"   r  r  r  r   rR  r  r   sysrG  r  r  urllib.parser  ior#   r   TYPE_CHECKINGr$   r%   rK   rM   rb   r  rI  skipIfOldSSLrx   objectr   r   r   r   r   TestCaser   r   r   r/  r9  r`  rf  rm  r  r  r)  r5  r  platformrB  r^  r  r  r  r  rB  r[  rp  r  r  r`   r4   r1   <module>r     s      4 ( )  &  ( 2 ;  + H H     	   
 
      	!C,	*+ 	*
E~ 
E$ C'069.V$ V
'26 '2`#l #
 "\ " "
 "\ " "
[, &
)) &
R	
> 	
Z* Zz>. >&U~ &UR9n 9
B B>U& >UB[4) [4|\
% \
~
')< 
.	D, 	D 
	"">cllh&>1.H] .H	.HbQ% QhG$ G,G|. G0-,(9 -\
. \
~%P%6 %PP?) ?2 ,' , ,^~& ~B8+ 8r4   