Ë
    %¹šj¸Ÿ  ã                   óÐ  — d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlZd dlm	Z	 d dl
Z
d dlZd dlZd dlZd dlZd dl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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& d dlm'Z' d dl(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5  G d„ de1«      Z6 G d„ de1«      Z7 G d„ de1«      Z8 G d„ de1«      Z9 G d„ de1«      Z: G d„ de1«      Z; G d„ de1«      Z< G d„ de1«      Z= G d „ d!e1«      Z> G d"„ d#e1«      Z? G d$„ d%e1«      Z@ G d&„ d'e1«      ZA G d(„ d)e1«      ZB G d*„ d+e1«      ZC G d,„ d-e1«      ZD G d.„ d/e1«      ZE G d0„ d1e1«      ZF G d2„ d3e)«      ZG G d4„ d5ej�                  «      ZI G d6„ d7ej�                  «      ZJ G d8„ d9ej�                  «      ZK G d:„ d;ej�                  «      ZL G d<„ d=ej�                  «      ZM G d>„ d?ej�                  «      ZNy)@é    N)Úclosing)ÚBytesIO)Úutf8Ú
native_strÚ
to_unicodeÚjson_encodeÚjson_decode)Úgen)ÚHTTPRequestÚHTTPResponseÚ_RequestProxyÚ	HTTPErrorÚ
HTTPClient)Ú
HTTPServer)ÚIOLoop)ÚIOStream)Úgen_logÚapp_log)Únetutil)ÚAsyncHTTPTestCaseÚbind_unused_portÚgen_testÚ	ExpectLog)Úignore_deprecation)ÚApplicationÚRequestHandlerÚurl)Úformat_timestampÚHTTPHeadersc                   ó   — e Zd Zd„ Zy)ÚHelloWorldHandlerc                 ót   — | j                  dd«      }| j                  dd«       | j                  d|z  «       y )NÚnameÚworldúContent-Typeú
text/plainz	Hello %s!)Úget_argumentÚ
set_headerÚfinish)Úselfr#   s     ú<lib/python3.12/site-packages/tornado/test/httpclient_test.pyÚgetzHelloWorldHandler.get%   s3   € Ø× Ñ  ¨Ó1ˆØ�‰˜¨Ô5Ø�‰�K $Ñ&Õ'ó    N©Ú__name__Ú
__module__Ú__qualname__r,   © r-   r+   r!   r!   $   s   „ ó(r-   r!   c                   ó   — e Zd Zd„ Zy)ÚPostHandlerc                 ón   — | j                  d| j                  d«      ›d| j                  d«      ›�«       y )NzPost arg1: Úarg1z, arg2: Úarg2)r)   r'   ©r*   s    r+   ÚpostzPostHandler.post,   s/   € Ø�Šà× Ñ  Õ(¨$×*;Ñ*;¸FÔ*CðEõ	
r-   N©r/   r0   r1   r9   r2   r-   r+   r4   r4   +   ó   „ ó
r-   r4   c                   ó   — e Zd Zd„ Zy)Ú
PutHandlerc                 óp   — | j                  d«       | j                  | j                  j                  «       y )Nz
Put body: ©ÚwriteÚrequestÚbodyr8   s    r+   ÚputzPutHandler.put4   s$   € Ø�
‰
�<Ô Ø�
‰
�4—<‘<×$Ñ$Õ%r-   N)r/   r0   r1   rC   r2   r-   r+   r=   r=   3   ó   „ ó&r-   r=   c                   ó   — e Zd Zd„ Zy)ÚRedirectHandlerc           	      óœ   — | j                  d«       | j                  | j                  d«      t        | j                  dd«      «      ¬«       y )Nzredirects can have bodies toor   ÚstatusÚ302)rH   )r@   Úredirectr'   Úintr8   s    r+   ÚpreparezRedirectHandler.prepare:   sB   € Ø�
‰
Ð2Ô3Ø�‰Ø×Ñ˜eÓ$¬S°×1BÑ1BÀ8ÈUÓ1SÓ-Tð 	õ 	
r-   N©r/   r0   r1   rL   r2   r-   r+   rF   rF   9   r;   r-   rF   c                   ó   — e Zd Zd„ Zy)ÚRedirectWithoutLocationHandlerc                 óF   — | j                  d«       | j                  «        y )Né-  )Ú
set_statusr)   r8   s    r+   rL   z&RedirectWithoutLocationHandler.prepareB   s   € à�‰˜ÔØ�‰�r-   NrM   r2   r-   r+   rO   rO   A   s   „ ór-   rO   c                   ó0   — e Zd Zej                  d„ «       Zy)ÚChunkHandlerc              #   óž   K  — | j                  d«       | j                  «        t        j                  d«      –— | j                  d«       y ­w)NÚasdfç{®Gáz„?Úqwer)r@   Úflushr
   Úsleepr8   s    r+   r,   zChunkHandler.getI   s5   è ø€ à�
‰
�6ÔØ�
‰
Œä�i‰i˜‹oÒØ�
‰
�6Õùs   ‚AAN)r/   r0   r1   r
   Ú	coroutiner,   r2   r-   r+   rT   rT   H   s   „ Ø‡]�]ñó ñr-   rT   c                   ó   — e Zd Zd„ Zy)ÚAuthHandlerc                 óT   — | j                  | j                  j                  d   «       y )NÚAuthorization)r)   rA   Úheadersr8   s    r+   r,   zAuthHandler.getS   s   € Ø�‰�D—L‘L×(Ñ(¨Ñ9Õ:r-   Nr.   r2   r-   r+   r]   r]   R   s   „ ó;r-   r]   c                   ó   — e Zd Zd„ Zy)ÚCountdownHandlerc                 ó�   — t        |«      }|dkD  r%| j                  | j                  d|dz
  «      «       y | j                  d«       y )Nr   Ú	countdowné   ÚZero)rK   rJ   Úreverse_urlr@   )r*   Úcounts     r+   r,   zCountdownHandler.getX   s;   € Ü�E“
ˆØ�1Š9Ø�M‰M˜$×*Ñ*¨;¸À¹	ÓBÕCà�J‰J�vÕr-   Nr.   r2   r-   r+   rb   rb   W   s   „ ór-   rb   c                   ó   — e Zd Zd„ Zy)ÚEchoPostHandlerc                 óN   — | j                  | j                  j                  «       y ©Nr?   r8   s    r+   r9   zEchoPostHandler.posta   s   € Ø�
‰
�4—<‘<×$Ñ$Õ%r-   Nr:   r2   r-   r+   rj   rj   `   s   „ ó&r-   rj   c                   ó   — e Zd Zd„ Zy)ÚUserAgentHandlerc                 ón   — | j                  | j                  j                  j                  dd«      «       y )Nú
User-AgentzUser agent not set)r@   rA   r`   r,   r8   s    r+   r,   zUserAgentHandler.getf   s&   € Ø�
‰
�4—<‘<×'Ñ'×+Ñ+¨LÐ:NÓOÕPr-   Nr.   r2   r-   r+   rn   rn   e   s   „ óQr-   rn   c                   ó   — e Zd Zd„ Zd„ Zy)ÚContentLength304Handlerc                 óJ   — | j                  d«       | j                  dd«       y )Né0  úContent-Lengthé*   )rR   r(   r8   s    r+   r,   zContentLength304Handler.getk   s   € Ø�‰˜ÔØ�‰Ð(¨"Õ-r-   c                  ó   — y rl   r2   r8   s    r+   Ú_clear_representation_headersz5ContentLength304Handler._clear_representation_headerso   s   € ð 	r-   N)r/   r0   r1   r,   rx   r2   r-   r+   rr   rr   j   s   „ ò.ór-   rr   c                   ó   — e Zd Zd„ Zy)ÚPatchHandlerc                 óN   — | j                  | j                  j                  «       y)z=Return the request payload - so we can check it is being keptNr?   r8   s    r+   ÚpatchzPatchHandler.patchv   s   € à�
‰
�4—<‘<×$Ñ$Õ%r-   N)r/   r0   r1   r|   r2   r-   r+   rz   rz   u   rD   r-   rz   c                   óP   — e Zd Zej                  dz   Zd„ ZexZxZxZxZ	xZ
xZxZZy)ÚAllMethodsHandler)ÚOTHERc                 ó~   — | j                   j                  €J ‚| j                  | j                   j                  «       y rl   )rA   Úmethodr@   r8   s    r+   r�   zAllMethodsHandler.method~   s.   € Ø�|‰|×"Ñ"Ð.Ð.Ð.Ø�
‰
�4—<‘<×&Ñ&Õ'r-   N)r/   r0   r1   r   ÚSUPPORTED_METHODSr�   r,   Úheadr9   rC   ÚdeleteÚoptionsr|   Úotherr2   r-   r+   r~   r~   {   sD   „ Ø&×8Ñ8¸:ÑEÐò(ð BHÐG€CÐGˆ$ÐG�ÐG˜ÐG˜fÐG wÐG°¹r-   r~   c                   ó   — e Zd Zd„ Zy)ÚSetHeaderHandlerc                 óœ   — t        | j                  d«      | j                  j                  d   «      D ]  \  }}| j	                  ||«       Œ y )NÚkÚv)ÚzipÚget_argumentsrA   Ú	argumentsr(   )r*   rŠ   r‹   s      r+   r,   zSetHeaderHandler.get†   sB   € ô ˜×*Ñ*¨3Ó/°·±×1GÑ1GÈÑ1LÖM‰DˆAˆqØ�O‰O˜A˜qÕ!ñ Nr-   Nr.   r2   r-   r+   rˆ   rˆ   …   s   „ ó"r-   rˆ   c                   ó   — e Zd Zdd„Zy)ÚInvalidGzipHandlerNc                 ó  — | j                  dd«       | j                  dd«       dj                  d„ t        d«      D «       «      d d }t        j                  |j                  «       d	¬
«      dz   }| j                  |«       y )Nr%   r&   úContent-EncodingÚgzipÚ c              3   ó(   K  — | ]
  }d |› d�–— Œ y­w)zHello World Ú
