
    ^hȏ                        S SK r S SKrS SKJr  S SKrS SKrS SKrS SKrS SKJ	r	  S SK
r
S SKrS SKrS SKrS SKrS SKrS SKJrJrJr  S SKJr  S SKJrJrJrJrJr  S SKJr  S SKJr  S S	K J!r!  S S
K"J#r#J$r$  S SKJ%r%  S SK&J'r'J(r(J)r)J*r*  S SK+J,r,  S SK-J.r.J/r/J0r0  S SK1J2r2J3r3   " S S\/5      r4 " S S\/5      r5 " S S\/5      r6 " S S\/5      r7 " S S\/5      r8 " S S\/5      r9 " S S\/5      r: " S S\/5      r; " S  S!\/5      r< " S" S#\/5      r= " S$ S%\/5      r> " S& S'\/5      r? " S( S)\/5      r@ " S* S+\/5      rA " S, S-\/5      rB " S. S/\/5      rC " S0 S1\'5      rD " S2 S3\R                  5      rF " S4 S5\R                  5      rG " S6 S7\R                  5      rH " S8 S9\R                  5      rI " S: S;\R                  5      rJ " S< S=\R                  5      rKg)>    N)closing)BytesIO)utf8
native_str
to_unicode)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                       \ rS rSrS rSrg)HelloWorldHandler$   c                 t    U R                  SS5      nU R                  SS5        U R                  SU-  5        g )NnameworldContent-Type
text/plainz	Hello %s!)get_argument
set_headerfinish)selfr"   s     V/home/james-whalen/.local/lib/python3.13/site-packages/tornado/test/httpclient_test.pygetHelloWorldHandler.get%   s3      15K$&'     N__name__
__module____qualname____firstlineno__r+   __static_attributes__r.   r-   r*   r   r   $   s    (r-   r   c                       \ rS rSrS rSrg)PostHandler+   c                 r    U R                  SU R                  S5      < SU R                  S5      < 35        g )NzPost arg1: arg1z, arg2: arg2)r(   r&   r)   s    r*   postPostHandler.post,   s/      ($*;*;F*CE	
r-   r.   Nr0   r1   r2   r3   r<   r4   r.   r-   r*   r6   r6   +       
r-   r6   c                       \ rS rSrS rSrg)
PutHandler3   c                 p    U R                  S5        U R                  U R                  R                  5        g )Nz
Put body: writerequestbodyr;   s    r*   putPutHandler.put4   s$    

< 

4<<$$%r-   r.   N)r0   r1   r2   r3   rH   r4   r.   r-   r*   rA   rA   3       &r-   rA   c                       \ rS rSrS rSrg)RedirectHandler9   c           	          U R                  S5        U R                  U R                  S5      [        U R                  SS5      5      S9  g )Nzredirects can have bodies toor   status302)rO   )rE   redirectr&   intr;   s    r*   prepareRedirectHandler.prepare:   sB    

23e$S1B1B8U1S-T 	 	
r-   r.   Nr0   r1   r2   r3   rS   r4   r.   r-   r*   rL   rL   9   r?   r-   rL   c                       \ rS rSrS rSrg)RedirectWithoutLocationHandlerA   c                 F    U R                  S5        U R                  5         g )N-  )
set_statusr(   r;   s    r*   rS   &RedirectWithoutLocationHandler.prepareB   s    r-   r.   NrU   r.   r-   r*   rW   rW   A   s    r-   rW   c                   8    \ rS rSr\R
                  S 5       rSrg)ChunkHandlerH   c              #      #    U R                  S5        U R                  5         [        R                  " S5      v   U R                  S5        g 7f)Nasdf{Gz?qwer)rE   flushr   sleepr;   s    r*   r+   ChunkHandler.getI   s4     

6

iio

6s   AAr.   N)r0   r1   r2   r3   r   	coroutiner+   r4   r.   r-   r*   r^   r^   H   s    ]] r-   r^   c                       \ rS rSrS rSrg)AuthHandlerR   c                 T    U R                  U R                  R                  S   5        g )NAuthorization)r(   rF   headersr;   s    r*   r+   AuthHandler.getS   s    DLL((9:r-   r.   Nr/   r.   r-   r*   ri   ri   R   s    ;r-   ri   c                       \ rS rSrS rSrg)CountdownHandlerW   c                     [        U5      nUS:  a%  U R                  U R                  SUS-
  5      5        g U R                  S5        g )Nr   	countdown   Zero)rR   rQ   reverse_urlrE   )r)   counts     r*   r+   CountdownHandler.getX   s;    E
19MM$**;	BCJJvr-   r.   Nr/   r.   r-   r*   rp   rp   W   s    r-   rp   c                       \ rS rSrS rSrg)EchoPostHandler`   c                 N    U R                  U R                  R                  5        g NrD   r;   s    r*   r<   EchoPostHandler.posta   s    

4<<$$%r-   r.   Nr>   r.   r-   r*   rz   rz   `   s    &r-   rz   c                       \ rS rSrS rSrg)UserAgentHandlere   c                 n    U R                  U R                  R                  R                  SS5      5        g )N
User-AgentzUser agent not set)rE   rF   rm   r+   r;   s    r*   r+   UserAgentHandler.getf   s&    

