
    R?g                        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,J-r-  S SK.J/r/J0r0J1r1  S SK2J3r3J4r4   " S S\05      r5 " S S\05      r6 " S S\05      r7 " S S\05      r8 " S S\05      r9 " S S\05      r: " S S\05      r; " S S\05      r< " S  S!\05      r= " S" S#\05      r> " S$ S%\05      r? " S& S'\05      r@ " S( S)\05      rA " S* S+\05      rB " S, S-\05      rC " S. S/\05      rD " S0 S1\'5      rE " S2 S3\R                  5      rG " S4 S5\R                  5      rH " S6 S7\R                  5      rI " S8 S9\R                  5      rJ " S: S;\R                  5      rK " S< S=\R                  5      rLg)>    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)skipOnTravis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     >/usr/lib/python3/dist-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r1   r2   r3   r4   r=   r5   r/   r.   r+   r7   r7   +       
r.   r7   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)r1   r2   r3   r4   rI   r5   r/   r.   r+   rB   rB   3       &r.   rB   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)rP   )rF   redirectr'   intr<   s    r+   prepareRedirectHandler.prepare:   sB    

23e$S1B1B8U1S-T 	 	
r.   r/   Nr1   r2   r3   r4   rT   r5   r/   r.   r+   rM   rM   9   r@   r.   rM   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+   rT   &RedirectWithoutLocationHandler.prepareB   s    r.   r/   NrV   r/   r.   r+   rX   rX   A   s    r.   rX   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)rF   flushr   sleepr<   s    r+   r,   ChunkHandler.getI   s4     

6

iio

6s   AAr/   N)r1   r2   r3   r4   r   	coroutiner,   r5   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)   rG   headersr<   s    r+   r,   AuthHandler.getS   s    DLL((9:r.   r/   Nr0   r/   r.   r+   rj   rj   R   s    ;r.   rj   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)rS   rR   reverse_urlrF   )r*   counts     r+   r,   CountdownHandler.getX   s;    E
19MM$**;	BCJJvr.   r/   Nr0   r/   r.   r+   rq   rq   W   s    r.   rq   c                       \ rS rSrS rSrg)EchoPostHandler`   c                 N    U R                  U R                  R                  5        g NrE   r<   s    r+   r=   EchoPostHandler.posta   s    

4<<$$%r.   r/   Nr?   r/   r.   r+   r{   r{   `   s    &r.   r{   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)rF   rG   rn   r,   r<   s    r+   r,   UserAgentHandler.getf   s&    

4<<''++L:NOPr.   r/   Nr0   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)r1   r2   r3   r4   r,   r   r5   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 keptNrE   r<   s    r+   patchPatchHandler.patchv   s    

4<<$$%r.   r/   N)r1   r2   r3   r4   r   r5   r/   r.   r+   r   r   u   rK   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~   )rG   methodrF   r<   s    r+   r   AllMethodsHandler.method~   s.    ||""...

4<<&&'r.   r/   N)r1   r2   r3   r4   r   SUPPORTED_METHODSr   r,   headr=   rI   deleteoptionsr   otherr5   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_argumentsrG   	argumentsr(   )r*   r   r   s      r+   r,   SetHeaderHandler.get   s>     **3/1G1G1LMDAOOA! Nr.   r/   Nr0   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   D   #    U  H  nS R                  U5      v   M     g7f)zHello World {}
N)format).0is     r+   	<genexpr>)InvalidGzipHandler.get.<locals>.<genexpr>   s     I[)0033[s    i(#  i;F    )compresslevel    )r(   joinranger   compressencoderF   )r*   textrH   s      r+   r,   InvalidGzipHandler.get   sg    5*F3 wwIU4[II'6R}}T[[]!<vE

4r.   r/   )returnNr0   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)   rG   rn   r   r<   s    r+   r,   HeaderEncodingHandler.get   s(    DLL((/66{CDr.   r/   Nr0   r/   r.   r+   r   r      s    Er.   r   c                   ^   \ rS rSrS rS r\S 5       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]+)rt   )r#   	/echopost/user_agent/304_with_content_length/all_methods/patchz/set_header/invalid_gzip/header-encodingT)r   )r   r   r    r7   rB   rM   rX   r_   rj   rq   r{   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   rH      fetchassertEqualcoderH   )r*   rH   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   rn   rH   request_timerS   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   assertFalserH   )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   rH   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skipTestrF   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   rh   r   add_accept_handlerr   rethrowr   rH   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   rH   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   rH   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"  rb   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   
assertTruern   endswitheffective_urlrH   r   s     r+   test_follow_redirect-HTTPClientCommonTestCase.test_follow_redirect:  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@  r[   r   r   r   r   s     r+   test_redirect_without_location7HTTPClientCommonTestCase.test_redirect_without_locationD  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   rH   r   s     r+   test_redirect_put_with_body4HTTPClientCommonTestCase.test_redirect_put_with_bodyL  s3    ::+E  
 	(:;r.   c                 ^    U R                  SSSS9nU R                  UR                  S5        g )NrN  rO  Tr   allow_nonstandard_methodss
   Put body: rR  r   s     r+   test_redirect_put_without_body7HTTPClientCommonTestCase.test_redirect_put_without_bodyR  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)r[   rB  i/  z$/redirect?url=/all_methods&status=%dr   r.   r   s   GET)GETOPTIONSrO  DELETETrV  )r[   rB  HEADr   r   )i3  i4  z%/redirect?url=/all_methods&status=307)r[  r\  r   rO  r]  )r   r   rH   r   assertInr   r   )r*   rP   r   r  r   s        r+   test_method_after_redirect3HTTPClientCommonTestCase.test_method_after_redirect[  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	b64encoderH   )r*   r   r   s      r+   test_credentials_in_url0HTTPClientCommonTestCase.test_credentials_in_urly  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   rH   rn   r   21foo)r   rH   rn   
