Ë
    êmxipÑ  ã                   óú  — d dl mZmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2d dl3Z3d dl4Z4d dl5Z5d dl6Z6d dl7Z7d dl8Z9d dl:Z:d dl;m<Z< d dl=Z=e=j|                  rd dl=m?Z?m@Z@ d„ ZA G d„ de«      ZB G d„ de(«      ZC G d„ de «      ZD G d„ de7jŠ                  «      ZF G d„ de(«      ZG G d„ de«      ZH G d„ d e(«      ZI G d!„ d"e(«      ZJ G d#„ d$e(«      ZK G d%„ d&eK«      ZL G d'„ d(e«      ZM G d)„ d*e«      ZN G d+„ d,eB«      ZO G d-„ d.e eB«      ZP G d/„ d0eB«      ZQe% G d1„ d2e!«      «       ZR e7j¦                   eTe2d3«       xs e4jª                  d4k(  d5«       G d6„ d7eR«      «       ZV e7j¦                   eTe2d3«      xr e4jª                  j¯                  d8«       d9«       G d:„ d;eR«      «       ZX G d<„ d=e«      ZY G d>„ d?e«      ZZ G d@„ dAeZe«      Z[ G dB„ dCeZe«      Z\ G dD„ dEe«      Z] G dF„ dGe«      Z^ G dH„ dIe«      Z_ G dJ„ dKe«      Z` G dL„ dMe«      Za G dN„ dOe«      Zby)Pé    )ÚgenÚnetutil)Újson_decodeÚjson_encodeÚutf8Ú_unicodeÚrecursive_unicodeÚ
native_str)ÚHTTP1Connection)Ú	HTTPError)Ú
HTTPServer)ÚHTTPHeadersÚHTTPMessageDelegateÚHTTPServerConnectionDelegateÚResponseStartLine)ÚIOStream)ÚEvent)Úgen_logÚapp_log©ÚSimpleAsyncHTTPClient)ÚAsyncHTTPTestCaseÚAsyncHTTPSTestCaseÚAsyncTestCaseÚ	ExpectLogÚgen_test)Úabstract_base_test)ÚApplicationÚRequestHandlerÚstream_request_body)ÚclosingÚcontextmanagerN)ÚBytesIO)ÚDictÚListc              ƒ   óâ   ‡‡K  — g Š G ˆˆfd„dt         «      }t        | d«      Š |«       }‰j                  |«      ƒ d{  –—†  |j                  |j                  dj                  ‰«      fS 7 Œ,­w)zaReads an HTTP response from `stream` and returns a tuple of its
    start_line, headers and body.c                   ó(   •— e Zd Zd„ Zˆ fd„Zˆfd„Zy)ú"read_stream_body.<locals>.Delegatec                 ó    — || _         || _        y ©N)ÚheadersÚ
start_line©Úselfr,   r+   s      úS/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/test/httpserver_test.pyÚheaders_receivedz3read_stream_body.<locals>.Delegate.headers_received=   s   € Ø"ˆDŒLØ(ˆD�Oó    c                 ó(   •— ‰j                  |«       y r*   )Úappend)r.   ÚchunkÚchunkss     €r/   Údata_receivedz0read_stream_body.<locals>.Delegate.data_receivedA   s   ø€ Ø�M‰M˜%Õ r1   c                 ó&   •— ‰j                  «        y r*   )Údetach©r.   Úconns    €r/   Úfinishz)read_stream_body.<locals>.Delegate.finishD   s   ø€ Ø�K‰K�Mr1   N)Ú__name__Ú
__module__Ú__qualname__r0   r6   r;   )r5   r:   s   €€r/   ÚDelegater(   <   s   ø„ ò	)ô	!õ	r1   r?   TNr1   )r   r   Úread_responser,   r+   Újoin)Ústreamr?   Údelegater5   r:   s      @@r/   Úread_stream_bodyrD   7   sk   ùè ø€ ð €F÷	Ô&ô 	ô ˜6 4Ó(€DÙ‹z€HØ
×
Ñ
˜XÓ
&×&Ð&Ø×Ñ × 0Ñ 0°#·(±(¸6Ó2BÐBÐBð 'ús   „<A/Á A-Á-A/c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚHandlerBaseTestCaseNc                 óF   — t        d| j                  j                  fg«      S ©Nú/)r   Ú	__class__ÚHandler©r.   s    r/   Úget_appzHandlerBaseTestCase.get_appP   s   € Ü˜S $§.¡.×"8Ñ"8Ð9Ð:Ó;Ð;r1   c                 óp   —  | j                   |i |¤Ž}|j                  «        t        |j                  «      S r*   )ÚfetchÚrethrowr   Úbody)r.   ÚargsÚkwargsÚresponses       r/   Ú
fetch_jsonzHandlerBaseTestCase.fetch_jsonS   s2   € Ø�4—:‘:˜tÐ. vÑ.ˆØ×ÑÔÜ˜8Ÿ=™=Ó)Ð)r1   )r<   r=   r>   rK   rM   rU   © r1   r/   rF   rF   M   s   „ Ø€Gò<ó*r1   rF   c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ÚHelloWorldRequestHandlerc                 ó   — || _         y r*   )Úexpected_protocol)r.   Úprotocols     r/   Ú
initializez#HelloWorldRequestHandler.initializeZ   s
   € Ø!)ˆÕr1   c                 ó‚   — | j                   j                  | j                  k7  rt        d«      ‚| j	                  d«       y )Nzunexpected protocolúHello world)Úrequestr[   rZ   Ú	Exceptionr;   rL   s    r/   ÚgetzHelloWorldRequestHandler.get]   s2   € Ø�<‰<× Ñ  D×$:Ñ$:Ò:ÜÐ1Ó2Ð2Ø�‰�MÕ"r1   c                 óf   — | j                  dt        | j                  j                  «      z  «       y )NzGot %d bytes in POST)r;   Úlenr_   rQ   rL   s    r/   ÚpostzHelloWorldRequestHandler.postb   s#   € Ø�‰Ð*¬S°·±×1BÑ1BÓ-CÑCÕDr1   N)Úhttp)r<   r=   r>   r\   ra   rd   rV   r1   r/   rX   rX   Y   s   „ ó*ò#ó
Er1   rX   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚSSLTestc                 ó<   — t        dt        t        d¬«      fg«      S )NrI   Úhttps©r[   )r   rX   ÚdictrL   s    r/   rM   zSSLTest.get_appg   s   € Ü˜SÔ":¼DÈ'Ô<RÐSÐTÓUÐUr1   c                 ó\   — t        ddt        j                  it        j                  «       ¤ŽS )NÚssl_versionrV   )rk   ÚsslÚPROTOCOL_TLS_SERVERr   Údefault_ssl_optionsrL   s    r/   Úget_ssl_optionszSSLTest.get_ssl_optionsj   s.   € Üñ 
Ü×/Ñ/ð
ä ×4Ñ4Ó6ñ
ð 	
r1   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrI   ó   Hello world©rO   ÚassertEqualrQ   ©r.   rT   s     r/   Útest_sslzSSLTest.test_sslp   s#   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Õ7r1   c                 ój   — | j                  ddddz  ¬«      }| j                  |j                  d«       y )NrI   ÚPOSTÚAiˆ  ©ÚmethodrQ   s   Got 5000 bytes in POSTrt   rv   s     r/   Útest_large_postzSSLTest.test_large_postt   s/   € Ø—:‘:˜c¨&°s¸T±z�:ÓBˆØ×Ñ˜Ÿ™Ð(AÕBr1   c           	      ód  — t        t        d«      5  t        t        dd¬«      5  | j                  t        t        f«      5  | j                  | j                  d«      j                  dd«      ddd	¬
«       d d d «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nz(SSL Error|uncaught exception)úUncaught exceptionF©ÚrequiredrI   úhttps:úhttp:é  T)Úrequest_timeoutÚconnect_timeoutÚraise_error)r   r   ÚassertRaisesÚIOErrorr   rO   Úget_urlÚreplacerL   s    r/   Útest_non_ssl_requestzSSLTest.test_non_ssl_requestx   s¦   € ô ”wÐ @ÓAñ 	Üœ7Ð$8À5ÔIñ Ø×&Ñ&¬´Ð';Ó<ñ Ø—J‘JØŸ™ SÓ)×1Ñ1°(¸GÓDØ(,Ø(,Ø$(ð	 ô ÷÷÷	ð 	÷ð ú÷ð ú÷	ð 	ús:   ‘B&¤BÁ 5BÁ5BÁ=B&ÂBÂBÂB#	ÂB&Â&B/c                 óH  — t        t        d«      5 }| j                  t        t        f«      5  | j                  | j                  d«      j                  dd«      d¬«       d d d «       d d d «       | j                  j                  «       y # 1 sw Y   Œ-xY w# 1 sw Y   Œ1xY w)Nz	SSL ErrorrI   r‚   rƒ   T)r‡   )
r   r   rˆ   r‰   r   rO   rŠ   r‹   ÚassertFalseÚlogged_stack)r.   Ú
expect_logs     r/   Útest_error_loggingzSSLTest.test_error_logging†   s�   € ä”w Ó,ð 	°
Ø×"Ñ"¤G¬YÐ#7Ó8ñ Ø—
‘
Ø—L‘L Ó%×-Ñ-¨h¸Ó@Èdð ô ÷÷	ð
 	×Ñ˜×0Ñ0Õ1÷	ð ú÷	ð 	ús"   ‘B­3BÁ BÂB	ÂBÂB!N)	r<   r=   r>   rM   rq   rw   r}   rŒ   r‘   rV   r1   r/   rg   rg   f   s"   „ òVò
ò8òCòó2r1   rg   c                   ó   — e Zd Zd„ Zd„ Zy)ÚBadSSLOptionsTestc                 óV   — t        «       }| j                  t        t        |ddi¬«       y )NÚkeyfilez/__missing__.crt©Ússl_options)r   rˆ   ÚKeyErrorr   )r.   Úapplications     r/   Útest_missing_argumentsz(BadSSLOptionsTest.test_missing_arguments‘   s.   € Ü!“mˆØ×ÑÜÜØØ"Ð$6Ð7ð	 	õ 	
r1   c                 ó”  — t        «       }t        j                  j                  t        «      }t        j                  j                  |d«      }t        j                  j                  |d«      }| j                  t        t        ft        |ddi¬«       | j                  t        t        ft        ||ddœ¬«       t        |||dœ¬«       y)	z6A missing SSL key should cause an immediate exception.ztest.crtztest.keyÚcertfilez/__mising__.crtr–   z/__missing__.key)rœ   r•   N)
r   ÚosÚpathÚdirnameÚ__file__rA   rˆ   Ú
ValueErrorr‰   r   )r.   r™   Ú
module_dirÚexisting_certificateÚexisting_keys        r/   Útest_missing_keyz"BadSSLOptionsTest.test_missing_keyš   s³   € ô "“mˆÜ—W‘W—_‘_¤XÓ.ˆ
Ü!Ÿw™wŸ|™|¨J¸
ÓCÐÜ—w‘w—|‘| J°
Ó;ˆà×ÑÜœÐ!ÜØØ#Ð%6Ð7ð	 	ô 	
ð 	×ÑÜœÐ!ÜØà0Ø-ñð	 	ô 	
ô 	ØØ%9ÀlÑSö	
r1   N)r<   r=   r>   rš   r¥   rV   r1   r/   r“   r“   �   s   „ ò
ó
r1   r“   c                   ó   — e Zd Zd„ Zy)ÚMultipartTestHandlerc           	      ó  — | j                  | j                  j                  d   | j                  d«      | j                  j                  d   d   j
                  t        | j                  j                  d   d   d   «      dœ«       y )NzX-Header-Encoding-TestÚargumentÚfilesr   rQ   )Úheaderr©   ÚfilenameÚfilebody)r;   r_   r+   Úget_argumentrª   r¬   r   rL   s    r/   rd   zMultipartTestHandler.postº   sr   € Ø�‰àŸ,™,×.Ñ.Ð/GÑHØ ×-Ñ-¨jÓ9Ø ŸL™L×.Ñ.¨wÑ7¸Ñ:×CÑCÜ$ T§\¡\×%7Ñ%7¸Ñ%@ÀÑ%CÀFÑ%KÓLñ	õ	