4<<''++L:NOPr-   r.   Nr/   r.   r-   r*   r   r   e   s    Qr-   r   c                        \ rS rSrS rS rSrg)ContentLength304Handlerj   c                 J    U R                  S5        U R                  SS5        g )N0  Content-Length*   )r[   r'   r;   s    r*   r+   ContentLength304Handler.getk   s    ("-r-   c                     g r}   r.   r;   s    r*   _clear_representation_headers5ContentLength304Handler._clear_representation_headerso   s     	r-   r.   N)r0   r1   r2   r3   r+   r   r4   r.   r-   r*   r   r   j   s    .r-   r   c                       \ rS rSrS rSrg)PatchHandleru   c                 N    U R                  U R                  R                  5        g)z=Return the request payload - so we can check it is being keptNrD   r;   s    r*   patchPatchHandler.patchv   s    

4<<$$%r-   r.   N)r0   r1   r2   r3   r   r4   r.   r-   r*   r   r   u   rJ   r-   r   c                   X    \ rS rSr\R
                  S-   rS r\=r=r=r	=r
=r=r=rrSrg)AllMethodsHandler{   )OTHERc                     U R                   R                  c   eU R                  U R                   R                  5        g r}   )rF   methodrE   r;   s    r*   r   AllMethodsHandler.method~   s.    ||""...

