
    Mh;                        d dl mZmZ d dlmZmZmZmZmZ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 d dl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 m!Z!m"Z"m#Z# d dl$m%Z% d dl&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l7Z7d dl8Z9d dl:Z:d dl;m<Z< d dl=Z=e=j>        rd dl=m?Z?m@Z@ d ZA G d de          ZB G d de(          ZC G d de           ZD G d de7jE                  ZF G d de(          ZG G d de          ZH G d d e(          ZI G d! d"e(          ZJ G d# d$e(          ZK G d% d&eK          ZL G d' d(e          ZM G d) d*e          ZN G d+ d,eB          ZO G d- d.e eB          ZP G d/ d0eB          ZQe% G d1 d2e!                      ZR e7jS         eTe2d3           p
e4jU        d4k    d5           G d6 d7eR                      ZV e7jS         eTe2d3          oe4jU        W                    d8           d9           G d: d;eR                      ZX G d< d=e          ZY G d> d?e          ZZ G d@ dAeZe          Z[ G dB dCeZe          Z\ G dD dEe          Z] G dF dGe          Z^ G dH dIe          Z_ G dJ dKe          Z` G dL dMe          Za G dN dOe          ZbdS )P    )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SimpleAsyncHTTPClient)AsyncHTTPTestCaseAsyncHTTPSTestCaseAsyncTestCase	ExpectLoggen_test)abstract_base_test)ApplicationRequestHandlerstream_request_body)closingcontextmanagerN)BytesIO)DictListc                    K   g  G fddt                     }t          | d           |            }                    |           d{V  |j        |j        d                              fS )zaReads an HTTP response from `stream` and returns a tuple of its
    start_line, headers and body.c                   *    e Zd Zd Z fdZfdZdS )"read_stream_body.<locals>.Delegatec                 "    || _         || _        d S N)headers
start_lineselfr,   r+   s      \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/httpserver_test.pyheaders_receivedz3read_stream_body.<locals>.Delegate.headers_received=   s    "DL(DOOO    c                 2                         |           d S r*   )append)r.   chunkchunkss     r/   data_receivedz0read_stream_body.<locals>.Delegate.data_receivedA   s    MM%     r1   c                 0                                      d S r*   )detachr.   conns    r/   finishz)read_stream_body.<locals>.Delegate.finishD   s    KKMMMMMr1   N)__name__
__module____qualname__r0   r6   r;   )r5   r:   s   r/   Delegater(   <   sV        	) 	) 	)	! 	! 	! 	! 	!	 	 	 	 	 	 	r1   r?   TNr1   )r   r   read_responser,   r+   join)streamr?   delegater5   r:   s      @@r/   read_stream_bodyrD   7   s       F	 	 	 	 	 	 	 	& 	 	 	 64((DxzzH


X
&
&&&&&&&& 0#((62B2BBBr1   c                       e Zd ZdZd Zd ZdS )HandlerBaseTestCaseNc                 :    t          d| j        j        fg          S N/)r   	__class__Handlerr.   s    r/   get_appzHandlerBaseTestCase.get_appP   s    S$."89:;;;r1   c                 l     | j         |i |}|                                 t          |j                  S r*   )fetchrethrowr   body)r.   argskwargsresponses       r/   
fetch_jsonzHandlerBaseTestCase.fetch_jsonS   s:    4:t.v..8=)))r1   )r<   r=   r>   rK   rM   rU    r1   r/   rF   rF   M   s7        G< < <* * * * *r1   rF   c                   "    e Zd ZddZd Zd ZdS )HelloWorldRequestHandlerhttpc                     || _         d S r*   )expected_protocol)r.   protocols     r/   
initializez#HelloWorldRequestHandler.initializeZ   s    !)r1   c                 x    | j         j        | j        k    rt          d          |                     d           d S )Nzunexpected protocolHello world)requestr\   r[   	Exceptionr;   rL   s    r/   getzHelloWorldRequestHandler.get]   s<    < D$:::1222M"""""r1   c                 d    |                      dt          | j        j                  z             d S )NzGot %d bytes in POST)r;   lenr`   rQ   rL   s    r/   postzHelloWorldRequestHandler.postb   s-    *S1B-C-CCDDDDDr1   N)rY   )r<   r=   r>   r]   rb   re   rV   r1   r/   rX   rX   Y   sK        * * * *# # #
E E E E Er1   rX   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )SSLTestc                 N    t          dt          t          d          fg          S )NrI   httpsr\   )r   rX   dictrL   s    r/   rM   zSSLTest.get_appg   s&    S":D'<R<R<RSTUUUr1   c                 T    t          ddt          j        it          j                    S )Nssl_versionrV   )rk   sslPROTOCOL_TLS_SERVERr   default_ssl_optionsrL   s    r/   get_ssl_optionszSSLTest.get_ssl_optionsj   s5     
 
/
 466
 
 	
r1   c                 f    |                      d          }|                     |j        d           d S )NrI      Hello worldrO   assertEqualrQ   r.   rT   s     r/   test_sslzSSLTest.test_sslp   s/    ::c??77777r1   c                 r    |                      ddddz            }|                     |j        d           d S )NrI   POSTAi  methodrQ   s   Got 5000 bytes in POSTrt   rv   s     r/   test_large_postzSSLTest.test_large_postt   s<    ::c&sTz:BB(ABBBBBr1   c           	         t          t          d          5  t          t          dd          5  |                     t          t          f          5  |                     |                     d                              dd          ddd	
           d d d            n# 1 swxY w Y   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 )Nz(SSL Error|uncaught exception)Uncaught exceptionFrequiredrI   https:http:  T)request_timeoutconnect_timeoutraise_error)r   r   assertRaisesIOErrorr   rO   get_urlreplacerL   s    r/   test_non_ssl_requestzSSLTest.test_non_ssl_requestx   s    w @AA 	 	7$85III  &&';<<  JJS))11(GDD(,(,$(	                                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sY   C"B4ABB4B!!B4$B!%B4(C4B8	8C;B8	<CCCc                    t          t          d          5 }|                     t          t          f          5  |                     |                     d                              dd          d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j	                   d S )Nz	SSL ErrorrI   r   r   T)r   )
r   r   r   r   r   rO   r   r   assertFalselogged_stack)r.   
expect_logs     r/   test_error_loggingzSSLTest.test_error_logging   s-   w,, 	
""GY#788  

LL%%--h@@d                  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	011111s4   "B?B7BB	B
B	BB!BN)	r<   r=   r>   rM   rq   rw   r}   r   r   rV   r1   r/   rg   rg   f   st        V V V
 
 
8 8 8C C C  2 2 2 2 2r1   rg   c                       e Zd Zd Zd ZdS )BadSSLOptionsTestc                 l    t                      }|                     t          t          |ddi           d S )Nkeyfilez/__missing__.crtssl_options)r   r   KeyErrorr   )r.   applications     r/   test_missing_argumentsz(BadSSLOptionsTest.test_missing_arguments   sD    !mm"$67	 	 	
 	
 	
 	
 	
r1   c                    t                      }t          j                            t                    }t          j                            |d          }t          j                            |d          }|                     t          t          ft          |ddi           |                     t          t          ft          ||dd           t          |||d           dS )	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__rA   r   
ValueErrorr   r   )r.   r   
module_direxisting_certificateexisting_keys        r/   test_missing_keyz"BadSSLOptionsTest.test_missing_key   s     "mmW__X..
!w||J
CCw||J
;;!#%67	 	 	
 	
 	
 	!0- 	 	 	
 	
 	
 	%9lSS	
 	
 	
 	
 	
 	
r1   N)r<   r=   r>   r   r   rV   r1   r/   r   r      s2        
 
 

 
 
 
 
r1   r   c                       e Zd Zd ZdS )MultipartTestHandlerc           	         |                      | j        j        d         |                     d          | j        j        d         d         j        t          | j        j        d         d         d                   d           d S )NzX-Header-Encoding-Testargumentfilesr   rQ   )headerr   filenamefilebody)r;   r`   r+   get_argumentr   r   r   rL   s    r/   re   zMultipartTestHandler.post   s    ,./GH --j99 L.w7:C$T\%7%@%CF%KLL	 	
 	
 	
 	
 	
r1   Nr<   r=   r>   re   rV   r1   r/   r   r      s#        
 
 
 
 
r1   r   c                   D    e Zd Zd Zd Zd	dZd Zd Zed             Z	dS )
HTTPConnectionTestc                 &    dt           fdt          fgS )Nz
/multipart/hello)r   rX   rL   s    r/   get_handlerszHTTPConnectionTest.get_handlers   s    /0/0
 	
r1   c                 D    t          |                                           S r*   )r   r   rL   s    r/   rM   zHTTPConnectionTest.get_app   s    4,,..///r1      
c                     t          t          t          j                                        5  j                             fd                               |                    |t          dt          |          z            gz             |z   |z   |z               j                            fd          \  }}}|cd d d            S # 1 swxY w Y   d S )Nc                  V                         d                                 f          S N	127.0.0.1)connectget_http_portr.   rB   s   r/   <lambda>z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>   s$    T5G5G5I5I'JKK r1   zContent-Length: %dc                  "    t                     S r*   )rD   )rB   s   r/   r   z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>   s    (00 r1   )	r!   r   socketio_looprun_syncwriterA   r   rd   )r.   r+   rQ   newliner,   rB   s   `    @r/   	raw_fetchzHTTPConnectionTest.raw_fetch   s8   Xfmoo..// 	6L!!KKKKK   LLW-ACII-M(N(N'OOPP    )-(=(=0000) )%J 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BCCCc                    |                      g dd                    ddd                                dd                                dd                                d	dg	                    }t          |          }|                     d
|d                    |                     d|d                    |                     d|d                    |                     d|d                    d S )N)s   POST /multipart HTTP/1.0s6   Content-Type: multipart/form-data; boundary=1234567890s   X-Header-encoding-test: r   s-   Content-Disposition: form-data; name=argumentr1      ás   --1234567890u;   Content-Disposition: form-data; name="files"; filename="ó"   ús   --1234567890--   ér   r      ór   r   )r   rA   encoder   ru   r.   rT   datas      r/   test_multipart_formz&HTTPConnectionTest.test_multipart_form   s     >>  
 LLDOO%%#U\\^^OO%%%
 
 