Nr2   )Ú.0Úis     r+   Ú	<genexpr>z)InvalidGzipHandler.get.<locals>.<genexpr>•   s   è ø€ ÐA±[°˜ a S¨Ô+±[ùs   ‚i(#  i;F é   )Úcompressleveló    )r(   ÚjoinÚranger“   ÚcompressÚencoder@   )r*   ÚtextrB   s      r+   r,   zInvalidGzipHandler.getŽ   sg   € à�‰˜¨Ô5Ø�‰Ð*¨FÔ3ð �w‰wÑA´U¸4´[ÓAÓAÀ'À6ÐJˆÜ�}‰}˜TŸ[™[›]¸!Ô<¸vÑEˆØ�
‰
�4Õr-   )ÚreturnNr.   r2   r-   r+   r�   r�   �   s   „ ô	r-   r�   c                   ó   — e Zd Zd„ Zy)ÚHeaderEncodingHandlerc                 ór   — | j                  | j                  j                  d   j                  d«      «       y )NÚFooú	ISO8859-1)r)   rA   r`   r    r8   s    r+   r,   zHeaderEncodingHandler.get›   s(   € Ø�‰�D—L‘L×(Ñ(¨Ñ/×6Ñ6°{ÓCÕDr-   Nr.   r2   r-   r+   r¤   r¤   š   s   „ óEr-   r¤   c                   ó   — e Zd Zd„ Zy)ÚEchoHeadersHandlerc                 óŽ   — | j                  t        t        | j                  j                  j                  «       «      «      «       y rl   )r@   r   ÚdictrA   r`   Úget_allr8   s    r+   r,   zEchoHeadersHandler.get    s+   € Ø�
‰
”;œt D§L¡L×$8Ñ$8×$@Ñ$@Ó$BÓCÓDÕEr-   Nr.   r2   r-   r+   r©   r©   Ÿ   s   „ óFr-   r©   c                   óz  ‡ — e Zd Zd„ Zˆ fd„Zdede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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d„ Zd„ Z ed„ «       Z!d „ Z"ed!„ «       Z#ed"„ «       Z$ed#„ «       Z%ed$„ «       Z&ed%„ «       Z'd&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-ed,„ «       Z.d-„ Z/d.„ Z0ˆ xZ1S )/ÚHTTPClientCommonTestCasec                 ó  — t        t        dt        «      t        dt        «      t        dt        «      t        dt
        «      t        dt        «      t        dt        «      t        dt        «      t        dt        d	¬
«      t        dt        «      t        dt        «      t        dt        «      t        dt        «      t        dt        «      t        dt        «      t        dt         «      t        dt"        «      t        dt$        «      gd¬«      S )Nú/helloú/postz/putz	/redirectú/redirect_without_locationú/chunkú/authz/countdown/([0-9]+)rd   )r#   ú	/echopostú/user_agentú/304_with_content_lengthú/all_methodsú/patchz/set_headerú/invalid_gzipú/header-encodingú/echo_headersT)r“   )r   r   r!   r4   r=   rF   rO   rT   r]   rb   rj   rn   rr   r~   rz   rˆ   r�   r¤   r©   r8   s    r+   Úget_appz HTTPClientCommonTestCase.get_appª   sÓ   € Üä�HÔ/Ó0Ü�Gœ[Ó)Ü�FœJÓ'Ü�K¤Ó1ÜÐ0Ô2PÓQÜ�HœlÓ+Ü�Gœ[Ó)ÜÐ)Ô+;À+ÔNÜ�K¤Ó1Ü�MÔ#3Ó4ÜÐ.Ô0GÓHÜ�NÔ$5Ó6Ü�HœlÓ+Ü�MÔ#3Ó4Ü�OÔ%7Ó8ÜÐ&Ô(=Ó>Ü�OÔ%7Ó8ð#ð& ô)
ð 	
r-   c                 ó€   •— t         ‰| �  «        t        «       \  }}| j                  j	                  |«       || _        y rl   )ÚsuperÚsetUpr   Úhttp_serverÚ
add_socketÚ _HTTPClientCommonTestCase__port2)r*   ÚsockÚportÚ	__class__s      €r+   rÀ   zHTTPClientCommonTestCase.setUpÂ   s5   ø€ Ü‰‰Œô &Ó'‰
ˆˆdØ×Ñ×#Ñ# DÔ)Øˆ�r-   Úpathr¢   c                 óD   — | j                  «       › d| j                  › |› �S )Nz://127.0.0.1:)Úget_protocolrÃ   ©r*   rÇ   s     r+   Úget_url2z!HTTPClientCommonTestCase.get_url2Ë   s%   € Ø×#Ñ#Ó%Ð& m°D·L±L°>À$ÀÐHÐHr-   c                 ó    — d}| j                  dd|¬«      }| j                  |j                  d«       | j                  |j                  |«       y )Ns   some patch datar¹   ÚPATCH©r�   rB   éÈ   ©ÚfetchÚassertEqualÚcoderB   )r*   rB   Úresponses      r+   Útest_patch_receives_payloadz4HTTPClientCommonTestCase.test_patch_receives_payloadÎ   sC   € Ø!ˆØ—:‘:˜h¨w¸T�:ÓBˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Õ-r-   c                 ó”  — | j                  d«      }| j                  |j                  d«       | j                  |j                  d   d«       | j                  |j                  d«       |j
                  €J ‚| j                  t        |j
                  «      d«       | j                  d«      }| j                  |j                  d«       y )	Nr°   rÏ   r%   r&   ó   Hello world!r   z/hello?name=Bens
   Hello Ben!)rÑ   rÒ   rÓ   r`   rB   Úrequest_timerK   ©r*   rÔ   s     r+   Útest_hello_worldz)HTTPClientCommonTestCase.test_hello_worldÔ   s£   € Ø—:‘:˜hÓ'ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨.Ñ9¸<ÔHØ×Ñ˜Ÿ™¨Ô8Ø×$Ñ$Ð0Ð0Ð0Ø×Ñœ˜X×2Ñ2Ó3°QÔ7à—:‘:Ð/Ó0ˆØ×Ñ˜Ÿ™¨Õ6r-   c                 óž   — g }| j                  d|j                  ¬«      }| j                  |dg«       | j                  |j                  «       y )Nr°   ©Ústreaming_callbackr×   )rÑ   ÚappendrÒ   ÚassertFalserB   )r*   ÚchunksrÔ   s      r+   Útest_streaming_callbackz0HTTPClientCommonTestCase.test_streaming_callbackß   sB   € àˆØ—:‘:˜h¸6¿=¹=�:ÓIˆà×Ñ˜ /Ð!2Ô3Ø×Ñ˜Ÿ™Õ'r-   c                 óœ   — | j                  ddd¬«      }| j                  |j                  d«       | j                  |j                  d«       y )Nr±   ÚPOSTzarg1=foo&arg2=barrÎ   rÏ   s   Post arg1: foo, arg2: barrÐ   rÙ   s     r+   Ú	test_postz"HTTPClientCommonTestCase.test_postç   s@   € Ø—:‘:˜g¨fÐ;N�:ÓOˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™Ð(DÕEr-   c                 óú   — | j                  d«      }| j                  |j                  d«       g }| j                  d|j                  ¬«      }| j                  |ddg«       | j	                  |j                  «       y )Nr³   ó   asdfqwerrÜ   ó   asdfó   qwer)rÑ   rÒ   rB   rÞ   rß   )r*   rÔ   rà   s      r+   Útest_chunkedz%HTTPClientCommonTestCase.test_chunkedì   sf   € Ø—:‘:˜hÓ'ˆØ×Ñ˜Ÿ™¨Ô4àˆØ—:‘:˜h¸6¿=¹=�:ÓIˆØ×Ñ˜ '¨7Ð!3Ô4Ø×Ñ˜Ÿ™Õ'r-   c                 óŽ  ‡ — t        «       \  }}t        |«      5  t        j                  ˆ fd„«       }t	        j
                  ||«       ‰ j                  d|z  «      }|j                  «        ‰ j                  |j                  d«       ‰ j                  j                  |j                  «       «       d d d «       y # 1 sw Y   y xY w)Nc              3   óÚ   •K  — t        | «      }|j                  d«      –—}d|vr‰j                  d«       |j                  dj	                  dd«      «      –— |j                  «        y ­w)Nó   

ó   HTTP/1.úrequires HTTP/1.xs7   HTTP/1.1 200 OK
Transfer-Encoding: chunked

1
1
1
2
0

ó   
ó   
©r   Ú
read_untilÚskipTestr@   ÚreplaceÚclose©ÚconnÚaddressÚstreamÚrequest_datar*   s       €r+   Úaccept_callbackzDHTTPClientCommonTestCase.test_chunked_close.<locals>.accept_callbackû   sl   øè ø€ ô " $›�Ø%+×%6Ñ%6°{Ó%CÑC�Ø \Ñ1Ø—M‘MÐ"5Ô6Ø—l‘lð
÷ �GØ˜wóóò ð —‘•ùó   ƒA(A+úhttp://127.0.0.1:%d/s   12)r   r   r
   r[   r   Úadd_accept_handlerrÑ   ÚrethrowrÒ   rB   Úio_loopÚremove_handlerÚfileno©r*   rÄ   rÅ   rû   Úresps   `    r+   Útest_chunked_closez+HTTPClientCommonTestCase.test_chunked_closeõ   s“   ø€ ô &Ó'‰