r1   N©r<   r=   r>   rd   rV   r1   r/   r§   r§   ¹   s   „ ó
r1   r§   c                   ó<   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zed„ «       Z	y)	ÚHTTPConnectionTestc                 ó"   — dt         fdt        fgS )Nz
/multipartú/hello)r§   rX   rL   s    r/   Úget_handlerszHTTPConnectionTest.get_handlersÇ   s   € àÔ/Ð0ØÔ/Ð0ð
ð 	
r1   c                 ó4   — t        | j                  «       «      S r*   )r   r´   rL   s    r/   rM   zHTTPConnectionTest.get_appÍ   s   € Ü˜4×,Ñ,Ó.Ó/Ð/r1   c                 óˆ  ‡ ‡— t        t        t        j                  «       «      «      5 Š‰ j                  j	                  ˆ ˆfd„«       ‰j                  |j                  |t        dt        |«      z  «      gz   «      |z   |z   |z   «       ‰ j                  j	                  ˆfd„«      \  }}}|cd d d «       S # 1 sw Y   y xY w)Nc                  óF   •— ‰j                  d‰ j                  «       f«      S ©Nú	127.0.0.1)ÚconnectÚget_http_port©r.   rB   s   €€r/   ú<lambda>z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>Ó   s   ø€ ˜Ÿ™¨°T×5GÑ5GÓ5IÐ'JÓK€ r1   zContent-Length: %dc                  ó   •— t        ‰ «      S r*   )rD   )rB   s   €r/   r½   z.HTTPConnectionTest.raw_fetch.<locals>.<lambda>Ü   s   ø€ Ô(¨Ó0€ r1   )	r!   r   ÚsocketÚio_loopÚrun_syncÚwriterA   r   rc   )r.   r+   rQ   Únewliner,   rB   s   `    @r/   Ú	raw_fetchzHTTPConnectionTest.raw_fetchÐ   s²   ù€ Ü”XœfŸm™m›oÓ.Ó/ð 	°6Ø�L‰L×!Ñ!ÜKôð �L‰LØ—‘˜W¬Ð-AÄCÈÃIÑ-MÓ(NÐ'OÑOÓPØñàñð ñôð )-¯©×(=Ñ(=Û0ó)Ñ%ˆJ˜ ð ÷	÷ 	ò 	ús   ©BB8Â8Cc                 ón  — | j                  g d¢dj                  dddj                  «       ddj                  «       ddj                  «       d	dg	«      «      }t        |«      }| j	                  d
|d   «       | j	                  d|d   «       | j	                  d|d   «       | j	                  d|d   «       y )N)s   POST /multipart HTTP/1.0s6   Content-Type: multipart/form-data; boundary=1234567890s   X-Header-encoding-test: éó   
s-   Content-Disposition: form-data; name=argumentr1   õ   Ã¡s   --1234567890u;   Content-Disposition: form-data; name="files"; filename="Ã³"õ   Ãºs   --1234567890--õ   Ã©r«   r©   õ   Ã³r¬   r­   )rÄ   rA   Úencoder   ru   ©r.   rT   Údatas      r/   Útest_multipart_formz&HTTPConnectionTest.test_multipart_formà   s»   € ð —>‘>òð
 �L‰LàDØØ—O‘OÓ%Ø#ØU×\Ñ\Ó^ØØ—O‘OÓ%Ø%Øð
óó
ˆô( ˜8Ó$ˆØ×Ñ˜ 4¨¡>Ô2Ø×Ñ˜ 4¨
Ñ#3Ô4Ø×Ñ˜ 4¨
Ñ#3Ô4Ø×Ñ˜ 4¨
Ñ#3Õ4r1   c                 ó`   — dD ])  }| j                  dgd|¬«      }| j                  |d«       Œ+ y )N)rÆ   ó   
s   GET /hello HTTP/1.0r1   )rÃ   rs   )rÄ   ru   )r.   rÃ   rT   s      r/   Útest_newlinesz HTTPConnectionTest.test_newlinesý   s9   € à'ò 	7ˆGØ—~‘~Ð'=Ð&>ÀÈW�~ÓUˆHØ×Ñ˜X ~Õ6ñ	7r1   c              #   óÈ  K  — t        t        j                  «       «      }|j                  d| j                  «       f«      –— |j	                  dj                  g d¢«      «      –— |j                  d«      –—}| j                  |j                  d«      |«       |j	                  d«       |j                  d«      –—}| j                  |j                  d«      |«       |j                  d«      –—}t        j                  t        |j                  d«      «      «      }|j                  t        |d	   «      «      –—}| j                  |d
«       |j!                  «        y ­w)Nr¹   rÆ   )s   POST /hello HTTP/1.1s   Host: 127.0.0.1s   Content-Length: 1024s   Expect: 100-continues   Connection: closerÆ   ó   

s   HTTP/1.1 100 s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaó   HTTP/1.1 200Úlatin1úContent-Lengths   Got 1024 bytes in POST)r   r¿   rº   r»   rÂ   rA   Ú
read_untilÚ
assertTrueÚ
startswithr   Úparser
   ÚdecodeÚ
read_bytesÚintru   Úclose)r.   rB   rÍ   Ú
first_lineÚheader_datar+   rQ   s          r/   Útest_100_continuez$HTTPConnectionTest.test_100_continue  s'  è ø€ ô
 œ&Ÿ-™-›/Ó*ˆØ�n‰n˜k¨4×+=Ñ+=Ó+?Ð@ÓAÒAØ�l‰lØ�L‰Lòó	ó
ò 	
ð ×&Ñ& {Ó3Ñ3ˆØ�‰˜Ÿ™Ð(8Ó9¸4Ô@Ø�‰�[Ô!Ø!×,Ñ,¨WÓ5Ñ5ˆ
Ø�‰˜
×-Ñ-¨oÓ>À
ÔKØ"×-Ñ-¨kÓ:Ñ:ˆÜ×#Ñ#¤J¨{×/AÑ/AÀ(Ó/KÓ$LÓMˆØ×&Ñ&¤s¨7Ð3CÑ+DÓ'EÓFÑFˆØ×Ñ˜Ð8Ô9Ø�‰�ùs   ‚E E"N)rÆ   )
r<   r=   r>   r´   rM   rÄ   rÎ   rÑ   r   rá   rV   r1   r/   r±   r±   Æ   s/   „ ò
ò0óò 5ò:7ð ñó ñr1   r±   c                   ó   — e Zd Zd„ Zd„ Zy)ÚEchoHandlerc                 ó`   — | j                  t        | j                  j                  «      «       y r*   ©rÂ   r	   r_   Ú	argumentsrL   s    r/   ra   zEchoHandler.get#  ó   € Ø�
‰
Ô$ T§\¡\×%;Ñ%;Ó<Õ=r1   c                 ó`   — | j                  t        | j                  j                  «      «       y r*   rå   rL   s    r/   rd   zEchoHandler.post&  rç   r1   N©r<   r=   r>   ra   rd   rV   r1   r/   rã   rã   "  s   „ ò>ó>r1   rã   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTypeCheckHandlerc           	      ó>  — i | _         dt        fdt        fdt        fdt        fdt        fdt        fdt        fdt        fg}|D ],  \  }}| j                  |t        | j                  |«      |«       Œ. | j                  d	t        | j                  j                  j                  «       «      d
   t        «       | j                  dt        | j                  j                  j                  «       «      d
   t        «       | j                  dt        | j                  j                  j                  «       «      d
   t        «       | j                  dt        | j                  j                  j                  «       «      d
   j                  t        «       | j                  dt        | j                  j                  j                  «       «      d
   t        «       | j                  dt        | j                  j                  j                  «       «      d
   d
   t        «       y )Nr|   ÚuriÚversionÚ	remote_ipr[   Úhostrž   ÚqueryÚ
header_keyr   Úheader_valueÚ
cookie_keyÚcookie_valueÚarg_keyÚ	arg_value)ÚerrorsÚstrÚ
check_typeÚgetattrr_   Úlistr+   ÚkeysÚvaluesÚcookiesÚvalueræ   Úbytes)r.   ÚfieldsÚfieldÚexpected_types       r/   ÚpreparezTypeCheckHandler.prepare+  s   € ØˆŒà”sˆOØ”CˆLØœÐØœ#ÐØœÐØ”SˆMØ”SˆMØ”cˆNð	
ˆð %+ò 	PÑ ˆE�=Ø�O‰O˜E¤7¨4¯<©<¸Ó#?ÀÕOð	Pð 	�‰˜¤d¨4¯<©<×+?Ñ+?×+DÑ+DÓ+FÓ&GÈÑ&JÌCÔPØ�‰˜¬¨T¯\©\×-AÑ-A×-HÑ-HÓ-JÓ(KÈAÑ(NÔPSÔTà�‰˜¤d¨4¯<©<×+?Ñ+?×+DÑ+DÓ+FÓ&GÈÑ&JÌCÔPØ�‰ØœD §¡×!5Ñ!5×!<Ñ!<Ó!>Ó?ÀÑB×HÑHÌ#ô	
ð
 	�‰˜	¤4¨¯©×(>Ñ(>×(CÑ(CÓ(EÓ#FÀqÑ#IÌ3ÔOØ�‰˜¤T¨$¯,©,×*@Ñ*@×*GÑ*GÓ*IÓ%JÈ1Ñ%MÈaÑ%PÔRWÕXr1   c                 ó�   — | j                  d| j                  j                  t        «       | j	                  | j
                  «       y )NrQ   )rú   r_   rQ   r  rÂ   rø   rL   s    r/   rd   zTypeCheckHandler.postF  s,   € Ø�‰˜ §¡× 1Ñ 1´5Ô9Ø�
‰
�4—;‘;Õr1   c                 ó:   — | j                  | j                  «       y r*   )rÂ   rø   rL   s    r/   ra   zTypeCheckHandler.getJ  s   € Ø�
‰
�4—;‘;Õr1   c                 óP   — t        |«      }||k7  rd|› d|› �| j                  |<   y y )Nz	expected z, got )Útyperø   )r.   ÚnameÚobjr  Úactual_types        r/   rú   zTypeCheckHandler.check_typeM  s3   € Ü˜3“iˆØ˜KÒ'Ø"+¨M¨?¸&ÀÀÐ NˆD�K‰K˜Òð (r1   N)r<   r=   r>   r  rd   ra   rú   rV   r1   r/   rë   rë   *  s   „ òYò6 ò óOr1   rë   c                   ó   — e Zd Zd„ Zy)ÚPostEchoHandlerc                 óX   — | j                  t        | j                  d«      ¬«      «       y )NrÍ   )Úecho)rÂ   rk   r®   )r.   Ú	path_argss     r/   rd   zPostEchoHandler.postT  s   € Ø�
‰
”4˜T×.Ñ.¨vÓ6Ô7Õ8r1   Nr¯   rV   r1   r/   r  r  S  s   „ ó9r1   r  c                   ó   — e Zd Zdd„Zy)ÚPostEchoGBKHandlerNc                 ó^   — 	 |j                  d«      S # t        $ r t        dd|z  «      ‚w xY w)NÚgbké�  zinvalid gbk bytes: %r)rÛ   r`   r   )r.   r   r
  s      r/   Údecode_argumentz"PostEchoGBKHandler.decode_argumentY  s;   € ð	BØ—<‘< Ó&Ð&øÜò 	BÜ˜CÐ!8¸5Ñ!@ÓAÐAð	Bús   ‚ “,r*   )r<   r=   r>   r  rV   r1   r/   r  r  X  s   „ ôBr1   r  c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚHTTPServerTestc                 ó^   — t        dt        fdt        fdt        fdt        fdt        fg«      S )Nú/echoú
/typecheckú//doubleslashz
/post_utf8z	/post_gbk)r   rã   rë   r  r  rL   s    r/   rM   zHTTPServerTest.get_appa  s>   € Üàœ+Ð&ØÔ/Ð0Ø ¤+Ð.ØœÐ/ØÔ0Ð1ðó
ð 	
r1   c                 óz   — | j                  d«      }t        |j                  «      }| j                  |ddgi«       y )Nz/echo?foo=%C3%A9ÚfoorÉ   ©rO   r   rQ   ru   rÌ   s      r/   Útest_query_string_encodingz)HTTPServerTest.test_query_string_encodingl  s6   € Ø—:‘:Ð0Ó1ˆÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜ ¨ zÐ2Õ3r1   c                 ó|   — | j                  d«      }t        |j                  «      }| j                  |dddgi«       y )Nz/echo?foo=&foo=r  Ú r   rÌ   s      r/   Útest_empty_query_stringz&HTTPServerTest.test_empty_query_stringq  s8   € Ø—:‘:Ð/Ó0ˆÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜ ¨¨B xÐ0Õ1r1   c                 ó„   — | j                  ddd¬«      }t        |j                  «      }| j                  |dgdgdœ«       y )Nr  ry   z	foo=&bar=r{   r#  )r  Úbarr   rÌ   s      r/   Útest_empty_post_parametersz)HTTPServerTest.test_empty_post_parametersv  s=   € Ø—:‘:˜g¨f¸;�:ÓGˆÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜¨ t°R°DÑ9Õ:r1   c                 óø   — ddi}| j                  d|¬«      }t        |j                  «      }| j                  |i «       | j                  ddd|¬«      }t        |j                  «      }| j                  |i «       y )NÚCookieúfoo=barz/typecheck?foo=bar©r+   r  ry   ©r|   rQ   r+   r   )r.   r+   rT   rÍ   s       r/   Ú
test_typeszHTTPServerTest.test_types{  sy   € Ø˜YÐ'ˆØ—:‘:Ð2¸G�:ÓDˆÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜˜rÔ"à—:‘:Ø ¨iÀð ó 
ˆô ˜8Ÿ=™=Ó)ˆØ×Ñ˜˜rÕ"r1   c                 ó¨   — | j                  d«      }| j                  d|j                  «       | j                  t        |j                  «      i «       y )Nr  éÈ   )rO   ru   Úcoder   rQ   rv   s     r/   Útest_double_slashz HTTPServerTest.test_double_slash‡  s?   € ð —:‘:˜oÓ.ˆØ×Ñ˜˜hŸm™mÔ,Ø×Ñœ X§]¡]Ó3°RÕ8r1   c           
      ó‚  — ddi}d}dD ]¨  }dD ]¡  }| j                  ||¬«      5  |j                  |«      }|r.t        j                  j	                  |«      j                  d«      }| j                  d|z   d	|d
