
    Xhp                        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e7j                        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 e7j                   eTe2d3       xs e4j                  d4k(  d5       G d6 d7eR             ZV e7j                   eTe2d3      xr e4j                  j                  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      Zby)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       |       }j                  |       d{    |j                  |j                  dj                        fS 7 ,w)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y)"read_stream_body.<locals>.Delegatec                      || _         || _        y N)headers
start_lineselfr,   r+   s      P/var/www/html/myenv/lib/python3.12/site-packages/tornado/test/httpserver_test.pyheaders_receivedz3read_stream_body.<locals>.Delegate.headers_received=   s    "DL(DO    c                 (    j                  |       y r*   )append)r.   chunkchunkss     r/   data_receivedz0read_stream_body.<locals>.Delegate.data_receivedA   s    MM% r1   c                 &    j                          y r*   )detachr.   conns    r/   finishz)read_stream_body.<locals>.Delegate.finishD   s    KKMr1   N)__name__
__module____qualname__r0   r6   r;   )r5   r:   s   r/   Delegater(   <   s    	)	!	r1   r?   TNr1   )r   r   read_responser,   r+   join)streamr?   delegater5   r:   s      @@r/   read_stream_bodyrD   7   sk      F	& 	 64(DzH


X
&&& 0 0#((62BBB 's   <A/ A--A/c                       e Zd ZdZd Zd Zy)HandlerBaseTestCaseNc                 F    t        d| j                  j                  fg      S N/)r   	__class__Handlerr.   s    r/   get_appzHandlerBaseTestCase.get_appP   s    S$.."8"89:;;r1   c                 p     | j                   |i |}|j                          t        |j                        S r*   )fetchrethrowr   body)r.   argskwargsresponses       r/   
fetch_jsonzHandlerBaseTestCase.fetch_jsonS   s2    4::t.v.8==))r1   )r<   r=   r>   rK   rM   rU    r1   r/   rF   rF   M   s    G<*r1   rF   c                        e Zd ZddZd Zd Zy)HelloWorldRequestHandlerc                     || _         y r*   )expected_protocol)r.   protocols     r/   
initializez#HelloWorldRequestHandler.initializeZ   s
    !)r1   c                     | j                   j                  | j                  k7  rt        d      | j	                  d       y )Nzunexpected protocolHello world)requestr[   rZ   	Exceptionr;   rL   s    r/   getzHelloWorldRequestHandler.get]   s2    <<  D$:$::122M"r1   c                 f    | j                  dt        | j                  j                        z         y )NzGot %d bytes in POST)r;   lenr_   rQ   rL   s    r/   postzHelloWorldRequestHandler.postb   s#    *S1B1B-CCDr1   N)http)r<   r=   r>   r\   ra   rd   rV   r1   r/   rX   rX   Y   s    *#
Er1   rX   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)SSLTestc                 <    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STUUr1   c                 \    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   s.     
//
 446
 	
r1   c                 ^    | j                  d      }| j                  |j                  d       y )NrI      Hello worldrO   assertEqualrQ   r.   rT   s     r/   test_sslzSSLTest.test_sslp   s#    ::c?7r1   c                 j    | j                  ddddz        }| j                  |j                  d       y )NrI   POSTAi  methodrQ   s   Got 5000 bytes in POSTrt   rv   s     r/   test_large_postzSSLTest.test_large_postt   s/    ::c&sTz:B(ABr1   c           	      d   t        t        d      5  t        t        dd      5  | j                  t        t        f      5  | j                  | j                  d      j                  dd      ddd	
       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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 	7$85I &&';< JJS)11(GD(,(,$(	  	 	  	 	s:   B&B 5B5B=B&BBB#	B&&B/c                 H   t        t        d      5 }| j                  t        t        f      5  | j                  | j                  d      j                  dd      d       d d d        d d d        | j                  j                         y # 1 sw Y   -xY w# 1 sw Y   1xY w)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 

LL%--h@d  	
 	001	 	 	s"   B3B BB	BB!N)	r<   r=   r>   rM   rq   rw   r}   r   r   rV   r1   r/   rg   rg   f   s"    V
8C2r1   rg   c                       e Zd Zd Zd Zy)BadSSLOptionsTestc                 V    t               }| j                  t        t        |ddi       y )Nkeyfilez/__missing__.crtssl_options)r   r   KeyErrorr   )r.   applications     r/   test_missing_argumentsz(BadSSLOptionsTest.test_missing_arguments   s.    !m"$67	 	 	
r1   c                    t               }t        j                  j                  t              }t        j                  j                  |d      }t        j                  j                  |d      }| j                  t        t        ft        |ddi       | j                  t        t        ft        ||dd       t        |||d       y)	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     "mWW__X.
!ww||J
Cww||J
;!#%67	 	 	
 	!0-	 	 	
 	%9lS	
r1   N)r<   r=   r>   r   r   rV   r1   r/   r   r      s    

r1   r   c                       e Zd Zd Zy)MultipartTestHandlerc           	         | j                  | j                  j                  d   | j                  d      | j                  j                  d   d   j
                  t        | j                  j                  d   d   d         d       y )NzX-Header-Encoding-Testargumentfilesr   rQ   )headerr   filenamefilebody)r;   r_   r+   get_argumentr   r   r   rL   s    r/   rd   zMultipartTestHandler.post   sr    ,,../GH --j9 LL..w7:CC$T\\%7%7%@%CF%KL		