ˆˆdÜ�T�]ä�]‰]óó ðô0 ×&Ñ& t¨_Ô=Ø—:‘:Ð4°tÑ;Ó<ˆDØ�L‰LŒNØ×Ñ˜TŸY™Y¨Ô.Ø�L‰L×'Ñ'¨¯©«Ô6÷? �]‰]ús   šBB;Â;Cc                 ó`   — | j                  | j                  ddd¬«      j                  d«       y )Nr´   ÚAladdinúopen sesame©Úauth_usernameÚauth_passwordó"   Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==©rÒ   rÑ   rB   r8   s    r+   Útest_basic_authz(HTTPClientCommonTestCase.test_basic_auth  s0   € à×ÑØ�J‰JØ yÀð ó ç‰dØ1õ		
r-   c                 ób   — | j                  | j                  dddd¬«      j                  d«       y )Nr´   r  r  Úbasic)r
  r  Ú	auth_moder  r  r8   s    r+   Útest_basic_auth_explicit_modez6HTTPClientCommonTestCase.test_basic_auth_explicit_mode#  s7   € Ø×ÑØ�J‰JØØ'Ø+Ø!ð	 ó ÷
 ‰dØ1õ	
r-   c                 óè   — | j                  | j                  ddd¬«      j                  d«       t        j                  dd«      }| j                  | j                  d|d¬«      j                  d	«       y )
Nr´   Útestu   123Â£r	  s   Basic dGVzdDoxMjPCow==ÚNFDu   josÃ©u   sÉ™crÉ™ts   Basic am9zw6k6c8mZY3LJmXQ=)rÒ   rÑ   rB   ÚunicodedataÚ	normalize)r*   Úusernames     r+   Útest_basic_auth_unicodez0HTTPClientCommonTestCase.test_basic_auth_unicode.  sh   € à×ÑØ�J‰J�w¨fÀGˆJÓL×QÑQØ%ô	
ô ×(Ñ(¨°Ó8ˆØ×ÑØ�J‰J�w¨hÀjˆJÓQ×VÑVØ)õ	
r-   c           	      óÞ   — t        t        dd¬«      5  | j                  t        t        f«      5  | j                  ddddd¬	«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)
Nzuncaught exceptionF©Úrequiredr´   r  r  rV   T)r
  r  r  Úraise_error)r   r   ÚassertRaisesÚ
ValueErrorr   rÑ   r8   s    r+   Útest_unsupported_auth_modez3HTTPClientCommonTestCase.test_unsupported_auth_mode=  sc   € ô ”wÐ 4¸uÖEØ×"Ñ"¤J´	Ð#:Õ;Ø—
‘
ØØ"+Ø"/Ø$Ø $ð ô ÷ <÷ FÐEß;Ð;ú÷ FÐEús"   “A#¯AÁA#ÁA 	ÁA#Á#A,c                 ó¢  — | j                  dd¬«      }| j                  d|j                  «       | j                  |j                  d   j                  d«      «       | j                  d«      }| j                  d|j                  «       | j                  |j                  j                  d«      «       | j                  d	|j                  «       y )
Nz/countdown/2F©Úfollow_redirectsé.  ÚLocationz/countdown/1rÏ   z/countdown/0s   Zero)rÑ   rÒ   rÓ   Ú
assertTruer`   ÚendswithÚeffective_urlrB   rÙ   s     r+   Útest_follow_redirectz-HTTPClientCommonTestCase.test_follow_redirectK  s�   € Ø—:‘:˜n¸u�:ÓEˆØ×Ñ˜˜hŸm™mÔ,Ø�‰˜×(Ñ(¨Ñ4×=Ñ=¸nÓMÔNà—:‘:˜nÓ-ˆØ×Ñ˜˜hŸm™mÔ,Ø�‰˜×.Ñ.×7Ñ7¸ÓGÔHØ×Ñ˜ (§-¡-Õ0r-   c                 ób   — | j                  dd¬«      }| j                  d|j                  «       y )Nr²   Tr"  rQ   ©rÑ   rÒ   rÓ   rÙ   s     r+   Útest_redirect_without_locationz7HTTPClientCommonTestCase.test_redirect_without_locationU  s+   € Ø—:‘:Ð:ÈT�:ÓRˆð
 	×Ñ˜˜hŸm™mÕ,r-   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )Nú/redirect?url=/put&status=307ÚPUTÚhellorÎ   ó   Put body: hello©rÑ   rÒ   rB   rÙ   s     r+   Útest_redirect_put_with_bodyz4HTTPClientCommonTestCase.test_redirect_put_with_body]  s3   € Ø—:‘:Ø+°EÀð ó 
ˆð 	×Ñ˜Ÿ™Ð(:Õ;r-   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )Nr.  r/  T©r�   Úallow_nonstandard_methodss
   Put body: r2  rÙ   s     r+   Útest_redirect_put_without_bodyz7HTTPClientCommonTestCase.test_redirect_put_without_bodyc  s4   € à—:‘:Ø+ØØ&*ð ó 
ˆð
 	×Ñ˜Ÿ™¨Õ6r-   c                 ó  — dD ]î  }d|z  }| j                  |dd¬«      }| j                  d|j                  «       dD ]g  }| j                  ||d¬	«      }|d
v r&| j                  t        |«      |j                  «       ŒA| j	                  |j                  t        |«      dg«       Œi | j                  |d¬«      }| j                  d|j
                  «       | j                  d|j                  «       Œð dD ]�  }d}dD ];  }| j                  ||d¬	«      }| j                  |t        |j                  «      «       Œ= | j                  |d¬«      }| j                  d|j
                  «       | j                  d|j                  «       Œ‘ y )N)rQ   r$  i/  z$/redirect?url=/all_methods&status=%drã   r-   rÎ   s   GET)ÚGETÚOPTIONSr/  ÚDELETETr5  )rQ   r$  ÚHEAD©r�   rÏ   )i3  i4  z%/redirect?url=/all_methods&status=307)r9  r:  rã   r/  r;  )rÑ   rÒ   rB   r   ÚassertInrÓ   r   )r*   rH   r   r  r�   s        r+   Útest_method_after_redirectz3HTTPClientCommonTestCase.test_method_after_redirectl  s\  € ã%ˆFØ8¸6ÑAˆCØ—:‘:˜c¨&°s�:Ó;ˆDØ×Ñ˜V T§Y¡YÔ/ó >�Ø—z‘z #¨fÐPT�zÓU�Ø˜ZÑ'Ø×$Ñ$¤T¨&£\°4·9±9Õ=à—M‘M $§)¡)¬d°6«l¸FÐ-CÕDð >ð —:‘:˜c¨&�:Ó1ˆDØ×Ñ˜S $§)¡)Ô,Ø×Ñ˜S $§)¡)Õ,ð! &ó& !ˆFØ9ˆCÛE�Ø—z‘z #¨fÐPT�zÓU�Ø× Ñ  ¬°D·I±IÓ)>Õ?ð Fð —:‘:˜c¨&�:Ó1ˆDØ×Ñ˜S $§)¡)Ô,Ø×Ñ˜S $§)¡)Õ,ñ !r-   c                 óÌ   — | j                  d«      j                  dd«      }| j                  |«      }| j                  dt	        j
                  d«      z   |j                  «       y )Nr´   úhttp://zhttp://me:secret@s   Basic s	   me:secret)Úget_urlrô   rÑ   rÒ   Úbase64Ú	b64encoderB   )r*   r   rÔ   s      r+   Útest_credentials_in_urlz0HTTPClientCommonTestCase.test_credentials_in_urlŠ  sO   € Ø�l‰l˜7Ó#×+Ñ+¨IÐ7JÓKˆØ—:‘:˜c“?ˆØ×Ñ˜¤V×%5Ñ%5°lÓ%CÑCÀXÇ]Á]ÕSr-   c                 ó2  — d}t        j                  d«      }| j                  dd|ddi¬«      }| j                  |j                  d   d	«       | j                  |j
                  t        |«      «       | j                  dd|ddi¬«      }| j                  |j                  d   d