4<<&&'r-   r.   N)r0   r1   r2   r3   r   SUPPORTED_METHODSr   r+   headr<   rH   deleteoptionsr   otherr4   r.   r-   r*   r   r   {   sD    &88:E( BHGCG$GGGfGwGr-   r   c                       \ rS rSrS rSrg)SetHeaderHandler   c                     [        U R                  S5      U R                  R                  S   5       H  u  pU R	                  X5        M     g )Nkv)zipget_argumentsrF   	argumentsr'   )r)   r   r   s      r*   r+   SetHeaderHandler.get   s>     **3/1G1G1LMDAOOA! Nr-   r.   Nr/   r.   r-   r*   r   r      s    "r-   r   c                       \ rS rSrSS jrSrg)InvalidGzipHandler   Nc                    U R                  SS5        U R                  SS5        SR                  S [        S5       5       5      S S n[        R                  " UR                  5       S	S
9S-   nU R                  U5        g )Nr$   r%   Content-Encodinggzip c              3   .   #    U  H  nS U S3v   M     g7f)zHello World 
Nr.   ).0is     r*   	<genexpr>)InvalidGzipHandler.get.<locals>.<genexpr>   s     A[aS+[s   i(#  i;F    )compresslevel    )r'   joinranger   compressencoderE   )r)   textrG   s      r*   r+   InvalidGzipHandler.get   sg    5*F3 wwAU4[AA'6J}}T[[]!<vE

4r-   r.   )returnNr/   r.   r-   r*   r   r      s    	r-   r   c                       \ rS rSrS rSrg)HeaderEncodingHandler   c                 r    U R                  U R                  R                  S   R                  S5      5        g )NFoo	ISO8859-1)r(   rF   rm   r   r;   s    r*   r+   HeaderEncodingHandler.get   s(    DLL((/66{CDr-   r.   Nr/   r.   r-   r*   r   r      s    Er-   r   c                   Z   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\S 5       rS rS r\S 5       rS r \S 5       r!\S 5       r"\S  5       r#\S! 5       r$\S" 5       r%S# r&S$ r'S% r(S& r)S' r*S( r+\S) 5       r,S* r-S+r.g,)-HTTPClientCommonTestCase   c                    [        [        S[        5      [        S[        5      [        S[        5      [        S[
        5      [        S[        5      [        S[        5      [        S[        5      [        S[        S	S
9[        S[        5      [        S[        5      [        S[        5      [        S[        5      [        S[        5      [        S[        5      [        S[         5      [        S["        5      /SS9$ )N/hello/postz/putz	/redirect/redirect_without_location/chunk/authz/countdown/([0-9]+)rs   )r"   	/echopost/user_agent/304_with_content_length/all_methods/patchz/set_header/invalid_gzip/header-encodingT)r   )r   r   r   r6   rA   rL   rW   r^   ri   rp   rz   r   r   r   r   r   r   r   r;   s    r*   get_app HTTPClientCommonTestCase.get_app   s    H/0G[)FJ'K102PQHl+G[))+;+NK1M#34.0GHN$56Hl+M#34O%78&(=>!$ '
 	
r-   c                     SnU R                  SSUS9nU R                  UR                  S5        U R                  UR                  U5        g )Ns   some patch datar   PATCHr   rG      fetchassertEqualcoderG   )r)   rG   responses      r*   test_patch_receives_payload4HTTPClientCommonTestCase.test_patch_receives_payload   sC    !::hwT:B,-r-   c                    U R                  S5      nU R                  UR                  S5        U R                  UR                  S   S5        U R                  UR                  S5        UR
                  c   eU R                  [        UR
                  5      S5        U R                  S5      nU R                  UR                  S5        g )	Nr   r   r$   r%      Hello world!r   z/hello?name=Bens
   Hello Ben!)r   r   r   rm   rG   request_timerR   r)   r   s     r*   test_hello_world)HTTPClientCommonTestCase.test_hello_world   s    ::h',)).9<H8$$000X223Q7::/06r-   c                     / nU R                  SUR                  S9nU R                  US/5        U R                  UR                  5        g )Nr   streaming_callbackr   )r   appendr   assertFalserG   )r)   chunksr   s      r*   test_streaming_callback0HTTPClientCommonTestCase.test_streaming_callback   sB    ::h6==:I/!23'r-   c                     U R                  SSSS9nU R                  UR                  S5        U R                  UR                  S5        g )Nr   POSTzarg1=foo&arg2=barr   r   s   Post arg1: foo, arg2: barr   r   s     r*   	test_post"HTTPClientCommonTestCase.test_post   s@    ::gf;N:O,(DEr-   c                     U R                  S5      nU R                  UR                  S5        / nU R                  SUR                  S9nU R                  USS/5        U R	                  UR                  5        g )Nr      asdfqwerr      asdf   qwer)r   r   rG   r   r   )r)   r   r   s      r*   test_chunked%HTTPClientCommonTestCase.test_chunked   sf    ::h'4::h6==:I'7!34'r-   c                   ^  [        5       u  p[        U5         [        R                  U 4S j5       n[        R
                  " X5        T R                  SU-  5      nUR                  5         T R                  UR                  S5        T R                  R                  UR                  5       5        S S S 5        g ! , (       d  f       g = f)Nc              3      >#    [        U 5      nUR                  S5      v nSU;  a  TR                  S5        UR                  SR	                  SS5      5      v   UR                  5         g 7f)N   

   HTTP/1.requires HTTP/1.xs7   HTTP/1.1 200 OK
Transfer-Encoding: chunked

1
1
1
2
0

   
   
r   
read_untilskipTestrE   replacecloseconnaddressstreamrequest_datar)   s       r*   accept_callbackDHTTPClientCommonTestCase.test_chunked_close.<locals>.accept_callback   sk      "$%+%6%6{%CC\1MM"56ll
 Gw     A*A-http://127.0.0.1:%d/s   12)r   r   r   rg   r   add_accept_handlerr   rethrowr   rG   io_loopremove_handlerfilenor)   sockportr  resps   `    r*   test_chunked_close+HTTPClientCommonTestCase.test_chunked_close   s     &'
T]]] 0 &&t=::4t;<DLLNTYY.LL''6? ]]s   BB;;
C	c                 Z    U R                  U R                  SSSS9R                  S5        g )Nr   Aladdinopen sesameauth_usernameauth_password"   Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==r   r   rG   r;   s    r*   test_basic_auth(HTTPClientCommonTestCase.test_basic_auth  s0    JJy  d1		
r-   c           	      \    U R                  U R                  SSSSS9R                  S5        g )Nr   r   r!  basic)r#  r$  	auth_moder%  r&  r;   s    r*   test_basic_auth_explicit_mode6HTTPClientCommonTestCase.test_basic_auth_explicit_mode  s7    JJ'+!	  
 d1	
r-   c                     U R                  U R                  SSSS9R                  S5        [        R                  " SS5      nU R                  U R                  SUSS9R                  S	5        g )
Nr   testu   123£r"  s   Basic dGVzdDoxMjPCow==NFDu   joséu   səcrəts   Basic am9zw6k6c8mZY3LJmXQ=)r   r   rG   unicodedata	normalize)r)   usernames     r*   test_basic_auth_unicode0HTTPClientCommonTestCase.test_basic_auth_unicode  sh    JJwfGJLQQ%	
 ((8JJwhjJQVV)	
r-   c           
          [        [        SSS9   U R                  [        [        45         U R                  SSSSSS	9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nzuncaught exceptionFrequiredr   r   r!  ra   T)r#  r$  r+  raise_error)r   r   assertRaises
ValueErrorr   r   r;   s    r*   test_unsupported_auth_mode3HTTPClientCommonTestCase.test_unsupported_auth_mode+  sc     w 4uE""J	#:;

"+"/$ $   < FE;; FEs"   A"A A"
A	A""
A0c                    U R                  SSS9nU R                  SUR                  5        U R                  UR                  S   R                  S5      5        U R                  S5      nU R                  SUR                  5        U R                  UR                  R                  S5      5        U R                  S	UR                  5        g )
Nz/countdown/2Ffollow_redirects.  Locationz/countdown/1r   z/countdown/0s   Zero)r   r   r   
assertTruerm   endswitheffective_urlrG   r   s     r*   test_follow_redirect-HTTPClientCommonTestCase.test_follow_redirect9  s    ::nu:Ehmm,((4==nMN::n-hmm,..77GH(--0r-   c                 \    U R                  SSS9nU R                  SUR                  5        g )Nr   Tr?  rZ   r   r   r   r   s     r*   test_redirect_without_location7HTTPClientCommonTestCase.test_redirect_without_locationC  s+    :::T:R
 	hmm,r-   c                 ^    U R                  SSSS9nU R                  UR                  S5        g )N/redirect?url=/put&status=307PUThellor      Put body: hellor   r   rG   r   s     r*   test_redirect_put_with_body4HTTPClientCommonTestCase.test_redirect_put_with_bodyK  s3    ::+E  
 	(:;r-   c                 ^    U R                  SSSS9nU R                  UR                  S5        g )NrM  rN  Tr   allow_nonstandard_methodss
   Put body: rQ  r   s     r*   test_redirect_put_without_body7HTTPClientCommonTestCase.test_redirect_put_without_bodyQ  s4    ::+&*  

 	6r-   c                    S H  nSU-  nU R                  USSS9nU R                  SUR                  5        S Hg  nU R                  X$SS	9nUS
;   a'  U R                  [        U5      UR                  5        M@  U R	                  UR                  [        U5      S/5        Mi     U R                  USS9nU R                  SUR
                  5        U R                  SUR                  5        M     S H  nSnS H8  nU R                  X$SS	9nU R                  U[        UR                  5      5        M:     U R                  USS9nU R                  SUR
                  5        U R                  SUR                  5        M     g )N)rZ   rA  i/  z$/redirect?url=/all_methods&status=%dr   r-   r   s   GET)GETOPTIONSrN  DELETETrU  )rZ   rA  HEADr   r   )i3  i4  z%/redirect?url=/all_methods&status=307)rZ  r[  r   rN  r\  )r   r   rG   r   assertInr   r   )r)   rO   r   r  r   s        r*   test_method_after_redirect3HTTPClientCommonTestCase.test_method_after_redirectZ  sX   %F86AC::c&s:;DVTYY/ >zz#PTzUZ'$$T&\499=MM$))d6lF-CD > ::c&:1DS$)),S$)),! && !F9CEzz#PTzU  DII)>? F ::c&:1DS$)),S$)), !r-   c                     U R                  S5      R                  SS5      nU R                  U5      nU R                  S[        R
                  " S5      -   UR                  5        g )Nr   zhttp://zhttp://me:secret@s   Basic s	   me:secret)get_urlr	  r   r   base64	b64encoderG   )r)   r   r   s      r*   test_credentials_in_url0HTTPClientCommonTestCase.test_credentials_in_urlx  sO    ll7#++I7JK::c?V%5%5l%CCX]]Sr-   c                 "   Sn[         R                  " S5      nU R                  SSUSS0S9nU R                  UR                  S   S	5        U R                  UR
                  [        U5      5        U R                  SSUSS0S9nU R                  UR                  S   S
5        U R                  UR
                  U5        U R                  SSUSS0SS9nU R                  UR                  S   S
5        U R                  UR
                  U5        g )N   és   e9r   r   r$   zapplication/blah)r   rG   rm   r   21foo)r   rG   rm   
user_agent)binasciia2b_hexr   r   rm   rG   r   )r)   unicode_body	byte_bodyr   s       r*   test_body_encoding+HTTPClientCommonTestCase.test_body_encoding}  s*   $$U+	 ::#%78	  
 	))*:;SA\(:; ::#%78	  
 	))*:;SA	2 ::#%78  
 	))*:;SA	2r-   c                 t   U R                  S5      nU R                  [        UR                  5      [        5        U R                  [        UR
                  S   5      [        5        U R                  [        UR                  5      [        5        U R                  [        UR                  5      [        5        g )Nr   r$   )
r   r   typerG   bytesrm   strr   rR   rE  r   s     r*   
test_types#HTTPClientCommonTestCase.test_types  s}    ::h'hmm,e4h..~>?Ehmm,c2h445s;r-   c                 h   U R                  SSSS0S9nU R                  UR                  S   S5        U R                  UR                  S5        U R                  [        UR                  5      S5        [        R                  " S	UR                  S
9nU R                  UR                  5       S5        g )Nr   FzAccept-Encodingr   )decompress_responserm   r   r   "   r)modefileobj)
r   r   rm   assertNotEqualrG   lenr   GzipFilebufferread)r)   r   fs      r*   	test_gzip"HTTPClientCommonTestCase.test_gzip  s     ::%:KV9T  
 	))*<=vFHMM;7 	X]]+R0MMsHOO<;/r-   c                    [        [        SSS9    U R                  S5      nU R                  UR                  S5        U R                  UR
                  S S S5        S S S 5        g ! [         a     Nf = f! , (       d  f       g = f)Nz..*Malformed HTTP message.*unconsumed gzip dataFr7  r   r      s   Hello World 0
)r   r   r   r   r   rG   r   r   s     r*   test_invalid_gzip*HTTPClientCommonTestCase.test_invalid_gzip  s     EPU
::o6  4  s!35GH
 
  
 
s)   A7AA''
A41A73A44A77
Bc                    ^ ^^^ / m0 m/ mUU4S jnUUU 4S jnT R                  SUUS9  T R                  [        T5      ST5        T R                  TS   S5        T R                  TSS	/5        g )
Nc                    > U R                  S5      (       a  g U R                  S5      (       a  TR                  U 5        g U S:w  a6  U R                  SS5      u  pUR                  5       TUR	                  5       '   g g )NzHTTP/1.1 101HTTP/z
:rt   )
startswithr   splitstriplower)header_liner   r   
first_linerm   s      r*   header_callbackFHTTPClientCommonTestCase.test_header_callback.<locals>.header_callback  sm    %%n55''00!!+.&"((a0%&WWY	" 'r-   c                 R   > TR                  TS   S5        TR                  U 5        g )Nzcontent-typeztext/html; charset=UTF-8)r   r   )chunkr   rm   r)   s    r*   r   IHTTPClientCommonTestCase.test_header_callback.<locals>.streaming_callback  s'     W^46PQMM% r-   r   )r  r   rt   r   zHTTP/[0-9]\.[0-9] 200.*
r   r   )r   r   r  assertRegex)r)   r  r   r   r  rm   s   `  @@@r*   test_header_callback-HTTPClientCommonTestCase.test_header_callback  sz    
	/	! 	

+1 	 	

 	Z!Z8A(FG'7!34r-   c                    ^ [        5       mU4S jnU R                  SUS9  TR                  5        H(  u  p#U R                  X3R	                  5       :H  X#45        M*     g )Nc                 V   > U R                  S5      (       a  g TR                  U 5        g )Nr  )r  
parse_line)linerm   s    r*   r  THTTPClientCommonTestCase.test_header_callback_to_parse_line.<locals>.header_callback  s#    w''t$r-   r   )r  )r   r   get_allrC  r  )r)   r  r   r   rm   s       @r*   "test_header_callback_to_parse_line;HTTPClientCommonTestCase.test_header_callback_to_parse_line  sN    
 -	% 	

8_
=OO%DAOOANQF3 &r-   c              #     #    [        SSS9nU R                  R                  SUS9n UR                  U R	                  S5      5      v nU R                  UR                  S5        UR                  5         g ! UR                  5         f = f7f)NTestDefaultUserAgentF)rm  
allow_ipv6T)force_instancedefaultsr   s   TestDefaultUserAgent)dicthttp_client	__class__r   rc  r   rG   r
  )r)   r  clientr   s       r*   test_configure_defaults0HTTPClientCommonTestCase.test_configure_defaults  ss     #9eL!!++4(+S	#\\$,,}*EFFHX]],CDLLNFLLNs   %B>A7 &B7B		Bc                     S Hd  n[         [        4 HQ  nU" 5       nXS'   U R                  SUS9nU R                  UR                  SSUR                  < SU< SU< 35        MS     Mf     g )	N)MyUserAgent   MyUserAgentr   r   rm   r  z	response=z, value=z, container=)r  r   r   r   rG   )r)   value	containerrm   r  s        r*   test_header_types*HTTPClientCommonTestCase.test_header_types  sf    
 5E"K0	#+(-%zz-zA  II"yy%4	 1 5r-   c                   ^  [        5       u  p[        U5         [        R                  U 4S j5       n[        R
                  " X5         T R                  SU-  5      nUR                  5         T R                  UR                  S   S5        T R                  R                  UR                  5       5         S S S 5        g ! T R                  R                  UR                  5       5        f = f! , (       d  f       g = f)Nc              3      >#    [        U 5      nUR                  S5      v nSU;  a  TR                  S5        UR                  SR	                  SS5      5      v   UR                  5         g 7f)Nr  r  r  s2   HTTP/1.1 200 OK
X-XSS-Protection: 1;
	mode=block

r  r  r  r  s       r*   r  IHTTPClientCommonTestCase.test_multi_line_headers.<locals>.accept_callback  si     !$%+%6%6{%CC\1MM"56ll
 Gw	 	 r  r  zX-XSS-Protectionz1; mode=block)r   r   r   rg   r   r  r   r  r   rm   r  r  r  r  s   `    r*   test_multi_line_headers0HTTPClientCommonTestCase.test_multi_line_headers  s     &'