( 8$$4>2224
#34444
#34444
#344444r1   c                 n    dD ]1}|                      dgd|          }|                     |d           2d S )N)r      
s   GET /hello HTTP/1.0r1   )r   rs   )r   ru   )r.   r   rT   s      r/   test_newlinesz HTTPConnectionTest.test_newlines   sO    ' 	7 	7G~~'=&>W~UUHX~6666	7 	7r1   c              #   `  K   t          t          j                              }|                    d|                                 f          V  |                    d                    g d                    V  |                    d          V }|                     |                    d          |           |                    d           |                    d          V }|                     |                    d          |           |                    d          V }t          j
        t          |                    d                              }|                    t          |d	                             V }|                     |d
           |                                 d S )Nr   r   )s   POST /hello HTTP/1.1s   Host: 127.0.0.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   rA   
read_until
assertTrue
startswithr   parser
   decode
read_bytesintru   close)r.   rB   r   
first_lineheader_datar+   rQ   s          r/   test_100_continuez$HTTPConnectionTest.test_100_continue  s     
 &-//**nnk4+=+=+?+?@AAAAAllLL  	 	
 
 	
 	
 	
 &&{3333(8994@@@[!!!!,,W5555

--o>>
KKK"--k::::#J{/A/A(/K/K$L$LMM&&s73C+D'E'EFFFF8999r1   N)r   )
r<   r=   r>   r   rM   r   r   r   r   r   rV   r1   r/   r   r      s        
 
 
0 0 0    5 5 5:7 7 7   X  r1   r   c                       e Zd Zd Zd ZdS )EchoHandlerc                 ^    |                      t          | j        j                             d S r*   r   r	   r`   	argumentsrL   s    r/   rb   zEchoHandler.get#  (    

$T\%;<<=====r1   c                 ^    |                      t          | j        j                             d S r*   r   rL   s    r/   re   zEchoHandler.post&  r   r1   Nr<   r=   r>   rb   re   rV   r1   r/   r   r   "  s2        > > >> > > > >r1   r   c                   &    e Zd Zd Zd Zd Zd ZdS )TypeCheckHandlerc           	         i | _         dt          fdt          fdt          fdt          fdt          fdt          fdt          fdt          fg}|D ]/\  }}|                     |t          | j        |          |           0|                     d	t          | j        j                                                  d
         t                     |                     dt          | j        j                                                  d
         t                     |                     dt          | j        j	                                                  d
         t                     |                     dt          | j        j	                                                  d
         j
        t                     |                     dt          | j        j                                                  d
         t                     |                     dt          | j        j                                                  d
         d
         t                     d S )Nr|   uriversion	remote_ipr\   hostr   query
header_keyr   header_value
cookie_keycookie_valuearg_key	arg_value)errorsstr
check_typegetattrr`   listr+   keysvaluescookiesvaluer   bytes)r.   fieldsfieldexpected_types       r/   preparezTypeCheckHandler.prepare+  s   sOCL#SMSMcN	
 %+ 	P 	P E=OOE74<#?#?OOOOd4<+?+D+D+F+F&G&G&JCPPPT\-A-H-H-J-J(K(KA(NPSTTTd4<+?+D+D+F+F&G&G&JCPPPD!5!<!<!>!>??BH#	
 	
 	

 		4(>(C(C(E(E#F#Fq#I3OOOT$,*@*G*G*I*I%J%J1%Ma%PRWXXXXXr1   c                     |                      d| j        j        t                     |                     | j                   d S )NrQ   )r   r`   rQ   r  r   r   rL   s    r/   re   zTypeCheckHandler.postF  s7     15999

4;r1   c                 :    |                      | j                   d S r*   )r   r   rL   s    r/   rb   zTypeCheckHandler.getJ  s    

4;r1   c                 T    t          |          }||k    rd| d| | j        |<   d S d S )Nz	expected z, got )typer   )r.   nameobjr  actual_types        r/   r   zTypeCheckHandler.check_typeM  sB    3iiK'' NM N N N NDK ('r1   N)r<   r=   r>   r  re   rb   r   rV   r1   r/   r   r   *  sX        Y Y Y6          O O O O Or1   r   c                       e Zd Zd ZdS )PostEchoHandlerc                 r    |                      t          |                     d                               d S )Nr   )echo)r   rk   r   )r.   	path_argss     r/   re   zPostEchoHandler.postT  s3    

4T..v6677788888r1   Nr   rV   r1   r/   r  r  S  s#        9 9 9 9 9r1   r  c                       e Zd ZddZdS )PostEchoGBKHandlerNc                 p    	 |                     d          S # t          $ r t          dd|z            w xY w)Ngbk  zinvalid gbk bytes: %r)r   ra   r   )r.   r   r
  s      r/   decode_argumentz"PostEchoGBKHandler.decode_argumentY  sO    	B<<&&& 	B 	B 	BC!85!@AAA	Bs    5r*   )r<   r=   r>   r  rV   r1   r/   r  r  X  s.        B B B B B Br1   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	HTTPServerTestc                 p    t          dt          fdt          fdt          fdt          fdt          fg          S )N/echo
/typecheck//doubleslashz
/post_utf8z	/post_gbk)r   r   r   r  r  rL   s    r/   rM   zHTTPServerTest.get_appa  sC    +&/0 +./01
 
 	
r1   c                     |                      d          }t          |j                  }|                     |ddgi           d S )Nz/echo?foo=%C3%A9foor   rO   r   rQ   ru   r   s      r/   test_query_string_encodingz)HTTPServerTest.test_query_string_encodingl  sF    ::0118=))z233333r1   c                     |                      d          }t          |j                  }|                     |dddgi           d S )Nz/echo?foo=&foo=r   r   r   s      r/   test_empty_query_stringz&HTTPServerTest.test_empty_query_stringq  sH    ::/008=))Bx011111r1   c                     |                      ddd          }t          |j                  }|                     |dgdgd           d S )Nr  ry   z	foo=&bar=r{   r#  )r  barr   r   s      r/   test_empty_post_parametersz)HTTPServerTest.test_empty_post_parametersv  sP    ::gf;:GG8=))tRD99:::::r1   c                    ddi}|                      d|          }t          |j                  }|                     |i            |                      ddd|          }t          |j                  }|                     |i            d S )NCookiefoo=barz/typecheck?foo=barr+   r  ry   r|   rQ   r+   r   )r.   r+   rT   r   s       r/   
test_typeszHTTPServerTest.test_types{  s    Y'::2G:DD8=))r"""::i  
 
 8=))r"""""r1   c                     |                      d          }|                     d|j                   |                     t          |j                  i            d S )Nr     )rO   ru   coder   rQ   rv   s     r/   test_double_slashz HTTPServerTest.test_double_slash  sS     ::o..hm,,,X]33R88888r1   c           
         ddi}d}dD ]}dD ]}|                      ||          5  |                    |          }|r2t          j                            |                              d          }|                     d|z   d	|d
|z             }|                     t          |j                  d|i           d d d            n# 1 swxY w Y   Čd S )NzContent-Typez!application/x-www-form-urlencodedu   chinese: 张三)r   r  )TF)encquoteasciiz/post_ry   s   data=)r|   r+   rQ   r  )	subTestr   urllibr   r4  rO   ru   r   rQ   )r.   r+   uni_textr3  r4  bin_textrT   s          r/   test_post_encodingsz"HTTPServerTest.test_post_encodings  sT   !#FG*" 	U 	UC& U U\\c\77 
U 
U's33H P#)<#5#5h#?#?#F#Fw#O#O#zz 3% '&1	  *    H $$[%?%?&(ASTTT
U 
U 
U 
U 
U 
U 
U 
U 
U 
U 
U 
U 
U 
U 
UU	U 	Us   BCC	C	N)
r<   r=   r>   rM   r!  r$  r'  r-  r1  r:  rV   r1   r/   r  r  `  s        	
 	
 	
4 4 4
2 2 2
; ; ;

# 
# 
#9 9 9U U U U Ur1   r  c                        e Zd Zd Z fdZ fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zed             Zed             Z xZS )HTTPServerRawTestc                 0    t          dt          fg          S )Nr  r   r   rL   s    r/   rM   zHTTPServerRawTest.get_app  s    Wk23444r1   c                      t                                                       t          t          j                               _         j                             fd           d S )Nc                  `     j                             d                                 f          S r   )rB   r   r   rL   s   r/   r   z)HTTPServerRawTest.setUp.<locals>.<lambda>  s(    DK''d6H6H6J6J(KLL r1   )supersetUpr   r   rB   r   r   r.   rJ   s   `r/   rB  zHTTPServerRawTest.setUp  sZ    v}//LLLL	
 	
 	
 	
 	
r1   c                 z    | j                                          t                                                       d S r*   )rB   r   rA  tearDownrC  s    r/   rE  zHTTPServerRawTest.tearDown  s3    r1   c                     | j                                          | j                            t	          j        d          | j                   |                                  d S )NMbP?seconds)rB   r   r   add_timeoutdatetime	timedeltastopwaitrL   s    r/   test_empty_requestz$HTTPServerRawTest.test_empty_request  sO      !3E!B!B!BDINNN		r1   c                     t          t          dt          j                  5   j                            d            j                             fd          \  }}}                     d|j	                                        d|j
                                        d|j                   d d d            d S # 1 swxY w Y   d S )N.*Malformed HTTP request linelevel   asdf

c                  ,    t           j                  S r*   rD   rB   rL   s   r/   r   zFHTTPServerRawTest.test_malformed_first_line_response.<locals>.<lambda>      (55 r1   HTTP/1.1r  zBad Request)r   r   loggingINFOrB   r   r   r   ru   r   r0  reasonr.   r,   r+   rT   s   `   r/   "test_malformed_first_line_responsez4HTTPServerRawTest.test_malformed_first_line_response  s   w ?w|TTT 	? 	?Ko...,0L,A,A5555- -)J Z);<<<S*/222]J,=>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   BB==CCc                 <   t          t          dt          j                  5  | j                            d           | j                            t          j	        d          | j
                   |                                  d d d            d S # 1 swxY w Y   d S )NrQ  rR  rT  皙?rH  r   r   rY  rZ  rB   r   r   rJ  rK  rL  rM  rN  rL   s    r/   test_malformed_first_line_logz/HTTPServerRawTest.test_malformed_first_line_log  s    w ?w|TTT 	 	Ko... L$$X%7%E%E%EtyQQQIIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A"BBBc                 <   t          t          dt          j                  5  | j                            d           | j                            t          j	        d          | j
                   |                                  d d d            d S # 1 swxY w Y   d S )Nz1.*Malformed HTTP message.*no colon in header linerR  s   GET / HTTP/1.0
asdf

r_  rH  r`  rL   s    r/   test_malformed_headersz(HTTPServerRawTest.test_malformed_headers  s    ?,
 
 
 	 	
 K?@@@L$$X%7%E%E%EtyQQQIIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rb  c                       j                             d                    dd                      j                             fd          \  }}}                     t          |          ddgi           d S )Ns   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

r   r   c                  ,    t           j                  S r*   rV  rL   s   r/   r   z=HTTPServerRawTest.test_chunked_request_body.<locals>.<lambda>      $T[11 r1   r  r&  rB   r   r   r   r   ru   r   r\  s   `   r/   test_chunked_request_bodyz+HTTPServerRawTest.test_chunked_request_body       	 Gw 	
 	
 	
" )-(=(=1111)
 )
%
GX 	X..0@AAAAAr1   c                       j                             d                    dd                      j                             fd          \  }}}                     t          |          ddgi           d S )Ns   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: Chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

r   r   c                  ,    t           j                  S r*   rV  rL   s   r/   r   zBHTTPServerRawTest.test_chunked_request_uppercase.<locals>.<lambda>  rg  r1   r  r&  rh  r\  s   `   r/   test_chunked_request_uppercasez0HTTPServerRawTest.test_chunked_request_uppercase  rj  r1   c                 N     j                             d                    dd                     t          t          dt
          j                  5   j                             fd          \  }}}d d d            n# 1 swxY w Y    	                    d|j
                   d S )Nsb   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked

1_a
1234567890abcdef1234567890
0

r   r   z.*invalid chunk sizerR  c                  ,    t           j                  S r*   rV  rL   s   r/   r   zJHTTPServerRawTest.test_chunked_request_body_invalid_size.<locals>.<lambda>  rW  r1   r  )rB   r   r   r   r   rY  rZ  r   r   ru   r0  r\  s   `   r/   &test_chunked_request_body_invalid_sizez8HTTPServerRawTest.test_chunked_request_body_invalid_size  s     		 Gw 	
 	
 	
 w 6glKKK 	 	,0L,A,A5555- -)J	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	jo.....s   "A??BBc                 &     j                             d           t          t          dt          j                  5   j                             fd          \  }}}d d d            n# 1 swxY w Y                        d|j	                   d S )Nsc   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked
Transfer-encoding: chunked

2
ok
0

z/.*Unsupported Transfer-Encoding chunked,chunkedrR  c                  ,    t           j                  S r*   rV  rL   s   r/   r   zNHTTPServerRawTest.test_chunked_request_body_duplicate_header.<locals>.<lambda>0  rW  r1   r  
rB   r   r   r   rY  rZ  r   r   ru   r0  r\  s   `   r/   *test_chunked_request_body_duplicate_headerz<HTTPServerRawTest.test_chunked_request_body_duplicate_header  s     	
	
 	
 	
 =,
 
 
 	 	
 -1L,A,A5555- -)J	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	jo.....   "A++A/2A/c                 &     j                             d           t          t          dt          j                  5   j                             fd          \  }}}d d d            n# 1 swxY w Y                        d|j	                   d S )NsN   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: gzip, chunked

2
ok
0

z-.*Unsupported Transfer-Encoding gzip, chunkedrR  c                  ,    t           j                  S r*   rV  rL   s   r/   r   z[HTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encoding.<locals>.<lambda>F  rW  r1   r  rs  r\  s   `   r/   7test_chunked_request_body_unsupported_transfer_encodingzIHTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encoding4  s    		
 	
 	
 DGL
 
 
 	 	 -1L,A,A5555- -)J	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	jo.....ru  c                 &     j                             d           t          t          dt          j                  5   j                             fd          \  }}}d d d            n# 1 swxY w Y                        d|j	                   d S )NsZ   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked
Content-Length: 2

2
ok
0

z8.*Message with both Transfer-Encoding and Content-LengthrR  c                  ,    t           j                  S r*   rV  rL   s   r/   r   zbHTTPServerRawTest.test_chunked_request_body_transfer_encoding_and_content_length.<locals>.<lambda>_  rW  r1   r  rs  r\  s   `   r/   >test_chunked_request_body_transfer_encoding_and_content_lengthzPHTTPServerRawTest.test_chunked_request_body_transfer_encoding_and_content_lengthJ  s    
	
 	
 	
 F,
 
 
 	 	
 -1L,A,A5555- -)J	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	jo.....ru  c              #     K   g d}|D ]?\  }}|                      |          5  t          t          t          j                                        5 }t	          t
          dt          j                  5  |                    d| 	                                f          V  |
                    t          t          j        d| d                              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   d d d            n# 1 swxY w Y   Ad S )
N))
alphabeticr  )leading plus+10)zinternal underscore1_0)r
  z(.*Only integer Content-Length is allowedrR  r   z                            POST /echo HTTP/1.1
                            Host: 127.0.0.1
                            Content-Length: zs
                            Connection: close

                            1234567890
                            
z
)r6  r!   r   r   r   r   rY  rZ  r   r   r   r   textwrapdedentr   read_until_close)r.   
test_casesr
  r   rB   s        r/   test_invalid_content_lengthz-HTTPServerRawTest.test_invalid_content_lengthc  s$     

 
 


 & 	4 	4KD%4(( 4 4'(6=??2K2K*L*L 4PV>!,   4 4
 !..+t7I7I7K7K)LMMMMMLL$O!  .3!  !  ! 	 	 &gdF33    !1133333)4 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4sZ   .D="D&5BD	D&DD&DD&D=&D**D=-D*.D==E	E	c              #     K   ddg}|D ]k\  }}}|"t          t          |t          j                  }nt          d             } |            }|                     |          5  t          t          t          j                                        5 }|5  |	                    d| 
                                f          V  |                    t          | d                     |                    d          V }|                     |                    d	|z            d
| d|           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   md S )N)FOOi  N)zFOO,BARr  rQ  rR  c               3      K   d V  d S r*   rV   rV   r1   r/   noop_contextz<HTTPServerRawTest.test_invalid_methods.<locals>.noop_context  s      EEEEEr1   )r|   r   z# /echo HTTP/1.1
Host:127.0.0.1

r   s   HTTP/1.1 %dzexpected status code z in )r   r   rY  rZ  r"   r6  r!   r   r   r   r   r   r   r   r   r   )	r.   r  r|   r0  log_msgr   r  rB   resps	            r/   test_invalid_methodsz&HTTPServerRawTest.test_invalid_methods  sU      =

 &0 	 	!FD'"&ww|LLL

      *\^^
F++ 11226< 
 nnk43E3E3G3G%HIIIIITV"V"V"VWWXXX#..{;;;;OONT$9::>D>>d>>                                              	 	s[   $.E)EBD;	/E;D??ED?EE)EE)EE))E-	0E-	)r<   r=   r>   rM   rB  rE  rO  r]  ra  rd  ri  rm  rp  rt  rx  r{  r   r  r  __classcell__rJ   s   @r/   r<  r<    s3       5 5 5
 
 
 
 
      
? ? ?    B B B2B B B2/ / /./ / /4/ / /,/ / /2 4 4 X4B   X    r1   r<  c                   B    e Zd Z G d de          Zd Zd Zd Zd ZdS )XHeaderTestc                       e Zd Zd ZdS )XHeaderTest.Handlerc                     |                      d| j        j                   |                     t	          | j        j        | j        j                             d S )Nrequest-version)r   remote_protocol)
set_headerr`   r   r   rk   r   r\   rL   s    r/   rb   zXHeaderTest.Handler.get  s^    OO-t|/CDDDJJ"l4$(L$9      r1   Nr<   r=   r>   rb   rV   r1   r/   rK   r    s#        	 	 	 	 	r1   rK   c                 &    t          ddg          S )NTz5.5.5.5)xheaderstrusted_downstreamrk   rL   s    r/   get_httpserver_optionsz"XHeaderTest.get_httpserver_options  s    TykBBBBr1   c                 J   |                      |                     d          d         d           ddi}|                      |                     d|          d         d           ddi}|                      |                     d|          d         d           dd	i}|                      |                     d|          d         d	           dd
i}|                      |                     d|          d         d	           ddi}|                      |                     d|          d         d           ddi}|                      |                     d|          d         d           ddi}|                      |                     d|          d         d           d S )NrI   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ru   rU   )r.   
valid_ipv4valid_ipv4_list
valid_ipv6valid_ipv6_listinvalid_charsinvalid_chars_listinvalid_hosts           r/   test_ip_headerszXHeaderTest.test_ip_headers  s   --k:KHHH!9-
OOCO44[A9	
 	
 	
 -.BCOOCO99+F		
 	
 	
 "#=>
OOCO44[A&	
 	
 	

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

 %&78OOCO77Dk	
 	
 	
 01KLOOC);O<<[I;	
 	
 	
 $%56OOCO66{C[	
 	
 	
 	
 	
r1   c                    ddi}|                      d|          }|j        d                             d          r|                     d           t	          |j                  }|                     |d         d	           d S )
Nr  z127.0.0.1, 4.4.4.4, 5.5.5.5rI   r+  r  zHTTP/2requires HTTP/1.xr   r  )rO   r+   r   skipTestr   rQ   ru   )r.   r  r  results       r/   test_trusted_downstreamz#XHeaderTest.test_trusted_downstream  s    ,.KLzz#z77<)*55h?? 	/ MM-...TY'',i88888r1   c                 v   |                      |                     d          d         d           ddi}|                      |                     d|          d         d           ddi}|                      |                     d|          d         d           ddi}|                      |                     d|          d         d           dd	i}|                      |                     d|          d         d           dd
i}|                      |                     d|          d         d           d S )NrI   r  rY   X-Schemeri   r+  zX-Forwarded-Protozhttps , httpz
http,httpsunknownr  )r.   https_schemehttps_forwardedhttps_multi_forwardedhttp_multi_forwardedbad_forwardeds         r/   test_scheme_headerszXHeaderTest.test_scheme_headers  ss   --.?@&III"G,OOCO667HI7	
 	
 	
 /8OOCO99:KLg	
 	
 	
 "5n EOOC)>O??@QR	
 	
 	

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

 -i8OOCO778IJF	
 	
 	
 	
 	
r1   N)	r<   r=   r>   r   rK   r  r  r  r  rV   r1   r/   r  r    s~            .   C C C&
 &
 &
P9 9 9
 
 
 
 
r1   r  c                   *     e Zd Zd Z fdZd Z xZS )SSLXHeaderTestc                 :    t          dt          j        fg          S rH   )r   r  rK   rL   s    r/   rM   zSSLXHeaderTest.get_app  s    S+"567888r1   c                 R    t                                                      }d|d<   |S )NTr  )rA  r  )r.   outputrJ   s     r/   r  z%SSLXHeaderTest.get_httpserver_options	  s'    //11!zr1   c                 8   |                      |                     d          d         d           ddi}|                      |                     d|          d         d           ddi}|                      |                     d|          d         d           d S )NrI   r  ri   r  rY   r+  r  r  )r.   http_scheme
bad_schemes      r/   test_request_without_xprotocolz-SSLXHeaderTest.test_request_without_xprotocol  s    --.?@'JJJ!6*OOCO556GH&	
 	
 	
 !),
OOCO445FG	
 	
 	
 	
 	
r1   )r<   r=   r>   rM   r  r  r  r  s   @r/   r  r    sV        9 9 9    

 
 
 
 
 
 
r1   r  c                   6    e Zd Z G d de          Zd Zd ZdS )ManualProtocolTestc                       e Zd Zd ZdS )ManualProtocolTest.Handlerc                 `    |                      t          | j        j                             d S )Nrj   )r   rk   r`   r\   rL   s    r/   rb   zManualProtocolTest.Handler.get  s*    JJtT\%:;;;<<<<<r1   Nr  rV   r1   r/   rK   r    s#        	= 	= 	= 	= 	=r1   rK   c                 "    t          d          S )Nri   rj   r  rL   s    r/   r  z)ManualProtocolTest.get_httpserver_options!  s    W%%%%r1   c                 d    |                      |                     d          d         d           d S )NrI   r\   ri   r  rL   s    r/   test_manual_protocolz'ManualProtocolTest.test_manual_protocol$  s/    --j97CCCCCr1   N)r<   r=   r>   r   rK   r  r  rV   r1   r/   r  r    sa        = = = = =. = = =& & &D D D D Dr1   r  c                   \     e Zd ZdZdZ fdZ fdZed             Zed             Z	 xZ
S )UnixSocketTesta  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.
    r#  c                     t                                                       t          dt          fg          }t	          |          | _        | j                            t          j        | j	                             d S )Nr   )
rA  rB  r   rX   r   server
add_socketr   bind_unix_socketaddress)r.   apprJ   s     r/   rB  zUnixSocketTest.setUp6  s`    H&>?@AA oow7EEFFFFFr1   c                     | j                             | j        j                   | j                                         t                                                       d S r*   )r   r   r  close_all_connectionsrM  rA  rE  rC  s    r/   rE  zUnixSocketTest.tearDown<  sN    dk?@@@r1   c              #   `  K   t          t          t          j        t          j                                      5 }|                    | j                   |                    d           |                    d          V }|                     |d           |                    d          V }t          j
        |                    d                    }|                    t          |d                             V }|                     |d           d d d            d S # 1 swxY w Y   d S )Ns   GET /hello HTTP/1.0

r   s   HTTP/1.1 200 OK
r   r   r   rs   )r!   r   r   AF_UNIXr   r  r   r   ru   r   r   r   r   r   )r.   rB   rT   r   r+   rQ   s         r/   test_unix_socketzUnixSocketTest.test_unix_socketA  sT     XfmFN;;<<== 	3NN4<(((LL7888#..w7777HX'=>>> & 1 1+ > >>>K!'(:(:8(D(DEEG**3w7G/H+I+IJJJJDT>222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   CD##D'*D'c              #     K   t          t          dt          j                  5  t	          t          t          j        t          j                                      5 }|                    | j	                   |
                    d           |                                V }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |d           d S )NzMalformed HTTP message fromrR  s   garbage

   HTTP/1.1 400 Bad Request

)r   r   rY  rZ  r!   r   r   r  r   r  r   r  ru   r.   rB   rT   s      r/   test_unix_socket_bad_requestz+UnixSocketTest.test_unix_socket_bad_requestM  sF      w =W\RRR 	; 	;&-"?"?@@AA ;Vt|,,,/000!'!8!8!:!:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
 	#FGGGGGs6   9CAB/#C/B3	3C6B3	7CC
C
)r<   r=   r>   __doc__r  rB  rE  r   r  r  r  r  s   @r/   r  r  (  s          GG G G G G    
 	3 	3 X	3 H H XH H H H Hr1   r  r  cygwinz+unix sockets not supported on this platformc                   (     e Zd Z fdZ fdZ xZS )UnixSocketTestFilec                     t          j                    | _        t          j                            | j        d          | _        t                                                       d S )Nz	test.sock)	tempfilemkdtemptmpdirr   r   rA   r  rA  rB  rC  s    r/   rB  zUnixSocketTestFile.setUp^  sA    &((w||DK==r1   c                 z    t                                                       t          j        | j                   d S r*   )rA  rE  shutilrmtreer  rC  s    r/   rE  zUnixSocketTestFile.tearDownc  s1    dk"""""r1   )r<   r=   r>   rB  rE  r  r  s   @r/   r  r  Y  sQ        
    