«       | j                  |j
                  |«       | j                  dd|ddid¬«      }| j                  |j                  d   d
«       | j                  |j
                  |«       y )Nô   Ã©s   e9rµ   rã   r%   zapplication/blah)r�   rB   r`   ru   Ú2Ú1Úfoo)r�   rB   r`   Ú
user_agent)ÚbinasciiÚa2b_hexrÑ   rÒ   r`   rB   r   )r*   Úunicode_bodyÚ	byte_bodyrÔ   s       r+   Útest_body_encodingz+HTTPClientCommonTestCase.test_body_encoding�  s*  € ØˆÜ×$Ñ$ UÓ+ˆ	ð —:‘:ØØØØ#Ð%7Ð8ð	 ó 
ˆð 	×Ñ˜×)Ñ)Ð*:Ñ;¸SÔAØ×Ñ˜Ÿ™¬¨\Ó(:Ô;ð —:‘:ØØØØ#Ð%7Ð8ð	 ó 
ˆð 	×Ñ˜×)Ñ)Ð*:Ñ;¸SÔAØ×Ñ˜Ÿ™¨	Ô2ð —:‘:ØØØØ#Ð%7Ð8Øð ó 
ˆð 	×Ñ˜×)Ñ)Ð*:Ñ;¸SÔAØ×Ñ˜Ÿ™¨	Õ2r-   c                 ót  — | j                  d«      }| j                  t        |j                  «      t        «       | j                  t        |j
                  d   «      t        «       | j                  t        |j                  «      t        «       | j                  t        |j                  «      t        «       y )Nr°   r%   )
rÑ   rÒ   ÚtyperB   Úbytesr`   ÚstrrÓ   rK   r(  rÙ   s     r+   Ú
test_typesz#HTTPClientCommonTestCase.test_types³  s}   € Ø—:‘:˜hÓ'ˆØ×Ñœ˜hŸm™mÓ,¬eÔ4Ø×Ñœ˜h×.Ñ.¨~Ñ>Ó?ÄÔEØ×Ñœ˜hŸm™mÓ,¬cÔ2Ø×Ñœ˜h×4Ñ4Ó5´sÕ;r-   c                 ór  — | j                  ddddi¬«      }| j                  |j                  d   d«       | j                  |j                  d«       | j                  t        |j                  «      d«       t        j                  d	|j                  ¬
«      }| j                  |j                  «       d«       y )Nr³   FzAccept-Encodingr“   )Údecompress_responser`   r’   ræ   é"   Úr)ÚmodeÚfileobj)
rÑ   rÒ   r`   ÚassertNotEqualrB   Úlenr“   ÚGzipFileÚbufferÚread)r*   rÔ   Úfs      r+   Ú	test_gzipz"HTTPClientCommonTestCase.test_gzipº  s›   € ð —:‘:Ø¨%Ð:KÈVÐ9Tð ó 
ˆð 	×Ñ˜×)Ñ)Ð*<Ñ=¸vÔFØ×Ñ˜HŸM™M¨;Ô7ð 	×Ñœ˜XŸ]™]Ó+¨RÔ0Ü�M‰M˜s¨H¯O©OÔ<ˆØ×Ñ˜Ÿ™› ;Õ/r-   c                 ó
  — t        t        dd¬«      5  	 | j                  d«      }| j                  |j                  d«       | j                  |j
                  d d d«       d d d «       y # t        $ r Y Œw xY w# 1 sw Y   y xY w)Nz..*Malformed HTTP message.*unconsumed gzip dataFr  rº   rÏ   é   s   Hello World 0
)r   r   rÑ   rÒ   rÓ   rB   r   rÙ   s     r+   Útest_invalid_gzipz*HTTPClientCommonTestCase.test_invalid_gzipË  s�   € ô ÜÐEÐPUö
ðØŸ:™: oÓ6�Ø× Ñ  §¡°Ô4Ø× Ñ  §¡¨s°Ð!3Ð5GÔH÷
ð 
øô ò Ùðú÷
ð 
ús)   “A9•AA*Á*	A6Á3A9Á5A6Á6A9Á9Bc                 óä   ‡ ‡‡‡— g Ši Šg Šˆˆfd„}ˆˆˆ fd„}‰ j                  d||¬«       ‰ j                  t        ‰«      d‰«       ‰ j                  ‰d   d«       ‰ j                  ‰dd	g«       y )
Nc                 óè   •— | j                  d«      ry | j                  d«      r‰j                  | «       y | dk7  r7| j                  dd«      \  }}|j                  «       ‰|j	                  «       <   y y )NzHTTP/1.1 101úHTTP/z
Ú:re   )Ú
startswithrÞ   ÚsplitÚstripÚlower)Úheader_linerŠ   r‹   Ú
first_liner`   s      €€r+   Úheader_callbackzFHTTPClientCommonTestCase.test_header_callback.<locals>.header_callbackÝ  si   ø€ Ø×%Ñ% nÔ5àØ×'Ñ'¨Ô0Ø×!Ñ! +Õ.Ø Ò&Ø"×(Ñ(¨¨aÓ0‘��1Ø%&§W¡W£Y�˜Ÿ™›	Ò"ð 'r-   c                 óR   •— ‰j                  ‰d   d«       ‰j                  | «       y )Nzcontent-typeztext/html; charset=UTF-8)rÒ   rÞ   )Úchunkrà   r`   r*   s    €€€r+   rÝ   zIHTTPClientCommonTestCase.test_header_callback.<locals>.streaming_callbackç  s'   ø€ ð ×Ñ˜W ^Ñ4Ð6PÔQØ�M‰M˜%Õ r-   r³   )rp  rÝ   re   r   zHTTP/[0-9]\.[0-9] 200.*
rç   rè   )rÑ   rÒ   r]  ÚassertRegex)r*   rp  rÝ   rà   ro  r`   s   `  @@@r+   Útest_header_callbackz-HTTPClientCommonTestCase.test_header_callbackØ  sz   û€ Øˆ
ØˆØˆõ	/ö	!ð 	�
‰
ØØ+Ø1ð 	ô 	
ð
 	×Ñœ˜Z›¨!¨ZÔ8Ø×Ñ˜ A™Ð(FÔGØ×Ñ˜ '¨7Ð!3Õ4r-   c                 óÄ   ‡— t        «       Šˆfd„}| j                  d|¬«       ‰j                  «       D ]*  \  }}| j                  ||j	                  «       k(  ||f«       Œ, y )Nc                 óL   •— | j                  d«      ry ‰j                  | «       y )Nrh  )rj  Ú
parse_line)Úliner`   s    €r+   rp  zTHTTPClientCommonTestCase.test_header_callback_to_parse_line.<locals>.header_callbackþ  s    ø€ Ø�‰˜wÔ'àØ×Ñ˜tÕ$r-   r°   )rp  )r   rÑ   r¬   r&  rl  )r*   rp  rŠ   r‹   r`   s       @r+   Ú"test_header_callback_to_parse_linez;HTTPClientCommonTestCase.test_header_callback_to_parse_line÷  sT   ø€ ô
 “-ˆô	%ð 	�
‰
�8¨_ˆ
Ô=Ø—O‘OÖ%‰DˆAˆqØ�O‰O˜A §¡£™N¨Q°¨FÕ3ñ &r-   c              #   ó(  K  — t        dd¬«      }| j                  j                  d|¬«      }	 |j                  | j	                  d«      «      –—}| j                  |j                  d«       |j                  «        y # |j                  «        w xY w­w)NÚTestDefaultUserAgentF)rK  Ú
allow_ipv6T)Úforce_instanceÚdefaultsr¶   s   TestDefaultUserAgent)r«   Úhttp_clientrÆ   rÑ   rB  rÒ   rB   rõ   )r*   r~  ÚclientrÔ   s       r+   Útest_configure_defaultsz0HTTPClientCommonTestCase.test_configure_defaults  st   è ø€ äÐ#9ÀeÔLˆà×!Ñ!×+Ñ+¸4È(Ð+ÓSˆð	Ø#Ÿ\™\¨$¯,©,°}Ó*EÓFÑFˆHØ×Ñ˜XŸ]™]Ð,CÔDà�L‰L�NøˆF�L‰L�Nüs   ‚+B®>A= Á,BÁ=BÂBc                 óÒ   — dD ]b  }t         t        fD ]Q  } |«       }||d<   | j                  d|¬«      }| j                  |j                  dd|j                  ›d|›d|›�«       ŒS Œd y )	N)ÚMyUserAgentó   MyUserAgentrp   r¶   ©r`   r„  z	response=z, value=z, container=)r«   r   rÑ   rÒ   rB   )r*   ÚvalueÚ	containerr`   r  s        r+   Útest_header_typesz*HTTPClientCommonTestCase.test_header_types  sh   € ó
 5ˆEÜ"¤KÓ0�	Ù#›+�Ø(-�˜Ñ%Ø—z‘z -¸�zÓA�Ø× Ñ Ø—I‘IÙ"à—y“y¢%©ð4õñ	 1ñ 5r-   c                 óô  ‡ — t        «       \  }}t        |«      5  t        j                  ˆ fd„«       }t	        j
                  ||«       	 ‰ j                  d|z  «      }|j                  «        ‰ j                  |j                  d   d«       ‰ j                  j                  |j                  «       «       	 d d d «       y # ‰ j                  j                  |j                  «       «       w xY w# 1 sw Y   y xY w)Nc              3   óÚ   •K  — t        | «      }|j                  d«      –—}d|vr‰j                  d«       |j                  dj	                  dd«      «      –— |j                  «        y ­w)Nrì   rí   rî   s2   HTTP/1.1 200 OK