T]]] " &&t=;zz"84"?@  .@!A?S++DKKM:5 ]4 ++DKKM:5 ]s$   0C.
AC )C. +C++C..
C<c              #      #    U R                   R                  U R                  S5      SS0S9v nU R                  UR                  SR                  S5      5        g 7f)Nr   r   u   bärr  r   )r  r   rc  r   rG   r   r   s     r*   test_header_encoding-HTTPClientCommonTestCase.test_header_encoding2  s[     ))//LL+,x 0 
 
 	(DEs   AAc                     U R                  S5      nU R                  UR                  S5        U R                  UR                  S   S5        g )Nr   r   r   42)r   r   r   rm   r   s     r*   test_304_with_content_length5HTTPClientCommonTestCase.test_304_with_content_length<  sC    
 ::89,))*:;TBr-   c              #      #    U R                   R                  U R                  S5      5      v nU R                  UR                  S5        g 7fNr   r   r  r   rc  r   rG   r   s     r*   test_future_interface.HTTPClientCommonTestCase.test_future_interfaceE  s;     ))//X0FGG8s   A
Ac              #     #    U R                  [        5       nU R                  R                  U R	                  S5      5      v   S S S 5        WR
                  c   eUR
                  R                  c   eU R                  UR
                  R                  S5        U R                  UR
                  R                  R                  S5        g ! , (       d  f       N= f7fN	/notfound  )	r:  r   r  r   rc  	exceptionr   r   r   )r)   contexts     r*   test_future_http_error/HTTPClientCommonTestCase.test_future_http_errorJ  s     y)W""((k)BCC *  ,,,  ))555**//5**3388#> *)s   C-CBC
