§
    ‹ŸjpÑ  ã                   ó”  — 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      úi/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/test/httpserver_test.pyÚheaders_receivedz3read_stream_body.<locals>.Delegate.headers_received=   s   € Ø"ˆDŒLØ(ˆDŒOˆOˆOó    c                 ó2   •— ‰                      |¦  «         d S r*   )Úappend)r.   ÚchunkÚchunkss     €r/   Údata_receivedz0read_stream_body.<locals>.Delegate.data_receivedA   s   ø€ Ø�MŠM˜%Ñ Ô Ð Ð Ð r1   c                 ó0   •— ‰                      ¦   «          d S r*   )Údetach©r.   Úconns    €r/   Úfinishz)read_stream_body.<locals>.Delegate.finishD   s   ø€ Ø�KŠK‰MŒMˆMˆMˆMr1   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ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	Õ&ñ 	ô 	ð 	õ ˜6 4Ñ(Ô(€DØˆx‰zŒz€HØ
×
Ò
˜XÑ
&Ô
&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔ Ô 0°#·(²(¸6Ñ2BÔ2BÐ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¨&°s¸T±z�:Ñ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Ð$8À5ÐIÑIÔIð ð Ø×&Ò&­µÐ';Ñ<Ô<ð ð Ø—J’JØŸš 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 Ñ,Ô,ð 	°
Ø×"Ò"¥G­YÐ#7Ñ8Ô8ð ð Ø—
’
Ø—L’L Ñ%Ô%×-Ò-¨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   € Ý!‘m”mˆØ×ÒÝÝØØ"Ð$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í   € õ "‘m”mˆÝ”W—_’_¥XÑ.Ô.ˆ
Ý!œwŸ|š|¨J¸
ÑCÔCÐÝ”w—|’| J°
Ñ;Ô;ˆà×ÒÝ�Ð!ÝØØ#Ð%6Ð7ð	 	ñ 	
ô 	
ð 	
ð 	×ÒÝ�Ð!ÝØà0Ø-ðð ð	 	ñ 	
ô 	
ð 	
õ 	ØØ%9ÀlÐ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¸Ô%@ÀÔ%CÀFÔ%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$   ø€ ˜Ÿš¨°T×5GÒ5GÑ5IÔ5IÐ'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  øø€ Ý•X�fœm™oœoÑ.Ô.Ñ/Ô/ð 	°6ØŒL×!Ò!ØKÐKÐKÐKÐKñô ð ð �LŠLØ—’˜W­Ð-AÅCÈÁIÄIÑ-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ù   € ð —>’>ðð ð ð
 �LŠLàDØØ—O’OÑ%Ô%Ø#ØU×\Ò\Ñ^Ô^ØØ—O’OÑ%Ô%Ø%Øð