|z   ¬«      }| j                  t        |j                  «      d|i«       d d d «       Œ£ Œª y # 1 sw Y   Œ°xY w)NzContent-Typez!application/x-www-form-urlencodedu   chinese: å¼ ä¸‰)r   r  )TF)ÚencÚquoteÚasciiz/post_ry   s   data=)r|   r+   rQ   r  )	ÚsubTestrË   ÚurllibrÚ   r4  rO   ru   r   rQ   )r.   r+   Úuni_textr3  r4  Úbin_textrT   s          r/   Útest_post_encodingsz"HTTPServerTest.test_post_encodings�  sÛ   € Ø!Ð#FÐGˆØ*ˆØ"ò 	UˆCØ&ò U�Ø—\‘\ c°�\Ó7ñ 
UØ'Ÿ™¨sÓ3�HÙÜ#)§<¡<×#5Ñ#5°hÓ#?×#FÑ#FÀwÓ#O˜Ø#Ÿz™zØ  3™Ø%Ø 'Ø&¨Ñ1ð	  *ó  �Hð ×$Ñ$¤[°·±Ó%?À&È(ÐASÔT÷
Uð 
UñUñ	U÷
Uð 
Uús   ¤BB5Â5B>N)
r<   r=   r>   rM   r!  r$  r'  r-  r1  r:  rV   r1   r/   r  r  `  s&   „ ò	
ò4ò
2ò
;ò

#ò9óUr1   r  c                   ó�   ‡ — e Zd Zd„ Zˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zˆ xZS )ÚHTTPServerRawTestc                 ó&   — t        dt        fg«      S )Nr  ©r   rã   rL   s    r/   rM   zHTTPServerRawTest.get_app¢  s   € Ü˜W¤kÐ2Ð3Ó4Ð4r1   c                 ó¤   •‡ — t         ‰‰ �  «        t        t        j                  «       «      ‰ _        ‰ j
                  j                  ˆ fd„«       y )Nc                  óZ   •— ‰ j                   j                  d‰ j                  «       f«      S r¸   )rB   rº   r»   rL   s   €r/   r½   z)HTTPServerRawTest.setUp.<locals>.<lambda>©  s$   ø€ �D—K‘K×'Ñ'¨°d×6HÑ6HÓ6JÐ(KÓL€ r1   )ÚsuperÚsetUpr   r¿   rB   rÀ   rÁ   ©r.   rJ   s   `€r/   rB  zHTTPServerRawTest.setUp¥  s3   ù€ Ü‰‰ŒÜœvŸ}™}›Ó/ˆŒØ�‰×ÑÛLõ	
r1   c                 óV   •— | j                   j                  «        t        ‰| �  «        y r*   )rB   rÞ   rA  ÚtearDownrC  s    €r/   rE  zHTTPServerRawTest.tearDown¬  s   ø€ Ø�‰×ÑÔÜ‰ÑÕr1   c                 óÌ   — | j                   j                  «        | j                  j                  t	        j
                  d¬«      | j                  «       | j                  «        y )Nçü©ñÒMbP?©Úseconds)rB   rÞ   rÀ   Úadd_timeoutÚdatetimeÚ	timedeltaÚstopÚwaitrL   s    r/   Útest_empty_requestz$HTTPServerRawTest.test_empty_request°  s>   € Ø�‰×ÑÔØ�‰× Ñ ¤×!3Ñ!3¸EÔ!BÀDÇIÁIÔNØ�	‰	�r1   c                 ó’  ‡ — t        t        dt        j                  ¬«      5  ‰ j                  j                  d«       ‰ j                  j                  ˆ fd„«      \  }}}‰ j                  d|j                  «       ‰ j                  d|j                  «       ‰ j                  d|j                  «       d d d «       y # 1 sw Y   y xY w)Nú.*Malformed HTTP request line©Úleveló   asdf

c                  ó.   •— t        ‰ j                  «      S r*   ©rD   rB   rL   s   €r/   r½   zFHTTPServerRawTest.test_malformed_first_line_response.<locals>.<lambda>¹  ó   ø€ Ô(¨¯©Ó5€ r1   úHTTP/1.1r  úBad Request©r   r   ÚloggingÚINFOrB   rÂ   rÀ   rÁ   ru   rî   r0  Úreason©r.   r,   r+   rT   s   `   r/   Ú"test_malformed_first_line_responsez4HTTPServerRawTest.test_malformed_first_line_responseµ  s›   ø€ Ü”wÐ ?ÄwÇ|Á|ÔTñ 	?Ø�K‰K×Ñ˜oÔ.Ø,0¯L©L×,AÑ,AÛ5ó-Ñ)ˆJ˜ ð ×Ñ˜Z¨×);Ñ);Ô<Ø×Ñ˜S *§/¡/Ô2Ø×Ñ˜]¨J×,=Ñ,=Ô>÷	?÷ 	?ñ 	?úó   ¢BB=Â=Cc                 ó8  — t        t        dt        j                  ¬«      5  | j                  j                  d«       | j                  j                  t        j                  d¬«      | j                  «       | j                  «        d d d «       y # 1 sw Y   y xY w)NrQ  rR  rT  çš™™™™™©?rH  ©r   r   r[  r\  rB   rÂ   rÀ   rJ  rK  rL  rM  rN  rL   s    r/   Útest_malformed_first_line_logz/HTTPServerRawTest.test_malformed_first_line_log¿  sh   € Ü”wÐ ?ÄwÇ|Á|ÔTñ 	Ø�K‰K×Ñ˜oÔ.ð �L‰L×$Ñ$¤X×%7Ñ%7ÀÔ%EÀtÇyÁyÔQØ�I‰IŒK÷	÷ 	ñ 	úó   ¡A&BÂBc                 ó8  — t        t        dt        j                  ¬«      5  | j                  j                  d«       | j                  j                  t        j                  d¬«      | j                  «       | j                  «        d d d «       y # 1 sw Y   y xY w)Nz1.*Malformed HTTP message.*no colon in header linerR  s   GET / HTTP/1.0
asdf

rb  rH  rc  rL   s    r/   Útest_malformed_headersz(HTTPServerRawTest.test_malformed_headersÇ  sm   € ÜÜØ?Ü—,‘,ô
ñ 	ð
 �K‰K×ÑÐ?Ô@Ø�L‰L×$Ñ$¤X×%7Ñ%7ÀÔ%EÀtÇyÁyÔQØ�I‰IŒK÷	÷ 	ñ 	úre  c                 ó’  ‡ — t        t        dt        j                  ¬«      5  ‰ j                  j                  d«       ‰ j                  j                  ˆ fd„«      \  }}}‰ j                  d|j                  «       ‰ j                  d|j                  «       ‰ j                  d|j                  «       d d d «       y # 1 sw Y   y xY w)Nz-.*Malformed HTTP message.*Invalid Host headerrR  s!   GET / HTTP/1.0
Host: foo bar

c                  ó.   •— t        ‰ j                  «      S r*   rV  rL   s   €r/   r½   zLHTTPServerRawTest.test_invalid_host_header_with_whitespace.<locals>.<lambda>×  rW  r1   rX  r  rY  rZ  r^  s   `   r/   Ú(test_invalid_host_header_with_whitespacez:HTTPServerRawTest.test_invalid_host_header_with_whitespaceÑ  s¡   ø€ ÜÜÐDÌGÏLÉLô
ñ 		?ð �K‰K×ÑÐHÔIØ,0¯L©L×,AÑ,AÛ5ó-Ñ)ˆJ˜ ð ×Ñ˜Z¨×);Ñ);Ô<Ø×Ñ˜S *§/¡/Ô2Ø×Ñ˜]¨J×,=Ñ,=Ô>÷		?÷ 		?ñ 		?úr`  c                 óÜ   ‡ — ‰ j                   j                  dj                  dd«      «       ‰ j                  j	                  ˆ fd„«      \  }}}‰ j                  t        |«      ddgi«       y )Ns€   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

rÐ   rÆ   c                  ó.   •— t        ‰ j                  «      S r*   rV  rL   s   €r/   r½   z=HTTPServerRawTest.test_chunked_request_body.<locals>.<lambda>ò  ó   ø€ Ô$ T§[¡[Ó1€ r1   r  r&  ©rB   rÂ   r‹   rÀ   rÁ   ru   r   r^  s   `   r/   Útest_chunked_request_bodyz+HTTPServerRawTest.test_chunked_request_bodyÝ  ók   ø€ ð 	�‰×Ñð÷ �GØ�wóô	
ð" )-¯©×(=Ñ(=Û1ó)
Ñ%ˆ
�G˜Xð 	×Ñœ XÓ.°¸¸Ð0@ÕAr1   c                 óÜ   ‡ — ‰ j                   j                  dj                  dd«      «       ‰ j                  j	                  ˆ fd„«      \  }}}‰ j                  t        |«      ddgi«       y )Ns€   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: Chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

rÐ   rÆ   c                  ó.   •— t        ‰ j                  «      S r*   rV  rL   s   €r/   r½   zBHTTPServerRawTest.test_chunked_request_uppercase.<locals>.<lambda>  rm  r1   r  r&  rn  r^  s   `   r/   Útest_chunked_request_uppercasez0HTTPServerRawTest.test_chunked_request_uppercaseö  rp  r1   c                 óB  ‡ — ‰ j                   j                  dj                  dd«      «       t        t        dt
        j                  ¬«      5  ‰ j                  j                  ˆ fd„«      \  }}}d d d «       ‰ j                  dj                  «       y # 1 sw Y   Œ&xY w)Nsb   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked

1_a
1234567890abcdef1234567890
0

rÐ   rÆ   z.*invalid chunk sizerR  c                  ó.   •— t        ‰ j                  «      S r*   rV  rL   s   €r/   r½   zJHTTPServerRawTest.test_chunked_request_body_invalid_size.<locals>.<lambda>"  rW  r1   r  )rB   rÂ   r‹   r   r   r[  r\  rÀ   rÁ   ru   r0  r^  s   `   r/   Ú&test_chunked_request_body_invalid_sizez8HTTPServerRawTest.test_chunked_request_body_invalid_size  s‰   ø€ ð 	�‰×Ñð	÷ �GØ�wóô	
ô ”wÐ 6¼g¿l¹lÔKñ 	Ø,0¯L©L×,AÑ,AÛ5ó-Ñ)ˆJ˜ ÷	ð 	×Ñ˜˜jŸo™oÕ.÷		ð 	ús   Á#BÂBc                 ó"  ‡ — ‰ j                   j                  d«       t        t        dt        j
                  ¬«      5  ‰ j                  j                  ˆ fd„«      \  }}}d d d «       ‰ j                  dj                  «       y # 1 sw Y   Œ&xY w)Nsc   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked
Transfer-encoding: chunked

2
ok
0

z/.*Unsupported Transfer-Encoding chunked,chunkedrR  c                  ó.   •— t        ‰ j                  «      S r*   rV  rL   s   €r/   r½   zNHTTPServerRawTest.test_chunked_request_body_duplicate_header.<locals>.<lambda><  rW  r1   r  ©
rB   rÂ   r   r   r[  r\  rÀ   rÁ   ru   r0  r^  s   `   r/   Ú*test_chunked_request_body_duplicate_headerz<HTTPServerRawTest.test_chunked_request_body_duplicate_header&  s~   ø€ ð 	�‰×Ñð
ô	
ô ÜØ=Ü—,‘,ô
ñ 	ð
 -1¯L©L×,AÑ,AÛ5ó-Ñ)ˆJ˜ ÷	ð 	×Ñ˜˜jŸo™oÕ.÷	ð 	úó   ½#BÂBc                 ó"  ‡ — ‰ j                   j                  d«       t        t        dt        j
                  ¬«      5  ‰ j                  j                  ˆ fd„«      \  }}}d d d «       ‰ j                  dj                  «       y # 1 sw Y   Œ&xY w)NsN   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: gzip, chunked

2
ok
0

z-.*Unsupported Transfer-Encoding gzip, chunkedrR  c                  ó.   •— t        ‰ j                  «      S r*   rV  rL   s   €r/   r½   z[HTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encoding.<locals>.<lambda>R  rW  r1   r  ry  r^  s   `   r/   Ú7test_chunked_request_body_unsupported_transfer_encodingzIHTTPServerRawTest.test_chunked_request_body_unsupported_transfer_encoding@  s{   ø€ à�‰×Ñð	ô	
ô ÜÐDÌGÏLÉLô
ñ 	ð -1¯L©L×,AÑ,AÛ5ó-Ñ)ˆJ˜ ÷	ð 	×Ñ˜˜jŸo™oÕ.÷	ð 	úr{  c                 ó"  ‡ — ‰ j                   j                  d«       t        t        dt        j
                  ¬«      5  ‰ j                  j                  ˆ fd„«      \  }}}d d d «       ‰ j                  dj                  «       y # 1 sw Y   Œ&xY w)NsZ   POST /echo HTTP/1.1
Host: 127.0.0.1
Transfer-Encoding: chunked
Content-Length: 2

2
ok
0