r1   Nr<   r=   r>   rd   rV   r1   r/   r   r      s    
r1   r   c                   <    e Zd Zd Zd ZddZd Zd Zed        Z	y)	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                 4    t        | j                               S r*   )r   r   rL   s    r/   rM   zHTTPConnectionTest.get_app   s    4,,.//r1   c                     t        t        t        j                                     5  j                  j	                   fd       j                  |j                  |t        dt        |      z        gz         |z   |z   |z           j                  j	                  fd      \  }}}|cd d d        S # 1 sw Y   y xY w)Nc                  F    j                  d j                         f      S N	127.0.0.1)connectget_http_portr.   rB   s   r/   <lambda>z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>   s    T5G5G5I'JK r1   zContent-Length: %dc                      t               S r*   )rD   )rB   s   r/   r   z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>   s    (0 r1   )	r!   r   socketio_looprun_syncwriterA   r   rc   )r.   r+   rQ   newliner,   rB   s   `    @r/   	raw_fetchzHTTPConnectionTest.raw_fetch   s    Xfmmo./ 	6LL!!K LLW-ACI-M(N'OOP  )-(=(=0)%J 	 	 	s   BB88Cc                 n   | j                  g ddj                  dddj                         ddj                         ddj                         d	dg	            }t        |      }| j	                  d
|d          | j	                  d|d          | j	                  d|d          | j	                  d|d          y )N)s   POST /multipart HTTP/1.0s6   Content-Type: multipart/form-data; boundary=1234567890s   X-Header-encoding-test:    
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4
#344
#344
#34r1   c                 `    dD ])  }| j                  dgd|      }| j                  |d       + y )N)r      
s   GET /hello HTTP/1.0r1   )r   rs   )r   ru   )r.   r   rT   s      r/   test_newlinesz HTTPConnectionTest.test_newlines   s9    ' 	7G~~'=&>W~UHX~6	7r1   c              #     K   t        t        j                               }|j                  d| j                         f       |j	                  dj                  g d             |j                  d      }| j                  |j                  d      |       |j	                  d       |j                  d      }| j                  |j                  d      |       |j                  d      }t        j                  t        |j                  d                  }|j                  t        |d	               }| j                  |d
       |j!                          y w)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llLL	
 	
 &&{33(894@[!!,,W55

--o>
K"--k::##J{/A/A(/K$LM&&s73C+D'EFF89s   E E"N)r   )
r<   r=   r>   r   rM   r   r   r   r   r   rV   r1   r/   r   r      s/    
0 5:7  r1   r   c                       e Zd Zd Zd Zy)EchoHandlerc                 `    | j                  t        | j                  j                               y r*   r   r	   r_   	argumentsrL   s    r/   ra   zEchoHandler.get#      

$T\\%;%;<=r1   c                 `    | j                  t        | j                  j                               y r*   r   rL   s    r/   rd   zEchoHandler.post&  r   r1   Nr<   r=   r>   ra   rd   rV   r1   r/   r   r   "  s    >>r1   r   c                   $    e Zd Zd Zd Zd Zd Zy)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 ],  \  }}| j                  |t        | j                  |      |       . | j                  d	t        | j                  j                  j                               d
   t               | j                  dt        | j                  j                  j                               d
   t               | j                  dt        | j                  j                  j                               d
   t               | j                  dt        | j                  j                  j                               d
   j                  t               | j                  dt        | j                  j                  j                               d
   t               | j                  dt        | j                  j                  j                               d
   d
   t               y )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 E=OOE74<<#?O	P 	d4<<+?+?+D+D+F&G&JCPT\\-A-A-H-H-J(KA(NPSTd4<<+?+?+D+D+F&G&JCPD!5!5!<!<!>?BHH#	

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

4;;r1   c                 :    | j                  | j                         y r*   )r   r   rL   s    r/   ra   zTypeCheckHandler.getJ  s    

4;;r1   c                 P    t        |      }||k7  rd| d| | j                  |<   y y )Nz	expected z, got )typer   )r.   nameobjr  actual_types        r/   r   zTypeCheckHandler.check_typeM  s3    3iK'"+M?& NDKK (r1   N)r<   r=   r>   r  rd   ra   r   rV   r1   r/   r   r   *  s    Y6  Or1   r   c                       e Zd Zd Zy)PostEchoHandlerc                 X    | j                  t        | j                  d                   y )Nr   )echo)r   rk   r   )r.   	path_argss     r/   rd   zPostEchoHandler.postT  s    

4T..v678r1   Nr   rV   r1   r/   r  r  S  s    9r1   r  c                       e Zd ZddZy)PostEchoGBKHandlerNc                 ^    	 |j                  d      S # t        $ r t        dd|z        w xY w)Ngbk  zinvalid gbk bytes: %r)r   r`   r   )r.   r   r
  s      r/   decode_argumentz"PostEchoGBKHandler.decode_argumentY  s;    	B<<&& 	BC!85!@AA	Bs    ,r*   )r<   r=   r>   r  rV   r1   r/   r  r  X  s    Br1   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	HTTPServerTestc                 ^    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  s>    +&/0 +./01
 	
r1   c                 z    | j                  d      }t        |j                        }| j                  |ddgi       y )Nz/echo?foo=%C3%A9foor   rO   r   rQ   ru   r   s      r/   test_query_string_encodingz)HTTPServerTest.test_query_string_encodingl  s6    ::018==)z23r1   c                 |    | j                  d      }t        |j                        }| j                  |dddgi       y )Nz/echo?foo=&foo=r   r   r   s      r/   test_empty_query_stringz&HTTPServerTest.test_empty_query_stringq  s8    ::/08==)Bx01r1   c                     | j                  ddd      }t        |j                        }| j                  |dgdgd       y )Nr  ry   z	foo=&bar=r{   r#  )r  barr   r   s      r/   test_empty_post_parametersz)HTTPServerTest.test_empty_post_parametersv  s=    ::gf;:G8==)tRD9:r1   c                     ddi}| j                  d|      }t        |j                        }| j                  |i        | j                  ddd|      }t        |j                        }| j                  |i        y )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{  sy    Y'::2G:D8==)r"::i  
 8==)r"r1   c                     | j                  d      }| j                  d|j                         | j                  t        |j                        i        y )Nr     )rO   ru   coder   rQ   rv   s     r/   test_double_slashz HTTPServerTest.test_double_slash  s?     ::o.hmm,X]]3R8r1   c           
         ddi}d}dD ]  }dD ]  }| j                  ||      5  |j                  |      }|r.t        j                  j	                  |      j                  d      }| j                  d|z   d	|d