X-XSS-Protection: 1;
	mode=block

rï   rð   rñ   rö   s       €r+   rû   zIHTTPClientCommonTestCase.test_multi_line_headers.<locals>.accept_callback*  sj   øè ø€ ä! $›�Ø%+×%6Ñ%6°{Ó%CÑC�Ø \Ñ1Ø—M‘MÐ"5Ô6Ø—l‘lð÷
 �GØ˜wóó	ò 	ð —‘•ùrü   rý   zX-XSS-Protectionz1; mode=block)r   r   r
   r[   r   rþ   rÑ   rÿ   rÒ   r`   r   r  r  r  s   `    r+   Útest_multi_line_headersz0HTTPClientCommonTestCase.test_multi_line_headers$  s¿   ø€ ô &Ó'‰
ˆˆdÜ�T�]ä�]‰]óó ðô" ×&Ñ& t¨_Ô=ð;Ø—z‘zÐ"8¸4Ñ"?Ó@�Ø—‘”Ø× Ñ  §¡Ð.@Ñ!AÀ?ÔSà—‘×+Ñ+¨D¯K©K«MÕ:÷5 ˆ]øð4 —‘×+Ñ+¨D¯K©K«MÕ:ú÷5 ˆ]ús$   š/C.Á
AC Â)C.Ã +C+Ã+C.Ã.C7c              #   óÂ   K  — | j                   j                  | j                  d«      ddi¬«      –—}| j                  |j                  dj                  d«      «       y ­w)Nr»   r¦   u   bÃ¤rr…  r§   )r  rÑ   rB  rÒ   rB   r    rÙ   s     r+   Útest_header_encodingz-HTTPClientCommonTestCase.test_header_encodingD  s\   è ø€ à×)Ñ)×/Ñ/Ø�L‰LÐ+Ó,à�xðð 0ó 
ñ 
ˆð 	×Ñ˜Ÿ™¨¯©¸Ó(DÕEùs   ‚AAc                 óœ   — | j                  d«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nr·   rt   ru   Ú42)rÑ   rÒ   rÓ   r`   rÙ   s     r+   Útest_304_with_content_lengthz5HTTPClientCommonTestCase.test_304_with_content_lengthN  sC   € ð
 —:‘:Ð8Ó9ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)Ð*:Ñ;¸TÕBr-   c              #   óœ   K  — | j                   j                  | j                  d«      «      –—}| j                  |j                  d«       y ­w©Nr°   r×   ©r  rÑ   rB  rÒ   rB   rÙ   s     r+   Útest_future_interfacez.HTTPClientCommonTestCase.test_future_interfaceW  s<   è ø€ à×)Ñ)×/Ñ/°·±¸XÓ0FÓGÑGˆØ×Ñ˜Ÿ™¨Õ8ùs   ‚A
Ac              #   ó°  K  — | j                  t        «      5 }| j                  j                  | j	                  d«      «      –— d d d «       j
                  €J ‚|j
                  j                  €J ‚| j                  |j
                  j                  d«       | j                  |j
                  j                  j                  d«       y # 1 sw Y   Œ†xY w­w©Nú	/notfoundé”  )	r  r   r  rÑ   rB  Ú	exceptionrÔ   rÒ   rÓ   )r*   Úcontexts     r+   Útest_future_http_errorz/HTTPClientCommonTestCase.test_future_http_error\  s«   è ø€ à×ÑœyÔ)¨WØ×"Ñ"×(Ñ(¨¯©°kÓ)BÓCÒC÷ *à× Ñ Ð,Ð,Ð,Ø× Ñ ×)Ñ)Ð5Ð5Ð5Ø×Ñ˜×*Ñ*×/Ñ/°Ô5Ø×Ñ˜×*Ñ*×3Ñ3×8Ñ8¸#Õ>÷ *Ð)üs   ‚C˜-C
ÁBCÃ
CÃCc              #   ó    K  — | j                   j                  | j                  d«      d¬«      –—}| j                  |j                  d«       y ­w)Nr—  F)r  r˜  )r  rÑ   rB  rÒ   rÓ   rÙ   s     r+   Útest_future_http_error_no_raisez8HTTPClientCommonTestCase.test_future_http_error_no_raisee  sJ   è ø€ à×)Ñ)×/Ñ/Ø�L‰L˜Ó%°5ð 0ó 
ñ 
ˆð 	×Ñ˜Ÿ™¨Õ,ùs   ‚AAc              #   óŒ  K  — | j                  d«      }| j                  j                  |«      –—}| j                  |j                  j
                  |«       | j                  t        |j                  t        «      «       | j                  j                  |j                  «      –—}| j                  |j                  d«       y ­wr’  )
rB  r  rÑ   rÒ   rA   r   r&  Ú
isinstancer   rB   )r*   r   rÔ   Ú	response2s       r+   Ú test_reuse_request_from_responsez9HTTPClientCommonTestCase.test_reuse_request_from_responsel  s—   è ø€ ð �l‰l˜8Ó$ˆØ×)Ñ)×/Ñ/°Ó4Ñ4ˆØ×Ñ˜×)Ñ)×-Ñ-¨sÔ3Ø�‰œ
 8×#3Ñ#3´[ÓAÔBØ×*Ñ*×0Ñ0°×1AÑ1AÓBÑBˆ	Ø×Ñ˜Ÿ™¨Õ9ùs   ‚CCc              #   óì  K  — | j                  d«      }t        |d¬«      }| j                  j                  |«      –—}| j	                  |j
                  d«       | j                  t        t        f«      5 }t        |d¬«      }| j                  j                  |«      –— d d d «       | j                  dt        j                  «      v xs dt        |j                  «      v «       y # 1 sw Y   ŒIxY w­w)Nr°   z	127.0.0.1©Únetwork_interfacerÏ   znot-interface-or-ipz#Failed binding local connection end)rB  r   r  rÑ   rÒ   rÓ   r  r  r   r&  rT  r™  )r*   r   rA   rÔ   rš  s        r+   Útest_bind_source_ipz,HTTPClientCommonTestCase.test_bind_source_ipy  sÍ   è ø€ à�l‰l˜8Ó$ˆÜ˜c°[ÔAˆØ×)Ñ)×/Ñ/°Ó8Ñ8ˆØ×Ñ˜Ÿ™¨Ô,à×Ñ¤
¬IÐ6Ô7¸7Ü! #Ð9NÔOˆGØ×"Ñ"×(Ñ(¨Ó1Ò1÷ 8ð 	�‰Ø!¤S¨×):Ñ):Ó%;Ð;ò OØ4¼¸G×<MÑ<MÓ8NÐNõ	
÷ 8Ð7üs   ‚A3C4Á5+C(Â AC4Ã(C1Ã-C4c                 óÀ  — dD ]:  }| j                  d|¬«      }| j                  |j                  t        |«      «       Œ< dD ];  }| j                  d|d¬«      }| j                  |j                  t        |«      «       Œ= | j                  dd¬«      }| j                  |j                  d«       | j                  ddd	¬
«      }| j                  |j                  d«       y )N©r9  r;  r:  r¸   r=  ©rã   r/  rÍ   r-   rÎ   r<  r   Tr5  s   OTHER)rÑ   rÒ   rB   r   )r*   r�   rÔ   s      r+   Útest_all_methodsz)HTTPClientCommonTestCase.test_all_methodsˆ  sÆ   € Û2ˆFØ—z‘z .¸�zÓ@ˆHØ×Ñ˜XŸ]™]¬D°«LÕ9ð 3ó /ˆFØ—z‘z .¸Àc�zÓJˆHØ×Ñ˜XŸ]™]¬D°«LÕ9ð /ð —:‘:˜n°V�:Ó<ˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:Ø 7Àdð ó 
ˆð 	×Ñ˜Ÿ™¨Õ1r-   c                 ó~  — dD ]‰  }| j                  t        «      5 }| j                  d|d¬«       d d d «       | j                  dt	        j
                  «      «       | j                  d|d¬«      }| j                  |j                  d«       Œ‹ dD ]’  }| j                  t        «      5 }| j                  d|d	d¬
«       d d d «       | j                  dt	        j
                  «      «       |dk7  sŒa| j                  d|d	dd¬«       | j                  j                  d«       Œ” y # 1 sw Y   ŒøxY w# 1 sw Y   ŒuxY w)Nr¨  r¸   T)r�   r  zmust not be Noner5  rÏ   r§  rç   )r�   rB   r  zmust be Noner9  )r�   rB   r6  r  )r  r  rÑ   r>  rT  r™  rÒ   rÓ   )r*   r�   rš  r  s       r+   Útest_body_sanity_checksz0HTTPClientCommonTestCase.test_body_sanity_checks–  s$  € ã.ˆFØ×"Ñ"¤:Ô.°'Ø—
‘
˜>°&Àd�
ÔK÷ /à�M‰MÐ,¬c°'×2CÑ2CÓ.DÔEà—:‘:Ø vÈð ó ˆDð ×Ñ˜TŸY™Y¨Õ,ð /ó 3ˆFØ×"Ñ"¤:Ô.°'Ø—
‘
Ø"¨6¸ÈTð ô ÷ /ð �M‰M˜.¬#¨g×.?Ñ.?Ó*@ÔAð ˜‹Ø—
‘
Ø"Ø!Ø Ø.2Ø $ð ô ð × Ñ  §¡¨CÕ0ñ# 3÷ /Ð.ú÷ /Ð.ús   ›D'Â)D3Ä'D0	Ä3D<	c                 ó„   — | j                  ddd¬«      }|j                  «        | j                  |j                  d«       y )Nz/redirect?status=307&url=/putr/  s   hellorÎ   r1  )rÑ   rÿ   rÒ   rB   rÙ   s     r+   Útest_put_307z%HTTPClientCommonTestCase.test_put_307Æ  s?   € Ø—:‘:Ø+°EÀð ó 
ˆð 	×ÑÔØ×Ñ˜Ÿ™Ð(:Õ;r-   c                 ó–   — | j                  d«      }|j                  «        | j                  |j                  d   t	        d«      «       y )Nz/set_header?k=foo&v=%E9r¦   rG  )rÑ   rÿ   rÒ   r`   r   rÙ   s     r+   Útest_non_ascii_headerz.HTTPClientCommonTestCase.test_non_ascii_headerÍ  s=   € à—:‘:Ð7Ó8ˆØ×ÑÔØ×Ñ˜×)Ñ)¨%Ñ0´*¸XÓ2FÕGr-   c                 ób  — t        j                   «       }| j                  d«      }|j                  «        | j                  |j                  «       |j                  €J ‚| j                  |j                  d«       | j                  |j                  d«       | j                  |j                  «       |j                  €J ‚| j                  t        |j                  |z
  «      d«       |j                  j                  «       D ]+  \  }}| j                  d|cxk  xr dk  nc d|› d|› �«       Œ- y )Nr°   r   g      ð?z