CCc              #      #    U R                   R                  U R                  S5      SS9v nU R                  UR                  S5        g 7f)Nr  F)r9  r  )r  r   rc  r   r   r   s     r*   test_future_http_error_no_raise8HTTPClientCommonTestCase.test_future_http_error_no_raiseS  sI     ))//LL%5 0 
 
 	,s   A	Ac              #     #    U R                  S5      nU R                  R                  U5      v nU R                  UR                  R
                  U5        U R                  [        UR                  [        5      5        U R                  R                  UR                  5      v nU R                  UR                  S5        g 7fr  )
rc  r  r   r   rF   r   rC  
isinstancer	   rG   )r)   r   r   	response2s       r*    test_reuse_request_from_response9HTTPClientCommonTestCase.test_reuse_request_from_responseZ  s      ll8$))//44))--s3
8#3#3[AB**001A1ABB	9s   CCc              #     #    U R                  S5      n[        USS9nU R                  R                  U5      v nU R	                  UR
                  S5        U R                  [        [        45       n[        USS9nU R                  R                  U5      v   S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f7f)Nr   z	127.0.0.1network_interfacer   znot-interface-or-ip)rc  r	   r  r   r   r   r:  r;  r   r_  rw  r  )r)   r   rF   r   r  s        r*   test_bind_source_ip,HTTPClientCommonTestCase.test_bind_source_ipg  s     ll8$c[A))//88,