# # # # # # # # #r1   r  linuxz>abstract namespace unix sockets not supported on this platformc                        e Zd Z fdZ xZS )UnixSocketTestAbstractc                     dt          j                    j        z   | _        t	                                                       d S )N )uuiduuid4hexr  rA  rB  rC  s    r/   rB  zUnixSocketTestAbstract.setUpm  s-    djll..r1   )r<   r=   r>   rB  r  r  s   @r/   r  r  h  s8        
        r1   r  c                       e Zd ZdZd Z fdZ fdZej        d             Z	ej        d             Z
ej        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 xZS )KeepAliveTestzTests 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           
          G d dt                     } G d dt                     } G d dt                     } G d dt                     }t                      | _        t          d	|fd
|fd|fd|t	          | j                  fg          S )Nc                       e Zd Zd Zd ZdS )+KeepAliveTest.get_app.<locals>.HelloHandlerc                 0    |                      d           d S Nr_   r;   rL   s    r/   rb   z/KeepAliveTest.get_app.<locals>.HelloHandler.get{      M*****r1   c                 0    |                      d           d S r  r  rL   s    r/   re   z0KeepAliveTest.get_app.<locals>.HelloHandler.post~  r  r1   Nr   rV   r1   r/   HelloHandlerr  z  s2        + + ++ + + + +r1   r  c                       e Zd Zd ZdS )+KeepAliveTest.get_app.<locals>.LargeHandlerc                     |                      d                    d t          d          D                                  d S )Nr#  c              3   @   K   | ]}t          |d z            dz  V  dS )      N)chr).0is     r/   	<genexpr>zBKeepAliveTest.get_app.<locals>.LargeHandler.get.<locals>.<genexpr>  s1      "K"K13q3w<<$#6"K"K"K"K"K"Kr1   i   )r   rA   rangerL   s    r/   rb   z/KeepAliveTest.get_app.<locals>.LargeHandler.get  s=     