|z         }| j                  t        |j                        d|i       d d d          y # 1 sw Y   xY w)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  s    !#FG*" 	UC& U\\c\7 
U's3H#)<<#5#5h#?#F#Fw#O#zz 3% '&1	  *  H $$[%?&(AST
U 
UU	U
U 
Us   BB55B>N)
r<   r=   r>   rM   r!  r$  r'  r-  r1  r:  rV   r1   r/   r  r  `  s&    	
4
2
;

#9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d Zed        Zed        Z xZS )HTTPServerRawTestc                 &    t        dt        fg      S )Nr  r   r   rL   s    r/   rM   zHTTPServerRawTest.get_app  s    Wk2344r1   c                      t                    t        t        j                                _         j
                  j                   fd       y )Nc                  Z     j                   j                  d j                         f      S r   )rB   r   r   rL   s   r/   r   z)HTTPServerRawTest.setUp.<locals>.<lambda>  s$    DKK''d6H6H6J(KL r1   )supersetUpr   r   rB   r   r   r.   rJ   s   `r/   rB  zHTTPServerRawTest.setUp  s3    v}}/L	
r1   c                 V    | j                   j                          t        |           y r*   )rB   r   rA  tearDownrC  s    r/   rE  zHTTPServerRawTest.tearDown  s    r1   c                     | j                   j                          | j                  j                  t	        j
                  d      | j                         | j                          y )NMbP?seconds)rB   r   r   add_timeoutdatetime	timedeltastopwaitrL   s    r/   test_empty_requestz$HTTPServerRawTest.test_empty_request  s>      !3!3E!BDIIN		r1   c                     t        t        dt        j                        5   j                  j                  d        j                  j                   fd      \  }}} j                  d|j                          j                  d|j                          j                  d|j                         d d d        y # 1 sw Y   y xY w)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 r1   HTTP/1.1r  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 	?KKo.,0LL,A,A5-)J Z););<S*//2]J,=,=>	? 	? 	?   BB==Cc                 8   t        t        dt        j                        5  | j                  j                  d       | j                  j                  t        j                  d      | j                         | j                          d d d        y # 1 sw Y   y xY w)NrQ  rR  rT  皙?rH  r   r   r[  r\  rB   r   r   rJ  rK  rL  rM  rN  rL   s    r/   test_malformed_first_line_logz/HTTPServerRawTest.test_malformed_first_line_log  sh    w ?w||T 	KKo. LL$$X%7%7%EtyyQIIK	 	 	   A&BBc                 8   t        t        dt        j                        5  | j                  j                  d       | j                  j                  t        j                  d      | j                         | j                          d d d        y # 1 sw Y   y xY w)Nz1.*Malformed HTTP message.*no colon in header linerR  s   GET / HTTP/1.0
asdf

rb  rH  rc  rL   s    r/   test_malformed_headersz(HTTPServerRawTest.test_malformed_headers  sm    ?,,
 	
 KK?@LL$$X%7%7%EtyyQIIK	 	 	re  c                     t        t        dt        j                        5   j                  j                  d        j                  j                   fd      \  }}} j                  d|j                          j                  d|j                          j                  d|j                         d d d        y # 1 sw Y   y xY w)Nz-.*Malformed HTTP message.*Invalid Host headerrR  s!   GET / HTTP/1.0
Host: foo bar

c                  .    t         j                        S r*   rV  rL   s   r/   r   zLHTTPServerRawTest.test_invalid_host_header_with_whitespace.<locals>.<lambda>  rW  r1   rX  r  rY  rZ  r^  s   `   r/   (test_invalid_host_header_with_whitespacez:HTTPServerRawTest.test_invalid_host_header_with_whitespace  s    DGLL
 		? KKHI,0LL,A,A5-)J Z););<S*//2]J,=,=>		? 		? 		?r`  c                       j                   j                  dj                  dd              j                  j	                   fd      \  }}} j                  t        |      ddgi       y )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 r1   r  r&  rB   r   r   r   r   ru   r   r^  s   `   r/   test_chunked_request_bodyz+HTTPServerRawTest.test_chunked_request_body  k     	 Gw	
" )-(=(=1)
%
GX 	X.0@Ar1   c                       j                   j                  dj                  dd              j                  j	                   fd      \  }}} j                  t        |      ddgi       y )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>  rm  r1   r  r&  rn  r^  s   `   r/   test_chunked_request_uppercasez0HTTPServerRawTest.test_chunked_request_uppercase  rp  r1   c                 B     j                   j                  dj                  dd             t        t        dt
        j                        5   j                  j                   fd      \  }}}d d d         j                  dj                         y # 1 sw Y   &xY w)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   r[  r\  r   r   ru   r0  r^  s   `   r/   &test_chunked_request_body_invalid_sizez8HTTPServerRawTest.test_chunked_request_body_invalid_size  s     		 Gw	
 w 6gllK 	,0LL,A,A5-)J	 	joo.		 	s   #BBc                 "     j                   j                  d       t        t        dt        j
                        5   j                  j                   fd      \  }}}d d d         j                  dj                         y # 1 sw Y   &xY w)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><  rW  r1   r  
rB   r   r   r   r[  r\  r   r   ru   r0  r^  s   `   r/   *test_chunked_request_body_duplicate_headerz<HTTPServerRawTest.test_chunked_request_body_duplicate_header&  s~     	
	
 =,,
 	
 -1LL,A,A5-)J	 	joo.	 	   #BBc                 "     j                   j                  d       t        t        dt        j
                        5   j                  j                   fd      \  }}}d d d         j                  dj                         y # 1 sw Y   &xY w)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>R  rW  r1   r  ry  r^  s   `   r/   7test_chunked_request_body_unsupported_transfer_encodingzIHTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encoding@  s{    		
 DGLL
 	 -1LL,A,A5-)J	 	joo.	 	r{  c                 "     j                   j                  d       t        t        dt        j
                        5   j                  j                   fd      \  }}}d d d         j                  dj                         y # 1 sw Y   &xY w)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>k  rW  r1   r  ry  r^  s   `   r/   >test_chunked_request_body_transfer_encoding_and_content_lengthzPHTTPServerRawTest.test_chunked_request_body_transfer_encoding_and_content_lengthV  s|    
	
 F,,
 	
 -1LL,A,A5-)J	 	joo.	 	r{  c              #   D  K   g d}|D ]  \  }}| j                  |      5  t        t        t        j                                     5 }t	        t
        dt        j                        5  |j                  d| j                         f       |j                  t        t        j                  d| d      j                  dd	                   |j                          d d d        d d d        d d d         y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY ww)
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   r[  r\  r   r   r   r   textwrapdedentr   read_until_close)r.   
test_casesr
  r   rB   s        r/   test_invalid_content_lengthz-HTTPServerRawTest.test_invalid_content_lengtho  s    



 & 	4KD%4( 4'(6==?2K*L 4PV>!,, 4
 !..+t7I7I7K)LMMLL$OO%- .3G 4! 	 &gdF3 !1133)44 4 4	44 44 4 4 4sM   D 'D!D)A7C;	 D(D0D ;D DDDD	D c              #     K   ddg}|D ]  \  }}}|!t        t        |t        j                        }nt        d        } |       }| j                  |      5  t        t        t        j                                     5 }|5  |j                  d| j                         f       |j                  t        | d             |j                  d      }| j                  |j                  d	|z        d
| d|       d d d        d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   !xY w# 1 sw Y   6xY ww)N)FOOi  N)zFOO,BARr  rQ  rR  c               3      K   d  y wr*   rV   rV   r1   r/   noop_contextz<HTTPServerRawTest.test_invalid_methods.<locals>.noop_context  s	     s   )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   r[  r\  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  sD     =

 &0 	!FD'"&ww||L
     *^
F+126<
 nnk43E3E3G%HIITVH,U"VWX#..{;;OONT$9:+D6dX>   	     sO   AE'D5 D)A>D	D)	D5ED&"D))D2.D55D?	:E)r<   r=   r>   rM   rB  rE  rO  r_  rd  rg  rj  ro  rs  rv  rz  r~  r  r   r  r  __classcell__rJ   s   @r/   r<  r<    st    5