time_info[z] out of bounds: )ÚtimerÑ   rÿ   ÚassertIsNotNonerØ   ÚassertGreaterEqualÚ
assertLessÚ
start_timeÚabsÚ	time_infoÚitemsr&  )r*   rµ  rÔ   rŠ   r‹   s        r+   Útest_response_timesz,HTTPClientCommonTestCase.test_response_timesÓ  s   € ô —Y‘Y“[ˆ
Ø—:‘:˜hÓ'ˆØ×ÑÔØ×Ñ˜X×2Ñ2Ô3Ø×$Ñ$Ð0Ð0Ð0Ø×Ñ × 5Ñ 5°qÔ9Ø�‰˜×-Ñ-¨sÔ3ð 	×Ñ˜X×0Ñ0Ô1Ø×"Ñ"Ð.Ð.Ð.Ø�‰œ˜H×/Ñ/°*Ñ<Ó=¸sÔCà×&Ñ&×,Ñ,Ö.‰DˆAˆqØ�O‰O˜A žL SœL¨J°q°cÐ9JÈ1È#Ð*NÕOñ /r-   c                 ó   — | j                  dd¬«      }| j                  |j                  d«       | j                  dd¬«      }| j                  |j                  d«       | j                  ddd¬«      }| j                  |j                  d«       y )Nr°   r   )Úconnect_timeoutrÏ   )Úrequest_timeout)r»  r¼  r+  rÙ   s     r+   Útest_zero_timeoutz*HTTPClientCommonTestCase.test_zero_timeoutç  sv   € Ø—:‘:˜h¸�:Ó:ˆØ×Ñ˜Ÿ™¨Ô,à—:‘:˜h¸�:Ó:ˆØ×Ñ˜Ÿ™¨Ô,à—:‘:˜h¸È1�:ÓMˆØ×Ñ˜Ÿ™¨Õ,r-   c              #   óR  K  — | j                   j                  | j                  d«      «      }| j                  |j	                  «       «       t        t        d«      5 }t        d«      D ]'  }t        j                  d«      –— |j                  sŒ' n d d d «       y # 1 sw Y   y xY w­w)Nz/404z$Exception after Future was cancelledéd   rW   )r  rÑ   rB  r&  Úcancelr   r   rž   r
   rZ   Úlogged_stack)r*   ÚfutÚelr˜   s       r+   Útest_error_after_cancelz0HTTPClientCommonTestCase.test_error_after_cancelñ  sx   è ø€ à×Ñ×$Ñ$ T§\¡\°&Ó%9Ó:ˆØ�‰˜Ÿ
™
›Ô%Ü”wÐ FÔGÈ2ô
 ˜3–Z�Ü—i‘i “oÒ%Ø—?“?Ùð  ÷ H×GÑGüs$   ‚AB'Á2BÂBÂ	B'ÂB$Â B'c                 ó´  — dD ]£  \  }}| j                  |d¬«      5  | j                  t        «      5  | j                  dd|i¬«       d d d «       d d d «       | j                  |d¬«      5  | j                  t        «      5  | j                  d|di¬«       d d d «       d d d «       Œ¥ y # 1 sw Y   ŒcxY w# 1 sw Y   ŒgxY w# 1 sw Y   Œ,xY w# 1 sw Y   ŒÔxY w)N))zfoobar:Úcr)zfoo
bar:Úlf)z	foo
bar:Úcrlfr†  )r#   Úpositionr°   rJ  r…  Úkey)ÚsubTestr  r  rÑ   )r*   Úheaderr#   s      r+   Útest_header_crlfz)HTTPClientCommonTestCase.test_header_crlfÿ  sµ   € ó
‰LˆF�Dð
 —‘ 4°'�Õ:Ø×&Ñ&¤zÕ2Ø—J‘J˜x°%¸°�JÔA÷ 3÷ ;ð —‘ 4°%�Õ8Ø×&Ñ&¤zÕ2Ø—J‘J˜x°&¸%°�JÔA÷ 3÷ 9Ð8ñ