user_agent)binasciia2b_hexr   r   rn   rH   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   typerH   bytesrn   strr   rS   rF  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_responsern   r   r   "   r)modefileobj)
r   r   rn   assertNotEqualrH   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*(Uncaught exception|Exception in callback)Fr8  r   r      s   Hello World 0
)r   r   r   r   r   rH   r   r   s     r+   test_invalid_gzip*HTTPClientCommonTestCase.test_invalid_gzip  s     AE
::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 101zHTTP/z
:ru   )
startswithr   splitstriplower)header_liner   r   
first_linern   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   rn   r*   s    r+   r   IHTTPClientCommonTestCase.test_header_callback.<locals>.streaming_callback  s'     W^46PQMM% r.   r   )r  r   ru   r   zHTTP/[0-9]\.[0-9] 200.*
r   r   )r   r   r  assertRegex)r*   r  r   r   r  rn   s   `  @@@r+   test_header_callback-HTTPClientCommonTestCase.test_header_callback  sz    
	/	! 	

+1 	 	

 	Z!Z8A(FG'7!34r.   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)rn  
allow_ipv6T)force_instancedefaultsr   s   TestDefaultUserAgent)dicthttp_client	__class__r   rd  r   rH   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   rn   r  z	response=z, value=z, container=)r  r   r   r   rH   )r*   value	containerrn   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   rh   r   r  r   r  r   rn   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   rd  r   rH   r   r   s     r+   test_header_encoding-HTTPClientCommonTestCase.test_header_encoding"  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   rn   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   rd  r   rH   r   s     r+   test_future_interface.HTTPClientCommonTestCase.test_future_interface5  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   rd  	exceptionr   r   r   )r*   contexts     r+   test_future_http_error/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              #      #    U R                   R                  U R                  S5      SS9v nU R                  UR                  S5        g 7f)Nr  F)r:  r  )r  r   rd  r   r   r   s     r+   test_future_http_error_no_raise8HTTPClientCommonTestCase.test_future_http_error_no_raiseC  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  )
rd  r  r   r   rG   r   rD  
isinstancer	   rH   )r*   r   r   	response2s       r+    test_reuse_request_from_response9HTTPClientCommonTestCase.test_reuse_request_from_responseJ  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)rd  r	   r  r   r   r   r;  r<  r   r`  rx  r  )r*   r   rG   r   r  s        r+   test_bind_source_ip,HTTPClientCommonTestCase.test_bind_source_ipW  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r[  r]  r\  r   r_  r   rO  r   r.   r   r^  r   TrV  s   OTHER)r   r   rH   r   )r*   r   r   s      r+   test_all_methods)HTTPClientCommonTestCase.test_all_methodsc  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   r:  zmust not be NonerV  r   r  r   )r   rH   r:  zmust be Noner[  )r   rH   rW  r:  )r;  r<  r   r`  rx  r  r   r   )r*   r   r  r  s       r+   test_body_sanity_checks0HTTPClientCommonTestCase.test_body_sanity_checksq  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=/putrO  s   hellor   rQ  )r   r  r   rH   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   rj  )r   r  r   rn   r   r   s     r+   test_non_ascii_header.HTTPClientCommonTestCase.test_non_ascii_header  s=    ::78))%0*X2FGr.   c                    [         R                   " 5       nU R                  S5      nUR                  5         UR                  c   eU R	                  UR                  S5        U R                  UR                  S5        UR                  c   eU R                  [        UR                  U-
  5      S5        UR                  R                  5        H2  u  p4U R                  SUs=:*  =(       a    S:  Os  SU< SU< 35        M4     g )Nr   r   g      ?z
time_info[z] out of bounds: )timer   r  r   assertGreaterEqual
assertLess
start_timeabs	time_infoitemsrD  )r*   r  r   r   r   s        r+   test_response_times,HTTPClientCommonTestCase.test_response_times  s     YY[
::h'$$000 5 5q9--s3 ""...H//*<=sC&&,,.DAOOALLSLqRS*TU /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  rJ  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   rc   )r  r   rd  rD  cancelr   r   r   r   rf   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   rm  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)/r1   r2   r3   r4   r   r   r   r   r   r   r   r  r(  r-  r5  r=  rG  rK  rS  rX  ra  rg  rs  ry  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r5   r/   r.   r+   r   r      s_   
.. 	7 	7(F
(#7J
	

1-<7-<T
"3H<0"5>  ";@ F FC 9 9 ? ? - - 
: 
: 	E 	E21`<HV$-  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/rm  )rn  )r   r	   r  r   rn  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	  rm  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	  rm  )
proxy_hostbar)r   r	   r  r   r  r
  s     r+   test_both_setRequestProxyTest.test_both_set  s7    -%@$RWBX
 	))51r.   c                 v    [        [        S5      [        5       5      nU R                  UR                  S 5        g Nr	  )r   r	   r  assertIsr$  r
  s     r+   test_neither_set!RequestProxyTest.test_neither_set  s*    k*?@$&Ie))40r.   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;  AttributeErrorrm  r
  s     r+   test_bad_attribute#RequestProxyTest.test_bad_attribute   s7    k*?@$&I~.II /..s   A		