z8.*Message with both Transfer-Encoding and Content-LengthrR  c                  ó.   •— t        ‰ j                  «      S r*   rV  rL   s   €r/   r½   zbHTTPServerRawTest.test_chunked_request_body_transfer_encoding_and_content_length.<locals>.<lambda>k  rW  r1   r  ry  r^  s   `   r/   Ú>test_chunked_request_body_transfer_encoding_and_content_lengthzPHTTPServerRawTest.test_chunked_request_body_transfer_encoding_and_content_lengthV  s|   ø€ à�‰×Ñð
ô	
ô ÜØFÜ—,‘,ô
ñ 	ð
 -1¯L©L×,AÑ,AÛ5ó-Ñ)ˆJ˜ ÷	ð 	×Ñ˜˜jŸo™oÕ.÷	ð 	úr{  c              #   óD  K  — g d¢}|D ]î  \  }}| j                  |¬«      5  t        t        t        j                  «       «      «      5 }t	        t
        dt        j                  ¬«      5  |j                  d| j                  «       f«      –— |j                  t        t        j                  d|› d�«      j                  dd	«      «      «       |j                  «       –— d d d «       d d d «       d d d «       Œð y # 1 sw Y   ŒxY w# 1 sw Y   Œ xY w# 1 sw Y   �ŒxY w­w)
N))Ú
alphabeticr  )úleading plusú+10)zinternal underscoreÚ1_0)r
  z(.*Only integer Content-Length is allowedrR  r¹   zˆ                            POST /echo HTTP/1.1
                            Host: 127.0.0.1
                            Content-Length: zs
                            Connection: close

                            1234567890
                            ú
z
)r6  r!   r   r¿   r   r   r[  r\  rº   r»   rÂ   r   ÚtextwrapÚdedentr‹   Úread_until_close)r.   Ú
test_casesr
  r   rB   s        r/   Útest_invalid_content_lengthz-HTTPServerRawTest.test_invalid_content_lengtho  s  è ø€ ò

ˆ
ð
 &ò 	4‰KˆD�%Ø—‘ 4�Ó(ñ 4¬'´(¼6¿=¹=»?Ó2KÓ*Lð 4ÐPVÜÜØ>Ü!Ÿ,™,ôñ 4ð
 !Ÿ.™.¨+°t×7IÑ7IÓ7KÐ)LÓMÒMØ—L‘LÜÜ$ŸO™Oð%-ð .3¨Gð 4ð! ó	÷ &™g d¨FÓ3óôð !×1Ñ1Ó3Ò3÷)4÷4÷ 4ð 4ñ	4÷4ð 4ú÷4ð 4ú÷ 4ñ 4üsM   ‚D ¡'DÁ!DÁ)A7C;	Ã DÃ(DÃ0D Ã;DÄ DÄDÄDÄD	ÄD c              #   óˆ  K  — ddg}|D �]  \  }}}|�!t        t        |t        j                  ¬«      }nt        d„ «       } |«       }| j                  |¬«      5  t        t        t        j                  «       «      «      5 }|5  |j                  d| j                  «       f«      –— |j                  t        |› d�«      «       |j                  d«      –—}| j                  |j                  d	|z  «      d
|› d|›�«       d d d «       d d d «       d d d «       �Œ y # 1 sw Y   ŒxY w# 1 sw Y   Œ!xY w# 1 sw Y   �Œ6xY w­w)N)ÚFOOi•  N)zFOO,BARr  rQ  rR  c               3   ó   K  — d –— y ­wr*   rV   rV   r1   r/   Únoop_contextz<HTTPServerRawTest.test_invalid_methods.<locals>.noop_contextŸ  s	   è ø€ äùs   ‚)r|   r¹   z# /echo HTTP/1.1
Host:127.0.0.1

rÓ   s   HTTP/1.1 %dzexpected status code z in )r   r   r[  r\  r"   r6  r!   r   r¿   rº   r»   rÂ   r   r×   rØ   rÙ   )	r.   r‹  r|   r0  Úlog_msgr�   r�  rB   Úresps	            r/   Útest_invalid_methodsz&HTTPServerRawTest.test_invalid_methods‘  sD  è ø€ ð Ø=ð
ˆ
ð &0ó 	Ñ!ˆF�D˜'ØÐ"Ü&¤w°¼w¿|¹|ÔL‘
ô  ñó  ðñ *›^�
à—‘ F�Ó+ñäœ¤§¡£Ó1Ó2ðà6<Øñð
 —n‘n k°4×3EÑ3EÓ3GÐ%HÓIÒIØ—‘œT V HÐ,UÐ"VÓWÔXØ#×.Ñ.¨{Ó;Ñ;�Ø—‘Ø—O‘O N°TÑ$9Ó:Ø+¨D¨6°°d°XÐ>ô÷÷ ÷ ñ ñ	÷ð ú÷ ð ú÷ ñ üsO   ‚AEÁ'D5Â D)ÂA>D	ÄD)Ä	D5ÄEÄD&Ä"D)Ä)D2Ä.D5Ä5D?	Ä:E)r<   r=   r>   rM   rB  rE  rO  r_  rd  rg  rj  ro  rs  rv  rz  r~  r�  r   rŒ  r“  Ú__classcell__©rJ   s   @r/   r<  r<  ¡  st   ø„ ò5ô
ôòò
?òòò
?òBò2Bò2/ò./ò4/ò,/ð2 ñ4ó ð4ðB ñó ôr1   r<  c                   ó:   — e Zd Z G d„ de«      Zd„ Zd„ Zd„ Zd„ Zy)ÚXHeaderTestc                   ó   — e Zd Zd„ Zy)úXHeaderTest.Handlerc                 óØ   — | j                  d| j                  j                  «       | j                  t	        | j                  j
                  | j                  j                  ¬«      «       y )Núrequest-version)rï   Úremote_protocol)Ú
set_headerr_   rî   rÂ   rk   rï   r[   rL   s    r/   ra   zXHeaderTest.Handler.get´  sI   € Ø�O‰OÐ-¨t¯|©|×/CÑ/CÔDØ�J‰JÜØ"Ÿl™l×4Ñ4Ø$(§L¡L×$9Ñ$9ôõr1   N©r<   r=   r>   ra   rV   r1   r/   rK   r™  ³  s   „ ó	r1   rK   c                 ó   — t        ddg¬«      S )NTz5.5.5.5)ÚxheadersÚtrusted_downstream©rk   rL   s    r/   Úget_httpserver_optionsz"XHeaderTest.get_httpserver_options½  s   € Ü˜T°y°kÔBÐBr1   c                 ó˜  — | j                  | j                  d«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       dd	i}| j                  | j                  d|¬«      d   d	«       dd
i}| j                  | j                  d|¬«      d   d	«       ddi}| j                  | j                  d|¬«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       y )NrI   rï   r¹   z	X-Real-IPú4.4.4.4r+  úX-Forwarded-Forz127.0.0.1, 4.4.4.4z2620:0:1cfe:face:b00c::3z::1, 2620:0:1cfe:face:b00c::3z4.4.4.4<script>z4.4.4.4, 5.5.5.5<script>zwww.google.com©ru   rU   )r.   Ú
valid_ipv4Úvalid_ipv4_listÚ
valid_ipv6Úvalid_ipv6_listÚinvalid_charsÚinvalid_chars_listÚinvalid_hosts           r/   Útest_ip_headerszXHeaderTest.test_ip_headersÀ  s  € Ø×Ñ˜Ÿ™¨Ó-¨kÑ:¸KÔHà! 9Ð-ˆ
Ø×ÑØ�O‰O˜C¨ˆOÓ4°[ÑAÀ9ô	
ð -Ð.BÐCˆØ×ÑØ�O‰O˜C¨ˆOÓ9¸+ÑFÈ	ô	
ð "Ð#=Ð>ˆ
Ø×ÑØ�O‰O˜C¨ˆOÓ4°[ÑAØ&ô	
ð
 -Ð.MÐNˆØ×ÑØ�O‰O˜C¨ˆOÓ9¸+ÑFØ&ô	
ð
 %Ð&7Ð8ˆØ×ÑØ�O‰O˜C¨ˆOÓ7¸ÑDÀkô	
ð 0Ð1KÐLÐØ×ÑØ�O‰O˜CÐ);ˆOÓ<¸[ÑIÈ;ô	
ð $Ð%5Ð6ˆØ×ÑØ�O‰O˜C¨ˆOÓ6°{ÑCÀ[õ	
r1   c                 óä   — ddi}| j                  d|¬«      }|j                  d   j                  d«      r| j                  d«       t	        |j
                  «      }| j                  |d   d	«       y )
Nr¦  z127.0.0.1, 4.4.4.4, 5.5.5.5rI   r+  r›  zHTTP/2úrequires HTTP/1.xrï   r¥  )rO   r+   rÙ   ÚskipTestr   rQ   ru   )r.   r©  r’  Úresults       r/   Útest_trusted_downstreamz#XHeaderTest.test_trusted_downstreamè  si   € Ø,Ð.KÐLˆØ�z‰z˜# ˆzÓ7ˆØ�<‰<Ð)Ñ*×5Ñ5°hÔ?ð �M‰MÐ-Ô.Ü˜TŸY™YÓ'ˆØ×Ñ˜ Ñ,¨iÕ8r1   c                 óð  — | j                  | j                  d«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       dd	i}| j                  | j                  d|¬«      d   d«       dd
i}| j                  | j                  d|¬«      d   d«       y )NrI   rœ  re   úX-Schemeri   r+  zX-Forwarded-Protozhttps , httpz
http,httpsÚunknownr§  )r.   Úhttps_schemeÚhttps_forwardedÚhttps_multi_forwardedÚhttp_multi_forwardedÚbad_forwardeds         r/   Útest_scheme_headerszXHeaderTest.test_scheme_headersò  s  € Ø×Ñ˜Ÿ™¨Ó-Ð.?Ñ@À&ÔIà" GÐ,ˆØ×ÑØ�O‰O˜C¨ˆOÓ6Ð7HÑIÈ7ô	
ð /°Ð8ˆØ×ÑØ�O‰O˜C¨ˆOÓ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Ð8IÑJÈFõ	
r1   N)	r<   r=   r>   r   rK   r£  r¯  r´  r½  rV   r1   r/   r—  r—  ²  s$   „ ô�.ô òCò&
òP9ó
r1   r—  c                   ó*   ‡ — e Zd Zd„ Zˆ fd„Zd„ Zˆ xZS )ÚSSLXHeaderTestc                 ó:   — t        dt        j                  fg«      S rH   )r   r—  rK   rL   s    r/   rM   zSSLXHeaderTest.get_app  s   € Ü˜S¤+×"5Ñ"5Ð6Ð7Ó8Ð8r1   c                 ó.   •— t         ‰| �  «       }d|d<   |S )NTr   )rA  r£  )r.   ÚoutputrJ   s     €r/   r£  z%SSLXHeaderTest.get_httpserver_options  s   ø€ Ü‘Ñ/Ó1ˆØ!ˆˆzÑØˆr1   c                 óô   — | j                  | j                  d«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       ddi}| j                  | j                  d|¬«      d   d«       y )NrI   rœ  ri   r¶  re   r+  r·  r§  )r.   Úhttp_schemeÚ
bad_schemes      r/   Útest_request_without_xprotocolz-SSLXHeaderTest.test_request_without_xprotocol  sƒ   € Ø×Ñ˜Ÿ™¨Ó-Ð.?Ñ@À'ÔJà! 6Ð*ˆØ×ÑØ�O‰O˜C¨ˆOÓ5Ð6GÑHÈ&ô	
ð ! )Ð,ˆ
Ø×ÑØ�O‰O˜C¨ˆOÓ4Ð5FÑGÈõ	
r1   )r<   r=   r>   rM   r£  rÆ  r”  r•  s   @r/   r¿  r¿    s   ø„ ò9ôö

r1   r¿  c                   ó.   — e Zd Z G d„ de«      Zd„ Zd„ Zy)ÚManualProtocolTestc                   ó   — e Zd Zd„ Zy)úManualProtocolTest.Handlerc                 ób   — | j                  t        | j                  j                  ¬«      «       y )Nrj   )rÂ   rk   r_   r[   rL   s    r/   ra   zManualProtocolTest.Handler.get*  s   € Ø�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                 óL   — | j                  | j                  d«      d   d«       y )NrI   r[   ri   r§  rL   s    r/   Útest_manual_protocolz'ManualProtocolTest.test_manual_protocol0  s    € Ø×Ñ˜Ÿ™¨Ó-¨jÑ9¸7ÕCr1   N)r<   r=   r>   r   rK   r£  rÎ  rV   r1   r/   rÈ  rÈ  (  s   „ ô=�.ô =ò&óDr1   rÈ  c                   óP   ‡ — e Zd ZdZdZˆ fd„Zˆ fd„Zed„ «       Zed„ «       Z	ˆ xZ
S )ÚUnixSocketTesta…  HTTPServers can listen on Unix sockets too.

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

    Unfortunately, there's no way to specify a unix socket in a url for
    an HTTP client, so we have to test this by hand.
    r#  c                 óÖ   •— t         ‰| �  «        t        dt        fg«      }t	        |«      | _        | j
                  j                  t        j                  | j                  «      «       y )Nr³   )
rA  rB  r   rX   r   ÚserverÚ
add_socketr   Úbind_unix_socketÚaddress)r.   ÚapprJ   s     €r/   rB  zUnixSocketTest.setUpB  sK   ø€ Ü‰‰ŒÜ˜HÔ&>Ð?Ð@ÓAˆÜ  “oˆŒØ�‰×Ñœw×7Ñ7¸¿¹ÓEÕFr1   c                 ó´   •— | j                   j                  | j                  j                  «       | j                  j	                  «        t
        ‰| �  «        y r*   )rÀ   rÁ   rÒ  Úclose_all_connectionsrM  rA  rE  rC  s    €r/   rE  zUnixSocketTest.tearDownH  s:   ø€ Ø�‰×Ñ˜dŸk™k×?Ñ?Ô@Ø�‰×ÑÔÜ‰ÑÕr1   c              #   ó  K  — t        t        t        j                  t        j                  «      «      «      5 }|j	                  | j
                  «       |j                  d«       |j                  d«      –—}| j                  |d«       |j                  d«      –—}t        j                  |j                  d«      «      }|j                  t        |d   «      «      –—}| j                  |d«       d d d «       y # 1 sw Y   y xY w­w)Ns   GET /hello HTTP/1.0

rÆ   s   HTTP/1.1 200 OK
rÓ   rÕ   rÖ   rs   )r!   r   r¿   ÚAF_UNIXrº   rÕ  rÂ   r×   ru   r   rÚ   rÛ   rÜ   rÝ   )r.   rB   rT   rà   r+   rQ   s         r/   Útest_unix_socketzUnixSocketTest.test_unix_socketM  sÓ   è ø€ ä”XœfŸm™m¬F¯N©NÓ;Ó<Ó=ð 	3ÀØ�N‰N˜4Ÿ<™<Ô(Ø�L‰LÐ7Ô8Ø#×.Ñ.¨wÓ7Ñ7ˆHØ×Ñ˜XÐ'=Ô>Ø &× 1Ñ 1°+Ó >Ñ>ˆKÜ!×'Ñ'¨×(:Ñ(:¸8Ó(DÓEˆGØ×*Ñ*¬3¨wÐ7GÑ/HÓ+IÓJÑJˆDØ×Ñ˜T >Ô2÷	3÷ 	3ñ 	3üs   ‚6D¸B:C;Ã2	DÃ;DÄ Dc              #   óª  K  — t        t        dt        j                  ¬«      5  t	        t        t        j                  t        j                  «      «      «      5 }|j                  | j                  «       |j                  d«       |j                  «       –—}d d d «       d d d «       | j                  d«       y # 1 sw Y   Œ$xY w# 1 sw Y   Œ(xY w­w)NzMalformed HTTP message fromrR  s   garbage

ó   HTTP/1.1 400 Bad Request

)r   r   r[  r\  r!   r   r¿   rÚ  rº   rÕ  rÂ   rŠ  ru   ©r.   rB   rT   s      r/   Útest_unix_socket_bad_requestz+UnixSocketTest.test_unix_socket_bad_requestY  sŸ   è ø€ ô ”wÐ =ÄWÇ\Á\ÔRñ 	;Üœ¤&§-¡-´·±Ó"?Ó@ÓAð ;ÀVØ—‘˜tŸ|™|Ô,Ø—‘Ð/Ô0Ø!'×!8Ñ!8Ó!:Ñ:�÷;÷	;ð
 	×Ñ˜Ð#FÕG÷	;ð ;ú÷	;ð 	;üs4   ‚!C£6CÁ?B;ÂCÂ CÂ;C	Ã CÃCÃC)r<   r=   r>   Ú__doc__rÕ  rB  rE  r   rÛ  rß  r”  r•  s   @r/   rÐ  rÐ  4  sD   ø„ ñð €GôGôð
 ñ	3ó ð	3ð ñHó ôHr1   rÐ  rÚ  Úcygwinz+unix sockets not supported on this platformc                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚUnixSocketTestFilec                 ó²   •— t        j                  «       | _        t        j                  j                  | j                  d«      | _        t        ‰| �!  «        y )Nz	test.sock)	ÚtempfileÚmkdtempÚtmpdirr�   rž   rA   rÕ  rA  rB  rC  s    €r/   rB  zUnixSocketTestFile.setUpj  s6   ø€ Ü×&Ñ&Ó(ˆŒÜ—w‘w—|‘| D§K¡K°Ó=ˆŒÜ‰‰�r1   c                 ó`   •— t         ‰| �  «        t        j                  | j                  «       y r*   )rA  rE  ÚshutilÚrmtreerç  rC  s    €r/   rE  zUnixSocketTestFile.tearDowno  s   ø€ Ü‰ÑÔÜ�‰�d—k‘kÕ"r1   )r<   r=   r>   rB  rE  r”  r•  s   @r/   rã  rã  e  s   ø„ ô