?
?B2B2/./4/,/2 4 4B  r1   r<  c                   :    e Zd Z G d de      Zd Zd Zd Zd Zy)XHeaderTestc                       e Zd Zd Zy)XHeaderTest.Handlerc                     | j                  d| j                  j                         | j                  t	        | j                  j
                  | j                  j                               y )Nrequest-version)r   remote_protocol)
set_headerr_   r   r   rk   r   r[   rL   s    r/   ra   zXHeaderTest.Handler.get  sI    OO-t||/C/CDJJ"ll44$(LL$9$9r1   Nr<   r=   r>   ra   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Br1   c                    | j                  | j                  d      d   d       ddi}| j                  | j                  d|      d   d       ddi}| j                  | j                  d|      d   d       dd	i}| j                  | j                  d|      d   d	       dd
i}| j                  | j                  d|      d   d	       ddi}| j                  | j                  d|      d   d       ddi}| j                  | j                  d|      d   d       ddi}| j                  | j                  d|      d   d       y )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!9-
OOCO4[A9	
 -.BCOOCO9+F		
 "#=>
OOCO4[A&	

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

 %&78OOCO7Dk	
 01KLOOC);O<[I;	
 $%56OOCO6{C[	
r1   c                     ddi}| j                  d|      }|j                  d   j                  d      r| j                  d       t	        |j
                        }| j                  |d   d	       y )
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  si    ,.KLzz#z7<<)*55h? MM-.TYY',i8r1   c                    | j                  | j                  d      d   d       ddi}| j                  | j                  d|      d   d       ddi}| j                  | j                  d|      d   d       ddi}| j                  | j                  d|      d   d       dd	i}| j                  | j                  d|      d   d       dd
i}| j                  | j                  d|      d   d       y )NrI   r  re   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  s   -.?@&I"G,OOCO67HI7	
 /8OOCO9:KLg	
 "5n EOOC)>O?@QR	

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

 -i8OOCO78IJF	
r1   N)	r<   r=   r>   r   rK   r  r  r  r  rV   r1   r/   r  r    s$    . C&
P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"56788r1   c                 .    t         |          }d|d<   |S )NTr  )rA  r  )r.   outputrJ   s     r/   r  z%SSLXHeaderTest.get_httpserver_options  s    /1!zr1   c                     | j                  | j                  d      d   d       ddi}| j                  | j                  d|      d   d       ddi}| j                  | j                  d|      d   d       y )NrI   r  ri   r  re   r+  r  r  )r.   http_scheme
bad_schemes      r/   test_request_without_xprotocolz-SSLXHeaderTest.test_request_without_xprotocol  s    -.?@'J!6*OOCO56GH&	
 !),
OOCO45FG	
r1   )r<   r=   r>   rM   r  r  r  r  s   @r/   r  r    s    9

r1   r  c                   .    e Zd Z G d de      Zd Zd Zy)ManualProtocolTestc                       e Zd Zd Zy)ManualProtocolTest.Handlerc                 b    | j                  t        | j                  j                               y )Nrj   )r   rk   r_   r[   rL   s    r/   ra   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                 L    | j                  | j                  d      d   d       y )NrI   r[   ri   r  rL   s    r/   test_manual_protocolz'ManualProtocolTest.test_manual_protocol0  s     -j97Cr1   N)r<   r=   r>   r   rK   r  r  rV   r1   r/   r  r  (  s    =. =&Dr1   r  c                   P     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
                  j                  t        j                  | j                               y )Nr   )