I677!#9NOG""((11 8 	+S1B1B-CD 87s   A0C2(C.C
CCc                    S H8  nU R                  SUS9nU R                  UR                  [        U5      5        M:     S H9  nU R                  SUSS9nU R                  UR                  [        U5      5        M;     U R                  SSS9nU R                  UR                  S5        U R                  SSS	S
9nU R                  UR                  S5        g )NrZ  r\  r[  r   r^  r   rN  r   r-   r   r]  r   TrU  s   OTHER)r   r   rG   r   )r)   r   r   s      r*   test_all_methods)HTTPClientCommonTestCase.test_all_methodss  s    2Fzz.z@HX]]DL9 3 /Fzz.czJHX]]DL9 / ::nV:<,::7d  
 	1r-   c           	         S H  nU R                  [        5       nU R                  SUSS9  S S S 5        U R                  S[	        WR
                  5      5        U R                  SUSS9nU R                  UR                  S5        M     S H  nU R                  [        5       nU R                  SUS	SS
9  S S S 5        U R                  S[	        WR
                  5      5        US:w  d  M`  U R                  SUS	SSS9  U R                  WR                  S5        M     g ! , (       d  f       N= f! , (       d  f       N= f)Nr  r   T)r   r9  zmust not be NonerU  r   r  r   )r   rG   r9  zmust be NonerZ  )r   rG   rV  r9  )r:  r;  r   r_  rw  r  r   r   )r)   r   r  r  s       r*   test_body_sanity_checks0HTTPClientCommonTestCase.test_body_sanity_checks  s$   .F"":.'

>&d
K /MM,c'2C2C.DE::v  D TYY, / 3F"":.'

"6T   / MM.#g.?.?*@A 

"! .2 $     C0# 3 /. /.s   D!%D2!
D/	2
E 	c                 ~    U R                  SSSS9nUR                  5         U R                  UR                  S5        g )Nz/redirect?status=307&url=/putrN  s   hellor   rP  )r   r  r   rG   r   s     r*   test_put_307%HTTPClientCommonTestCase.test_put_307  s?    ::+E  
 	(:;r-   c                     U R                  S5      nUR                  5         U R                  UR                  S   [	        S5      5        g )Nz/set_header?k=foo&v=%E9r   ri  )r   r  r   rm   r   r   s     r*   test_non_ascii_header.HTTPClientCommonTestCase.test_non_ascii_header  s=    ::78))%0*X2FGr-   c                 t   [         R                   " 5       nU R                  S5      nUR                  5         U R                  UR                  5        UR                  c   eU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5        UR                  c   eU R                  [        UR                  U-
  5      S5        UR                  R                  5        H0  u  p4U R                  SUs=:*  =(       a    S:  Os  SU SU 35        M2     g )Nr   r   g      ?z
time_info[z] out of bounds: )timer   r  assertIsNotNoner   assertGreaterEqual
assertLess
start_timeabs	time_infoitemsrC  )r)   r  r   r   r   s        r*   test_response_times,HTTPClientCommonTestCase.test_response_times  s     YY[
::h'X223$$000 5 5q9--s3 	X001""...H//*<=sC&&,,.DAOOALLSLJqc9J1#*NO /r-   c                    U R                  SSS9nU R                  UR                  S5        U R                  SSS9nU R                  UR                  S5        U R                  SSSS9nU R                  UR                  S5        g )Nr   r   )connect_timeoutr   )request_timeout)r  r  rI  r   s     r*   test_zero_timeout*HTTPClientCommonTestCase.test_zero_timeout  sv    ::h::,::h::,::h1:M,r-   c              #   l  #    U R                   R                  U R                  S5      5      nU R                  UR	                  5       5        [        [        S5       n[        S5       H.  n[        R                  " S5      v   UR                  (       d  M.    O   S S S 5        g ! , (       d  f       g = f7f)Nz/404z$Exception after Future was cancelledd   rb   )r  r   rc  rC  cancelr   r   r   r   re   logged_stack)r)   futelr   s       r*   test_error_after_cancel0HTTPClientCommonTestCase.test_error_after_cancel  sy     $$T\\&%9:

%w FG2
 3Ziio%???   HGGs$   AB46B#B#	B4#
B1-B4c                    S H  u  pU R                  USS9   U R                  [        5         U R                  SSU0S9  S S S 5        S S S 5        U R                  USS9   U R                  [        5         U R                  SUS0S9  S S S 5        S S S 5        M     g ! , (       d  f       Nd= f! , (       d  f       Nm= f! , (       d  f       N== f! , (       d  f       M  = f)N))zfoobar:cr)zfoo
bar:lf)z	foo
bar:crlfr  )r"   positionr   rl  r  key)subTestr:  r;  r   )r)   headerr"   s      r*   test_header_crlf)HTTPClientCommonTestCase.test_header_crlf  s    
LF
 4':&&z2JJx%JA 3 ; 4%8&&z2JJx&%JA 3 98
 32 ;: 32 98sF   B0BB0!C7C
C
B-)B00
B>	
CC
C!	r.   N)/r0   r1   r2   r3   r   r   r   r   r   r   r  r'  r,  r4  r<  rF  rJ  rR  rW  r`  rf  rr  rx  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r4   r.   r-   r*   r   r      sU   
..	7(F
(#7J
	

1-<7-<T
"3H<0"5>4"  ";@ F FC 9 9 ? ? - - 
: 
: 	E 	E21`<HP(-  Br-   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
RequestProxyTesti  c                 t    [        [        SSS9[        5       5      nU R                  UR                  S5        g )Nhttp://example.com/rl  )rm  )r   r	   r  r   rm  r)   proxys     r*   test_request_set!RequestProxyTest.test_request_set  s3    -%@$&
 	))51r-   c                 t    [        [        S5      [        SS95      nU R                  UR                  S5        g )Nr  rl  r  )r   r	   r  r   r  r  s     r*   test_default_set!RequestProxyTest.test_default_set  s4    -.u0M
 	00%8r-   c                 r    [        [        SSS9[        SS95      nU R                  UR                  S5        g )Nr  rl  )
proxy_hostbar)r   r	   r  r   r  r  s     r*   test_both_setRequestProxyTest.test_both_set  s7    -%@$RWBX
 	))51r-   c                 t    [        [        S5      [        5       5      nU R                  UR                  5        g Nr  )r   r	   r  assertIsNoner#  r  s     r*   test_neither_set!RequestProxyTest.test_neither_set  s*    k*?@$&I%--.r-   c                     [        [        S5      [        5       5      nU R                  [        5         UR
                    S S S 5        g ! , (       d  f       g = fr   )r   r	   r  r:  AttributeErrorrl  r  s     r*   test_bad_attribute#RequestProxyTest.test_bad_attribute  s7    k*?@$&I~.II /..s   A		
Ac                 d    [        [        S5      S 5      nU R                  UR                  5        g r   )r   r	   r!  r#  r  s     r*   test_defaults_none#RequestProxyTest.test_defaults_none  s(    k*?@$G%--.r-   r.   N)r0   r1   r2   r3   r  r  r  r"  r&  r)  r4   r.   r-   r*   r  r    s     292/
/r-   r  c                       \ rS rSrS rSrg)HTTPResponseTestCasei  c                     [        [        S5      S[        5       S9n[        U5      nU R	                  UR                  S5      5        U R                  SU5        g )Nhttp://example.comr   )r  zHTTPResponse(zcode=200)r
   r	   r   rw  rC  r  r_  )r)   r   ss      r*   test_strHTTPResponseTestCase.test_str  sI    ,-s79
 M_56j!$r-   r.   N)r0   r1   r2   r3   r0  r4   r.   r-   r*   r,  r,    s    %r-   r,  c                   2    \ rS rSrS rS rS rS rS rSr	g)	SyncHTTPClientTesti&  c                 6  ^ ^^ [        SS9T l        [        R                  " 5       m[        R
                  UU 4S j5       mUU 4S jn[        R                  " US9T l        T R                  R                  5         TR                  5         [        5       T l        g )NF)make_currentc                     > [        5       u  n Tl        [        S[        4/5      n[	        U5      Tl        TR
                  R                  U 5        TR                  5         g )N/)r   r  r   r   r   server
add_socketset)r  appeventr)   s     r*   init_server-SyncHTTPClientTest.setUp.<locals>.init_server+  sJ    .0OD$)%6789C$S/DKKK""4(IIKr-   c                  p   > TR                   R                  T 5        TR                   R                  5         g r}   )server_iolooprun_syncstart)r=  r)   s   r*   rB  'SyncHTTPClientTest.setUp.<locals>.start3  s)    ''4$$&r-   )target)r   r@  	threadingEventr   rg   Threadserver_threadrB  waitr   r  )r)   rB  r<  r=  s   ` @@r*   setUpSyncHTTPClientTest.setUp'  sq    #7!		 
		' '--U;  "

%<r-   c                    ^  U 4S jnT R                   R                  U5        T R                  R                  5         T R                  R                  5         T R                   R                  SS9  g )Nc                     > TR                   R                  5         [        R                  U4S j5       n TR                  R                  U 5        g )Nc               3      >#    TR                   R                  5       v   [        S5       H  n S v   M	     TR                  R	                  5         g 7f)N   )r8  close_all_connectionsr   r@  stop)r   r)   s    r*   	slow_stopCSyncHTTPClientTest.tearDown.<locals>.stop_server.<locals>.slow_stopF  s>     kk7799 qA """'')s   AA)r8  rQ  r   rg   r@  add_callback)rR  r)   s    r*   stop_server0SyncHTTPClientTest.tearDown.<locals>.stop_server>  sA    KK ]]* * ++I6r-   T)all_fds)r@  rT  rH  r   r  r
  )r)   rU  s   ` r*   tearDownSyncHTTPClientTest.tearDown=  sY    	7& 	''4!    .r-   c                 $    SU R                   U4-  $ )Nzhttp://127.0.0.1:%d%s)r  )r)   paths     r*   rc  SyncHTTPClientTest.get_urlV  s    &$))T):::r-   c                     U R                   R                  U R                  S5      5      nU R                  SUR                  5        g )Nr7  r   r  r   s     r*   test_sync_client#SyncHTTPClientTest.test_sync_clientY  s5    ##))$,,s*;<(--8r-   c                    U R                  [        5       nU R                  R                  U R	                  S5      5        S S S 5        U R                  WR                  R                  S5        g ! , (       d  f       N5= fr  )r:  r   r  r   rc  r   r  r   )r)   	assertions     r*   test_sync_client_error)SyncHTTPClientTest.test_sync_client_error]  s[     y)Y""4<<#<= *,,1137 *)s   +A00
A>)r  r  r8  r@  rH  N)
r0   r1   r2   r3   rJ  rX  rc  r^  rb  r4   r.   r-   r*   r3  r3  &  s    (,/2;98r-   r3  c                       \ rS rSrS rSrg)SyncHTTPClientSubprocessTestie  c                 H   [         R                  " [        R                  SS/[         R                  [         R
                  SSS9nUR                  (       a)  [        S5        [        [        UR                  5      5        UR                  (       a  U R                  S5        g g )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STDOUTrh  printr   fail)r)   procs     r*   test_destructor_log0SyncHTTPClientSubprocessTest.test_destructor_logf  sw     ~~_
 ??$$

 ;;)*T[[)*;;II=> r-   r.   N)r0   r1   r2   r3   ru  r4   r.   r-   r*   re  re  e  s    ?r-   re  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)HTTPRequestTestCasei  c                 X    [        SSS0S9nU R                  UR                  SS05        g )Nr.  rl  r  r  )r	   r   rm   r)   rF   s     r*   test_headers HTTPRequestTestCase.test_headers  s+    2UENK5%.9r-   c                 h    [        S5      nSS0Ul        U R                  UR                  SS05        g )Nr.  r  bazr	   rm   r   rz  s     r*   test_headers_setter'HTTPRequestTestCase.test_headers_setter  s0    23 %.5%.9r-   c                 `    [        S5      nS Ul        U R                  UR                  0 5        g )Nr.  r  rz  s     r*   test_null_headers_setter,HTTPRequestTestCase.test_null_headers_setter  s(    23"-r-   c                 b    [        SSS9nU R                  UR                  [        S5      5        g )Nr.  rl  )rG   )r	   r   rG   r   rz  s     r*   	test_bodyHTTPRequestTestCase.test_body  s'    2?tE{3r-   c                 r    [        S5      nSUl        U R                  UR                  [        S5      5        g )Nr.  rl  )r	   rG   r   r   rz  s     r*   test_body_setter$HTTPRequestTestCase.test_body_setter  s,    23tE{3r-   c                     [         R                   R                  [         R                  R                  5      n[	        SUS9nU R                  UR                  S[        U5      05        g Nr.  )if_modified_sincezIf-Modified-Since)datetimenowtimezoneutcr	   r   rm   r   r)   	http_daterF   s      r*   test_if_modified_since*HTTPRequestTestCase.test_if_modified_since  sT    %%))(*;*;*?*?@	2iPOO13CI3NO	
r-   c                     [        5          [        R                  R                  5       nS S S 5        [        SWS9nU R	                  UR
                  S[        U5      05        g ! , (       d  f       N@= fr  )r   r  utcnowr	   r   rm   r   r  s      r*   'test_if_modified_since_naive_deprecated;HTTPRequestTestCase.test_if_modified_since_naive_deprecated  sZ    ! ))002I "2iPOO13CI3NO	
 "!s   A$$
A2r.   N)r0   r1   r2   r3   r{  r  r  r  r  r  r  r4   r.   r-   r*   rx  rx    s%    ::
.
44


r-   rx  c                   &    \ rS rSrS rS rS rSrg)HTTPErrorTestCasei  c                     [        S5      n[        R                  " U5      nU R                  X5        U R                  UR                  UR                  5        g )N  )r   copyassertIsNotr   r   )r)   ee2s      r*   	test_copyHTTPErrorTestCase.test_copy  s>    cNYYq\)r-   c                     [        S5      nU R                  [        U5      S5        U R                  [        U5      S5        g )Nr  HTTP 403: Forbidden)r   r   rw  repr)r)   r  s     r*   test_plain_error"HTTPErrorTestCase.test_plain_error  s5    cNQ!67a"78r-   c                 0   [        [        S5      S5      nU R                  [        5       nUR	                  5         S S S 5        WR
                  nU R                  [        U5      S5        U R                  [        U5      S5        g ! , (       d  f       NQ= f)Nr  r  r  )	r
   r	   r:  r   r  r  r   rw  r  )r)   r  cmr  s       r*   test_error_with_response*HTTPErrorTestCase.test_error_with_response  sn    K(=>Dy)RLLN *LLQ!67a"78	 *)s   B
Br.   N)r0   r1   r2   r3   r  r  r  r4   r.   r-   r*   r  r    s    *9
9r-   r  )Lrd  rn  
contextlibr   r  r   rE  r  ior   rl  rn  r  typingr1  unittesttornado.escaper   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   r6   rA   rL   rW   r^   ri   rp   rz   r   r   r   r   r   r   r   r   TestCaser  r,  r3  re  rx  r  r.   r-   r*   <module>r     s            
     7 7   * ! % (  T T 0 8 8 :( (
. 
& &
n 
^ > ;. ;
~ &n &
Q~ Q
n &> &H H"~ "
 
EN ET	B0 T	Bn/x(( /B%8,, %<8** <8~?8#4#4 ?<%
(++ %
P9)) 9r-   