÷
#ð #r1   rã  Úlinuxz>abstract namespace unix sockets not supported on this platformc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚUnixSocketTestAbstractc                 ón   •— dt        j                  «       j                  z   | _        t        ‰| �  «        y )Nú )ÚuuidÚuuid4ÚhexrÕ  rA  rB  rC  s    €r/   rB  zUnixSocketTestAbstract.setUpy  s$   ø€ ØœdŸj™j›l×.Ñ.Ñ.ˆŒÜ‰‰�r1   )r<   r=   r>   rB  r”  r•  s   @r/   rí  rí  t  s   ø„ ÷
ð r1   rí  c                   óT  ‡ — e Zd ZdZd„ Zˆ fd„Zˆ fd„Zej                  d„ «       Z	ej                  d„ «       Z
ej                  d„ «       Zd„ Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zˆ xZS )Ú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y)ú+KeepAliveTest.get_app.<locals>.HelloHandlerc                 ó&   — | j                  d«       y ©Nr^   ©r;   rL   s    r/   ra   z/KeepAliveTest.get_app.<locals>.HelloHandler.get‡  ó   € Ø—‘˜MÕ*r1   c                 ó&   — | j                  d«       y rù  rú  rL   s    r/   rd   z0KeepAliveTest.get_app.<locals>.HelloHandler.postŠ  rû  r1   Nré   rV   r1   r/   ÚHelloHandlerr÷  †  s   „ ò+ó+r1   rý  c                   ó   — e Zd Zd„ Zy)ú+KeepAliveTest.get_app.<locals>.LargeHandlerc                 ód   — | j                  dj                  d„ t        d«      D «       «      «       y )Nr#  c              3   ó>   K  — | ]  }t        |d z  «      dz  –— Œ y­w)é   é   N)Úchr)Ú.0Úis     r/   ú	<genexpr>zBKeepAliveTest.get_app.<locals>.LargeHandler.get.<locals>.<genexpr>‘  s   è ø€ Ò"K¸1¤3 q¨3¡w£<°$Õ#6Ñ"Kùs   ‚i   )rÂ   rA   ÚrangerL   s    r/   ra   z/KeepAliveTest.get_app.<locals>.LargeHandler.getŽ  s#   € ð —
‘
˜2Ÿ7™7Ñ"KÄÀcÃ
Ô"KÓKÕLr1   Nrž  rV   r1   r/   ÚLargeHandlerrÿ  �  s   „ óMr1   r	  c                   ó0   — e Zd Zej                  d„ «       Zy)ú=KeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandlerc              3   óR   K  — | j                  d«       | j                  «       –— y ­wrù  )rÂ   ÚflushrL   s    r/   ÚheadzBKeepAliveTest.get_app.<locals>.TransferEncodingChunkedHandler.head”  s   è ø€ à—
‘
˜=Ô)Ø—j‘j“lÓ"ùs   ‚%'N)r<   r=   r>   r   Ú	coroutiner  rV   r1   r/   ÚTransferEncodingChunkedHandlerr  “  s   „ Ø�]‰]ñ#ó ñ#r1   r  c                   ó<   — e Zd Zd„ Zej
                  d„ «       Zd„ Zy)ú3KeepAliveTest.get_app.<locals>.FinishOnCloseHandlerc                 ó   — || _         y r*   ©Úcleanup_event)r.   r  s     r/   r\   z>KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.initializeš  s
   € Ø%2�Õ"r1   c              3   ód   K  — | j                  «        | j                  j                  «       –— y ­wr*   )r  r  rN  rL   s    r/   ra   z7KeepAliveTest.get_app.<locals>.FinishOnCloseHandler.get�  s$   è ø€ à—
‘
”Ø×(Ñ(×-Ñ-Ó/Ó/ùs   ‚.0c                 ó&   — | j                  d«       y )NÚclosedrú  rL   s    r/   Úon_connection_closezGKeepAliveTest.get_app.<locals>.FinishOnCloseHandler.on_connection_close¢  s   € ð —‘˜HÕ%r1   N)r<   r=   r>   r\   r   r  ra   r  rV   r1   r/   ÚFinishOnCloseHandlerr  ™  s$   „ ò3ð �]‰]ñ0ó ð0ó&r1   r  rI   z/largez/chunkedz/finish_on_closer  )r   r   r  r   rk   )r.   rý  r	  r  r  s        r/   rM   zKeepAliveTest.get_app…  s„   € ô	+œ>ô 	+ô	Mœ>ô 	Mô	#¬^ô 	#ô	&¤>ô 	&ô #›WˆÔÜà�lÐ#Ø˜<Ð(ØÐ;Ð<à&Ø(Ü t×'9Ñ'9Ô:ðð		ó
ð 	
r1   c                 ó0   •— t         ‰| �  «        d| _        y )Ns   HTTP/1.1)rA  rB  Úhttp_versionrC  s    €r/   rB  zKeepAliveTest.setUp¶  s   ø€ Ü‰‰ŒØ'ˆÕr1   c                 ó  •— | j                   j                  t        j                  d¬«      | j                  «       | j                  «        t        | d«      r| j                  j                  «        t        ‰| �)  «        y )NrG  rH  rB   )rÀ   rJ  rK  rL  rM  rN  ÚhasattrrB   rÞ   rA  rE  rC  s    €r/   rE  zKeepAliveTest.tearDownº  sV   ø€ ð 	�‰× Ñ ¤×!3Ñ!3¸EÔ!BÀDÇIÁIÔNØ�	‰	Œä�4˜Ô"Ø�K‰K×ÑÔÜ‰ÑÕr1   c              #   óª   K  — t        t        j                  «       «      | _        | j                  j                  d| j	                  «       f«      –— y ­wr¸   )r   r¿   rB   rº   r»   rL   s    r/   rº   zKeepAliveTest.connectÅ  s;   è ø€ äœvŸ}™}›Ó/ˆŒØ�k‰k×!Ñ! ;°×0BÑ0BÓ0DÐ"EÓFÓFùó   ‚AAc              #   ó2  K  — | j                   j                  d«      –—}| j                  |j                  d«      |«       | j                   j                  d«      –—}t	        j
                  |j                  d«      «      }t        j                  |«      ‚­w)NrÆ   rÔ   rÓ   rÕ   )	rB   r×   rØ   rÙ   r   rÚ   rÛ   r   ÚReturn)r.   rß   Úheader_bytesr+   s       r/   Úread_headerszKeepAliveTest.read_headersÊ  sw   è ø€ àŸ;™;×1Ñ1°'Ó:Ñ:ˆ
Ø�‰˜
×-Ñ-¨oÓ>À
ÔKØ!Ÿ[™[×3Ñ3°KÓ@Ñ@ˆÜ×#Ñ# L×$7Ñ$7¸Ó$AÓBˆÜ�j‰j˜Ó!Ð!ùs   ‚BBc              #   óÄ   K  — | j                  «       –—| _        | j                  j                  t	        | j                  d   «      «      –—}| j                  d|«       y ­w)NrÖ   rs   )r$  r+   rB   rÜ   rÝ   ru   )r.   rQ   s     r/   r@   zKeepAliveTest.read_responseÒ  sO   è ø€ à!×.Ñ.Ó0Ñ0ˆŒØ—[‘[×+Ñ+¬C°·±Ð=MÑ0NÓ,OÓPÑPˆØ×Ñ˜¨Õ.ùs   ‚AA c                 ó<   — | j                   j                  «        | ` y r*   )rB   rÞ   rL   s    r/   rÞ   zKeepAliveTest.closeØ  s   € Ø�‰×ÑÔØ‰Kr1   c              #   ó  K  — | j                  «       –— | j                  j                  d«       | j                  «       –— | j                  j                  d«       | j                  «       –— | j	                  «        y ­w)Ns"   GET / HTTP/1.1
Host:127.0.0.1

©rº   rB   rÂ   r@   rÞ   rL   s    r/   Útest_two_requestszKeepAliveTest.test_two_requestsÜ  s_   è ø€ à�l‰l‹nÒØ�‰×ÑÐEÔFØ× Ñ Ó"Ò"Ø�‰×ÑÐEÔFØ× Ñ Ó"Ò"Ø�
‰
�ùó   ‚A>B c              #   óD  K  — | j                  «       –— | j                  j                  d«       | j                  «       –— | j                  j	                  «       –—}| j                  | «       | j                  | j                  d   d«       | j                  «        y ­w)Ns5   GET / HTTP/1.1
Host:127.0.0.1
Connection: close

Ú
ConnectionrÞ   )	rº   rB   rÂ   r@   rŠ  rØ   ru   r+   rÞ   ©r.   rÍ   s     r/   Útest_request_closez KeepAliveTest.test_request_closeå  s}   è ø€ à�l‰l‹nÒØ�‰×ÑØLô	
ð × Ñ Ó"Ò"Ø—[‘[×1Ñ1Ó3Ñ3ˆØ�‰˜D˜Ô!Ø×Ñ˜Ÿ™ lÑ3°WÔ=Ø�
‰
�ùs   ‚BB c              #   óJ  K  — d| _         | j                  «       –— | j                  j                  d«       | j	                  «       –— | j                  j                  «       –—}| j                  |«       | j                  d| j                  «       | j                  «        y ­w)Nó   HTTP/1.0s   GET / HTTP/1.0

r,  )
r  rº   rB   rÂ   r@   rŠ  rŽ   ÚassertNotInr+   rÞ   r-  s     r/   Útest_http10zKeepAliveTest.test_http10ò  s|   è ø€ à'ˆÔØ�l‰l‹nÒØ�‰×ÑÐ3Ô4Ø× Ñ Ó"Ò"Ø—[‘[×1Ñ1Ó3Ñ3ˆØ×Ñ˜ÔØ×Ñ˜ t§|¡|Ô4Ø�
‰
�ùs   ‚B!B#c              #   óŽ  K  — d| _         | j                  «       –— | j                  j                  d«       | j	                  «       –— | j                  | j                  d   d«       | j                  j                  d«       | j	                  «       –— | j                  | j                  d   d«       | j                  «        y ­w)Nr0  ó*   GET / HTTP/1.0
Connection: keep-alive

r,  ú
Keep-Alive©r  rº   rB   rÂ   r@   ru   r+   rÞ   rL   s    r/   Útest_http10_keepalivez#KeepAliveTest.test_http10_keepaliveý  s™   è ø€ à'ˆÔØ�l‰l‹nÒØ�‰×ÑÐMÔNØ× Ñ Ó"Ò"Ø×Ñ˜Ÿ™ lÑ3°\ÔBØ�‰×ÑÐMÔNØ× Ñ Ó"Ò"Ø×Ñ˜Ÿ™ lÑ3°\ÔBØ�
‰
�ùó   ‚CCc              #   óŽ  K  — d| _         | j                  «       –— | j                  j                  d«       | j	                  «       –— | j                  | j                  d   d«       | j                  j                  d«       | j	                  «       –— | j                  | j                  d   d«       | j                  «        y ­w)Nr0  s,   GET / HTTP/1.0
Connection: keep-alive


r,  r5  r4  r6  rL   s    r/   Ú test_http10_keepalive_extra_crlfz.KeepAliveTest.test_http10_keepalive_extra_crlf	  s™   è ø€ à'ˆÔØ�l‰l‹nÒØ�‰×ÑÐQÔRØ× Ñ Ó"Ò"Ø×Ñ˜Ÿ™ lÑ3°\ÔBØ�‰×ÑÐMÔNØ× Ñ Ó"Ò"Ø×Ñ˜Ÿ™ lÑ3°\ÔBØ�
‰
�ùr8  c              #   óÎ   K  — | j                  «       –— | j                  j                  d«       | j                  «       –— | j                  «       –— | j	                  «        y ­w©NsD   GET / HTTP/1.1
Host:127.0.0.1

GET / HTTP/1.1
Host:127.0.0.1

r(  rL   s    r/   Útest_pipelined_requestsz%KeepAliveTest.test_pipelined_requests  sP   è ø€ à�l‰l‹nÒØ�‰×ÑØ_ô	
ð × Ñ Ó"Ò"Ø× Ñ Ó"Ò"Ø�
‰
�ùs   ‚A#A%c              #   óª   K  — | j                  «       –— | j                  j                  d«       | j                  «       –— | j	                  «        y ­wr<  r(  rL   s    r/   Útest_pipelined_cancelz#KeepAliveTest.test_pipelined_cancel  sA   è ø€ à�l‰l‹nÒØ�‰×ÑØ_ô	
ð × Ñ Ó"Ò"Ø�
‰
�ùr   c              #   óä   K  — | j                  «       –— | j                  j                  d«       | j                  «       –— | j                  j	                  d«      –— | j                  «        y ­w)Ns'   GET /large HTTP/1.1
Host:127.0.0.1

r  )rº   rB   rÂ   r$  rÜ   rÞ   rL   s    r/   Útest_cancel_during_downloadz)KeepAliveTest.test_cancel_during_download)  sR   è ø€ à�l‰l‹nÒØ�‰×ÑÐJÔKØ×ÑÓ!Ò!Ø�k‰k×$Ñ$ TÓ*Ò*Ø�
‰
�ùs   ‚A.A0c              #   óÞ   K  — | j                  «       –— | j                  j                  d«       | j                  «       –— | j	                  «        | j
                  j                  «        y ­w)Ns1   GET /finish_on_close HTTP/1.1