rA  rB  r   rX   r   server
add_socketr   bind_unix_socketaddress)r.   apprJ   s     r/   rB  zUnixSocketTest.setUpB  sK    H&>?@A ow77EFr1   c                     | j                   j                  | j                  j                         | j                  j	                          t
        |           y r*   )r   r   r  close_all_connectionsrM  rA  rE  rC  s    r/   rE  zUnixSocketTest.tearDownH  s:    dkk??@r1   c              #     K   t        t        t        j                  t        j                                    5 }|j	                  | j
                         |j                  d       |j                  d      }| j                  |d       |j                  d      }t        j                  |j                  d            }|j                  t        |d               }| j                  |d       d d d        y # 1 sw Y   y xY ww)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_socketM  s     XfmmFNN;<= 	3NN4<<(LL78#..w77HX'=> & 1 1+ >>K!''(:(:8(DEG**3w7G/H+IJJDT>2	3 	3 	3s   6DB:C;2	D;D Dc              #     K   t        t        dt        j                        5  t	        t        t        j                  t        j                                    5 }|j                  | j                         |j                  d       |j                         }d d d        d d d        | j                  d       y # 1 sw Y   $xY w# 1 sw Y   (xY ww)NzMalformed HTTP message fromrR  s   garbage

   HTTP/1.1 400 Bad Request

)r   r   r[  r\  r!   r   r   r  r   r  r   r  ru   r.   rB   rT   s      r/   test_unix_socket_bad_requestz+UnixSocketTest.test_unix_socket_bad_requestY  s      w =W\\R 	;&--"?@A ;Vt||,/0!'!8!8!::;	;
 	#FG	; ;	; 	;s4   !C6C?B;C C;C	 CCC)r<   r=   r>   __doc__r  rB  rE  r   r  r  r  r  s   @r/   r  r  4  sD     GG
 	3 	3 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                  | j                  d      | _        t        | !          y )Nz	test.sock)	tempfilemkdtemptmpdirr   r   rA   r  rA  rB  rC  s    r/   rB  zUnixSocketTestFile.setUpj  s6    &&(ww||DKK=r1   c                 `    t         |           t        j                  | j                         y r*   )rA  rE  shutilrmtreer  rC  s    r/   rE  zUnixSocketTestFile.tearDowno  s    dkk"r1   )r<   r=   r>   rB  rE  r  r  s   @r/   r  r  e  s    

# #r1   r  linuxz>abstract namespace unix sockets not supported on this platformc                        e Zd Z fdZ xZS )UnixSocketTestAbstractc                 n    dt        j                         j                  z   | _        t        |           y )N )uuiduuid4hexr  rA  rB  rC  s    r/   rB  zUnixSocketTestAbstract.setUpy  s$    djjl...r1   )r<   r=   r>   rB  r  r  s   @r/   r  r  t  s    
 r1   r  c                   T    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y)+KeepAliveTest.get_app.<locals>.HelloHandlerc                 &    | j                  d       y Nr^   r;   rL   s    r/   ra   z/KeepAliveTest.get_app.<locals>.HelloHandler.get      M*r1   c                 &    | j                  d       y r  r  rL   s    r/   rd   z0KeepAliveTest.get_app.<locals>.HelloHandler.post  r  r1   Nr   rV   r1   r/   HelloHandlerr    s    ++r1   r  c                       e Zd Zd Zy)+KeepAliveTest.get_app.<locals>.LargeHandlerc                 d    | j                  dj                  d t        d      D                     y )Nr#  c              3   >   K   | ]  }t        |d z        dz    yw)      N)chr).0is     r/   	<genexpr>zBKeepAliveTest.get_app.<locals>.LargeHandler.get.<locals>.<genexpr>  s     "K13q3w<$#6"Ks   i   )r   rA   rangerL   s    r/   ra   z/KeepAliveTest.get_app.<locals>.LargeHandler.get  s#     

277"Kc
"KKLr1   Nr  rV   r1   r/   LargeHandlerr    s    Mr1   r	  c                   0    e Zd Zej                  d        Zy)=KeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandlerc              3   R   K   | j                  d       | j                          y wr  )r   flushrL   s    r/   headzBKeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandler.head  s     

=)jjl"s   %'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y)3KeepAliveTest.get_app.<locals>.FinishOnCloseHandlerc                     || _         y r*   cleanup_event)r.   r  s     r/   r\   z>KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.initialize  s
    %2"r1   c              3   d   K   | j                          | j                  j                          y wr*   )r  r  rN  rL   s    r/   ra   z7KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.get  s$     

((--//s   .0c                 &    | j                  d       y )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  ra   r  rV   r1   r/   FinishOnCloseHandlerr    s$    3 ]]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_app  s    	+> 	+	M> 	M	#^ 	#	&> 	& #Wl#<(;<&(t'9'9:		
 	
r1   c                 0    t         |           d| _        y )Ns   HTTP/1.1)rA  rB  http_versionrC  s    r/   rB  zKeepAliveTest.setUp  s    'r1   c                    | j                   j                  t        j                  d      | j                         | j                          t        | d      r| j                  j                          t        | )          y )NrG  rH  rB   )r   rJ  rK  rL  rM  rN  hasattrrB   r   rA  rE  rC  s    r/   rE  zKeepAliveTest.tearDown  sV     	  !3!3E!BDIIN		4"KKr1   c              #      K   t        t        j                               | _        | j                  j                  d| j	                         f       y wr   )r   r   rB   r   r   rL   s    r/   r   zKeepAliveTest.connect  s;     v}}/kk!!;0B0B0D"EFF   AAc              #   2  K   | j                   j                  d      }| j                  |j                  d      |       | j                   j                  d      }t	        j
                  |j                  d            }t        j                  |      w)Nr   r   r   r   )	rB   r   r   r   r   r   r   r   Return)r.   r   header_bytesr+   s       r/   read_headerszKeepAliveTest.read_headers  sw     ;;11'::

--o>
K![[33K@@##L$7$7$ABjj!!s   BBc              #      K   | j                         | _        | j                  j                  t	        | j                  d               }| j                  d|       y w)Nr   rs   )r$  r+   rB   r   r   ru   )r.   rQ   s     r/   r@   zKeepAliveTest.read_response  sO     !..00[[++C=M0N,OPP.s   AA c                 <    | j                   j                          | ` y r*   )rB   r   rL   s    r/   r   zKeepAliveTest.close  s    Kr1   c              #     K   | j                          | j                  j                  d       | j                          | j                  j                  d       | j                          | j	                          y w)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_     llnEF  ""EF  ""

   A>B c              #   D  K   | j                          | j                  j                  d       | j                          | j                  j	                         }| j                  |        | j                  | j                  d   d       | j                          y w)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}     llnL	
   ""[[1133D!l3W=

s   BB c              #   J  K   d| _         | j                          | j                  j                  d       | j	                          | j                  j                         }| j                  |       | j                  d| j                         | j                          y w)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|     'lln34  ""[[1133t||4

s   B!B#c              #     K   d| _         | j                          | j                  j                  d       | j	                          | j                  | j                  d   d       | j                  j                  d       | j	                          | j                  | j                  d   d       | j                          y w)Nr0  *   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     'llnMN  ""l3\BMN  ""l3\B

   CCc              #     K   d| _         | j                          | j                  j                  d       | j	                          | j                  | j                  d   d       | j                  j                  d       | j	                          | j                  | j                  d   d       | j                          y w)Nr0  s,   GET / HTTP/1.0
Connection: keep-alive


r,  r5  r4  r6  rL   s    r/    test_http10_keepalive_extra_crlfz.KeepAliveTest.test_http10_keepalive_extra_crlf	  s     'llnQR  ""l3\BMN  ""l3\B

r8  c              #      K   | j                          | j                  j                  d       | j                          | j                          | j	                          y w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  sP     lln_	
   ""  ""

s   A#A%c              #      K   | j                          | j                  j                  d       | j                          | j	                          y wr<  r(  rL   s    r/   test_pipelined_cancelz#KeepAliveTest.test_pipelined_cancel  sA     lln_	
   ""

r   c              #      K   | j                          | j                  j                  d       | j                          | j                  j	                  d       | j                          y w)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)  sR     llnJK!!kk$$T**

s   A.A0c              #      K   | j                          | j                  j                  d       | j                          | j	                          | j
                  j                          y w)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_closed1  sO     llnTU!!

 s   A+A-c              #     K   d| _         | j                          | j                  j                  d       | j	                          | j                  | j                  d   d       | j                  j                  d       | j	                          | j                  | j                  d   d       | j                          y w)Nr0  sL   POST / HTTP/1.0
Connection: keep-alive
Transfer-Encoding: chunked

0

r,  r5  r4  r6  rL   s    r/   test_keepalive_chunkedz$KeepAliveTest.test_keepalive_chunked:  s     'lln	
   ""l3\BMN  ""l3\B

r8  c              #     K   | j                          | j                  j                  d       | j                          | j                  j                  d       | j                          | j	                          y w)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_bodyM  s_     llnMN!!MN!!

r*  )r<   r=   r>   r  rM   rB  rE  r   r  r   r$  r@   r   r   r)  r.  r2  r7  r:  r=  r?  rA  rD  rF  rH  r  r  s   @r/   r  r  ~  sC   /
b( 	]]G G 	]]" " 	]]/ /
   	 	   	 	 	 	       ! !  $  r1   r  c                       e Zd Zd Zd Zd Zy)GzipBaseTestc                 &    t        dt        fg      S rH   r>  rL   s    r/   rM   zGzipBaseTest.get_appY  s    S+./00r1   c                     t               }t        j                  d|      }|j                  t	        |             |j                          |j                         }| j                  dd|ddi      S )NwmodefileobjrI   ry   Content-Encodinggzipr,  )r#   rR  GzipFiler   r   r   getvaluerO   )r.   rQ   bytesio	gzip_filecompressed_bodys        r/   	post_gzipzGzipBaseTest.post_gzip\  sh    )MMsG<	T