Ac                 f    [        [        S5      S 5      nU R                  UR                  S 5        g r  )r   r	   r  r$  r
  s     r+   test_defaults_none#RequestProxyTest.test_defaults_none  s(    k*?@$Ge))40r.   r/   N)r1   r2   r3   r4   r  r  r  r  r  r   r5   r/   r.   r+   r  r    s     2921
1r.   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   rx  rD  r  r`  )r*   r   ss      r+   test_strHTTPResponseTestCase.test_str  sI    ,-s79
 M_56j!$r.   r/   N)r1   r2   r3   r4   r'  r5   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)r4  r*   s   r+   r9  'SyncHTTPClientTest.setUp.<locals>.start!  s)    ''4$$&r.   )target)r   r7  	threadingEventr   rh   Threadserver_threadr9  waitr   r  )r*   r9  r3  r4  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   )r/  close_all_connectionsr   r7  stop)r   r*   s    r+   	slow_stopCSyncHTTPClientTest.tearDown.<locals>.stop_server.<locals>.slow_stop4  s>     kk7799 qA """'')s   AA)r/  rH  r   rh   r7  add_callback)rI  r*   s    r+   stop_server0SyncHTTPClientTest.tearDown.<locals>.stop_server,  sA    KK ]]* * ++I6r.   T)all_fds)r7  rK  r?  r   r  r  )r*   rL  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+   rd  SyncHTTPClientTest.get_urlD  s    &$))T):::r.   c                     U R                   R                  U R                  S5      5      nU R                  SUR                  5        g )Nr.  r   r  r   s     r+   test_sync_client#SyncHTTPClientTest.test_sync_clientG  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   rd  r   r  r   )r*   	assertions     r+   test_sync_client_error)SyncHTTPClientTest.test_sync_client_errorK  s[     y)Y""4<<#<= *,,1137 *)s   +A00
A>)r  r  r/  r7  r?  N)
r1   r2   r3   r4   rA  rO  rd  rU  rY  r5   r/   r.   r+   r*  r*    s    (,/2;98r.   r*  c                       \ rS rSrS rSrg)SyncHTTPClientSubprocessTestiS  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STDOUTr_  printr   fail)r*   procs     r+   test_destructor_log0SyncHTTPClientSubprocessTest.test_destructor_logT  sw     ~~_
 ??$$

 ;;)*T[[)*;;II=> r.   r/   N)r1   r2   r3   r4   rl  r5   r/   r.   r+   r\  r\  S  s    ?r.   r\  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)HTTPRequestTestCaseiq  c                 X    [        SSS0S9nU R                  UR                  SS05        g )Nr%  rm  r  r  )r	   r   rn   r*   rG   s     r+   test_headers HTTPRequestTestCase.test_headersr  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	   rn   r   rq  s     r+   test_headers_setter'HTTPRequestTestCase.test_headers_setterv  s0    23 %.5%.9r.   c                 `    [        S5      nS Ul        U R                  UR                  0 5        g )Nr%  rv  rq  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%  rm  )rH   )r	   r   rH   r   rq  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%  rm  )r	   rH   r   r   rq  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   rn   r   r*   	http_daterG   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   rn   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)r1   r2   r3   r4   rr  rw  rz  r}  r  r  r  r5   r/   r.   r+   ro  ro  q  s%    ::
.
44


r.   ro  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   rx  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   rx  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)r1   r2   r3   r4   r  r  r  r5   r/   r.   r+   r  r    s    *9
9r.   r  )Mre  ro  
contextlibr   r  r   r<  r  ior   rc  re  r  typingr2  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   r   tornado.webr   r   r   tornado.httputilr   r   r    r7   rB   rM   rX   r_   rj   rq   r{   r   r   r   r   r   r   r   r   TestCaser  r#  r*  r\  ro  r  r/   r.   r+   <module>r     s            
     7 7   * ! % (  T T > 8 8 :( (
. 
& &
n 
^ > ;. ;
~ &n &
Q~ Q
n &> &H H"~ "
 
EN EB	B0 B	BJ1x(( 1B%8,, %<8** <8~?8#4#4 ?<%
(++ %
P9)) 9r.   