Host:127.0.0.1

)rº   rB   rÂ   r$  rÞ   r  ÚsetrL   s    r/   Útest_finish_while_closedz&KeepAliveTest.test_finish_while_closed1  sO   è ø€ à�l‰l‹nÒØ�‰×ÑÐTÔUØ×ÑÓ!Ò!Ø�
‰
Œà×Ñ×ÑÕ ùs   ‚A+A-c              #   óŽ  K  — d| _         | j                  «       –— | j                  j                  d«       | j	                  «       –— | j                  | j                  d   d«       | j                  j                  d«       | j	                  «       –— | j                  | j                  d   d«       | j                  «        y ­w)Nr0  sL   POST / HTTP/1.0
Connection: keep-alive
Transfer-Encoding: chunked

0

r,  r5  r4  r6  rL   s    r/   Útest_keepalive_chunkedz$KeepAliveTest.test_keepalive_chunked:  sŸ   è ø€ à'ˆÔØ�l‰l‹nÒØ�‰×Ñðô	
ð × Ñ Ó"Ò"Ø×Ñ˜Ÿ™ lÑ3°\ÔBØ�‰×ÑÐMÔNØ× Ñ Ó"Ò"Ø×Ñ˜Ÿ™ lÑ3°\ÔBØ�
‰
�ùr8  c              #   ó  K  — | j                  «       –— | j                  j                  d«       | j                  «       –— | j                  j                  d«       | j                  «       –— | j	                  «        y ­w)Ns*   HEAD /chunked HTTP/1.1
Host:127.0.0.1

)rº   rB   rÂ   r$  rÞ   rL   s    r/   Ú#test_keepalive_chunked_head_no_bodyz1KeepAliveTest.test_keepalive_chunked_head_no_bodyM  s_   è ø€ à�l‰l‹nÒØ�‰×ÑÐMÔNØ×ÑÓ!Ò!à�‰×ÑÐMÔNØ×ÑÓ!Ò!Ø�
‰
�ùr*  )r<   r=   r>   rà  rM   rB  rE  r   r  rº   r$  r@   rÞ   r   r)  r.  r2  r7  r:  r=  r?  rA  rD  rF  rH  r”  r•  s   @r/   rô  rô  ~  sC  ø„ ñò/
ôb(ôð 	‡]�]ñGó ðGð 	‡]�]ñ"ó ð"ð 	‡]�]ñ/ó ð/ò
ð ñó ðð ñ	ó ð	ð ñó ðð ñ	ó ð	ð ñ	ó ð	ð ñó ðð ñó ðð ñó ðð ñ!ó ð!ð ñó ðð$ ñó ôr1   rô  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚGzipBaseTestc                 ó&   — t        dt        fg«      S rH   r>  rL   s    r/   rM   zGzipBaseTest.get_appY  s   € Ü˜S¤+Ð.Ð/Ó0Ð0r1   c                 óæ   — t        «       }t        j                  d|¬«      }|j                  t	        |«      «       |j                  «        |j                  «       }| j                  dd|ddi¬«      S )NÚw©ÚmodeÚfileobjrI   ry   úContent-EncodingÚgzipr,  )r#   rR  ÚGzipFilerÂ   r   rÞ   ÚgetvaluerO   )r.   rQ   ÚbytesioÚ	gzip_fileÚcompressed_bodys        r/   Ú	post_gzipzGzipBaseTest.post_gzip\  sh   € Ü“)ˆÜ—M‘M s°GÔ<ˆ	Ø�‰œ˜T›
Ô#Ø�‰ÔØ!×*Ñ*Ó,ˆØ�z‰zØØØ Ø'¨Ð0ð	 ó 
ð 	
r1   c                 ó|   — | j                  ddd¬«      }| j                  t        |j                  «      ddgi«       y )NrI   ry   r*  r{   r  r&  )rO   ru   r   rQ   rv   s     r/   Útest_uncompressedzGzipBaseTest.test_uncompressedi  s6   € Ø—:‘:˜c¨&°y�:ÓAˆØ×Ñœ X§]¡]Ó3°e¸e¸WÐ5EÕFr1   N)r<   r=   r>   rM   rX  rZ  rV   r1   r/   rJ  rJ  X  s   „ ò1ò
óGr1   rJ  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚGzipTestc                 ó   — t        d¬«      S )NT)Údecompress_requestr¢  rL   s    r/   r£  zGzipTest.get_httpserver_optionso  s   € Ü tÔ,Ð,r1   c                 óv   — | j                  d«      }| j                  t        |j                  «      ddgi«       y )Nr*  r  r&  )rX  ru   r   rQ   rv   s     r/   Ú	test_gzipzGzipTest.test_gzipr  s0   € Ø—>‘> )Ó,ˆØ×Ñœ X§]¡]Ó3°e¸e¸WÐ5EÕFr1   c                 ó8  — t        «       }t        j                  d|¬«      }|j                  t	        d«      «       |j                  «        |j                  «       }| j                  dd|ddi¬«      }| j                  t        |j                  «      d	d
gi«       y )NrM  rN  r*  rI   ry   rQ  ÚGZIPr,  r  r&  )r#   rR  rS  rÂ   r   rÞ   rT  rO   ru   r   rQ   )r.   rU  rV  rW  rT   s        r/   Útest_gzip_case_insensitivez#GzipTest.test_gzip_case_insensitivev  s‡   € ä“)ˆÜ—M‘M s°GÔ<ˆ	Ø�‰œ˜Y›Ô(Ø�‰ÔØ!×*Ñ*Ó,ˆØ—:‘:ØØØ Ø'¨Ð0ð	 ó 
ˆð 	×Ñœ X§]¡]Ó3°e¸e¸WÐ5EÕFr1   N)r<   r=   r>   r£  r`  rc  rV   r1   r/   r\  r\  n  s   „ ò-òGóGr1   r\  c                   ó   — e Zd Zd„ Zy)ÚGzipUnsupportedTestc                 ó¨   — t        t        d«      5  | j                  d«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)Nz.*Unsupported Content-Encodingr*  r  )r   r   rX  ru   r0  rv   s     r/   Útest_gzip_unsupportedz)GzipUnsupportedTest.test_gzip_unsupported‡  sF   € ô ”wÐ @ÓAñ 	1Ø—~‘~ iÓ0ˆH÷	1à×Ñ˜Ÿ™¨Õ,÷	1ð 	1ús   ‘AÁAN)r<   r=   r>   rg  rV   r1   r/   re  re  †  s   „ ó-r1   re  c                   ó`   — e Zd ZdZdZd„ Zd„ Z G d„ de«      Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚStreamingChunkSizeTests2   01234567890123456789012345678901234567890123456789é   c                 ó   — t        «       S r*   r   rL   s    r/   Úget_http_clientz&StreamingChunkSizeTest.get_http_client•  ó   € ô %Ó&Ð&r1   c                 ó0   — t        | j                  d¬«      S )NT)Ú
chunk_sizer^  )rk   Ú
CHUNK_SIZErL   s    r/   r£  z-StreamingChunkSizeTest.get_httpserver_optionsš  s   € Ü˜tŸ™À4ÔHÐHr1   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ú&StreamingChunkSizeTest.MessageDelegatec                 ó   — || _         y r*   ©Ú
connection©r.   ru  s     r/   Ú__init__z/StreamingChunkSizeTest.MessageDelegate.__init__ž  ó	   € Ø(ˆD�Or1   c                 ó   — g | _         y r*   )Úchunk_lengthsr-   s      r/   r0   z7StreamingChunkSizeTest.MessageDelegate.headers_received¡  s
   € Ø!#ˆDÕr1   c                 óL   — | j                   j                  t        |«      «       y r*   )rz  r3   rc   )r.   r4   s     r/   r6   z4StreamingChunkSizeTest.MessageDelegate.data_received¤  s   € Ø×Ñ×%Ñ%¤c¨%£jÕ1r1   c                 ó2  — t        t        | j                  «      «      }| j                  j	                  t        ddd«      t        dt        t        |«      «      i«      «       | j                  j                  |«       | j                  j                  «        y )NrX  r/  ÚOKrÖ   )r   r   rz  ru  Úwrite_headersr   r   rù   rc   rÂ   r;   )r.   Úresponse_bodys     r/   r;   z-StreamingChunkSizeTest.MessageDelegate.finish§  sq   € Ü ¤¨T×-?Ñ-?Ó!@ÓAˆMØ�O‰O×)Ñ)Ü! *¨c°4Ó8ÜÐ-¬s´3°}Ó3EÓ/FÐGÓHôð �O‰O×!Ñ! -Ô0Ø�O‰O×"Ñ"Õ$r1   N)r<   r=   r>   rw  r0   r6   r;   rV   r1   r/   ÚMessageDelegaterr  �  s   „ ò	)ò	$ò	2ó	%r1   r€  c                 ó.   —  G d„ dt         «      } |«       S )Nc                   ó   — e Zd Zd„ Zy)ú+StreamingChunkSizeTest.get_app.<locals>.Appc                 ó,   — t         j                  |«      S r*   )ri  r€  ©r.   Úserver_connÚrequest_conns      r/   Ústart_requestz9StreamingChunkSizeTest.get_app.<locals>.App.start_request²  s   € Ü-×=Ñ=¸lÓKÐKr1   N©r<   r=   r>   rˆ  rV   r1   r/   ÚApprƒ  ±  s   „ óLr1   rŠ  ©r   ©r.   rŠ  s     r/   rM   zStreamingChunkSizeTest.get_app°  s   € ô	LÔ.ô 	Lñ ‹uˆr1   c           	      ór  —  | j                   dddi|¤Ž}|j                  «        t        |j                  «      }| j	                  t        | j                  «      t        |«      «       |D ]J  }| j                  || j                  dt        |«      z   «       | j                  |ddt        |«      z   «       ŒL |S )Nr|   ry   zoversized chunk: r   zempty chunk: )rI   )rO   rP   r   rQ   ru   rc   ÚBODYÚsumÚassertLessEqualrp  rù   ÚassertGreater)r.   rS   rT   r5   ro  s        r/   Úfetch_chunk_sizesz(StreamingChunkSizeTest.fetch_chunk_sizes·  s¨   € Ø�4—:‘:Ñ;¨&Ð;°FÑ;ˆØ×ÑÔÜ˜XŸ]™]Ó+ˆØ×Ñœ˜TŸY™Y›¬¨V«Ô5Ø ò 	MˆJØ× Ñ Ø˜DŸO™OÐ-@Ä3ÀvÃ;Ñ-Nôð ×Ñ˜z¨1¨oÄÀFÃÑ.KÕLð		Mð
 ˆr1   c                 óî   — t        «       }t        j                  d|¬«      }|j                  |«       |j	                  «        |j                  «       }t        |«      t        |«      k\  rt        d«      ‚|S )NrM  rN  z#body did not shrink when compressed)r#   rR  rS  rÂ   rÞ   rT  rc   r`   )r.   rQ   rU  ÚgzfileÚ