#!**,zz '0	  
 	
r1   c                 |    | j                  ddd      }| j                  t        |j                        ddgi       y )NrI   ry   r*  r{   r  r&  )rO   ru   r   rQ   rv   s     r/   test_uncompressedzGzipBaseTest.test_uncompressedi  s6    ::c&y:AX]]3eeW5EFr1   N)r<   r=   r>   rM   rX  rZ  rV   r1   r/   rJ  rJ  X  s    1
Gr1   rJ  c                       e Zd Zd Zd Zd Zy)GzipTestc                     t        d      S )NT)decompress_requestr  rL   s    r/   r  zGzipTest.get_httpserver_optionso  s    t,,r1   c                 v    | j                  d      }| j                  t        |j                        ddgi       y )Nr*  r  r&  )rX  ru   r   rQ   rv   s     r/   	test_gzipzGzipTest.test_gzipr  s0    >>),X]]3eeW5EFr1   c                 8   t               }t        j                  d|      }|j                  t	        d             |j                          |j                         }| j                  dd|ddi      }| j                  t        |j                        d	d
gi       y )NrM  rN  r*  rI   ry   rQ  GZIPr,  r  r&  )r#   rR  rS  r   r   r   rT  rO   ru   r   rQ   )r.   rU  rV  rW  rT   s        r/   test_gzip_case_insensitivez#GzipTest.test_gzip_case_insensitivev  s    )MMsG<	Y(!**,:: '0	  
 	X]]3eeW5EFr1   N)r<   r=   r>   r  r`  rc  rV   r1   r/   r\  r\  n  s    -GGr1   r\  c                       e Zd Zd Zy)GzipUnsupportedTestc                     t        t        d      5  | j                  d      }d d d        | j                  j                  d       y # 1 sw Y   &xY w)Nz.*Unsupported Content-Encodingr*  r  )r   r   rX  ru   r0  rv   s     r/   test_gzip_unsupportedz)GzipUnsupportedTest.test_gzip_unsupported  sF     w @A 	1~~i0H	1,	1 	1s   AAN)r<   r=   r>   rg  rV   r1   r/   re  re    s    -r1   re  c                   `    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y)StreamingChunkSizeTests2   01234567890123456789012345678901234567890123456789   c                     t               S r*   r   rL   s    r/   get_http_clientz&StreamingChunkSizeTest.get_http_client       %&&r1   c                 0    t        | j                  d      S )NT)
chunk_sizer^  )rk   
CHUNK_SIZErL   s    r/   r  z-StreamingChunkSizeTest.get_httpserver_options  s    t4HHr1   c                   $    e Zd Zd Zd Zd Zd Zy)&StreamingChunkSizeTest.MessageDelegatec                     || _         y r*   
connectionr.   ru  s     r/   __init__z/StreamingChunkSizeTest.MessageDelegate.__init__  	    (DOr1   c                     g | _         y r*   )chunk_lengthsr-   s      r/   r0   z7StreamingChunkSizeTest.MessageDelegate.headers_received  s
    !#Dr1   c                 L    | j                   j                  t        |             y r*   )rz  r3   rc   )r.   r4   s     r/   r6   z4StreamingChunkSizeTest.MessageDelegate.data_received  s    %%c%j1r1   c                 2   t        t        | j                              }| j                  j	                  t        ddd      t        dt        t        |            i             | j                  j                  |       | j                  j                          y )NrX  r/  OKr   )r   r   rz  ru  write_headersr   r   r   rc   r   r;   )r.   response_bodys     r/   r;   z-StreamingChunkSizeTest.MessageDelegate.finish  sq     T-?-?!@AMOO))!*c48-s3}3E/FGH OO!!-0OO""$r1   N)r<   r=   r>   rw  r0   r6   r;   rV   r1   r/   MessageDelegaterr    s    	)	$	2	%r1   r  c                 .     G d dt               } |       S )Nc                       e Zd Zd Zy)+StreamingChunkSizeTest.get_app.<locals>.Appc                 ,    t         j                  |      S r*   )ri  r  r.   server_connrequest_conns      r/   start_requestz9StreamingChunkSizeTest.get_app.<locals>.App.start_request  s    -==lKKr1   Nr<   r=   r>   r  rV   r1   r/   Appr    s    Lr1   r  r   r.   r  s     r/   rM   zStreamingChunkSizeTest.get_app  s    	L. 	L ur1   c           	      r    | j                   dddi|}|j                          t        |j                        }| j	                  t        | j                        t        |             |D ]J  }| j                  || j                  dt        |      z          | j                  |ddt        |      z          L |S )Nr|   ry   zoversized chunk: r   zempty chunk: )rI   )rO   rP   r   rQ   ru   rc   BODYsumassertLessEqualrp  r   assertGreater)r.   rS   rT   r5   ro  s        r/   fetch_chunk_sizesz(StreamingChunkSizeTest.fetch_chunk_sizes  s    4::;&;F;X]]+TYYV5  	MJ  DOO-@3v;-N z1oF.KL		M
 r1   c                     t               }t        j                  d|      }|j                  |       |j	                          |j                         }t        |      t        |      k\  rt        d      |S )NrM  rN  z#body did not shrink when compressed)r#   rR  rS  r   r   rT  rc   r`   )r.   rQ   rU  gzfile
compresseds        r/   compresszStreamingChunkSizeTest.compress  s^    )C9T%%'
z?c$i'ABBr1   c                 d    | j                  | j                        }| j                  g d|       y )N)rQ   )rj  rj  rj     )r  r  ru   )r.   r5   s     r/   test_regular_bodyz(StreamingChunkSizeTest.test_regular_body  s)    ''TYY'7&1r1   c                 `    | j                  | j                  | j                        ddi       y )NrQ  rR  )rQ   r+   )r  r  r  rL   s    r/   test_compressed_bodyz+StreamingChunkSizeTest.test_compressed_body  s-    tyy)4F3O 	 	
r1   c                 \      fd} j                  |      } j                  g d|       y )Nc                 Z     | j                   d d         | j                   dd         y N   )r  )r   r.   s    r/   body_producerz?StreamingChunkSizeTest.test_chunked_body.<locals>.body_producer  s'    $))CR.!$))BC.!r1   )r  )rj     rj     )r  ru   )r.   r  r5   s   `  r/   test_chunked_bodyz(StreamingChunkSizeTest.test_chunked_body  s-    	" ''m'D&1r1   c                     | j                  | j                        | j                  t              d       fd}| j	                  |ddi       y )Nr  c                 2     | d d         | dd         y r  rV   )r   r  s    r/   r  zEStreamingChunkSizeTest.test_chunked_compressed.<locals>.body_producer  s    *Sb/"*RS/"r1   rQ  rR  )r  r+   )r  r  r  rc   r  )r.   r  r  s     @r/   test_chunked_compressedz.StreamingChunkSizeTest.test_chunked_compressed  sN    ]]499-
3z?B/	# 	'2Df1M 	 	
r1   N)r<   r=   r>   r  rp  rl  r  r   r  rM   r  r  r  r  r  r  rV   r1   r/   ri  ri    sG    @DJ'
I%- %&
2