ñô ñ
ô 
ˆõ( ˜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ð 	7ˆGØ—~’~Ð'=Ð&>ÀÈW�~ÑUÔUˆHØ×Ò˜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›  è è € õ
 �&œ-™/œ/Ñ*Ô*ˆØ�nŠn˜k¨4×+=Ò+=Ñ+?Ô+?Ð@ÑAÔAÐAÐAÐAØ�lŠlØ�LŠLðð ð ñ	ô 	ñ
ô 
ð 	
ð 	
ð 	
ð ×&Ò& {Ñ3Ô3Ð3Ð3ˆØ�Š˜ŸšÐ(8Ñ9Ô9¸4Ñ@Ô@Ð@Ø�Š�[Ñ!Ô!Ð!Ø!×,Ò,¨WÑ5Ô5Ð5Ð5ˆ
Ø�Š˜
×-Ò-¨oÑ>Ô>À
ÑKÔKÐKØ"×-Ò-¨kÑ:Ô:Ð:Ð:ˆÝÔ#¥J¨{×/AÒ/AÀ(Ñ/KÔ/KÑ$LÔ$LÑMÔMˆØ×&Ò&¥s¨7Ð3CÔ+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Ù  € ØˆŒà•sˆOØ•CˆLØ�ÐØ�#ÐØ�ÐØ•SˆMØ•SˆMØ•cˆNð	
ˆð %+ð 	Pð 	PÑ ˆE�=Ø�OŠO˜E¥7¨4¬<¸Ñ#?Ô#?ÀÑOÔOÐOÐOà�Š˜¥d¨4¬<Ô+?×+DÒ+DÑ+FÔ+FÑ&GÔ&GÈÔ&JÍCÑPÔPÐPØ�Š˜­¨T¬\Ô-A×-HÒ-HÑ-JÔ-JÑ(KÔ(KÈAÔ(NÕPSÑTÔTÐTà�Š˜¥d¨4¬<Ô+?×+DÒ+DÑ+FÔ+FÑ&GÔ&GÈÔ&JÍCÑPÔPÐPØ�ŠØ�D ¤Ô!5×!<Ò!<Ñ!>Ô!>Ñ?Ô?ÀÔBÔHÍ#ñ	
ô 	
ð 	
ð
 	�Š˜	¥4¨¬Ô(>×(CÒ(CÑ(EÔ(EÑ#FÔ#FÀqÔ#IÍ3ÑOÔOÐOØ�Š˜¥T¨$¬,Ô*@×*GÒ*GÑ*IÔ*IÑ%JÔ%JÈ1Ô%MÈaÔ%PÕRWÑ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   € Ø�Š˜ ¤Ô 1µ5Ñ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   € Ý˜3‘i”iˆØ˜KÒ'Ð'Ø N¨MÐ NÐ NÀÐ NÐ NˆDŒK˜ÑÐÐð (Ð'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   € Ø�
Š
•4˜T×.Ò.¨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Ð!8¸5Ñ!@Ñ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œ=Ñ)Ô)ˆØ×Ò˜ ¨¨B xÐ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   € Ø—:’:˜g¨f¸;�:ÑGÔGˆÝ˜8œ=Ñ)Ô)ˆØ×Ò˜¨ t°R°DÐ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Ð'ˆØ—:’:Ð2¸G�:Ñ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Ñ.Ô.ˆØ×Ò˜˜hœmÑ,Ô,Ð,Ø×Ò� X¤]Ñ3Ô3°RÑ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Ô3�HØð PÝ#)¤<×#5Ò#5°hÑ#?Ô#?×#FÒ#FÀwÑ#OÔ#O˜Ø#ŸzšzØ  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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   € Ý˜W¥kÐ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(   ø€ �D”K×'Ò'¨°d×6HÒ6HÑ6JÔ6JÐ(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 )Nçü©ñÒMbP?©Úseconds)rB   rÞ   rÁ   Úadd_timeoutÚdatetimeÚ	timedeltaÚstopÚwaitrL   s    r/   Útest_empty_requestz$HTTPServerRawTest.test_empty_request°  sO   € ØŒ×ÒÑÔÐØŒ× Ò ¥Ô!3¸EÐ!BÑ!BÔ!BÀDÄIÑ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  ú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Ñ.Ô.Ð.Ø,0¬L×,AÒ,AØ5Ð5Ð5Ð5ñ-ô -Ñ)ˆJ˜ ð ×Ò˜Z¨Ô);Ñ<Ô<Ð<Ø×Ò˜S *¤/Ñ2Ô2Ð2Ø×Ò˜]¨JÔ,=Ñ>Ô>Ð>ð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ó   £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   r[  r\  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Ô%EÀtÄyÑQÔQÐQØ�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ó   ¢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

rb  rH  rc  rL   s    r/   Útest_malformed_headersz(HTTPServerRawTest.test_malformed_headersÇ  sÔ   € ÝÝØ?Ý”,ð
ñ 
ô 
ð 	ð 	ð
 ŒK×ÒÐ?Ñ@Ô@Ð@ØŒL×$Ò$¥XÔ%7ÀÐ%EÑ%EÔ%EÀtÄyÑQÔQÐQØ�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	re  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 )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  ø€ ÝÝÐDÍGÌLð
ñ 
ô 
ð 		?ð 		?ð ŒK×ÒÐHÑIÔIÐIØ,0¬L×,AÒ,AØ5Ð5Ð5Ð5ñ-ô -Ñ)ˆJ˜ ð ×Ò˜Z¨Ô);Ñ<Ô<Ð<Ø×Ò˜S *¤/Ñ2Ô2Ð2Ø×Ò˜]¨JÔ,=Ñ>Ô>Ð>ð		?ð 		?ð 		?ñ 		?ô 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?øøøð 		?ð 		?ð 		?ð 		?ð 		?ð 		?r`  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ñ)
ô )
Ñ%ˆ
�G˜Xð 	×Ò� 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>  rm  r1   r  r&  rn  r^  s   `   r/   Útest_chunked_request_uppercasez0HTTPServerRawTest.test_chunked_request_uppercaseö  rp  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   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Ð 6½g¼lÐKÑKÔKð 	ð 	Ø,0¬L×,AÒ,AØ5Ð5Ð5Ð5ñ-ô -Ñ)ˆJ˜ ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜˜jœoÑ.Ô.Ð.Ð.Ð.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><  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ç   ø€ ð 	Œ×Òð
ñ	
ô 	
ð 	
õ ÝØ=Ý”,ð
ñ 
ô 
ð 	ð 	ð
 -1¬L×,AÒ,AØ5Ð5Ð5Ð5ñ-ô -Ñ)ˆJ˜ ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜˜jœoÑ.Ô.Ð.Ð.Ð.ó   ½"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>R  rW  r1   r  ry  r^  s   `   r/   Ú7test_chunked_request_body_unsupported_transfer_encodingzIHTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encoding@  sä   ø€ àŒ×Òð	ñ	