compresseds        r/   ÚcompresszStreamingChunkSizeTest.compressÃ  s^   € Ü“)ˆÜ—‘ C°Ô9ˆØ�‰�TÔØ�‰ŒØ×%Ñ%Ó'ˆ
Üˆz‹?œc $›iÒ'ÜÐAÓBÐBØÐr1   c                 ód   — | j                  | j                  ¬«      }| j                  g d¢|«       y )N)rQ   )rj  rj  rj  é   )r’  rŽ  ru   )r.   r5   s     r/   Útest_regular_bodyz(StreamingChunkSizeTest.test_regular_bodyÍ  s)   € Ø×'Ñ'¨T¯Y©YÐ'Ó7ˆà×Ñš¨&Õ1r1   c                 ó`   — | j                  | j                  | j                  «      ddi¬«       y )NrQ  rR  )rQ   r+   )r’  r–  rŽ  rL   s    r/   Útest_compressed_bodyz+StreamingChunkSizeTest.test_compressed_bodyÒ  s-   € Ø×ÑØ—‘˜tŸy™yÓ)Ð4FÈÐ3Oð 	õ 	
r1   c                 ó\   ‡ — ˆ fd„}‰ j                  |¬«      }‰ j                  g d¢|«       y )Nc                 óZ   •—  | ‰j                   d d «        | ‰j                   dd  «       y ©Né   )rŽ  )rÂ   r.   s    €r/   Úbody_producerz?StreamingChunkSizeTest.test_chunked_body.<locals>.body_producerÚ  s'   ø€ Ù�$—)‘)˜C˜R�.Ô!Ù�$—)‘)˜B˜C�.Õ!r1   )r   )rj  é   rj  é   )r’  ru   )r.   r   r5   s   `  r/   Útest_chunked_bodyz(StreamingChunkSizeTest.test_chunked_bodyÙ  s-   ø€ ô	"ð ×'Ñ'°mÐ'ÓDˆà×Ñš¨&Õ1r1   c                 ó¦   ‡— | j                  | j                  «      Š| j                  t        ‰«      d«       ˆfd„}| j	                  |ddi¬«       y )NrŸ  c                 ó2   •—  | ‰d d «        | ‰dd  «       y rž  rV   )rÂ   r•  s    €r/   r   zEStreamingChunkSizeTest.test_chunked_compressed.<locals>.body_produceræ  s   ø€ Ù�*˜S˜b�/Ô"Ù�*˜R˜S�/Õ"r1   rQ  rR  )r   r+   )r–  rŽ  r‘  rc   r’  )r.   r   r•  s     @r/   Útest_chunked_compressedz.StreamingChunkSizeTest.test_chunked_compressedâ  sN   ø€ Ø—]‘] 4§9¡9Ó-ˆ
Ø×Ñœ3˜z›?¨BÔ/ô	#ð 	×ÑØ'Ð2DÀfÐ1Mð 	õ 	
r1   N)r<   r=   r>   rŽ  rp  rl  r£  r   r€  rM   r’  r–  r™  r›  r£  r¦  rV   r1   r/   ri  ri  �  sG   „ à@€DØ€Jò'ò
Iô%Ð-ô %ò&ò
òò2ò

ò2ó

r1   ri  c                   ó.   — e Zd Z G d„ de«      Zd„ Zd„ Zy)ÚInvalidOutputContentLengthTestc                   ó   — e Zd Zd„ Zd„ Zy)ú.InvalidOutputContentLengthTest.MessageDelegatec                 ó   — || _         y r*   rt  rv  s     r/   rw  z7InvalidOutputContentLengthTest.MessageDelegate.__init__ñ  rx  r1   c           	      óì   — dddddœ}| j                   j                  t        ddd«      t        d	||d
      i«      «       | j                   j	                  d«       | j                   j                  «        y )NÚ10r  r…  r†  )Únormalrƒ  r„  Ú
underscorerX  r/  r}  rÖ   úx-testó
   1234567890)ru  r~  r   r   rÂ   r;   )r.   r,   r+   Úcontent_lengthss       r/   r0   z?InvalidOutputContentLengthTest.MessageDelegate.headers_receivedô  sq   € àØ#Ø %Ø#ñ	ˆOð �O‰O×)Ñ)Ü! *¨c°4Ó8ÜÐ-¨¸wÀxÑ?PÑ/QÐRÓSôð �O‰O×!Ñ! -Ô0Ø�O‰O×"Ñ"Õ$r1   N)r<   r=   r>   rw  r0   rV   r1   r/   r€  rª  ð  s   „ ò	)ó	%r1   r€  c                 ó.   —  G d„ dt         «      } |«       S )Nc                   ó   — e Zd Zd„ Zy)ú3InvalidOutputContentLengthTest.get_app.<locals>.Appc                 ó,   — t         j                  |«      S r*   )r¨  r€  r…  s      r/   rˆ  zAInvalidOutputContentLengthTest.get_app.<locals>.App.start_request  s   € Ü5×EÑEÀlÓSÐSr1   Nr‰  rV   r1   r/   rŠ  rµ    s   „ óTr1   rŠ  r‹  rŒ  s     r/   rM   z&InvalidOutputContentLengthTest.get_app  s   € ô	TÔ.ô 	Tñ ‹uˆr1   c           
      óø  — | j                  d«      5  | j                  ddddi¬«      }|j                  «        | j                  |j                  d«       d d d «       dD ]i  }| j                  |«      5  t        t        d«      5  | j                  t        «      5  | j                  ddd|i¬«       d d d «       d d d «       d d d «       Œk y # 1 sw Y   ŒxxY w# 1 sw Y   Œ(xY w# 1 sw Y   Œ,xY w# 1 sw Y   ŒšxY w)	Nr®  rI   ÚGETr°  )r|   r+   r±  )rƒ  r„  r¯  r   )	r6  rO   rP   ru   rQ   r   r   rˆ   r   )r.   rT   Útests      r/   Ú"test_invalid_output_content_lengthzAInvalidOutputContentLengthTest.test_invalid_output_content_length	  sÿ   € Ø�\‰\˜(Ó#ñ 	;Ø—z‘z #¨e¸hÈÐ=Q�zÓRˆHØ×ÑÔØ×Ñ˜XŸ]™]¨MÔ:÷	;ð Aò 	PˆDØ—‘˜dÓ#ñ Pô œwÐ(<Ó=ñ PØ×*Ñ*¬9Ó5ñ PØŸ
™
 3¨u¸xÈÐ>N˜
ÔO÷P÷P÷Pð Pñ	P÷		;ð 	;ú÷Pð Pú÷Pð Pú÷Pð PúsH   ’ACÁ3C0ÂC$ÂC	Â1C$Â9C0ÃCÃC!ÃC$Ã$C-Ã)C0Ã0C9	N)r<   r=   r>   r   r€  rM   rº  rV   r1   r/   r¨  r¨  ï  s   „ ô%Ð-ô %ò$óPr1   r¨  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚMaxHeaderSizeTestc                 ó&   — t        dt        fg«      S rH   ©r   rX   rL   s    r/   rM   zMaxHeaderSizeTest.get_app  ó   € Ü˜SÔ":Ð;Ð<Ó=Ð=r1   c                 ó   — t        d¬«      S )Nr  )Úmax_header_sizer¢  rL   s    r/   r£  z(MaxHeaderSizeTest.get_httpserver_options  s   € Ü DÔ)Ð)r1   c                 ó†   — | j                  dddi¬«      }|j                  «        | j                  |j                  d«       y )NrI   úX-FillerÚdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar+  rs   )rO   rP   ru   rQ   rv   s     r/   Útest_small_headersz$MaxHeaderSizeTest.test_small_headers  s9   € Ø—:‘:˜c¨J¸	Ð+B�:ÓCˆØ×ÑÔØ×Ñ˜Ÿ™¨Õ7r1   c                 ó2  — t        t        dd¬«      5  	 | j                  dddid¬«       | j                  d	«       d d d «       y # t        $ r<}|j
                  �&| j                  |j
                  j                  d
«       Y d }~ŒId }~ww xY w# 1 sw Y   y xY w)NzUnsatisfiable readFr€   rI   rÃ  Áè  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaT)r+   r‡   z did not raise expected exception)i¯  iW  )r   r   rO   Úfailr   rT   ÚassertInr0  )r.   Úes     r/   Útest_large_headersz$MaxHeaderSizeTest.test_large_headers#  s‡   € Ü”wÐ 4¸uÔEñ 		?ð?Ø—
‘
˜3¨°ZÐ(@Èd�
ÔSØ—	‘	Ð<Ô=÷		?ð 		?øô ò ?ð —:‘:Ð)Ø—M‘M !§*¡*§/¡/°:Ô>ÿøð?ú÷			?ð 		?ús.   “B•'AÁ	B
Á2BÂ BÂB
Â
BÂBN)r<   r=   r>   rM   r£  rÅ  rË  rV   r1   r/   r¼  r¼    s   „ ò>ò*ò8ó

?r1   r¼  c                   óx   ‡ — e Zd Zd„ Zd„ Zˆ fd„Zˆ fd„Zej                  d„ «       Z	e
d„ «       Ze
d„ «       Zˆ xZS )ÚIdleTimeoutTestc                 ó&   — t        dt        fg«      S rH   r¾  rL   s    r/   rM   zIdleTimeoutTest.get_app1  r¿  r1   c                 ó   — t        d¬«      S )Ngš™™™™™¹?)Úidle_connection_timeoutr¢  rL   s    r/   r£  z&IdleTimeoutTest.get_httpserver_options4  s   € Ü¨CÔ0Ð0r1   c                 ó0   •— t         ‰| �  «        g | _        y r*   )rA  rB  ÚstreamsrC  s    €r/   rB  zIdleTimeoutTest.setUp7  s   ø€ Ü‰‰ŒØˆ�r1   c                 ód   •— t         ‰| �  «        | j                  D ]  }|j                  «        Œ y r*   )rA  rE  rÒ  rÞ   )r.   rB   rJ   s     €r/   rE  zIdleTimeoutTest.tearDown;  s*   ø€ Ü‰ÑÔØ—l‘lò 	ˆFØ�L‰L�Nñ	r1   c              #   óê   K  — t        t        j                  «       «      }|j                  d| j                  «       f«      –— | j                  j                  |«       t        j                  |«      ‚­wr¸   )r   r¿   rº   r»   rÒ  r3   r   r"  r¼   s     r/   rº   zIdleTimeoutTest.connect@  sT   è ø€ äœ&Ÿ-™-›/Ó*ˆØ�n‰n˜k¨4×+=Ñ+=Ó+?Ð@ÓAÒAØ�‰×Ñ˜FÔ#Ü�j‰j˜Ó Ð ùs   ‚A1A3c              #   óž   K  — | j                  «       –—}t        «       }|j                  |j                  «       |j	                  «       –— y ­wr*   )rº   r   Úset_close_callbackrC  rN  )r.   rB   Úevents      r/   Útest_unused_connectionz&IdleTimeoutTest.test_unused_connectionG  s9   è ø€ à—|‘|“~Ñ%ˆÜ“ˆØ×!Ñ! %§)¡)Ô,Ø�j‰j‹lÓùs   ‚AAc              #   óP  K  — | j                  «       –—}t        «       }|j                  |j                  «       t	        d«      D ]K  }|j                  d«       |j                  d«      –— |j                  d«      –—}| j                  |d«       ŒM |j                  «       –— y ­w)Nr˜  s#   GET / HTTP/1.1
Host: 127.0.0.1

rÓ   é   rs   )
rº   r   rÖ  rC  r  rÂ   r×   rÜ   ru   rN  )r.   rB   r×  r  rÍ   s        r/   Útest_idle_after_usez#IdleTimeoutTest.test_idle_after_useN  s‘   è ø€ à—|‘|“~Ñ%ˆÜ“ˆØ×!Ñ! %§)¡)Ô,ô �q“ò 	3ˆAØ�L‰LÐEÔFØ×#Ñ# KÓ0Ò0Ø×*Ñ*¨2Ó.Ñ.ˆDØ×Ñ˜T >Õ2ð		3ð �j‰j‹lÓùs   ‚B$B&)r<   r=   r>   rM   r£  rB  rE  r   r  rº   r   rØ  rÛ  r”  r•  s   @r/   rÍ  rÍ  0  sW   ø„ ò>ò1ôôð
 	‡]�]ñ!ó ð!ð ñó ðð ñó ôr1   rÍ  c                   óô   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Z ej                  e