2

r1   ri  c                   .    e Zd Z G d de      Zd Zd Zy)InvalidOutputContentLengthTestc                       e Zd Zd Zd Zy).InvalidOutputContentLengthTest.MessageDelegatec                     || _         y r*   rt  rv  s     r/   rw  z7InvalidOutputContentLengthTest.MessageDelegate.__init__  rx  r1   c           	          ddddd}| j                   j                  t        ddd      t        d	||d
      i             | j                   j	                  d       | j                   j                          y )N10r  r  r  )normalr  r  
underscorerX  r/  r}  r   x-test
   1234567890)ru  r~  r   r   r   r;   )r.   r,   r+   content_lengthss       r/   r0   z?InvalidOutputContentLengthTest.MessageDelegate.headers_received  sq    # %#	O OO))!*c48-wx?P/QRS OO!!-0OO""$r1   N)r<   r=   r>   rw  r0   rV   r1   r/   r  r    s    	)	%r1   r  c                 .     G d dt               } |       S )Nc                       e Zd Zd Zy)3InvalidOutputContentLengthTest.get_app.<locals>.Appc                 ,    t         j                  |      S r*   )r  r  r  s      r/   r  zAInvalidOutputContentLengthTest.get_app.<locals>.App.start_request  s    5EElSSr1   Nr  rV   r1   r/   r  r    s    Tr1   r  r  r  s     r/   rM   z&InvalidOutputContentLengthTest.get_app  s    	T. 	T ur1   c           
         | j                  d      5  | j                  ddddi      }|j                          | j                  |j                  d       d d d        dD ]i  }| j                  |      5  t        t        d      5  | j                  t              5  | j                  ddd|i       d d d        d d d        d d d        k y # 1 sw Y   xxY w# 1 sw Y   (xY w# 1 sw Y   ,xY w# 1 sw Y   xY w)	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	  s    \\(# 	;zz#eh=QzRHX]]M:	; A 	PDd# P w(<= P**95 P

3ux>N
OPPP P	P		; 	;P PP PP PsH   AC3C0C$C	1C$9C0CC!C$$C-)C00C9	N)r<   r=   r>   r   r  rM   r  rV   r1   r/   r  r    s    %- %$Pr1   r  c                   $    e Zd Zd Zd Zd Zd Zy)MaxHeaderSizeTestc                 &    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                     | j                  dddi      }|j                          | j                  |j                  d       y )NrI   X-Fillerdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar+  rs   )rO   rP   ru   rQ   rv   s     r/   test_small_headersz$MaxHeaderSizeTest.test_small_headers  s9    ::cJ	+B:C7r1   c                 2   t        t        dd      5  	 | j                  dddid       | j                  d	       d d d        y # t        $ r<}|j
                  &| j                  |j
                  j                  d
       Y d }~Id }~ww xY w# 1 sw Y   y xY w)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 		??

3Z(@d
S		<=		? 		?  ? ::)MM!**//:>?			? 		?s.   B'A	B
2B BB

BBN)r<   r=   r>   rM   r  r  r  rV   r1   r/   r  r    s    >*8

?r1   r  c                   x     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                 &    t        dt        fg      S rH   r  rL   s    r/   rM   zIdleTimeoutTest.get_app1  r  r1   c                     t        d      S )Ng?)idle_connection_timeoutr  rL   s    r/   r  z&IdleTimeoutTest.get_httpserver_options4  s    C00r1   c                 0    t         |           g | _        y r*   )rA  rB  streamsrC  s    r/   rB  zIdleTimeoutTest.setUp7  s    r1   c                 d    t         |           | j                  D ]  }|j                           y r*   )rA  rE  r  r   )r.   rB   rJ   s     r/   rE  zIdleTimeoutTest.tearDown;  s*    ll 	FLLN	r1   c              #      K   t        t        j                               }|j                  d| j                         f       | j                  j                  |       t        j                  |      wr   )r   r   r   r   r  r3   r   r"  r   s     r/   r   zIdleTimeoutTest.connect@  sT     &--/*nnk4+=+=+?@AAF#jj  s   A1A3c              #      K   | j                         }t               }|j                  |j                         |j	                          y wr*   )r   r   set_close_callbackrC  rN  )r.   rB   events      r/   test_unused_connectionz&IdleTimeoutTest.test_unused_connectionG  s9     ||~%!!%)),jjls   AAc              #   P  K   | j                         }t               }|j                  |j                         t	        d      D ]K  }|j                  d       |j                  d       |j                  d      }| j                  |d       M |j                          y w)Nr  s#   GET / HTTP/1.1
Host: 127.0.0.1

r      rs   )
r   r   r  rC  r  r   r   r   ru   rN  )r.   rB   r  r  r   s        r/   test_idle_after_usez#IdleTimeoutTest.test_idle_after_useN  s     ||~%!!%)), q 	3ALLEF##K00**2..DT>2		3 jjls   B$B&)r<   r=   r>   rM   r  rB  rE  r   r  r   r   r  r  r  r  s   @r/   r  r  0  sW    >1
 	]]! !    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y)BodyLimitsTestc                 r     G d dt               }t         G d dt                      }t        d|fd|fg      S )Nc                       e Zd Zd Zy)/BodyLimitsTest.get_app.<locals>.BufferedHandlerc                 r    | j                  t        t        | j                  j                                     y r*   )r   r   rc   r_   rQ   rL   s    r/   putz3BodyLimitsTest.get_app.<locals>.BufferedHandler.putb  s"    