277"K"Kc

"K"K"KKKLLLLLr1   Nr  rV   r1   r/   LargeHandlerr    s(        M M M M Mr1   r  c                   .    e Zd Zej        d             ZdS )=KeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandlerc              3   `   K   |                      d           |                                 V  d S r  )r   flushrL   s    r/   headzBKeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandler.head  s2      

=)))jjll"""""r1   N)r<   r=   r>   r   	coroutiner  rV   r1   r/   TransferEncodingChunkedHandlerr    s/        ]# # ]# # #r1   r
  c                   :    e Zd Zd Zej        d             Zd ZdS )3KeepAliveTest.get_app.<locals>.FinishOnCloseHandlerc                     || _         d S r*   cleanup_event)r.   r  s     r/   r]   z>KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.initialize  s    %2"""r1   c              3   h   K   |                                   | j                                        V  d S r*   )r  r  rN  rL   s    r/   rb   z7KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.get  s4      

(--///////r1   c                 0    |                      d           d S )Nclosedr  rL   s    r/   on_connection_closezGKeepAliveTest.get_app.<locals>.FinishOnCloseHandler.on_connection_close  s     H%%%%%r1   N)r<   r=   r>   r]   r   r	  rb   r  rV   r1   r/   FinishOnCloseHandlerr    sO        3 3 3 ]0 0 ]0& & & & &r1   r  rI   z/largez/chunkedz/finish_on_closer  )r   r   r  r   rk   )r.   r  r  r
  r  s        r/   rM   zKeepAliveTest.get_appy  s   	+ 	+ 	+ 	+ 	+> 	+ 	+ 	+	M 	M 	M 	M 	M> 	M 	M 	M	# 	# 	# 	# 	#^ 	# 	# 	#	& 	& 	& 	& 	&> 	& 	& 	& #WWl#<(;<&(t'9:::		
 
 	
r1   c                 V    t                                                       d| _        d S )Ns   HTTP/1.1)rA  rB  http_versionrC  s    r/   rB  zKeepAliveTest.setUp  s"    'r1   c                 (   | j                             t          j        d          | j                   |                                  t          | d          r| j                                         t                      
                                 d S )NrG  rH  rB   )r   rJ  rK  rL  rM  rN  hasattrrB   r   rA  rE  rC  s    r/   rE  zKeepAliveTest.tearDown  s|     	  !3E!B!B!BDINNN		4"" 	 Kr1   c              #      K   t          t          j                              | _        | j                            d|                                 f          V  d S r   )r   r   rB   r   r   rL   s    r/   r   zKeepAliveTest.connect  sN      v}//k!!;0B0B0D0D"EFFFFFFFr1   c              #   >  K   | j                             d          V }|                     |                    d          |           | j                             d          V }t	          j        |                    d                    }t          j        |          )Nr   r   r   r   )	rB   r   r   r   r   r   r   r   Return)r.   r   header_bytesr+   s       r/   read_headerszKeepAliveTest.read_headers  s      ;11'::::