ô 	
ð 	
õ ÝÐDÍGÌLð
ñ 
ô 
ð 	ð 	ð -1¬L×,AÒ,AØ5Ð5Ð5Ð5ñ-ô -Ñ)ˆJ˜ ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜˜jœoÑ.Ô.Ð.Ð.Ð.r{  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>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Ý”,ð
ñ 
ô 
ð 	ð 	ð
 -1¬L×,AÒ,AØ5Ð5Ð5Ð5ñ-ô -Ñ)ˆJ˜ ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜˜jœoÑ.Ô.Ð.Ð.Ð.r{  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   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$  è è € ð

ð 
ð 
ˆ
ð
 &ð 	4ñ 	4‰KˆD�%Ø—’ 4�Ñ(Ô(ð 4ð 4­'µ(½6¼=¹?¼?Ñ2KÔ2KÑ*LÔ*Lð 4ÐPVÝÝØ>Ý!œ,ðñ ô ð 4ð 4ð
 !Ÿ.š.¨+°t×7IÒ7IÑ7KÔ7KÐ)LÑMÔMÐMÐMÐMØ—L’LÝÝ$œOð! ð .3ð! ð ! ð ! ñ	ô 	÷ &šg d¨FÑ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   è è € à�E�E�E�E�Er1   )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‘  sU  è è € ð Ø=ð
ˆ
ð &0ð 	ñ 	Ñ!ˆF�D˜'ØÐ"Ý&¥w°½w¼|ÐLÑLÔL�
�
õ  ðð ñ  ”ðð *˜\™^œ^�
à—’ F�Ñ+Ô+ðð å�¥¤¡¤Ñ1Ô1Ñ2Ô2ðà6<Øðð ð
 —n’n k°4×3EÒ3EÑ3GÔ3GÐ%HÑIÔIÐIÐIÐIØ—’�T VÐ"VÐ"VÐ"VÑWÔWÑXÔXÐXØ#×.Ò.¨{Ñ;Ô;Ð;Ð;�Ø—’Ø—O’O N°TÑ$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_  rd  rg  rj  ro  rs  rv  rz  r~  r�  r   rŒ  r“  Ú__classcell__©rJ   s   @r/   r<  r<  ¡  sB  ø€ € € € € ð5ð 5ð 5ð
ð 
ð 
ð 
ð 
ðð ð ð ð ðð ð ð
?ð ?ð ?ðð ð ðð ð ð
?ð 
?ð 
?ðBð Bð Bð2Bð Bð Bð2/ð /ð /ð./ð /ð /ð4/ð /ð /ð,/ð /ð /ð2 ð4ð 4ñ „Xð4ðB ðð ñ „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^   € Ø�OŠOÐ-¨t¬|Ô/CÑDÔDÐDØ�JŠJÝØ"œ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   € Ý˜T°y°kÐ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Ð-ˆ
Ø×ÒØ�OŠO˜C¨ˆOÑ4Ô4°[ÔAÀ9ñ	
ô 	
ð 	
ð -Ð.BÐCˆØ×ÒØ�OŠO˜C¨ˆOÑ9Ô9¸+ÔFÈ	ñ	
ô 	
ð 	
ð "Ð#=Ð>ˆ
Ø×ÒØ�OŠO˜C¨ˆOÑ4Ô4°[ÔAØ&ñ	
ô 	
ð 	
ð
 -Ð.MÐNˆØ×ÒØ�OŠO˜C¨ˆOÑ9Ô9¸+ÔFØ&ñ	
ô 	
ð 	
ð
 %Ð&7Ð8ˆØ×ÒØ�OŠO˜C¨ˆOÑ7Ô7¸ÔDÀkñ	
ô 	
ð 	
ð 0Ð1KÐLÐØ×ÒØ�OŠO˜CÐ);ˆOÑ<Ô<¸[ÔIÈ;ñ	
ô 	
ð 	
ð $Ð%5Ð6ˆØ×ÒØ�OŠO˜C¨ˆ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ˆØ�zŠz˜# ˆzÑ7Ô7ˆØŒ<Ð)Ô*×5Ò5°hÑ?Ô?ð 	/ð �MŠMÐ-Ñ.Ô.Ð.Ý˜TœYÑ'Ô'ˆØ×Ò˜ Ô,¨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Ð,ˆØ×ÒØ�OŠO˜C¨ˆOÑ6Ô6Ð7HÔIÈ7ñ	
ô 	
ð 	
ð /°Ð8ˆØ×ÒØ�OŠO˜C¨ˆOÑ9Ô9Ð:KÔLÈgñ	
ô 	
ð 	
ð "5°nÐ EÐØ×ÒØ�OŠO˜CÐ)>ˆOÑ?Ô?Ð@QÔRØñ	
ô 	
ð 	
ð
 !4°\ÐBÐØ×ÒØ�OŠO˜CÐ)=ˆOÑ>Ô>Ð?PÔQØñ	
ô 	
ð 	
ð
 -¨iÐ8ˆØ×ÒØ�OŠO˜C¨ˆOÑ7Ô7Ð8IÔJÈFñ	
ô 	
ð 	
ð 	
ð 	
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Ð*ˆØ×ÒØ�OŠO˜C¨ˆOÑ5Ô5Ð6GÔHÈ&ñ	
ô 	
ð 	
ð ! )Ð,ˆ
Ø×ÒØ�OŠO˜C¨ˆOÑ4Ô4Ð5FÔ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*   € Ø�JŠJ•t T¤\Ô%:Ð;Ñ;Ô;Ñ<Ô<Ð<Ð<Ð<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_protocol0  s/   € Ø×Ò˜Ÿš¨Ñ-Ô-¨jÔ9¸7Ñ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.setUpB  s`   ø€ Ý‰Œ�Š‰ŒˆÝ˜HÕ&>Ð?Ð@ÑAÔAˆÝ  ‘o”oˆŒØŒ×Ò�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.tearDownH  sN   ø€ ØŒ×Ò˜dœkÔ?Ñ@Ô@Ð@ØŒ×ÒÑÔÐÝ‰Œ×ÒÑÔÐÐÐ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_socketM  sT  è è € å•X�fœm­F¬NÑ;Ô;Ñ<Ô<Ñ=Ô=ð 	3ÀØ�NŠN˜4œ<Ñ(Ô(Ð(Ø�LŠLÐ7Ñ8Ô8Ð8Ø#×.Ò.¨wÑ7Ô7Ð7Ð7ˆHØ×Ò˜XÐ'=Ñ>Ô>Ð>Ø &× 1Ò 1°+Ñ >Ô >Ð>Ð>ˆKÝ!Ô'¨×(:Ò(:¸8Ñ(DÔ(DÑEÔEˆGØ×*Ò*­3¨wÐ7GÔ/HÑ+IÔ+IÑJÔJÐJÐJˆDØ×Ò˜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   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  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Ð  4  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.setUpj  sA   ø€ ÝÔ&Ñ(Ô(ˆŒÝ”w—|’| D¤K°Ñ=Ô=ˆŒÝ‰Œ�Š‰Œˆˆˆr1   c                 óz   •— t          ¦   «                              ¦   «          t          j        | j        ¦  «         d S r*   )rA  rE  ÚshutilÚrmtreerç  rC  s    €r/   rE  zUnixSocketTestFile.tearDowno  s1   ø€ Ý‰Œ×ÒÑÔÐÝŒ�d”kÑ"Ô"Ð"Ð"Ð"r1   )r<   r=   r>   rB  rE  r”  r•  s   @r/   rã  rã  e  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.setUpy  s-   ø€ Ø�dœj™lœlÔ.Ñ.ˆŒÝ‰Œ�Š‰Œˆˆˆr1   )r<   r=   r>   rB  r”  r•  s   @r/   rí  rí  t  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 )ÚKeepAliveTestz¥Tests 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÷  †  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Ð"K¸1¥3 q¨3¡w¡<¤<°$Ñ#6Ð"KÐ"KÐ"KÐ"KÐ"KÐ"Kr1   i   )rÃ   rA   ÚrangerL   s    r/   rb   z/KeepAliveTest.get_app.<locals>.LargeHandler.getŽ  s=   € ð —
’
˜2Ÿ7š7Ð"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   è è € à—
’
˜=Ñ)Ô)Ð)Ø—j’j‘l”lÐ"Ð"Ð"Ð"Ð"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_app…  s  € ð	+ð 	+ð 	+ð 	+ð 	+�>ñ 	+ô 	+ð 	+ð	Mð 	Mð 	Mð 	Mð 	M�>ñ 	Mô 	Mð 	Mð	#ð 	#ð 	#ð 	#ð 	#­^ñ 	#ô 	#ð 	#ð	&ð 	&ð 	&ð 	&ð 	&¥>ñ 	&ô 	&ð 	&õ #™WœWˆÔÝà�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|   ø€ ð 	Œ× Ò ¥Ô!3¸EÐ!BÑ!BÔ!BÀDÄIÑ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×!Ò! ;°×0BÒ0BÑ0DÔ0DÐ"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Ò3°KÑ@Ô@Ð@Ð@ˆÝÔ# 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°´Ð=MÔ0NÑ,OÔ,OÑPÔPÐPÐPˆØ×Ò˜¨Ñ.Ô.Ð.Ð.Ð.r1   c                 ó<   — | j                              ¦   «          | ` d S r*   )rB   rÞ   rL   s    r/   rÞ   zKeepAliveTest.closeØ  s   € ØŒ×ÒÑÔÐØˆKˆKˆKr1   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‰   è è € à�lŠl‰nŒnÐÐÐØŒ×ÒÐ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¬   è è € à�lŠl‰nŒnÐÐÐØŒ×ÒØLñ	
ô 	
ð 	
ð × Ò Ñ"Ô"Ð"Ð"Ð"Ø”[×1Ò1Ñ3Ô3Ð3Ð3ˆØ�Š˜D˜Ñ!Ô!Ð!Ø×Ò˜œ lÔ3°WÑ=Ô=Ð=Ø�
Š
‰Œˆˆˆ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§   è è € à'ˆÔØ�lŠl‰nŒnÐÐÐØŒ×ÒÐ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Ë   è è € à'ˆÔØ�lŠl‰nŒnÐÐÐØŒ×ÒÐ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*  r3  r2  r4  rL   s    r/   Ú test_http10_keepalive_extra_crlfz.KeepAliveTest.test_http10_keepalive_extra_crlf	  sË   è è € à'ˆÔØ�lŠl‰nŒnÐÐÐØŒ×ÒÐ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   è è € à�lŠl‰nŒnÐÐÐØŒ×ÒØ_ñ	
ô 	
ð 	
ð × Ò Ñ"Ô"Ð"Ð"Ð"Ø× Ò Ñ"Ô"Ð"Ð"Ð"Ø�
Š
‰Œˆˆˆr1   c              #   ó¾   K  — |                       ¦   «         V — | j                             d¦  «         |                      ¦   «         V — |                      ¦   «          d S r9  r'  rL   s    r/   Útest_pipelined_cancelz#KeepAliveTest.test_pipelined_cancel  sb   è è € à�lŠl‰nŒnÐÐÐØŒ×ÒØ_ñ	
ô 	
ð 	
ð × Ò Ñ"Ô"Ð"Ð"Ð"Ø�
Š
‰Œˆˆˆ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   è è € à�lŠl‰nŒnÐÐÐØŒ×ÒÐ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_closed1  sq   è è € à�lŠl‰nŒnÐÐÐØŒ×ÒÐ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*  r3  r2  r4  rL   s    r/   Útest_keepalive_chunkedz$KeepAliveTest.test_keepalive_chunked:  sÕ   è è € à'ˆÔØ�lŠl‰nŒnÐÐÐØŒ×Òðñ	
ô 	
ð 	
ð × Ò Ñ"Ô"Ð"Ð"Ð"Ø×Ò˜œ 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_bodyM  s‰   è è € à�lŠl‰nŒnÐÐÐØŒ×ÒÐ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,  r0  r5  r7  r:  r<  r>  rA  rC  rE  r”  r•  s   @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_appY  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#   rO  ÚGzipFilerÃ   r   rÞ   ÚgetvaluerO   )r.   rQ   ÚbytesioÚ	gzip_fileÚcompressed_bodys        r/   Ú	post_gzipzGzipBaseTest.post_gzip\  s„   € Ý‘)”)ˆÝ”M s°GÐ<Ñ<Ô<ˆ	Ø�Š�˜T™
œ
Ñ#Ô#Ð#Ø�ŠÑÔÐØ!×*Ò*Ñ,Ô,ˆØ�zŠzØØØ Ø'¨Ð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_uncompressedi  sF   € Ø—:’:˜c¨&°y�:ÑAÔAˆØ×Ò� X¤]Ñ3Ô3°e¸e¸WÐ5EÑFÔFÐFÐFÐFr1   N)r<   r=   r>   rM   rU  rW  rV   r1   r/   rG  rG  X  sF   € € € € € ð1ð 1ð 1ð
ð 
ð 
ðGð Gð Gð Gð Gr1   rG  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_optionso  s   € Ý tÐ,Ñ,Ô,Ð,r1   c                 ó†   — |                       d¦  «        }|                      t          |j        ¦  «        ddgi¦  «         d S )Nr*  r  r&  )rU  ru   r   rQ   rv   s     r/   Ú	test_gzipzGzipTest.test_gzipr  s@   € Ø—>’> )Ñ,Ô,ˆØ×Ò� X¤]Ñ3Ô3°e¸e¸WÐ5EÑ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 )NrJ  rK  r*  rI   ry   rN  ÚGZIPr,  r  r&  )r#   rO  rP  rÃ   r   rÞ   rQ  rO   ru   r   rQ   )r.   rR  rS  rT  rT   s        r/   Útest_gzip_case_insensitivez#GzipTest.test_gzip_case_insensitivev  s°   € å‘)”)ˆÝ”M s°GÐ<Ñ<Ô<ˆ	Ø�Š�˜Y™œÑ(Ô(Ð(Ø�ŠÑÔÐØ!×*Ò*Ñ,Ô,ˆØ—:’:ØØØ Ø'¨Ð0ð	 ñ 
ô 
ˆð 	×Ò� X¤]Ñ3Ô3°e¸e¸WÐ5EÑFÔFÐFÐFÐFr1   N)r<   r=   r>   r£  r]  r`  rV   r1   r/   rY  rY  n  sI   € € € € € ð-ð -ð -ðGð Gð GðGð Gð Gð Gð Gr1   rY  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   rU  ru   r0  rv   s     r/   Útest_gzip_unsupportedz)GzipUnsupportedTest.test_gzip_unsupported‡  s™   € õ •wÐ @ÑAÔAð 	1ð 	1Ø—~’~ iÑ0Ô0ˆHð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1à×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,s   –8¸<¿<N)r<   r=   r>   rd  rV   r1   r/   rb  rb  †  s#   € € € € € ð-ð -ð -ð -ð -r1   rb  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_sizer[  )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.   rr  s     r/   Ú__init__z/StreamingChunkSizeTest.MessageDelegate.__init__ž  ó   € Ø(ˆDŒOˆOˆOr1   c                 ó   — g | _         d S r*   )Úchunk_lengthsr-   s      r/   r0   z7StreamingChunkSizeTest.MessageDelegate.headers_received¡  s   € Ø!#ˆDÔÐÐr1   c                 óT   — | j                              t          |¦  «        ¦  «         d S r*   )rw  r3   rd   )r.   r4   s     r/   r6   z4StreamingChunkSizeTest.MessageDelegate.data_received¤  s%   € ØÔ×%Ò%¥c¨%¡j¤jÑ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   rw  rr  Úwrite_headersr   r   rù   rd   rÃ   r;   )r.   Úresponse_bodys     r/   r;   z-StreamingChunkSizeTest.MessageDelegate.finish§  s–   € Ý ¥¨TÔ-?Ñ!@Ô!@ÑAÔAˆMØŒO×)Ò)Ý! *¨c°4Ñ8Ô8ÝÐ-­sµ3°}Ñ3EÔ3EÑ/FÔ/FÐGÑHÔHñô ð ð ŒO×!Ò! -Ñ0Ô0Ð0ØŒO×"Ò"Ñ$Ô$Ð$Ð$Ð$r1   N)r<   r=   r>   rt  r0   r6   r;   rV   r1   r/   ÚMessageDelegatero  �  sP   € € € € € ð	)ð 	)ð 	)ð	$ð 	$ð 	$ð	2ð 	2ð 	2ð	%ð 	%ð 	%ð 	%ð 	%r1   r}  c                 ó<   —  G d„ dt           ¦  «        } |¦   «         S )Nc                   ó   — e Zd Zd„ ZdS )ú+StreamingChunkSizeTest.get_app.<locals>.Appc                 ó6   — t                                |¦  «        S r*   )rf  r}  ©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/   ÚAppr€  ±  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ð ˆs‰uŒuˆ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ÚassertLessEqualrm  rù   ÚassertGreater)r.   rS   rT   r5   rl  s        r/   Úfetch_chunk_sizesz(StreamingChunkSizeTest.fetch_chunk_sizes·  sÎ   € Ø�4”:Ð;Ð;¨&Ð;°FÐ;Ð;ˆØ×ÒÑÔÐÝ˜Xœ]Ñ+Ô+ˆØ×Ò�˜TœY™œ­¨V©¬Ñ5Ô5Ð5Ø ð 	Mð 	MˆJØ× Ò Ø˜DœOÐ-@Å3ÀvÁ;Ä;Ñ-Nñô ð ð ×Ò˜z¨1¨oÅÀFÁÄÑ.KÑLÔLÐLÐLØˆr1   c                 ó&  — t          ¦   «         }t          j        d|¬¦  «        }|                     |¦  «         |                     ¦   «          |                     ¦   «         }t          |¦  «        t          |¦  «        k    rt          d¦  «        ‚|S )NrJ  rK  z#body did not shrink when compressed)r#   rO  rP  rÃ   rÞ   rQ  rd   ra   )r.   rQ   rR  ÚgzfileÚ
compresseds        r/   ÚcompresszStreamingChunkSizeTest.compressÃ  s{   € Ý‘)”)ˆÝ” C°Ð9Ñ9Ô9ˆØ�Š�TÑÔÐØ�Š‰ŒˆØ×%Ò%Ñ'Ô'ˆ
Ýˆz‰?Œ?�c $™iœiÒ'Ð'ÝÐAÑBÔBÐBØÐr1   c                 ól   — |                       | j        ¬¦  «        }|                      g d¢|¦  «         d S )N)rQ   )rg  rg  rg  é   )r�  r‹  ru   )r.   r5   s     r/   Útest_regular_bodyz(StreamingChunkSizeTest.test_regular_bodyÍ  s:   € Ø×'Ò'¨T¬YÐ'Ñ7Ô7ˆà×Ò˜˜˜¨&Ñ1Ô1Ð1Ð1Ð1r1   c                 óh   — |                       |                      | j        ¦  «        ddi¬¦  «         d S )NrN  rO  )rQ   r+   )r�  r“  r‹  rL   s    r/   Útest_compressed_bodyz+StreamingChunkSizeTest.test_compressed_bodyÒ  sB   € Ø×ÒØ—’˜tœyÑ)Ô)Ð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�$”)˜C˜R˜C”.Ñ!Ô!Ð!ØˆE�$”)˜B˜C˜C”.Ñ!Ô!Ð!Ð!Ð!r1   )r�  )rg  é   rg  é   )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�*˜S˜b˜S”/Ñ"Ô"Ð"ØˆE�*˜R˜S˜S”/Ñ"Ô"Ð"Ð"Ð"r1   rN  rO  )r�  r+   )r“  r‹  rŽ  rd   r�  )r.   r�  r’  s     @r/   Útest_chunked_compressedz.StreamingChunkSizeTest.test_chunked_compressedâ  s   ø€ Ø—]’] 4¤9Ñ-Ô-ˆ
Ø×Ò�3˜z™?œ?¨BÑ/Ô/Ð/ð	#ð 	#ð 	#ð 	#ð 	#ð 	×ÒØ'Ð2DÀfÐ1Mð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r1   N)r<   r=   r>   r‹  rm  ri  r£  r   r}  rM   r�  r“  r–  r˜  r   r£  rV   r1   r/   rf  rf  �  sÓ   € € € € € à@€DØ€Jð'ð 'ð 'ð
Ið Ið Ið%ð %ð %ð %ð %Ð-ñ %ô %ð %ð&ð ð ð
ð 
ð 
ðð ð ð2ð 2ð 2ð

ð 
ð 
ð2ð 2ð 2ð

ð 

ð 

ð 

ð 

r1   rf  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*   rq  rs  s     r/   rt  z7InvalidOutputContentLengthTest.MessageDelegate.__init__ñ  ru  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/  rz  rÖ   úx-testó
   1234567890)rr  r{  r   r   rÃ   r;   )r.   r,   r+   Úcontent_lengthss       r/   r0   z?InvalidOutputContentLengthTest.MessageDelegate.headers_receivedô  s’   € àØ#Ø %Ø#ð	ð ˆOð ŒO×)Ò)Ý! *¨c°4Ñ8Ô8ÝÐ-¨¸wÀxÔ?PÔ/QÐRÑSÔSñô ð ð ŒO×!Ò! -Ñ0Ô0Ð0ØŒO×"Ò"Ñ$Ô$Ð$Ð$Ð$r1   N)r<   r=   r>   rt  r0   rV   r1   r/   r}  r§  ð  s2   € € € € € ð	)ð 	)ð 	)ð	%ð 	%ð 	%ð 	%ð 	%r1   r}  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¥  r}  r‚  s      r/   r…  zAInvalidOutputContentLengthTest.get_app.<locals>.App.start_request  s   € Ý5×EÒEÀlÑ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ð ˆs‰uŒuˆ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  € Ø�\Š\˜(Ñ#Ô#ð 	;ð 	;Ø—z’z #¨e¸hÈÐ=Q�zÑRÔRˆHØ×ÒÑÔÐØ×Ò˜Xœ]¨MÑ:Ô:Ð:ð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð Að 	Pð 	PˆDØ—’˜dÑ#Ô#ð Pð Põ �wÐ(<Ñ=Ô=ð Pð PØ×*Ò*­9Ñ5Ô5ð Pð PØŸ
š
 3¨u¸xÈÐ>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   r}  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-FillerÚdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar+  rs   )rO   rP   ru   rQ   rv   s     r/   Útest_small_headersz$MaxHeaderSizeTest.test_small_headers  sL   € Ø—:’:˜c¨J¸	Ð+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Ð 4¸uÐEÑEÔEð 		?ð 		?ð?Ø—
’
˜3¨°ZÐ(@Èd�
ÑSÔSÐSØ—	’	Ð<Ñ=Ô=Ð=Ð=øÝð ?ð ?ð ?ð ”:Ð)Ø—M’M !¤*¤/°:Ñ>Ô>Ð>øøøøøøøøøð?øøøð			?ð 		?ð 		?ñ 		?ô 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð 		?øøøð 		?ð 		?ð 		?ð 		?ð 		?ð 		?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_app1  r¼  r1   c                 ó"   — t          d¬¦  «        S )Ngš™™™™™¹?)Úidle_connection_timeoutr¢  rL   s    r/   r£  z&IdleTimeoutTest.get_httpserver_options4  s   € Ý¨CÐ0Ñ0Ô0Ð0r1   c                 óV   •— t          ¦   «                              ¦   «          g | _        d S r*   )rA  rB  ÚstreamsrC  s    €r/   rB  zIdleTimeoutTest.setUp7  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Ø�LŠL‰NŒNˆNˆNð	ð 	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.connect@  sh   è è € å�&œ-™/œ/Ñ*Ô*ˆØ�nŠn˜k¨4×+=Ò+=Ñ+?Ô+?Ð@Ñ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_connectionG  sR   è è € à—|’|‘~”~Ð%Ð%ˆÝ‘”ˆØ×!Ò! %¤)Ñ,Ô,Ð,Ø�jŠj‰lŒlÐÐÐÐÐ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_useN  sÊ   è è € à—|’|‘~”~Ð%Ð%ˆÝ‘”ˆØ×!Ò! %¤)Ñ,Ô,Ð,õ �q‘”ð 	3ð 	3ˆAØ�LŠLÐEÑFÔFÐFØ×#Ò# KÑ0Ô0Ð0Ð0Ð0Ø×*Ò*¨2Ñ.Ô.Ð.Ð.ˆDØ×Ò˜T >Ñ2Ô2Ð2Ð2ð �jŠj‰lŒlÐÐÐÐÐr1   )r<   r=   r>   rM   r£  rB  rE  r   r  r»   r   rÕ  rØ  r”  r•  s   @r/   rÊ  rÊ  0  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.putb  s/   € Ø—
’
�3�s 4¤<Ô#4Ñ5Ô5Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7r1   N)r<   r=   r>   rß  rV   r1   r/   ÚBufferedHandlerrÝ  a  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.initializeg  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`   rr  ræ   Úset_max_body_sizerÝ   r®   Úset_body_timeoutÚfloatr9   s     r/   r  z8BodyLimitsTest.get_app.<locals>.StreamingHandler.preparej  sš   € Ý”{¥?°D´LÔ4KÑLÔL�Ø" d¤lÔ&<Ð<Ð<Ø×*Ò*­3¨t×/@Ò/@ÀÑ/QÔ/QÑ+RÔ+RÑSÔSÐSØ! T¤\Ô%;Ð;Ð;Ø×)Ò)­%°×0AÒ0AÀ.Ñ0QÔ0QÑ*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_receivedq  s   € Ø�”¥3 t¡9¤9Ñ,�”��r1   c                 óT   — |                       t          | j        ¦  «        ¦  «         d S r*   )rÃ   rù   rä  rL   s    r/   rß  z4BodyLimitsTest.get_app.<locals>.StreamingHandler.putt  s$   € Ø—
’
�3˜tœÑ/Ô/Ñ0Ô0Ð0Ð0Ð0r1   N)r<   r=   r>   r]   r  r6   rß  rV   r1   r/   ÚStreamingHandlerrâ  e  sS   € € € € € ð$ð $ð $ðTð Tð Tð-ð -ð -ð1ð 1ð 1ð 1ð 1r1   rï  ú	/bufferedú
/streaming)r   r    r   )r.   rà  rï  s      r/   rM   zBodyLimitsTest.get_app`  sŠ   € ð	8ð 	8ð 	8ð 	8ð 	8�nñ 	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_options{  s   € Ý °TÐ:Ñ:Ô:Ð:r1   c                 ó   — t          ¦   «         S r*   r   rL   s    r/   ri  zBodyLimitsTest.get_http_client~  rj  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_bodyƒ  sf   € Ø—:’:˜k°%¸k�:ÑJÔJˆØ×Ò˜œ¨Ñ0Ô0Ð0Ø—:’:˜l°5¸{�:Ñ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   r[  r\  rO   ru   r0  rv   s     r/   Útest_large_body_bufferedz'BodyLimitsTest.test_large_body_buffered‰  s¹   € Ý•wÐ ;Å7Ä<ÐPÑPÔPð 	Pð 	PØ—z’z +°eÀ$ÈÁ,�zÑOÔOˆHð	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>•  ó   € ¨E¨E°$¸±,Ñ,?Ô,?€ r1   ©r|   r�  r  rü  rv   s     r/   Ú test_large_body_buffered_chunkedz/BodyLimitsTest.test_large_body_buffered_chunkedŽ  sµ   € õ •wÐ :Å'Ä,ÐOÑOÔOð 	ð 	Ø—z’zØØØ?Ð?ð "ñ ô ˆ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Ø—z’z ,°uÀ4È%Á<�zÑPÔPˆHð	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ð 	ð 	Ø—z’zØØØ?Ð?ð "ñ ô ˆ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   € ¨¨¨d°U©lÑ(;Ô(;€ 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   r[  r\  rŠ  ru   rÞ   rÞ  s      r/   Útest_timeoutzBodyLimitsTest.test_timeout¶  s#  è è € å�&œ-™/œ/Ñ*Ô*ˆð	Ø—.’. +¨t×/AÒ/AÑ/CÔ/CÐ!DÑEÔEÐEÐEÐEð �LŠLð.ñô ð õ �7Ð$:Å'Ä,ÐOÑOÔOð ;ð ;Ø!'×!8Ò!8Ñ!:Ô!:Ð:Ð:�ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;à×Ò˜X sÑ+Ô+Ð+à�LŠL‰NŒNˆNˆNˆNøˆF�LŠL‰NŒNˆNˆNøøøs0   ¤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   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Ô/CÐ!DÑEÔEÐEÐEÐEà�LŠLð1ñô ð ð
 �LŠL˜ ™Ñ&Ô&Ð&Ý2BÀ6Ñ2JÔ2JÐ,JÐ,JÑ)ˆJ˜ Ø×Ò˜X xÑ0Ô0Ð0à�LŠLð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à�LŠL‰NŒNˆNˆNˆNøˆF�LŠL‰NŒNˆNˆNøøøs0   ¤B9D7 ÃD Ã4D7 Ä DÄD7 ÄDÄD7 Ä7EN)r<   r=   r>   rM   r£  ri  r÷  rý  ÚunittestÚskipIfr�   r
  r  r
  r  r  r  r   r  r  rV   r1   r/   rÚ  rÚ  _  s$  € € € € € ð
ð 
ð 
ð6;ð ;ð ;ð'ð 'ð 'ð
1ð 1ð 1ð-ð -ð -ð
 €X„_�R”W ’_Ð&8Ñ9Ô9ð-ð -ñ :Ô9ð-ð-ð -ð -ð
 €X„_�R”W ’_Ð&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/  rz  rs   z'HTTP/1.1 200 OK
Content-Length: %d

)rî   rÙ   Úhttp1rr  r{  r   r   r;   rÃ   r   rd   )r`   Úmessager.   s     €r/   Úhandle_requestz3LegacyInterfaceTest.get_app.<locals>.handle_requestè  sÝ   ø€ Ø œ×3Ò3°IÑ>Ô>ˆDŒJØ”:ð ð Ô"×0Ò0Ý% b¨#¨tÑ4Ô4µk±m´mñô ð ð Ô"×)Ò)Ñ+Ô+Ð+Ø�Ø$ˆ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ð 	/Ø�MŠMÐ-Ñ.Ô.Ð.Ø×Ò˜œ¨Ñ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  rO  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ô  rG  rY  rb  rf  r¥  r¹  rÊ  rÚ  r  rV   r1   r/   ú<module>r8     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ð '2ðT&
ð &
ð &
ð &
ð &
˜Ô)ñ &
ô &
ð &
ðR	
ð 	
ð 	
ð 	
ð 	
˜>ñ 	
ô 	
ð 	
ðYð Yð Yð Yð YÐ*ñ Yô Yð Yðx>ð >ð >ð >ð >�.ñ >ô >ð >ð&Oð &Oð &Oð &Oð &O�~ñ &Oô &Oð &OðR9ð 9ð 9ð 9ð 9�nñ 9ô 9ð 9ð
Bð Bð Bð Bð B˜ñ Bô Bð Bð>Uð >Uð >Uð >Uð >UÐ&ñ >Uô >Uð >UðBNð Nð Nð Nð NÐ)ñ Nô Nð Nðb\
ð \
ð \
ð \
ð \
Ð%ñ \
ô \
ð \
ð~
ð 
ð 
ð 
ð 
Ð'Ð)<ñ 
ô 
ð 
ð.	Dð 	Dð 	Dð 	Dð 	DÐ,ñ 	Dô 	Dð 	Dð ð-Hð -Hð -Hð -Hð -H�]ñ -Hô -Hñ Ôð-Hð` €„Øˆ�˜	Ñ"Ô"Ð"Ð> c¤l°hÒ&>Ø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   