3s4<<#4#4567r1   N)r<   r=   r>   r  rV   r1   r/   BufferedHandlerr  a  s    8r1   r  c                   $    e Zd Zd Zd Zd Zd Zy)0BodyLimitsTest.get_app.<locals>.StreamingHandlerc                     d| _         y )Nr   )
bytes_readrL   s    r/   r\   z;BodyLimitsTest.get_app.<locals>.StreamingHandler.initializeg  s	    "#r1   c                 f   t        j                  t        | j                  j                        }d| j                  j
                  v r)|j                  t        | j                  d                   d| j                  j
                  v r*|j                  t        | j                  d                   y y )Nexpected_sizebody_timeout)typingcastr   r_   ru  r   set_max_body_sizer   r   set_body_timeoutfloatr9   s     r/   r  z8BodyLimitsTest.get_app.<locals>.StreamingHandler.preparej  s    {{?DLL4K4KL"dll&<&<<**3t/@/@/Q+RS!T\\%;%;;))%0A0A.0Q*RS <r1   c                 @    | xj                   t        |      z  c_         y r*   )r  rc   r-  s     r/   r6   z>BodyLimitsTest.get_app.<locals>.StreamingHandler.data_receivedq  s    3t9,r1   c                 L    | j                  t        | j                               y r*   )r   r   r  rL   s    r/   r  z4BodyLimitsTest.get_app.<locals>.StreamingHandler.putt  s    

3t/0r1   N)r<   r=   r>   r\   r  r6   r  rV   r1   r/   StreamingHandlerr  e  s    $T-1r1   r  	/buffered
/streaming)r   r    r   )r.   r  r  s      r/   rM   zBodyLimitsTest.get_app`  sK    	8n 	8 
	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_options{  s    T::r1   c                     t               S r*   r   rL   s    r/   rl  zBodyLimitsTest.get_http_client~  rm  r1   c                     | j                  ddd      }| j                  |j                  d       | j                  ddd      }| j                  |j                  d       y )Nr  PUTs   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar{   s   4096r  rt   rv   s     r/   test_small_bodyzBodyLimitsTest.test_small_body  sR    ::k%k:J0::l5{:K0r1   c                     t        t        dt        j                        5  | j	                  ddddz        }d d d        | j                  j                  d       y # 1 sw Y   &xY w)	N.*Content-Length too longrR  r  r     a (  r{   r  r   r   r[  r\  rO   ru   r0  rv   s     r/   test_large_body_bufferedz'BodyLimitsTest.test_large_body_buffered  sX    w ;7<<P 	Pzz+e$,zOH	P,	P 	P   AA'ntzflaky on windowsc                     t        t        dt        j                        5  | j	                  ddd       }d d d        | j                  j                  d       y # 1 sw Y   &xY w)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>      E$,,? r1   r|   r  r  r  rv   s     r/    test_large_body_buffered_chunkedz/BodyLimitsTest.test_large_body_buffered_chunked  s\     w :',,O 	zz? " H	 	,	 	   AA%c                     t        t        dt        j                        5  | j	                  ddddz        }d d d        | j                  j                  d       y # 1 sw Y   &xY w)	Nr  rR  r  r  r  r  r{   r  r  rv   s     r/   test_large_body_streamingz(BodyLimitsTest.test_large_body_streaming  sX    w ;7<<P 	Qzz,u4%<zPH	Q,	Q 	Qr  c                     t        t        dt        j                        5  | j	                  ddd       }d d d        | j                  j                  d       y # 1 sw Y   &xY w)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  sZ    w :',,O 	zz? " H	 	,	 	r  c                 j    | j                  ddddz        }| j                  |j                  d       y )N/streaming?expected_size=10240r  r  r  r{      10240rt   rv   s     r/   "test_large_body_streaming_overridez1BodyLimitsTest.test_large_body_streaming_override  s6    ::,U  
 	1r1   c                 f    | j                  ddd       }| j                  |j                  d       y )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  s4    ::,;  

 	1r1   c              #     K   t        t        j                               }	 |j                  d| j                         f       |j	                  d       t        t        dt        j                        5  |j                         }d d d        | j                  d       |j                          y # 1 sw Y   ,xY w# |j                          w xY w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   r[  r\  r  ru   r   r  s      r/   test_timeoutzBodyLimitsTest.test_timeout  s     &--/*	..+t/A/A/C!DEE LL. 7$:',,O ;!'!8!8!::;Xs+LLN	; ; LLNs5   CAB? 5B3B? "C3B<8B? ?CCc              #   <  K   t        t        j                               }	 |j                  d| j                         f       |j	                  d       |j	                  ddz         t        |      \  }}}| j                  |d       |j	                  d       t        t        dt        j                        5  |j                         }d d d        | j                  d	       |j                          y # 1 sw Y   ,xY w# |j                          w xY w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   r[  r\  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!DEELL1
 LL&2B62J,J)JXx0LL1
 7$?w||T 7#44667T#FGLLN	7 7 LLNs5   DBD =C;D *D;D D DDN)r<   r=   r>   rM   r  rl  r  r   unittestskipIfr   r
  r
  r  r  r  r  r   r  r  rV   r1   r/   r  r  _  s    
6;'
1-
 X__RWW_&89- :--
 X__RWW_&89- :-22     r1   r  c                       e Zd Zd Zd Zy)LegacyInterfaceTestc                       fd}|S )Nc                    | j                   j                  d      _        j                  sJ| j                  j	                  t        ddd      t                      | j                  j                          y d}| j                  j                  t        dt        |      z               | j                  j                  |       | j                  j                          y )NzHTTP/1.r#  r/  r}  rs   z'HTTP/1.1 200 OK
Content-Length: %d

)r   r   http1ru  r~  r   r   r;   r   r   rc   )r_   messager.   s     r/   handle_requestz3LegacyInterfaceTest.get_app.<locals>.handle_request  s     33I>DJ:: ""00%b#t4km ""))+$G$$G#g,VW $$W-%%'r1   rV   )r.   r$  s   ` r/   rM   zLegacyInterfaceTest.get_app  s    	(" r1   c                     | j                  d      }| j                  s| j                  d       | j                  |j                  d       y )NrI   r  rs   )rO   r"  r  ru   rQ   rv   s     r/   test_legacy_interfacez)LegacyInterfaceTest.test_legacy_interface  s7    ::c?zzMM-.7r1   N)r<   r=   r>   rM   r&  rV   r1   r/   r  r    s    .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  rR  r[  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  rJ  r\  re  ri  r  r  r  r  r  rV   r1   r/   <module>r;     s      4 ( )  &  ( ;  1 H H .    	   
 
       	!C,	*+ 	*
E~ 
E'2  '2T&
)) &
R	
> 	
Y* Yx>. >&O~ &OR9n 9
B B>U& >UBN) Nb\
% \
~
')< 
.	D, 	D -H] -H -H` 	"">cllh&>1# #	# 		#	H(?(?(HID^ 	W% WtG$ G,G|. G0-,(9 -\
. \
~%P%6 %PP?) ?2,' ,^A& AH8+ 8r1   