--o>>
KKK![33K@@@@#L$7$7$A$ABBj!!!r1   c              #      K   |                                  V | _        | j                            t	          | j        d                             V }|                     d|           d S )Nr   rs   )r  r+   rB   r   r   ru   )r.   rQ   s     r/   r@   zKeepAliveTest.read_response  sf      !..0000[++C=M0N,O,OPPPP.....r1   c                 <    | j                                          | ` d S r*   )rB   r   rL   s    r/   r   zKeepAliveTest.close  s    KKKr1   c              #     K   |                                  V  | j                            d           |                                 V  | j                            d           |                                 V  |                                  d S )Ns"   GET / HTTP/1.1
Host:127.0.0.1

r   rB   r   r@   r   rL   s    r/   test_two_requestszKeepAliveTest.test_two_requests  s      llnnEFFF  """""EFFF  """""

r1   c              #   b  K   |                                  V  | j                            d           |                                 V  | j                                        V }|                     |            |                     | j        d         d           |                                  d S )Ns5   GET / HTTP/1.1
Host:127.0.0.1
Connection: close


Connectionr   )	r   rB   r   r@   r  r   ru   r+   r   r.   r   s     r/   test_request_closez KeepAliveTest.test_request_close  s      llnnL	
 	
 	
   """""[113333D!!!l3W===

r1   c              #   b  K   d| _         |                                 V  | j                            d           |                                 V  | j                                        V }|                     |           |                     d| j                   | 	                                 d S )N   HTTP/1.0s   GET / HTTP/1.0

r$  )
r  r   rB   r   r@   r  r   assertNotInr+   r   r%  s     r/   test_http10zKeepAliveTest.test_http10  s      'llnn3444  """""[113333t|444

r1   c              #     K   d| _         |                                 V  | j                            d           |                                 V  |                     | j        d         d           | j                            d           |                                 V  |                     | j        d         d           |                                  d S )Nr(  *   GET / HTTP/1.0
Connection: keep-alive

r$  
Keep-Aliver  r   rB   r   r@   ru   r+   r   rL   s    r/   test_http10_keepalivez#KeepAliveTest.test_http10_keepalive  s      'llnnMNNN  """""l3\BBBMNNN  """""l3\BBB

r1   c              #     K   d| _         |                                 V  | j                            d           |                                 V  |                     | j        d         d           | j                            d           |                                 V  |                     | j        d         d           |                                  d S )Nr(  s,   GET / HTTP/1.0
Connection: keep-alive


r$  r-  r,  r.  rL   s    r/    test_http10_keepalive_extra_crlfz.KeepAliveTest.test_http10_keepalive_extra_crlf  s      'llnnQRRR  """""l3\BBBMNNN  """""l3\BBB

r1   c              #      K   |                                  V  | j                            d           |                                 V  |                                 V  |                                  d S NsD   GET / HTTP/1.1
Host:127.0.0.1

GET / HTTP/1.1
Host:127.0.0.1

r!  rL   s    r/   test_pipelined_requestsz%KeepAliveTest.test_pipelined_requests	  sz      llnn_	
 	
 	
   """""  """""

r1   c              #      K   |                                  V  | j                            d           |                                 V  |                                  d S r3  r!  rL   s    r/   test_pipelined_cancelz#KeepAliveTest.test_pipelined_cancel  sb      llnn_	
 	
 	
   """""

r1   c              #      K   |                                  V  | j                            d           |                                 V  | j                            d          V  |                                  d S )Ns'   GET /large HTTP/1.1
Host:127.0.0.1

r  )r   rB   r   r  r   r   rL   s    r/   test_cancel_during_downloadz)KeepAliveTest.test_cancel_during_download  sv      llnnJKKK!!!!!k$$T*****

r1   c              #      K   |                                  V  | j                            d           |                                 V  |                                  | j                                         d S )Ns1   GET /finish_on_close HTTP/1.1
Host:127.0.0.1

)r   rB   r   r  r   r  setrL   s    r/   test_finish_while_closedz&KeepAliveTest.test_finish_while_closed%  sq      llnnTUUU!!!!!

     r1   c              #     K   d| _         |                                 V  | j                            d           |                                 V  |                     | j        d         d           | j                            d           |                                 V  |                     | j        d         d           |                                  d S )Nr(  sL   POST / HTTP/1.0
Connection: keep-alive
Transfer-Encoding: chunked

0

r$  r-  r,  r.  rL   s    r/   test_keepalive_chunkedz$KeepAliveTest.test_keepalive_chunked.  s      'llnn	
 	
 	
   """""l3\BBBMNNN  """""l3\BBB

r1   c              #     K   |                                  V  | j                            d           |                                 V  | j                            d           |                                 V  |                                  d S )Ns*   HEAD /chunked HTTP/1.1
Host:127.0.0.1

)r   rB   r   r  r   rL   s    r/   #test_keepalive_chunked_head_no_bodyz1KeepAliveTest.test_keepalive_chunked_head_no_bodyA  s      llnnMNNN!!!!!MNNN!!!!!

r1   )r<   r=   r>   r  rM   rB  rE  r   r	  r   r  r@   r   r   r"  r&  r*  r/  r1  r4  r6  r8  r;  r=  r?  r  r  s   @r/   r  r  r  s        /
 /
 /
b( ( ( ( (     	]G G ]G 	]" " ]" 	]/ / ]/
     X 	 	 X	   X 	 	 X	 	 	 X	   X   X   X ! ! X!   X$   X    r1   r  c                        e Zd Zd Zd Zd ZdS )GzipBaseTestc                 0    t          dt          fg          S rH   r>  rL   s    r/   rM   zGzipBaseTest.get_appM  s    S+./000r1   c                    t                      }t          j        d|          }|                    t	          |                     |                                 |                                }|                     dd|ddi          S )NwmodefileobjrI   ry   Content-Encodinggzipr,  )r#   rI  GzipFiler   r   r   getvaluerO   )r.   rQ   bytesio	gzip_filecompressed_bodys        r/   	post_gzipzGzipBaseTest.post_gzipP  s    ))MsG<<<	T

###!**,,zz '0	  
 
 	
r1   c                     |                      ddd          }|                     t          |j                  ddgi           d S )NrI   ry   r*  r{   r  r&  )rO   ru   r   rQ   rv   s     r/   test_uncompressedzGzipBaseTest.test_uncompressed]  sF    ::c&y:AAX]33eeW5EFFFFFr1   N)r<   r=   r>   rM   rO  rQ  rV   r1   r/   rA  rA  L  sF        1 1 1
 
 
G G G G Gr1   rA  c                        e Zd Zd Zd Zd ZdS )GzipTestc                 "    t          d          S )NT)decompress_requestr  rL   s    r/   r  zGzipTest.get_httpserver_optionsc  s    t,,,,r1   c                     |                      d          }|                     t          |j                  ddgi           d S )Nr*  r  r&  )rO  ru   r   rQ   rv   s     r/   	test_gzipzGzipTest.test_gzipf  s@    >>),,X]33eeW5EFFFFFr1   c                 n   t                      }t          j        d|          }|                    t	          d                     |                                 |                                }|                     dd|ddi          }|                     t          |j
                  d	d
gi           d S )NrD  rE  r*  rI   ry   rH  GZIPr,  r  r&  )r#   rI  rJ  r   r   r   rK  rO   ru   r   rQ   )r.   rL  rM  rN  rT   s        r/   test_gzip_case_insensitivez#GzipTest.test_gzip_case_insensitivej  s    ))MsG<<<	Y(((!**,,:: '0	  
 
 	X]33eeW5EFFFFFr1   N)r<   r=   r>   r  rW  rZ  rV   r1   r/   rS  rS  b  sI        - - -G G GG G G G Gr1   rS  c                       e Zd Zd ZdS )GzipUnsupportedTestc                     t          t          d          5  |                     d          }d d d            n# 1 swxY w Y   |                     |j        d           d S )Nz.*Unsupported Content-Encodingr*  r  )r   r   rO  ru   r0  rv   s     r/   test_gzip_unsupportedz)GzipUnsupportedTest.test_gzip_unsupported{  s     w @AA 	1 	1~~i00H	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1,,,,,s   8<<N)r<   r=   r>   r^  rV   r1   r/   r\  r\  z  s#        - - - - -r1   r\  c                   h    e Zd ZdZdZd Zd Z G d de          Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )StreamingChunkSizeTests2   01234567890123456789012345678901234567890123456789   c                     t                      S r*   r   rL   s    r/   get_http_clientz&StreamingChunkSizeTest.get_http_client       %&&&r1   c                 .    t          | j        d          S )NT)
chunk_sizerU  )rk   
CHUNK_SIZErL   s    r/   r  z-StreamingChunkSizeTest.get_httpserver_options  s    t4HHHHr1   c                   &    e Zd Zd Zd Zd Zd ZdS )&StreamingChunkSizeTest.MessageDelegatec                     || _         d S r*   
connectionr.   rl  s     r/   __init__z/StreamingChunkSizeTest.MessageDelegate.__init__      (DOOOr1   c                     g | _         d S r*   )chunk_lengthsr-   s      r/   r0   z7StreamingChunkSizeTest.MessageDelegate.headers_received  s    !#Dr1   c                 T    | j                             t          |                     d S r*   )rq  r3   rd   )r.   r4   s     r/   r6   z4StreamingChunkSizeTest.MessageDelegate.data_received  s%    %%c%jj11111r1   c                 T   t          t          | j                            }| j                            t          ddd          t          dt          t          |                    i                     | j        	                    |           | j        
                                 d S )NrX  r/  OKr   )r   r   rq  rl  write_headersr   r   r   rd   r   r;   )r.   response_bodys     r/   r;   z-StreamingChunkSizeTest.MessageDelegate.finish  s     T-?!@!@AAMO))!*c488-s3}3E3E/F/FGHH   O!!-000O""$$$$$r1   N)r<   r=   r>   rn  r0   r6   r;   rV   r1   r/   MessageDelegateri    sP        	) 	) 	)	$ 	$ 	$	2 	2 	2	% 	% 	% 	% 	%r1   rw  c                 <     G d dt                     } |            S )Nc                       e Zd Zd ZdS )+StreamingChunkSizeTest.get_app.<locals>.Appc                 6    t                               |          S r*   )r`  rw  r.   server_connrequest_conns      r/   start_requestz9StreamingChunkSizeTest.get_app.<locals>.App.start_request  s    -==lKKKr1   Nr<   r=   r>   r  rV   r1   r/   Apprz    s(        L L L L Lr1   r  r   r.   r  s     r/   rM   zStreamingChunkSizeTest.get_app  sB    	L 	L 	L 	L 	L. 	L 	L 	L suur1   c           	          | j         dddi|}|                                 t          |j                  }|                     t          | j                  t          |                     |D ]U}|                     || j	        dt          |          z              |                     |ddt          |          z              V|S )NrI   r|   ry   zoversized chunk: r   zempty chunk: )rI   )rO   rP   r   rQ   ru   rd   BODYsumassertLessEqualrg  r   assertGreater)r.   rS   rT   r5   rf  s        r/   fetch_chunk_sizesz(StreamingChunkSizeTest.fetch_chunk_sizes  s    4:;;&;F;;X]++TYV555  	M 	MJ  DO-@3v;;-N   z1oF.KLLLLr1   c                 &   t                      }t          j        d|          }|                    |           |                                 |                                }t          |          t          |          k    rt          d          |S )NrD  rE  z#body did not shrink when compressed)r#   rI  rJ  r   r   rK  rd   ra   )r.   rQ   rL  gzfile
compresseds        r/   compresszStreamingChunkSizeTest.compress  s{    ))C999T%%''
z??c$ii''ABBBr1   c                 l    |                      | j                  }|                     g d|           d S )N)rQ   )ra  ra  ra     )r  r  ru   )r.   r5   s     r/   test_regular_bodyz(StreamingChunkSizeTest.test_regular_body  s:    ''TY'77&11111r1   c                 h    |                      |                     | j                  ddi           d S )NrH  rI  )rQ   r+   )r  r  r  rL   s    r/   test_compressed_bodyz+StreamingChunkSizeTest.test_compressed_body  sB    ty))4F3O 	 	
 	
 	
 	
 	
r1   c                 n      fd}                      |          }                     g d|           d S )Nc                 h     | j         d d                     | j         dd                     d S N   )r  )r   r.   s    r/   body_producerz?StreamingChunkSizeTest.test_chunked_body.<locals>.body_producer  s=    E$)CRC.!!!E$)BCC.!!!!!r1   )r  )ra     ra     )r  ru   )r.   r  r5   s   `  r/   test_chunked_bodyz(StreamingChunkSizeTest.test_chunked_body  sT    	" 	" 	" 	" 	" ''m'DD&11111r1   c                     |                      | j                  |                     t                    d           fd}|                     |ddi           d S )Nr  c                 T     | d d                     | dd                     d S r  rV   )r   r  s    r/   r  zEStreamingChunkSizeTest.test_chunked_compressed.<locals>.body_producer  s9    E*SbS/"""E*RSS/"""""r1   rH  rI  )r  r+   )r  r  r  rd   r  )r.   r  r  s     @r/   test_chunked_compressedz.StreamingChunkSizeTest.test_chunked_compressed  s    ]]49--
3z??B///	# 	# 	# 	# 	# 	'2Df1M 	 	
 	
 	
 	
 	
r1   N)r<   r=   r>   r  rg  rc  r  r   rw  rM   r  r  r  r  r  r  rV   r1   r/   r`  r`    s        @DJ' ' '
I I I% % % % %- % % %&  
 
 
  2 2 2

 
 
2 2 2

 

 

 

 

r1   r`  c                   6    e Zd Z G d de          Zd Zd ZdS )InvalidOutputContentLengthTestc                       e Zd Zd Zd ZdS ).InvalidOutputContentLengthTest.MessageDelegatec                     || _         d S r*   rk  rm  s     r/   rn  z7InvalidOutputContentLengthTest.MessageDelegate.__init__  ro  r1   c           	         ddddd}| j                             t          ddd          t          d	||d
                  i                     | j                             d           | j                                          d S )N10r  r  r  )normalr}  r~  
underscorerX  r/  rt  r   x-test
   1234567890)rl  ru  r   r   r   r;   )r.   r,   r+   content_lengthss       r/   r0   z?InvalidOutputContentLengthTest.MessageDelegate.headers_received  s    # %#	 O O))!*c488-wx?P/QRSS   O!!-000O""$$$$$r1   N)r<   r=   r>   rn  r0   rV   r1   r/   rw  r    s2        	) 	) 	)	% 	% 	% 	% 	%r1   rw  c                 <     G d dt                     } |            S )Nc                       e Zd Zd ZdS )3InvalidOutputContentLengthTest.get_app.<locals>.Appc                 6    t                               |          S r*   )r  rw  r|  s      r/   r  zAInvalidOutputContentLengthTest.get_app.<locals>.App.start_request  s    5EElSSSr1   Nr  rV   r1   r/   r  r    s(        T T T T Tr1   r  r  r  s     r/   rM   z&InvalidOutputContentLengthTest.get_app  sB    	T 	T 	T 	T 	T. 	T 	T 	T suur1   c           
      H   |                      d          5  |                     ddddi          }|                                 |                     |j        d           d d d            n# 1 swxY w Y   dD ]}|                      |          5  t          t          d          5  |                     t                    5  |                     ddd|i           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )	Nr  rI   GETr  )r|   r+   r  )r}  r~  r  r   )	r6  rO   rP   ru   rQ   r   r   r   r   )r.   rT   tests      r/   "test_invalid_output_content_lengthzAInvalidOutputContentLengthTest.test_invalid_output_content_length  sX   \\(## 	; 	;zz#eh=QzRRHX]M:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; A 	P 	PDd## P P w(<== P P**955 P P

3ux>N
OOOP P P P P P P P P P P P P P PP P P P P P P P P P P P P P PP P P P P P P P P P P P P P P	P 	Psl   A
A,,A03A0D&C?C(	C?(C,,C?/C,0C?3D?DDDDD	D	N)r<   r=   r>   r   rw  rM   r  rV   r1   r/   r  r    sb        % % % % %- % % %$  P P P P Pr1   r  c                   &    e Zd Zd Zd Zd Zd ZdS )MaxHeaderSizeTestc                 0    t          dt          fg          S rH   r   rX   rL   s    r/   rM   zMaxHeaderSizeTest.get_app      S":;<===r1   c                 "    t          d          S )Nr  )max_header_sizer  rL   s    r/   r  z(MaxHeaderSizeTest.get_httpserver_options  s    D))))r1   c                     |                      dddi          }|                                 |                     |j        d           d S )NrI   X-Fillerdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar+  rs   )rO   rP   ru   rQ   rv   s     r/   test_small_headersz$MaxHeaderSizeTest.test_small_headers  sL    ::cJ	+B:CC77777r1   c                 D   t          t          dd          5  	 |                     dddid           |                     d	           n># t          $ r1}|j         |                     |j        j        d
           Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )NzUnsatisfiable readFr   rI   r    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaT)r+   r   z did not raise expected exception)i  iW  )r   r   rO   failr   rT   assertInr0  )r.   es     r/   test_large_headersz$MaxHeaderSizeTest.test_large_headers  s    w 4uEEE 		? 		??

3Z(@d
SSS		<==== ? ? ? :)MM!*/:>>>?			? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		? 		?s:   B/A
	B

B'B ;B BBBBN)r<   r=   r>   rM   r  r  r  rV   r1   r/   r  r    sP        > > >* * *8 8 8

? 
? 
? 
? 
?r1   r  c                        e Zd Zd Zd Z fdZ fdZej        d             Z	e
d             Ze
d             Z xZS )IdleTimeoutTestc                 0    t          dt          fg          S rH   r  rL   s    r/   rM   zIdleTimeoutTest.get_app%  r  r1   c                 "    t          d          S )Ng?)idle_connection_timeoutr  rL   s    r/   r  z&IdleTimeoutTest.get_httpserver_options(  s    C0000r1   c                 V    t                                                       g | _        d S r*   )rA  rB  streamsrC  s    r/   rB  zIdleTimeoutTest.setUp+  s    r1   c                     t                                                       | j        D ]}|                                 d S r*   )rA  rE  r  r   )r.   rB   rJ   s     r/   rE  zIdleTimeoutTest.tearDown/  sC    l 	 	FLLNNNN	 	r1   c              #      K   t          t          j                              }|                    d|                                 f          V  | j                            |           t          j        |          r   )r   r   r   r   r  r3   r   r  r   s     r/   r   zIdleTimeoutTest.connect4  sh      &-//**nnk4+=+=+?+?@AAAAAF###j   r1   c              #      K   |                                  V }t                      }|                    |j                   |                                V  d S r*   )r   r   set_close_callbackr:  rN  )r.   rB   events      r/   test_unused_connectionz&IdleTimeoutTest.test_unused_connection;  sR      ||~~%%!!%),,,jjllr1   c              #     K   |                                  V }t                      }|                    |j                   t	          d          D ][}|                    d           |                    d          V  |                    d          V }|                     |d           \|	                                V  d S )Nr  s#   GET / HTTP/1.1
Host: 127.0.0.1

r      rs   )
r   r   r  r:  r  r   r   r   ru   rN  )r.   rB   r  r   r   s        r/   test_idle_after_usez#IdleTimeoutTest.test_idle_after_useB  s      ||~~%%!!%),,, q 	3 	3ALLEFFF##K00000**2....DT>2222 jjllr1   )r<   r=   r>   rM   r  rB  rE  r   r	  r   r   r  r  r  r  s   @r/   r  r  $  s        > > >1 1 1        
 	]! ! ]!   X   X    r1   r  c                       e Zd Zd Zd Zd Zd Zd Z ej	        e
j        dk    d          d             Zd	 Z ej	        e
j        dk    d          d
             Zd Zd Zed             Zed             ZdS )BodyLimitsTestc                      G d dt                     }t           G d dt                                 }t          d|fd|fg          S )Nc                       e Zd Zd ZdS )/BodyLimitsTest.get_app.<locals>.BufferedHandlerc                 x    |                      t          t          | j        j                                       d S r*   )r   r   rd   r`   rQ   rL   s    r/   putz3BodyLimitsTest.get_app.<locals>.BufferedHandler.putV  s/    

3s4<#4556677777r1   N)r<   r=   r>   r  rV   r1   r/   BufferedHandlerr  U  s#        8 8 8 8 8r1   r  c                   &    e Zd Zd Zd Zd Zd ZdS )0BodyLimitsTest.get_app.<locals>.StreamingHandlerc                     d| _         d S )Nr   )
bytes_readrL   s    r/   r]   z;BodyLimitsTest.get_app.<locals>.StreamingHandler.initialize[  s    "#r1   c                 ^   t          j        t          | j        j                  }d| j        j        v r5|                    t          |                     d                               d| j        j        v r7|	                    t          |                     d                               d S d S )Nexpected_sizebody_timeout)typingcastr   r`   rl  r   set_max_body_sizer   r   set_body_timeoutfloatr9   s     r/   r  z8BodyLimitsTest.get_app.<locals>.StreamingHandler.prepare^  s    {?DL4KLL"dl&<<<**3t/@/@/Q/Q+R+RSSS!T\%;;;))%0A0A.0Q0Q*R*RSSSSS <;r1   c                 @    | xj         t          |          z  c_         d S r*   )r  rd   r%  s     r/   r6   z>BodyLimitsTest.get_app.<locals>.StreamingHandler.data_receivede  s    3t99,r1   c                 T    |                      t          | j                             d S r*   )r   r   r  rL   s    r/   r  z4BodyLimitsTest.get_app.<locals>.StreamingHandler.puth  s$    

3t//00000r1   N)r<   r=   r>   r]   r  r6   r  rV   r1   r/   StreamingHandlerr  Y  sS        $ $ $T T T- - -1 1 1 1 1r1   r  	/buffered
/streaming)r   r    r   )r.   r  r  s      r/   rM   zBodyLimitsTest.get_appT  s    	8 	8 	8 	8 	8n 	8 	8 	8 
	1 	1 	1 	1 	1~ 	1 	1 
		1" ?+l<L-MN
 
 	
r1   c                 $    t          dd          S )Nr   i   )r  max_body_sizer  rL   s    r/   r  z%BodyLimitsTest.get_httpserver_optionso  s    T::::r1   c                     t                      S r*   r   rL   s    r/   rc  zBodyLimitsTest.get_http_clientr  rd  r1   c                     |                      ddd          }|                     |j        d           |                      ddd          }|                     |j        d           d S )Nr  PUTs   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar{   s   4096r  rt   rv   s     r/   test_small_bodyzBodyLimitsTest.test_small_bodyw  sf    ::k%k:JJ000::l5{:KK00000r1   c                     t          t          dt          j                  5  |                     ddddz            }d d d            n# 1 swxY w Y   |                     |j        d           d S )	N.*Content-Length too longrR  r  r     a (  r{   r  r   r   rY  rZ  rO   ru   r0  rv   s     r/   test_large_body_bufferedz'BodyLimitsTest.test_large_body_buffered}  s    w ;7<PPP 	P 	Pzz+e$,zOOH	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P,,,,,   A

AAntzflaky on windowsc                     t          t          dt          j                  5  |                     ddd           }d d d            n# 1 swxY w Y   |                     |j        d           d S )N.*chunked body too largerR  r  r  c                      | ddz            S Nr  r  rV   r   s    r/   r   zABodyLimitsTest.test_large_body_buffered_chunked.<locals>.<lambda>      EE$,,?,? r1   r|   r  r  r  rv   s     r/    test_large_body_buffered_chunkedz/BodyLimitsTest.test_large_body_buffered_chunked  s     w :',OOO 	 	zz?? "  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,,,,,   AAAc                     t          t          dt          j                  5  |                     ddddz            }d d d            n# 1 swxY w Y   |                     |j        d           d S )	Nr  rR  r  r  r  r  r{   r  r  rv   s     r/   test_large_body_streamingz(BodyLimitsTest.test_large_body_streaming  s    w ;7<PPP 	Q 	Qzz,u4%<zPPH	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q,,,,,r  c                     t          t          dt          j                  5  |                     ddd           }d d d            n# 1 swxY w Y   |                     |j        d           d S )Nr  rR  r  r  c                      | ddz            S r  rV   r  s    r/   r   zBBodyLimitsTest.test_large_body_streaming_chunked.<locals>.<lambda>  r  r1   r   r  r  rv   s     r/   !test_large_body_streaming_chunkedz0BodyLimitsTest.test_large_body_streaming_chunked  s    w :',OOO 	 	zz?? "  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,,,,,r  c                 r    |                      ddddz            }|                     |j        d           d S )N/streaming?expected_size=10240r  r  r  r{      10240rt   rv   s     r/   "test_large_body_streaming_overridez1BodyLimitsTest.test_large_body_streaming_override  sE    ::,U  
 
 	11111r1   c                 n    |                      ddd           }|                     |j        d           d S )Nr	  r  c                      | ddz            S r  rV   r  s    r/   r   zKBodyLimitsTest.test_large_body_streaming_chunked_override.<locals>.<lambda>  s    dUl(;(; r1   r   r
  rt   rv   s     r/   *test_large_body_streaming_chunked_overridez9BodyLimitsTest.test_large_body_streaming_chunked_override  sF    ::,;;  
 

 	11111r1   c              #     K   t          t          j                              }	 |                    d|                                 f          V  |                    d           t          t          dt          j                  5  |	                                V }d d d            n# 1 swxY w Y   | 
                    |d           |                                 d S # |                                 w xY w)Nr   s@   PUT /streaming?body_timeout=0.1 HTTP/1.0
Content-Length: 42

zTimeout reading bodyrR  r1   )r   r   r   r   r   r   r   rY  rZ  r  ru   r   r  s      r/   test_timeoutzBodyLimitsTest.test_timeout  s#     &-//**	..+t/A/A/C/C!DEEEEE LL.   7$:',OOO ; ;!'!8!8!:!:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;Xs+++LLNNNNNFLLNNNNs0   A!C B(C (B,,C /B,0C C5c              #     K   t          t          j                              }	 |                    d|                                 f          V  |                    d           |                    ddz             t          |          V \  }}}|                     |d           |                    d           t          t          dt          j
                  5  |                                V }d d d            n# 1 swxY w Y   |                     |d	           |                                 d S # |                                 w xY w)
Nr   sW   PUT /streaming?expected_size=10240 HTTP/1.1
Host: 127.0.0.1
Content-Length: 10240

r  r  r
  sC   PUT /streaming HTTP/1.1
Host: 127.0.0.1
Content-Length: 10240

r  rR  r  )r   r   r   r   r   rD   ru   r   r   rY  rZ  r  r   )r.   rB   r,   r+   rT   r   s         r/   test_body_size_override_resetz,BodyLimitsTest.test_body_size_override_reset  s      &-//**	..+t/A/A/C/C!DEEEEELL1  
 LL&&&2B62J2J,J,J)JXx000LL1  
 7$?w|TTT 7 7#4466667 7 7 7 7 7 7 7 7 7 7 7 7 7 7T#FGGGLLNNNNNFLLNNNNs0   B9D7 D 4D7  DD7 DD7 7EN)r<   r=   r>   rM   r  rc  r  r  unittestskipIfr   r
  r  r  r  r  r  r   r  r  rV   r1   r/   r  r  S  s$       
 
 
6; ; ;' ' '
1 1 1- - -
 X_RW_&899- - :9-- - -
 X_RW_&899- - :9-2 2 22 2 2   X    X  r1   r  c                       e Zd Zd Zd ZdS )LegacyInterfaceTestc                       fd}|S )Nc                    | j                             d          _        j        sQ| j                            t          ddd          t                                 | j                                         d S d}| j                            t          dt          |          z                       | j                            |           | j                                         d S )NzHTTP/1.r#  r/  rt  rs   z'HTTP/1.1 200 OK
Content-Length: %d

)r   r   http1rl  ru  r   r   r;   r   r   rd   )r`   messager.   s     r/   handle_requestz3LegacyInterfaceTest.get_app.<locals>.handle_request  s     33I>>DJ:  "00%b#t44kmm   "))+++$G$$G#g,,VWW   $$W---%%'''''r1   rV   )r.   r  s   ` r/   rM   zLegacyInterfaceTest.get_app  s$    	( 	( 	( 	( 	(" r1   c                     |                      d          }| j        s|                     d           |                     |j        d           d S )NrI   r  rs   )rO   r  r  ru   rQ   rv   s     r/   test_legacy_interfacez)LegacyInterfaceTest.test_legacy_interface  sL    ::c??z 	/MM-...77777r1   N)r<   r=   r>   rM   r  rV   r1   r/   r  r    s2          .8 8 8 8 8r1   r  )c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.simple_httpclientr   tornado.testingr   r   r   r   r   tornado.test.utilr   tornado.webr   r   r    
contextlibr!   r"   rK  rI  rY  r   r  r   rn   sysr  r  r  urllib.parser7  r  ior#   r  TYPE_CHECKINGr$   r%   rD   rF   rX   rg   TestCaser   r   r   r   r   r  r  r  r<  r  r  r  r  r  r  platformr  r   r  r  rA  rS  r\  r`  r  r  r  r  r  rV   r1   r/   <module>r2     s^                                  4 3 3 3 3 3 ( ( ( ( ( ( ) ) ) ) ) )            & % % % % %       ( ( ( ( ( ( ( ( ; ; ; ; ; ;              1 0 0 0 0 0 H H H H H H H H H H . . . . . . . .    				   



 



               	 "!!!!!!!!C C C,	* 	* 	* 	* 	*+ 	* 	* 	*
E 
E 
E 
E 
E~ 
E 
E 
E'2 '2 '2 '2 '2  '2 '2 '2T&
 &
 &
 &
 &
) &
 &
 &
R	
 	
 	
 	
 	
> 	
 	
 	
Y Y Y Y Y* Y Y Yx> > > > >. > > >&O &O &O &O &O~ &O &O &OR9 9 9 9 9n 9 9 9
B B B B B B B B>U >U >U >U >U& >U >U >UBB B B B B) B B BJ\
 \
 \
 \
 \
% \
 \
 \
~
 
 
 
 
')< 
 
 
.	D 	D 	D 	D 	D, 	D 	D 	D -H -H -H -H -H] -H -H -H` 	""">clh&>1 # # # # # # #	 # 		#	#	H(?(?(H(HID     ^  	 W W W W W% W W WtG G G G G$ G G G,G G G G G|. G G G0- - - - -,(9 - - -\
 \
 \
 \
 \
. \
 \
 \
~%P %P %P %P %P%6 %P %P %PP? ? ? ? ?) ? ? ?2, , , , ,' , , ,^A A A A A& A A AH8 8 8 8 8+ 8 8 8 8 8r1   