j                  dk(  d«      d„ «       Zd	„ Z ej                  e
j                  dk(  d«      d
„ «       Zd„ Zd„ Zed„ «       Zed„ «       Zy)ÚBodyLimitsTestc                 ór   —  G d„ dt         «      }t         G d„ dt         «      «       }t        d|fd|fg«      S )Nc                   ó   — e Zd Zd„ Zy)ú/BodyLimitsTest.get_app.<locals>.BufferedHandlerc                 ór   — | j                  t        t        | j                  j                  «      «      «       y r*   )rÂ   rù   rc   r_   rQ   rL   s    r/   Úputz3BodyLimitsTest.get_app.<locals>.BufferedHandler.putb  s"   € Ø—
‘
œ3œs 4§<¡<×#4Ñ#4Ó5Ó6Õ7r1   N)r<   r=   r>   râ  rV   r1   r/   ÚBufferedHandlerrà  a  s   „ ó8r1   rã  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ú0BodyLimitsTest.get_app.<locals>.StreamingHandlerc                 ó   — d| _         y )Nr   )Ú
bytes_readrL   s    r/   r\   z;BodyLimitsTest.get_app.<locals>.StreamingHandler.initializeg  s	   € Ø"#�•r1   c                 óf  — t        j                  t        | j                  j                  «      }d| j                  j
                  v r)|j                  t        | j                  d«      «      «       d| j                  j
                  v r*|j                  t        | j                  d«      «      «       y y )NÚexpected_sizeÚbody_timeout)ÚtypingÚcastr   r_   ru  ræ   Úset_max_body_sizerÝ   r®   Úset_body_timeoutÚfloatr9   s     r/   r  z8BodyLimitsTest.get_app.<locals>.StreamingHandler.preparej  s�   € Ü—{‘{¤?°D·L±L×4KÑ4KÓL�Ø" d§l¡l×&<Ñ&<Ñ<Ø×*Ñ*¬3¨t×/@Ñ/@ÀÓ/QÓ+RÔSØ! T§\¡\×%;Ñ%;Ñ;Ø×)Ñ)¬%°×0AÑ0AÀ.Ó0QÓ*RÕSð <r1   c                 ó@   — | xj                   t        |«      z  c_         y r*   )rç  rc   r-  s     r/   r6   z>BodyLimitsTest.get_app.<locals>.StreamingHandler.data_receivedq  s   € Ø—’¤3 t£9Ñ,–r1   c                 óL   — | j                  t        | j                  «      «       y r*   )rÂ   rù   rç  rL   s    r/   râ  z4BodyLimitsTest.get_app.<locals>.StreamingHandler.putt  s   € Ø—
‘
œ3˜tŸ™Ó/Õ0r1   N)r<   r=   r>   r\   r  r6   râ  rV   r1   r/   ÚStreamingHandlerrå  e  s   „ ò$òTò-ó1r1   rò  ú	/bufferedú
/streaming)r   r    r   )r.   rã  rò  s      r/   rM   zBodyLimitsTest.get_app`  sK   € ô	8œnô 	8ô 
ô	1œ~ó 	1ó 
ð	1ô" Ø˜?Ð+¨lÐ<LÐ-MÐNó
ð 	
r1   c                 ó   — t        dd¬«      S )Nr„   i   )rê  Úmax_body_sizer¢  rL   s    r/   r£  z%BodyLimitsTest.get_httpserver_options{  s   € Ü °TÔ:Ð:r1   c                 ó   — t        «       S r*   r   rL   s    r/   rl  zBodyLimitsTest.get_http_client~  rm  r1   c                 óÄ   — | j                  ddd¬«      }| j                  |j                  d«       | j                  ddd¬«      }| j                  |j                  d«       y )Nró  ÚPUTs   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar{   s   4096rô  rt   rv   s     r/   Útest_small_bodyzBodyLimitsTest.test_small_bodyƒ  sR   € Ø—:‘:˜k°%¸k�:ÓJˆØ×Ñ˜Ÿ™¨Ô0Ø—:‘:˜l°5¸{�:ÓKˆØ×Ñ˜Ÿ™¨Õ0r1   c                 óÔ   — t        t        dt        j                  ¬«      5  | j	                  ddddz  ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)	Nú.*Content-Length too longrR  ró  rù  ó   aé (  r{   r  ©r   r   r[  r\  rO   ru   r0  rv   s     r/   Útest_large_body_bufferedz'BodyLimitsTest.test_large_body_buffered‰  sX   € Ü”wÐ ;Ä7Ç<Á<ÔPñ 	PØ—z‘z +°eÀ$ÈÁ,�zÓOˆH÷	Pà×Ñ˜Ÿ™¨Õ,÷	Pð 	Púó   ¡AÁA'Úntzflaky on windowsc                 óÐ   — t        t        dt        j                  ¬«      5  | j	                  ddd„ ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)Nú.*chunked body too largerR  ró  rù  c                 ó   —  | ddz  «      S ©Nrý  rþ  rV   ©rÂ   s    r/   r½   zABodyLimitsTest.test_large_body_buffered_chunked.<locals>.<lambda>•  ó   € ©E°$¸±,Ó,?€ r1   ©r|   r   r  rÿ  rv   s     r/   Ú test_large_body_buffered_chunkedz/BodyLimitsTest.test_large_body_buffered_chunkedŽ  s\   € ô ”wÐ :Ä'Ç,Á,ÔOñ 	Ø—z‘zØØÙ?ð "ó ˆH÷	ð 	×Ñ˜Ÿ™¨Õ,÷	ð 	úó   ¡AÁA%c                 óÔ   — t        t        dt        j                  ¬«      5  | j	                  ddddz  ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)	Nrü  rR  rô  rù  rý  rþ  r{   r  rÿ  rv   s     r/   Útest_large_body_streamingz(BodyLimitsTest.test_large_body_streaming™  sX   € Ü”wÐ ;Ä7Ç<Á<ÔPñ 	QØ—z‘z ,°uÀ4È%Á<�zÓPˆH÷	Qà×Ñ˜Ÿ™¨Õ,÷	Qð 	Qúr  c                 óÐ   — t        t        dt        j                  ¬«      5  | j	                  ddd„ ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)Nr  rR  rô  rù  c                 ó   —  | ddz  «      S r  rV   r  s    r/   r½   zBBodyLimitsTest.test_large_body_streaming_chunked.<locals>.<lambda>¤  r  r1   r	  r  rÿ  rv   s     r/   Ú!test_large_body_streaming_chunkedz0BodyLimitsTest.test_large_body_streaming_chunkedž  sZ   € ä”wÐ :Ä'Ç,Á,ÔOñ 	Ø—z‘zØØÙ?ð "ó ˆH÷	ð 	×Ñ˜Ÿ™¨Õ,÷	ð 	úr  c                 ój   — | j                  ddddz  ¬«      }| j                  |j                  d«       y )Nú/streaming?expected_size=10240rù  rý  rþ  r{   ó   10240rt   rv   s     r/   Ú"test_large_body_streaming_overridez1BodyLimitsTest.test_large_body_streaming_override¨  s6   € Ø—:‘:Ø,°UÀÈÁð ó 
ˆð 	×Ñ˜Ÿ™¨Õ1r1   c                 óf   — | j                  ddd„ ¬«      }| j                  |j                  d«       y )Nr  rù  c                 ó   —  | ddz  «      S r  rV   r  s    r/   r½   zKBodyLimitsTest.test_large_body_streaming_chunked_override.<locals>.<lambda>²  s   € ©¨d°U©lÓ(;€ r1   r	  r  rt   rv   s     r/   Ú*test_large_body_streaming_chunked_overridez9BodyLimitsTest.test_large_body_streaming_chunked_override®  s4   € Ø—:‘:Ø,ØÙ;ð ó 
ˆð
 	×Ñ˜Ÿ™¨Õ1r1   c              #   ó¬  K  — t        t        j                  «       «      }	 |j                  d| j                  «       f«      –— |j	                  d«       t        t        dt        j                  ¬«      5  |j                  «       –—}d d d «       | j                  d«       |j                  «        y # 1 sw Y   Œ,xY w# |j                  «        w xY w­w)Nr¹   s@   PUT /streaming?body_timeout=0.1 HTTP/1.0
Content-Length: 42

zTimeout reading bodyrR  r1   )r   r¿   rº   r»   rÂ   r   r   r[  r\  rŠ  ru   rÞ   rÞ  s      r/   Útest_timeoutzBodyLimitsTest.test_timeout¶  s¨   è ø€ äœ&Ÿ-™-›/Ó*ˆð	Ø—.‘. +¨t×/AÑ/AÓ/CÐ!DÓEÒEð �L‰Lð.ôô œ7Ð$:Ä'Ç,Á,ÔOñ ;Ø!'×!8Ñ!8Ó!:Ñ:�÷;à×Ñ˜X sÔ+à�L‰L�N÷	;ð ;ûð �L‰L�Nüs5   ‚C¡AB? Á5B3ÂB? Â"CÂ3B<Â8B? Â?CÃCc              #   ó<  K  — t        t        j                  «       «      }	 |j                  d| j                  «       f«      –— |j	                  d«       |j	                  ddz  «       t        |«      –—\  }}}| j                  |d«       |j	                  d«       t        t        dt        j                  ¬«      5  |j                  «       –—}d d d «       | j                  d	«       |j                  «        y # 1 sw Y   Œ,xY w# |j                  «        w xY w­w)
Nr¹   sW   PUT /streaming?expected_size=10240 HTTP/1.1
Host: 127.0.0.1
Content-Length: 10240

rý  rþ  r  sC   PUT /streaming HTTP/1.1
Host: 127.0.0.1
Content-Length: 10240

rü  rR  rÝ  )r   r¿   rº   r»   rÂ   rD   ru   r   r   r[  r\  rŠ  rÞ   )r.   rB   r,   r+   rT   rÍ   s         r/   Útest_body_size_override_resetz,BodyLimitsTest.test_body_size_override_resetÇ  sð   è ø€ ô œ&Ÿ-™-›/Ó*ˆð	Ø—.‘. +¨t×/AÑ/AÓ/CÐ!DÓEÒEà�L‰Lð1ôð
 �L‰L˜ ™Ô&Ü2BÀ6Ó2JÑ,JÑ)ˆJ˜ Ø×Ñ˜X xÔ0à�L‰Lð1ôô
 œ7Ð$?ÄwÇ|Á|ÔTñ 7Ø#×4Ñ4Ó6Ñ6�÷7à×Ñ˜TÐ#FÔGà�L‰L�N÷	7ð 7ûð �L‰L�Nüs5   ‚D¡BD Â=C;ÃD Ã*DÃ;DÄ D ÄDÄDN)r<   r=   r>   rM   r£  rl  rú  r   ÚunittestÚskipIfr�   r
  r
  r  r  r  r  r   r  r  rV   r1   r/   rÝ  rÝ  _  s¦   „ ò
ò6;ò'ò
1ò-ð
 €X‡_�_�R—W‘W ‘_Ð&8Ó9ñ-ó :ð-ò-ð
 €X‡_�_�R—W‘W ‘_Ð&8Ó9ñ-ó :ð-ò2ò2ð ñó ðð  ñó ñr1   rÝ  c                   ó   — e Zd Zd„ Zd„ Zy)ÚLegacyInterfaceTestc                 ó   ‡ — ˆ fd„}|S )Nc                 óÀ  •— | j                   j                  d«      ‰_        ‰j                  sJ| j                  j	                  t        ddd«      t        «       «       | j                  j                  «        y d}| j                  j                  t        dt        |«      z  «      «       | j                  j                  |«       | j                  j                  «        y )NzHTTP/1.r#  r/  r}  rs   z'HTTP/1.1 200 OK
Content-Length: %d

)rî   rÙ   Úhttp1ru  r~  r   r   r;   rÂ   r   rc   )r_   Úmessager.   s     €r/   Úhandle_requestz3LegacyInterfaceTest.get_app.<locals>.handle_requestè  s°   ø€ Ø Ÿ™×3Ñ3°IÓ>ˆDŒJØ—:’:ð ×"Ñ"×0Ñ0Ü% b¨#¨tÓ4´k³môð ×"Ñ"×)Ñ)Ô+ØØ$ˆGØ×Ñ×$Ñ$ÜÐGÌ#ÈgË,ÑVÓWôð ×Ñ×$Ñ$ WÔ-Ø×Ñ×%Ñ%Õ'r1   rV   )r.   r$  s   ` r/   rM   zLegacyInterfaceTest.get_appä  s   ø€ ô	(ð" Ðr1   c                 ó˜   — | j                  d«      }| j                  s| j                  d«       | j                  |j                  d«       y )NrI   r±  rs   )rO   r"  r²  ru   rQ   rv   s     r/   Útest_legacy_interfacez)LegacyInterfaceTest.test_legacy_interfaceû  s7   € Ø—:‘:˜c“?ˆØ�zŠzØ�M‰MÐ-Ô.Ø×Ñ˜Ÿ™¨Õ7r1   N)r<   r=   r>   rM   r&  rV   r1   r/   r  r  ã  s   „ òó.8r1   r  )cÚtornador   r   Útornado.escaper   r   r   r   r	   r
   Útornado.http1connectionr   Útornado.httpclientr   Útornado.httpserverr   Útornado.httputilr   r   r   r   Útornado.iostreamr   Útornado.locksr   Útornado.logr   r   Útornado.simple_httpclientr   Útornado.testingr   r   r   r   r   Útornado.test.utilr   Útornado.webr   r   r    Ú
contextlibr!   r"   rK  rR  r[  r�   ré  r¿   rn   Úsysrå  rˆ  r  Úurllib.parser7  rð  Úior#   rë  ÚTYPE_CHECKINGr$   r%   rD   rF   rX   rg   ÚTestCaser“   r§   r±   rã   rë   r  r  r  r<  r—  r¿  rÈ  rÐ  r  r  Úplatformrã  rÙ   rí  rô  rJ  r\  re  ri  r¨  r¼  rÍ  rÝ  r  rV   r1   r/   ú<module>r;     s¬  ðß  ÷÷ õ 4Ý (Ý )÷ó õ &Ý ß (Ý ;÷õ õ 1ß HÑ Hç .Û Û Û Û 	Û Û Û 
Û 
Û Û Û Û Û Ý ã à	×Òß!òCô,	*Ð+ô 	*ô
E˜~ô 
Eô'2Ð ô '2ôT&
˜×)Ñ)ô &
ôR	
˜>ô 	
ôYÐ*ô Yôx>�.ô >ô&O�~ô &OôR9�nô 9ô
B˜ô Bô>UÐ&ô >UôBNÐ)ô Nôb\
Ð%ô \
ô~
Ð'Ð)<ô 
ô.	DÐ,ô 	Dð ô-H�]ó -Hó ð-Hð` €‡�Ù�˜	Ó"Ð"Ò> c§l¡l°hÑ&>Ø1óô#˜ó #ó	ð#ð €‡�Ù	�˜Ó	#Ò	H¨¯©×(?Ñ(?ÀÓ(HÐIØDóô˜^ó ó	ðôWÐ%ô WôtGÐ$ô Gô,Gˆ|Ð.ô Gô0-˜,Ð(9ô -ô\
Ð.ô \
ô~%PÐ%6ô %PôP?Ð)ô ?ô2,Ð'ô ,ô^AÐ&ô AôH8Ð+õ 8r1   