÷ 3Ð2ú÷ ;Ð:ú÷ 3Ð2ú÷ 9Ð8úsF   œB6²B*ÁB6Á+CÂCÂCÂ*B3Â/B6Â6B?	ÃCÃCÃC	c           	      ó  — dt        ddi¬«      dfdt        «       dfdt        d	d¬
«      dfdt        ddi¬«      dfg}|D �]¦  \  }}}| j                  |d¬«      5  | j                  d| j                  d«      z  «      }|r |j                  dd|z  d«      } | j
                  di t        |¬«      |z  ¤Ž}|j                  «        t        |j                  «      }| j                  d|«       | j                  d|«       | j                  d|«       d d d «       | j                  |d¬«      5  | j                  d| j                  d«      z  «      }|r |j                  dd|z  d«      } | j
                  di t        |¬«      |z  ¤Ž}|j                  «        t        |j                  «      }| j                  d|«       |dk(  rn| j                  d|v xs d|v «       d d d «       �Œ© y # 1 sw Y   ŒÚxY w# 1 sw Y   �ŒÁxY w)Nzmanual auth headerr_   Úsecretr…  r”   zcredentials in URLz	me:secretzauth parametersÚmer	  zmanual cookie headerÚCookieÚ	different)r#   Úoriginz/redirect?url=%s&status=302r¼   rA  z
http://%s@re   )rÇ   rp   Úsamer2   )r«   rË  rB  rË   rô   rÑ   rÿ   r	   rB   r>  ÚassertNotInr&  )r*   Ú
test_casesr#   ÚkwargsÚ	url_credsr   rÔ   Úechoed_headerss           r+   Útest_strip_headers_on_redirectz7HTTPClientCommonTestCase.test_strip_headers_on_redirect  sõ  € ð "¤4°À(Ð0KÔ#LÈbÐQØ!¤4£6¨;Ð7Ø¤°4ÀxÔ PÐRTÐUØ#¤T°8¸XÐ2FÔ%GÈÐLð	3
ˆ
ô (2Ñ#ˆD�&˜)Ø—‘ 4°�Õ<Ø—l‘lØ1°D·M±MÀ/Ó4RÑRó�ñ ð &˜#Ÿ+™+ i°À	Ñ1IÈ1ÓM�CØ%˜4Ÿ:™:Ñ@¬°#¬¸Ñ(?Ñ@�Ø× Ñ Ô"Ü!,¨X¯]©]Ó!;�à—‘˜l¨NÔ;à× Ñ  °.ÔAØ× Ñ  ¨>Ô:÷% =ð& —‘ 4°�Õ7Ø—l‘lØ1°D·L±LÀÓ4QÑQó�ñ Ø%˜#Ÿ+™+ i°À	Ñ1IÈ1ÓM�CØ%˜4Ÿ:™:Ñ@¬°#¬¸Ñ(?Ñ@�Ø× Ñ Ô"Ü!,¨X¯]©]Ó!;�à—‘˜l¨NÔ;ØÐ/Ò/ð ð —O‘OØ'¨>Ð9ÒW¸XÈÐ=Wô÷/ 8Ñ7ñ) (2ß<Ð<ú÷& 8Ñ7ús   ÁB7G+Ä-B2G7Ç+G4	Ç7H	)2r/   r0   r1   r½   rÀ   rT  rË   rÕ   rÚ   rá   rä   ré   r  r  r  r  r   r)  r,  r3  r7  r?  rE  rP  rU  rb  re  rt  ry  r   r�  rˆ  r‹  r�  r�  r”  r›  r�  r¡  r¥  r©  r«  r­  r¯  r¹  r½  rÄ  rÍ  rÚ  Ú__classcell__)rÆ   s   @r+   r®   r®   ©   st  ø„ ò
ô0ðI˜Sð I Só Iò.ò	7ò(òFò
(ò#7òJ
ò	
ò
òò1ò-ò<ò7ò-ò<Tò
"3òH<ò0ò"ò5ò>4ð" ñó ðòò";ð@ ñFó ðFòCð ñ9ó ð9ð ñ?ó ð?ð ñ-ó ð-ð ñ
:ó ð
:ð ñ
ó ð
ò2ò1ò`<òHòPò(-ð ñó ðòBö 6r-   r®   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚRequestProxyTestc                 óz   — t        t        dd¬«      t        «       «      }| j                  |j                  d«       y )Núhttp://example.com/rJ  )rK  )r   r   r«   rÒ   rK  ©r*   Úproxys     r+   Útest_request_setz!RequestProxyTest.test_request_setI  s3   € ÜÜÐ-¸%Ô@Ä$Ã&ó
ˆð 	×Ñ˜×)Ñ)¨5Õ1r-   c                 óz   — t        t        d«      t        d¬«      «      }| j                  |j                  d«       y )Nrß  rJ  r£  )r   r   r«   rÒ   r¤  rà  s     r+   Útest_default_setz!RequestProxyTest.test_default_setO  s4   € ÜÜÐ-Ó.´ÀuÔ0Mó
ˆð 	×Ñ˜×0Ñ0°%Õ8r-   c                 ó~   — t        t        dd¬«      t        d¬«      «      }| j                  |j                  d«       y )Nrß  rJ  )Ú
proxy_hostÚbar)r   r   r«   rÒ   ræ  rà  s     r+   Útest_both_setzRequestProxyTest.test_both_setU  s7   € ÜÜÐ-¸%Ô@Ä$ÐRWÔBXó
ˆð 	×Ñ˜×)Ñ)¨5Õ1r-   c                 ót   — t        t        d«      t        «       «      }| j                  |j                  «       y ©Nrß  )r   r   r«   ÚassertIsNoner
  rà  s     r+   Útest_neither_setz!RequestProxyTest.test_neither_set[  s*   € ÜœkÐ*?Ó@Ä$Ã&ÓIˆØ×Ñ˜%×-Ñ-Õ.r-   c                 óª   — t        t        d«      t        «       «      }| j                  t        «      5  |j
                   d d d «       y # 1 sw Y   y xY wrê  )r   r   r«   r  ÚAttributeErrorrJ  rà  s     r+   Útest_bad_attributez#RequestProxyTest.test_bad_attribute_  s7   € ÜœkÐ*?Ó@Ä$Ã&ÓIˆØ×Ñœ~Õ.Ø�IŠI÷ /×.Ñ.ús   ³A	Á	Ac                 ód   — t        t        d«      d «      }| j                  |j                  «       y rê  )r   r   rë  r
  rà  s     r+   Útest_defaults_nonez#RequestProxyTest.test_defaults_noned  s(   € ÜœkÐ*?Ó@À$ÓGˆØ×Ñ˜%×-Ñ-Õ.r-   N)	r/   r0   r1   râ  rä  rè  rì  rï  rñ  r2   r-   r+   rÝ  rÝ  H  s    „ ò2ò9ò2ò/òó
/r-   rÝ  c                   ó   — e Zd Zd„ Zy)ÚHTTPResponseTestCasec                 ó¼   — t        t        d«      dt        «       ¬«      }t        |«      }| j	                  |j                  d«      «       | j                  d|«       y )Núhttp://example.comrÏ   )r_  zHTTPResponse(zcode=200)r   r   r   rT  r&  rj  r>  )r*   rÔ   Úss      r+   Útest_strzHTTPResponseTestCase.test_strj  sI   € ÜÜÐ,Ó-¨s¼7»9ô
ˆô �‹MˆØ�‰˜Ÿ™ _Ó5Ô6Ø�‰�j !Õ$r-   N)r/   r0   r1   r÷  r2   r-   r+   ró  ró  i  s   „ ó%r-   ró  c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚSyncHTTPClientTestc                 ó:  ‡ ‡‡— t        d¬«      ‰ _        t        j                  «       Št        j
                  ˆˆ fd„«       Šˆˆ fd„}t        j                  |¬«      ‰ _        ‰ j                  j                  «        ‰j                  «        t        «       ‰ _        y )NF)Úmake_currentc                  óÄ   •— t        «       \  } ‰_        t        dt        fg«      }t	        |«      ‰_        ‰j
                  j                  | «       ‰j                  «        y )NÚ/)r   rÅ   r   r!   r   ÚserverrÂ   Úset)rÄ   ÚappÚeventr*   s     €€r+   Úinit_serverz-SyncHTTPClientTest.setUp.<locals>.init_serverx  sJ   ø€ ä.Ó0‰OˆD�$”)Ü Ô%6Ð7Ð8Ó9ˆCÜ$ S›/ˆDŒKØ�K‰K×"Ñ" 4Ô(Ø�I‰I�Kr-   c                  óp   •— ‰j                   j                  ‰ «       ‰j                   j                  «        y rl   )Úserver_ioloopÚrun_syncÚstart)r  r*   s   €€r+   r  z'SyncHTTPClientTest.setUp.<locals>.start€  s)   ø€ Ø×Ñ×'Ñ'¨Ô4Ø×Ñ×$Ñ$Õ&r-   )Útarget)r   r  Ú	threadingÚEventr
   r[   ÚThreadÚserver_threadr  Úwaitr   r  )r*   r  r  r  s   ` @@r+   rÀ   zSyncHTTPClientTest.setUpt  sq   ú€ Ü#°Ô7ˆÔÜ—‘Ó!ˆä	�‰ô	ó 
ð	õ	'ô '×-Ñ-°UÔ;ˆÔØ×Ñ× Ñ Ô"Ø�
‰
Œä%›<ˆÕr-   c                 óæ   ‡ — ˆ fd„}‰ j                   j                  |«       ‰ j                  j                  «        ‰ j                  j                  «        ‰ j                   j                  d¬«       y )Nc                  ó    •— ‰j                   j                  «        t        j                  ˆfd„«       } ‰j                  j                  | «       y )Nc               3   ó¢   •K  — ‰j                   j                  «       –— t        d«      D ]  } d –— Œ ‰j                  j	                  «        y ­w)Né   )rþ  Úclose_all_connectionsrž   r  Ústop)r˜   r*   s    €r+   Ú	slow_stopzCSyncHTTPClientTest.tearDown.<locals>.stop_server.<locals>.slow_stop“  s?   øè ø€ à—k‘k×7Ñ7Ó9Ò9ô ˜qž�AÜð "à×"Ñ"×'Ñ'Õ)ùs   ƒAA)rþ  r  r
   r[   r  Úadd_callback)r  r*   s    €r+   Ústop_serverz0SyncHTTPClientTest.tearDown.<locals>.stop_server‹  sA   ø€ Ø�K‰K×ÑÔô �]‰]ó*ó ð*ð ×Ñ×+Ñ+¨IÕ6r-   T)Úall_fds)r  r  r  r�   r  rõ   )r*   r  s   ` r+   ÚtearDownzSyncHTTPClientTest.tearDownŠ  sY   ø€ ô	7ð& 	×Ñ×'Ñ'¨Ô4Ø×Ñ×ÑÔ!Ø×Ñ×ÑÔ Ø×Ñ× Ñ ¨Ð Õ.r-   c                 ó$   — d| j                   |fz  S )Nzhttp://127.0.0.1:%d%s)rÅ   rÊ   s     r+   rB  zSyncHTTPClientTest.get_url£  s   € Ø&¨$¯)©)°TÐ):Ñ:Ð:r-   c                 ó�   — | j                   j                  | j                  d«      «      }| j                  d|j                  «       y )Nrý  r×   r“  rÙ   s     r+   Útest_sync_clientz#SyncHTTPClientTest.test_sync_client¦  s5   € Ø×#Ñ#×)Ñ)¨$¯,©,°sÓ*;Ó<ˆØ×Ñ˜¨(¯-©-Õ8r-   c                 óø   — | j                  t        «      5 }| j                  j                  | j	                  d«      «       d d d «       | j                  j                  j                  d«       y # 1 sw Y   Œ0xY wr–  )r  r   r  rÑ   rB  rÒ   r™  rÓ   )r*   Ú	assertions     r+   Útest_sync_client_errorz)SyncHTTPClientTest.test_sync_client_errorª  s[   € ð ×ÑœyÔ)¨YØ×Ñ×"Ñ" 4§<¡<°Ó#<Ô=÷ *à×Ñ˜×,Ñ,×1Ñ1°3Õ7÷ *Ð)ús   –+A0Á0A9N)r/   r0   r1   rÀ   r  rB  r  r  r2   r-   r+   rù  rù  s  s   „ ò(ò,/ò2;ò9ó8r-   rù  c                   ó   — e Zd Zd„ Zy)ÚSyncHTTPClientSubprocessTestc                 ó8  — t        j                  t        j                  ddgt         j                  t         j
                  dd¬«      }|j                  r)t        d«       t        t        |j                  «      «       |j                  r| j                  d«       y y )Nz-czMfrom tornado.httpclient import HTTPClient; f = lambda: None; c = HTTPClient()Té   )ÚstdoutÚstderrÚcheckÚtimeoutzSTDOUT:z%subprocess produced unexpected output)
Ú
subprocessÚrunÚsysÚ
executableÚPIPEÚSTDOUTr"  Úprintr   Úfail)r*   Úprocs     r+   Útest_destructor_logz0SyncHTTPClientSubprocessTest.test_destructor_log³  sw   € ô �~‰~ä—‘ØØ_ðô
 —?‘?Ü×$Ñ$ØØô

ˆð �;Š;Ü�)ÔÜ”*˜TŸ[™[Ó)Ô*Ø�;Š;Ø�I‰IÐ=Õ>ð r-   N)r/   r0   r1   r/  r2   r-   r+   r  r  ²  s   „ ó?r-   r  c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚHTTPRequestTestCasec                 ó^   — t        dddi¬«      }| j                  |j                  ddi«       y )Nrõ  rJ  rç  r…  )r   rÒ   r`   ©r*   rA   s     r+   Útest_headersz HTTPRequestTestCase.test_headersÑ  s+   € ÜÐ2¸UÀE¸NÔKˆØ×Ñ˜Ÿ™¨5°%¨.Õ9r-   c                 óh   — t        d«      }ddi|_        | j                  |j                  ddi«       y )Nrõ  rç  Úbaz©r   r`   rÒ   r3  s     r+   Útest_headers_setterz'HTTPRequestTestCase.test_headers_setterÕ  s0   € ÜÐ2Ó3ˆØ  %˜.ˆŒØ×Ñ˜Ÿ™¨5°%¨.Õ9r-   c                 ó`   — t        d«      }d |_        | j                  |j                  i «       y )Nrõ  r7  r3  s     r+   Útest_null_headers_setterz,HTTPRequestTestCase.test_null_headers_setterÚ  s(   € ÜÐ2Ó3ˆØˆŒØ×Ñ˜Ÿ™¨"Õ-r-   c                 óh   — t        dd¬«      }| j                  |j                  t        d«      «       y )Nrõ  rJ  )rB   )r   rÒ   rB   r   r3  s     r+   Ú	test_bodyzHTTPRequestTestCase.test_bodyß  s'   € ÜÐ2¸Ô?ˆØ×Ñ˜Ÿ™¤t¨E£{Õ3r-   c                 ór   — t        d«      }d|_        | j                  |j                  t        d«      «       y )Nrõ  rJ  )r   rB   rÒ   r   r3  s     r+   Útest_body_setterz$HTTPRequestTestCase.test_body_setterã  s,   € ÜÐ2Ó3ˆØˆŒØ×Ñ˜Ÿ™¤t¨E£{Õ3r-   c                 óÚ   — t         j                   j                  t         j                  j                  «      }t	        d|¬«      }| j                  |j                  dt        |«      i«       y ©Nrõ  )Úif_modified_sincezIf-Modified-Since)ÚdatetimeÚnowÚtimezoneÚutcr   rÒ   r`   r   ©r*   Ú	http_daterA   s      r+   Útest_if_modified_sincez*HTTPRequestTestCase.test_if_modified_sinceè  sT   € Ü×%Ñ%×)Ñ)¬(×*;Ñ*;×*?Ñ*?Ó@ˆ	ÜÐ2ÀiÔPˆØ×ÑØ�O‰OÐ1Ô3CÀIÓ3NÐOõ	
r-   c                 óæ   — t        «       5  t        j                  j                  «       }d d d «       t        d¬«      }| j	                  |j
                  dt        |«      i«       y # 1 sw Y   Œ>xY wr@  )r   rB  Úutcnowr   rÒ   r`   r   rF  s      r+   Ú'test_if_modified_since_naive_deprecatedz;HTTPRequestTestCase.test_if_modified_since_naive_deprecatedï  sZ   € ÜÕ!Ü ×)Ñ)×0Ñ0Ó2ˆI÷ "äÐ2ÀiÔPˆØ×ÑØ�O‰OÐ1Ô3CÀIÓ3NÐOõ	
÷ "Ð!ús   ‹A'Á'A0N)
r/   r0   r1   r4  r8  r:  r<  r>  rH  rK  r2   r-   r+   r1  r1  Ð  s%   „ ò:ò:ò
.ò
4ò4ò

ó
r-   r1  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚHTTPErrorTestCasec                 ó´   — t        d«      }t        j                  |«      }| j                  ||«       | j                  |j                  |j                  «       y )Né“  )r   ÚcopyÚassertIsNotrÒ   rÓ   )r*   ÚeÚe2s      r+   Ú	test_copyzHTTPErrorTestCase.test_copyù  s@   € Ü�c‹NˆÜ�Y‰Y�q‹\ˆØ×Ñ˜˜BÔØ×Ñ˜Ÿ™ §¡Õ)r-   c                 ó†   — t        d«      }| j                  t        |«      d«       | j                  t        |«      d«       y )NrO  úHTTP 403: Forbidden)r   rÒ   rT  Úrepr)r*   rR  s     r+   Útest_plain_errorz"HTTPErrorTestCase.test_plain_errorÿ  s5   € Ü�c‹NˆØ×Ñœ˜Q›Ð!6Ô7Ø×Ñœ˜a›Ð"7Õ8r-   c                 ó&  — t        t        d«      d«      }| j                  t        «      5 }|j	                  «        d d d «       j
                  }| j                  t        |«      d«       | j                  t        |«      d«       y # 1 sw Y   ŒLxY w)Nrß  rO  rV  )	r   r   r  r   rÿ   r™  rÒ   rT  rW  )r*   r  ÚcmrR  s       r+   Útest_error_with_responsez*HTTPErrorTestCase.test_error_with_response  sn   € ÜœKÐ(=Ó>ÀÓDˆØ×ÑœyÔ)¨RØ�L‰LŒN÷ *à�L‰LˆØ×Ñœ˜Q›Ð!6Ô7Ø×Ñœ˜a›Ð"7Õ8÷	 *Ð)ús   «BÂBN)r/   r0   r1   rT  rX  r[  r2   r-   r+   rM  rM  ø  s   „ ò*ò9ó
9r-   rM  )OrC  rL  Ú
contextlibr   rP  r“   r  rB  Úior   r&  r(  r±  Útypingr  ÚunittestÚtornado.escaper   r   r   r   r	   Útornador
   Útornado.httpclientr   r   r   r   r   Útornado.httpserverr   Útornado.ioloopr   Útornado.iostreamr   Útornado.logr   r   r   Útornado.testingr   r   r   r   Útornado.test.utilr   Útornado.webr   r   r   Útornado.httputilr   r   r!   r4   r=   rF   rO   rT   r]   rb   rj   rn   rr   rz   r~   rˆ   r�   r¤   r©   r®   ÚTestCaserÝ  ró  rù  r  r1  rM  r2   r-   r+   Ú<module>rl     s¸  ðÛ Û Ý Û Û Û Û Ý Û Û 
Û Û Û Û ç QÕ QÝ ÷õ õ *Ý !Ý %ß (Ý ß TÓ TÝ 0ß 8Ñ 8ß :ô(˜ô (ô
�.ô 
ô&�ô &ô
�nô 
ô ^ô ô�>ô ô;�.ô ;ô
�~ô ô&�nô &ô
Q�~ô Qô
˜nô ô&�>ô &ôH˜ô Hô"�~ô "ô
˜ô 
ôE˜Nô Eô
F˜ô Fô\
Ð0ô \
ô~/�x×(Ñ(ô /ôB%˜8×,Ñ,ô %ô<8˜×*Ñ*ô <8ô~? 8×#4Ñ#4ô ?ô<%
˜(×+Ñ+ô %
ôP9˜×)Ñ)õ 9r-   