
[c           @` su  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l m Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l m Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z m Z m Z d  d l m Z d  d	 l m Z d  d
 l m  Z  d  d l! m" Z" d  d l m# Z# d  d l$ m% Z% m& Z& d  d l' m( Z( m) Z) m* Z* m+ Z+ d  d l, m- Z- m. Z. m/ Z/ d  d l0 m1 Z1 m2 Z2 m3 Z3 d  d l4 m5 Z5 m6 Z6 d e2 f d     YZ7 d e2 f d     YZ8 d e2 f d     YZ9 d e2 f d     YZ: d e2 f d     YZ; d e2 f d     YZ< d e2 f d     YZ= d  e2 f d!     YZ> d" e2 f d#     YZ? d$ e2 f d%     YZ@ d& e2 f d'     YZA d( e2 f d)     YZB d* e2 f d+     YZC d, e( f d-     YZD d. e- jE f d/     YZF d0 e- jE f d1     YZG d2 e- jE f d3     YZH d4 e- jE f d5     YZI d6 e- jE f d7     YZJ d S(8   i    (   t   absolute_importt   divisiont   print_functionN(   t   closing(   t   BytesIO(   t   utf8t
   native_str(   t   gen(   t   HTTPRequestt   HTTPResponset   _RequestProxyt	   HTTPErrort
   HTTPClient(   t
   HTTPServer(   t   IOLoop(   t   IOStream(   t   gen_log(   t   netutil(   t   ExceptionStackContextt   NullContext(   t   AsyncHTTPTestCaset   bind_unused_portt   gen_testt	   ExpectLog(   t   unittestt   skipOnTravist   ignore_deprecation(   t   Applicationt   RequestHandlert   url(   t   format_timestampt   HTTPHeaderst   HelloWorldHandlerc           B` s   e  Z d    Z RS(   c         C` s7   |  j  d d  } |  j d d  |  j d |  d  S(   Nt   namet   worlds   Content-Types
   text/plains	   Hello %s!(   t   get_argumentt
   set_headert   finish(   t   selfR!   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   get   s    (   t   __name__t
   __module__R'   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR       s   t   PostHandlerc           B` s   e  Z d    Z RS(   c         C` s-   |  j  d |  j d  |  j d  f  d  S(   Ns   Post arg1: %s, arg2: %st   arg1t   arg2(   R%   R#   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   post&   s    	(   R(   R)   R-   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR*   %   s   t
   PutHandlerc           B` s   e  Z d    Z RS(   c         C` s$   |  j  d  |  j  |  j j  d  S(   Ns
   Put body: (   t   writet   requestt   body(   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   put,   s    (   R(   R)   R2   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR.   +   s   t   RedirectHandlerc           B` s   e  Z d    Z RS(   c         C` s?   |  j  d  |  j |  j d  d t |  j d d   d  S(   Ns   redirects can have bodies tooR   t   statust   302(   R/   t   redirectR#   t   int(   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   prepare2   s    (   R(   R)   R8   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR3   1   s   t   ChunkHandlerc           B` s   e  Z e j d     Z RS(   c         c` s6   |  j  d  |  j   t j d  V|  j  d  d  S(   Nt   asdfg{Gz?t   qwer(   R/   t   flushR   t   sleep(   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR'   9   s    
(   R(   R)   R   t	   coroutineR'   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR9   8   s   t   AuthHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  |  j j d  d  S(   Nt   Authorization(   R%   R0   t   headers(   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR'   C   s    (   R(   R)   R'   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR?   B   s   t   CountdownHandlerc           B` s   e  Z d    Z RS(   c         C` sI   t  |  } | d k r8 |  j |  j d | d   n |  j d  d  S(   Ni    t	   countdowni   t   Zero(   R7   R6   t   reverse_urlR/   (   R&   t   count(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR'   H   s     (   R(   R)   R'   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRB   G   s   t   EchoPostHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  |  j j  d  S(   N(   R/   R0   R1   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR-   Q   s    (   R(   R)   R-   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRG   P   s   t   UserAgentHandlerc           B` s   e  Z d    Z RS(   c         C` s#   |  j  |  j j j d d   d  S(   Ns
   User-Agents   User agent not set(   R/   R0   RA   R'   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR'   V   s    (   R(   R)   R'   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRH   U   s   t   ContentLength304Handlerc           B` s   e  Z d    Z d   Z RS(   c         C` s!   |  j  d  |  j d d  d  S(   Ni0  s   Content-Lengthi*   (   t
   set_statusR$   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR'   [   s    c         C` s   d  S(   N(    (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   _clear_headers_for_304_   s    (   R(   R)   R'   RK   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRI   Z   s   	t   PatchHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  |  j j  d S(   s=   Return the request payload - so we can check it is being keptN(   R/   R0   R1   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   patchg   s    (   R(   R)   RM   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRL   e   s   t   AllMethodsHandlerc           B` s<   e  Z e j d Z d   Z e Z Z Z Z Z	 Z
 Z RS(   t   OTHERc         C` s   |  j  |  j j  d  S(   N(   R/   R0   t   method(   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRP   o   s    (   RO   (   R(   R)   R   t   SUPPORTED_METHODSRP   R'   R-   R2   t   deletet   optionsRM   t   other(    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRN   l   s   	t   SetHeaderHandlerc           B` s   e  Z d    Z RS(   c         C` sG   x@ t  |  j d  |  j j d  D] \ } } |  j | |  q# Wd  S(   Nt   kt   v(   t   zipt   get_argumentsR0   t	   argumentsR$   (   R&   RV   RW   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR'   v   s    (   R(   R)   R'   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRU   u   s   t   HTTPClientCommonTestCasec           B` sL  e  Z d    Z d   Z e d    Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d    Z d   Z d   Z d   Z d   Z e d    Z e d    Z e d    Z e d    Z d   Z d   Z  d   Z! d   Z" d   Z# RS(    c         C` s   t  t d t  t d t  t d t  t d t  t d t  t d t  t d t d d	 t d
 t	  t d t
  t d t  t d t  t d t  t d t  g d t S(   Ns   /hellos   /posts   /puts	   /redirects   /chunks   /auths   /countdown/([0-9]+)R!   RC   s	   /echoposts   /user_agents   /304_with_content_lengths   /all_methodss   /patchs   /set_headert   gzip(   R   R   R    R*   R.   R3   R9   R?   RB   RG   RH   RI   RN   RL   RU   t   True(   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   get_app   s    c         C` sK   d } |  j  d d d d | } |  j | j d  |  j | j |  d  S(   Ns   some patch datas   /patchRP   t   PATCHR1   i   (   t   fetcht   assertEqualt   codeR1   (   R&   R1   t   response(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_patch_receives_payload   s    c         C` s   |  j  d  } |  j | j d  |  j | j d d  |  j | j d  |  j t | j  d  |  j  d  } |  j | j d  d  S(	   Ns   /helloi   s   Content-Types
   text/plains   Hello world!i    s   /hello?name=Bens
   Hello Ben!(   R`   Ra   Rb   RA   R1   R7   t   request_time(   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_hello_world   s    c         C` sE   g  } |  j  d d | j } |  j | d g  |  j | j  d  S(   Ns   /hellot   streaming_callbacks   Hello world!(   R`   t   appendRa   t   assertFalseR1   (   R&   t   chunksRc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_streaming_callback   s
    c         C` sE   |  j  d d d d d } |  j | j d  |  j | j d  d  S(   Ns   /postRP   t   POSTR1   s   arg1=foo&arg2=bari   s   Post arg1: foo, arg2: bar(   R`   Ra   Rb   R1   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt	   test_post   s    	c         C` sj   |  j  d  } |  j | j d  g  } |  j  d d | j } |  j | d d g  |  j | j  d  S(   Ns   /chunkt   asdfqwerRg   R:   R;   (   R`   Ra   R1   Rh   Ri   (   R&   Rc   Rj   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_chunked   s    c         ` s   t    \ } } t |  s t j   f d    } t j | |    j d |  } | j     j | j	 d    j
 j | j    Wd  QXd  S(   Nc         3` s`   t  |   } | j d  V} d | k r8   j d  n  | j d j d d   V| j   d  S(   Ns   

s   HTTP/1.s   requires HTTP/1.xs7   HTTP/1.1 200 OK
Transfer-Encoding: chunked

1
1
1
2
0

s   
s   
(   R   t
   read_untilt   skipTestR/   t   replacet   close(   t   connt   addresst   streamt   request_data(   R&   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   accept_callback   s    
s   http://127.0.0.1:%d/t   12(   R   R   R   R>   R   t   add_accept_handlerR`   t   rethrowRa   R1   t   io_loopt   remove_handlert   fileno(   R&   t   sockt   portRx   t   resp(    (   R&   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_chunked_close   s    
c         ` s   g    g    f d   }   f d   } t    + t |   |  j d d | Wd  QXWd  QX|  j   d d g  |  j d t    |  j  d d t  d  S(	   Nc         ` s     j  |  | | f  t S(   N(   Rh   R]   (   t   typt   valuet   tb(   t   exc_info(    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   error_handler   s    c         ` s(     j  |   |  d k r$ d d n  d  S(   NR;   i   i    (   Rh   (   t   chunk(   Rj   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   streaming_cb   s    s   /chunkRg   R:   R;   i   i    (   R   R   R`   Ra   t   lent   assertIst   ZeroDivisionError(   R&   R   R   (    (   Rj   R   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_streaming_stack_context   s    
c         C` s,   |  j  |  j d d d d d j d  d  S(   Ns   /autht   auth_usernamet   Aladdint   auth_passwords   open sesames"   Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==(   Ra   R`   R1   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_basic_auth   s    	c      	   C` s2   |  j  |  j d d d d d d d j d  d  S(	   Ns   /authR   R   R   s   open sesamet	   auth_modet   basics"   Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==(   Ra   R`   R1   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_basic_auth_explicit_mode   s    	c         C` sf   |  j  |  j d d d d d j d  t j d d  } |  j  |  j d d | d d	 j d
  d  S(   Ns   /authR   t   testR   s   123£s   Basic dGVzdDoxMjPCow==t   NFDu   josés   səcrəts   Basic am9zw6k6c8mZY3LJmXQ=(   Ra   R`   R1   t   unicodedatat	   normalize(   R&   t   username(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_basic_auth_unicode   s    		c         C` sa   t  t d d t F |  j t t f  * |  j d d d d d d d	 d
 t Wd  QXWd  QXd  S(   Ns   uncaught exceptiont   requireds   /authR   R   R   s   open sesameR   R:   t   raise_error(   R   R   t   Falset   assertRaisest
   ValueErrorR   R`   R]   (   R&   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_unsupported_auth_mode  s    c         C` s   |  j  d d t } |  j d | j  |  j | j d j d   |  j  d  } |  j d | j  |  j | j j d   |  j d | j  d  S(	   Ns   /countdown/2t   follow_redirectsi.  t   Locations   /countdown/1i   s   /countdown/0RD   (	   R`   R   Ra   Rb   t
   assertTrueRA   t   endswitht   effective_urlR1   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_follow_redirect  s    c         C` sN   |  j  d  j d d  } |  j |  } |  j d t j d  | j  d  S(   Ns   /auths   http://s   http://me:secret@s   Basic s	   me:secret(   t   get_urlRr   R`   Ra   t   base64t	   b64encodeR1   (   R&   R   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_credentials_in_url!  s    c      
   C` s  d } t  j d  } |  j d d d d | d i d d	 6} |  j | j d
 d  |  j | j t |   |  j d d d d | d i d d	 6} |  j | j d
 d  |  j | j |  |  j d d d d | d i d d	 6d d } |  j | j d
 d  |  j | j |  d  S(   Nu   ét   e9s	   /echopostRP   Rl   R1   RA   s   application/blahs   Content-Types   Content-Lengtht   2t   1t
   user_agentu   foo(   t   binasciit   a2b_hexR`   Ra   RA   R1   R   (   R&   t   unicode_bodyt	   byte_bodyRc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_body_encoding'  s     	c         C` s{   |  j  d  } |  j t | j  t  |  j t | j d  t  |  j t | j  t  |  j t | j	  t  d  S(   Ns   /hellos   Content-Type(
   R`   Ra   t   typeR1   t   bytesRA   t   strRb   R7   R   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt
   test_types@  s
    c         ` s   g   i   g      f d   }     f d   }  j  d d | d |  j t   d    j  d d   j   d	 d
 g  d  S(   Nc         ` sr   |  j  d  r n\ |  j  d  r1   j |   n= |  d k rn |  j d d  \ } } | j    | j   <n  d  S(   Ns   HTTP/1.1 101s   HTTP/s   
t   :i   (   t
   startswithRh   t   splitt   stript   lower(   t   header_lineRV   RW   (   t
   first_lineRA   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   header_callbackL  s    c         ` s%    j   d d    j |   d  S(   Ns   content-types   text/html; charset=UTF-8(   Ra   Rh   (   R   (   Rj   RA   R&   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRg   V  s    s   /chunkR   Rg   i   i    s   HTTP/[0-9]\.[0-9] 200.*
R:   R;   (   R`   Ra   R   t   assertRegexpMatches(   R&   R   Rg   (    (   Rj   R   RA   R&   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_header_callbackG  s    
c         ` s   g      f d   } d   } t    + t |   |  j d d | Wd  QXWd  QX|  j t    d  |  j   d d t  d  S(   Nc         ` s     j  |  | | f  t S(   N(   Rh   R]   (   R   R   R   (   R   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR   f  s    c         S` s$   |  j    j d  r  d d n  d  S(   Ns   content-type:i   i    (   R   R   (   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR   j  s    s   /chunkR   i   i    (   R   R   R`   Ra   R   R   R   (   R&   R   R   (    (   R   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt"   test_header_callback_stack_contextc  s    	
c         c` sr   t  d d d t  } |  j j d t d |  } z0 | j |  j d   V} |  j | j d  Wd  | j	   Xd  S(   NR   t   TestDefaultUserAgentt
   allow_ipv6t   force_instancet   defaultss   /user_agent(
   t   dictR   t   http_clientt	   __class__R]   R`   R   Ra   R1   Rs   (   R&   R   t   clientRc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_configure_defaultst  s    	c      	   C` s   xy d d g D]k } xb t  t g D]T } |   } | | d <|  j d d | } |  j | j d d | j | | f  q  Wq Wd  S(   Nu   MyUserAgentt   MyUserAgents
   User-Agents   /user_agentRA   s#   response=%r, value=%r, container=%r(   R   R   R`   Ra   R1   (   R&   R   t	   containerRA   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_header_types  s    	
	c         ` s   t    \ } } t |  w t j   f d    } t j | |    j d |  } | j     j | j	 d d    j
 j | j    Wd  QXd  S(   Nc         3` s`   t  |   } | j d  V} d | k r8   j d  n  | j d j d d   V| j   d  S(   Ns   

s   HTTP/1.s   requires HTTP/1.xs2   HTTP/1.1 200 OK
X-XSS-Protection: 1;
	mode=block

s   
s   
(   R   Rp   Rq   R/   Rr   Rs   (   Rt   Ru   Rv   Rw   (   R&   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyRx     s    s   http://127.0.0.1:%d/s   X-XSS-Protections   1; mode=block(   R   R   R   R>   R   Rz   R`   R{   Ra   RA   R|   R}   R~   (   R&   R   R   Rx   R   (    (   R&   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_multi_line_headers  s    
c         C` s=   |  j  d  } |  j | j d  |  j | j d d  d  S(   Ns   /304_with_content_lengthi0  s   Content-Lengtht   42(   R`   Ra   Rb   RA   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_304_with_content_length  s    c         ` s   g       f d   } |  j  _ t   4 t   $  j j  j d  d    Wd  QXWd  QX j    j   d d t	  d  S(   Nc         ` s!     j  t j     j   d  S(   N(   Rh   t   sysR   t   stop(   t   callback(   R   R&   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   handle_callback_exception  s    s   /helloc         S` s   d d S(   Ni   i    (    (   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   <lambda>  s    i    (
   R|   R   R   R   R   R`   R   t   waitRa   R   (   R&   R   (    (   R   R&   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt!   test_final_callback_stack_context  s    	


c         c` s3   |  j  j |  j d   V} |  j | j d  d  S(   Ns   /hellos   Hello world!(   R   R`   R   Ra   R1   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_future_interface  s    c         c` se   |  j  t  ! } |  j j |  j d   VWd  QX|  j | j j d  |  j | j j j d  d  S(   Ns	   /notfoundi  (	   R   R   R   R`   R   Ra   t	   exceptionRb   Rc   (   R&   t   context(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_future_http_error  s     c         c` s9   |  j  j |  j d  d t V} |  j | j d  d  S(   Ns	   /notfoundR   i  (   R   R`   R   R   Ra   Rb   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_future_http_error_no_raise  s    "c         c` s~   |  j  d  } |  j j |  V} |  j | j j |  |  j t | j t   |  j j | j  V} |  j | j	 d  d  S(   Ns   /hellos   Hello world!(
   R   R   R`   Ra   R0   R   R   t
   isinstanceR   R1   (   R&   R   Rc   t	   response2(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt    test_reuse_request_from_response  s    c         C` s   xE d d d g D]4 } |  j  d d | } |  j | j t |   q WxK d d d g D]: } |  j  d d | d	 d
 } |  j | j t |   qX W|  j  d d d } |  j | j d
  |  j  d d d d t } |  j | j d  d  S(   Nt   GETt   DELETEt   OPTIONSs   /all_methodsRP   Rl   t   PUTR_   R1   t    t   HEADRO   t   allow_nonstandard_methods(   R`   Ra   R1   R   R]   (   R&   RP   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_all_methods  s    	c         C` s5  x d D]~ } |  j  t    } |  j d d | d t Wd  QX|  j d t | j   |  j d d | d t } |  j | j d	  q Wx d D] } |  j  t  & } |  j d d | d d d t Wd  QX|  j d t | j   | d
 k r |  j d d | d d d t d t |  j | j d	  q q Wd  S(   NRl   R   R_   s   /all_methodsRP   R   s   must not be NoneR   i   R   R   R   R1   R:   s   must be None(   Rl   R   R_   (   R   R   R   (	   R   R   R`   R]   t   assertInR   R   Ra   Rb   (   R&   RP   R   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_body_sanity_checks  s    	%c         C` s<   |  j  d d d d d } | j   |  j | j d  d  S(   Ns   /redirect?status=307&url=/putRP   R   R1   t   hellos   Put body: hello(   R`   R{   Ra   R1   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_put_307  s    
c         C` s:   |  j  d  } | j   |  j | j d t d   d  S(   Ns   /set_header?k=foo&v=%E9t   Foou   é(   R`   R{   Ra   RA   R   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_non_ascii_header   s    
c         C` s   t  j    } |  j d  } | j   |  j | j d  |  j | j d  |  j t | j |  d  xM | j j	   D]< \ } } |  j
 d | k o d k  n d | | f  qx Wd  S(   Ns   /helloi    g      ?s   time_info[%s] out of bounds: %s(   t   timeR`   R{   t   assertGreaterEqualRe   t
   assertLesst   abst
   start_timet	   time_infot   itemsR   (   R&   R   Rc   RV   RW   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_response_times&  s    
($   R(   R)   R^   Rd   R   Rf   Rk   Rm   Ro   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR[      s@   						
							
												(		t   RequestProxyTestc           B` s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s5   t  t d d d t    } |  j | j d  d  S(   Ns   http://example.com/R   t   foo(   R
   R   R   Ra   R   (   R&   t   proxy(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_request_set8  s    c         C` s5   t  t d  t d d   } |  j | j d  d  S(   Ns   http://example.com/t   network_interfaceR   (   R
   R   R   Ra   R   (   R&   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_default_set>  s    c         C` s;   t  t d d d t d d   } |  j | j d  d  S(   Ns   http://example.com/t
   proxy_hostR   t   bar(   R
   R   R   Ra   R   (   R&   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_both_setC  s    c         C` s/   t  t d  t    } |  j | j d   d  S(   Ns   http://example.com/(   R
   R   R   R   R   t   None(   R&   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_neither_setI  s    c         C` s9   t  t d  t    } |  j t   | j Wd  QXd  S(   Ns   http://example.com/(   R
   R   R   R   t   AttributeErrorR   (   R&   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_bad_attributeN  s    c         C` s,   t  t d  d   } |  j | j d   d  S(   Ns   http://example.com/(   R
   R   R   R   R   (   R&   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_defaults_noneT  s    (   R(   R)   R   R   R   R  R  R  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR   7  s   					t   HTTPResponseTestCasec           B` s   e  Z d    Z RS(   c         C` sZ   t  t d  d d i  d t   } t |  } |  j | j d   |  j d |  d  S(   Ns   http://example.comi   RA   t   buffers   HTTPResponse(s   code=200(   R	   R   R   R   R   R   R   (   R&   Rc   t   s(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_strZ  s
    (   R(   R)   R  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR  Y  s   t   SyncHTTPClientTestc           B` s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         ` s   t  j   j d k r' t j d   n  t      _ t j   f d    }   j j |  t	 j
 d   j j    _   j j   t     _ d  S(   Nt   TwistedIOLoops1   Sync HTTPClient not compatible with TwistedIOLoopc          ` sJ   t    \ }    _ t d t f g  } t |    _   j j |   d  S(   Nt   /(   R   R   R   R    R   t   servert
   add_socket(   R   t   app(   R&   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   init_serverk  s    t   target(   R   t   configured_classR(   R   t   SkipTestt   server_ioloopR   R>   t   run_synct	   threadingt   Threadt   startt   server_threadR   R   (   R&   R  (    (   R&   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   setUpc  s    c         ` sP     f d   }   j  j |    j j     j j     j  j d t  d  S(   Nc          ` s9     j  j   t j   f d    }    j j |   d  S(   Nc          3` s-   x t  d  D] }  d  Vq W  j j   d  S(   Ni   (   t   rangeR  R   (   t   i(   R&   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt	   slow_stop  s    	(   R  R   R   R>   R  t   add_callback(   R  (   R&   (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   stop_servery  s    t   all_fds(   R  R  R  t   joinR   Rs   R]   (   R&   R  (    (   R&   s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   tearDownx  s
    c         C` s   d |  j  | f S(   Ns   http://127.0.0.1:%d%s(   R   (   R&   t   path(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR     s    c         C` s2   |  j  j |  j d   } |  j d | j  d  S(   NR  s   Hello world!(   R   R`   R   Ra   R1   (   R&   Rc   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_sync_client  s    c         C` sK   |  j  t    } |  j j |  j d   Wd  QX|  j | j j d  d  S(   Ns	   /notfoundi  (   R   R   R   R`   R   Ra   R   Rb   (   R&   t	   assertion(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_sync_client_error  s    (   R(   R)   R  R!  R   R#  R%  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR	  b  s
   				t   HTTPRequestTestCasec           B` s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s7   t  d d i d d 6} |  j | j i d d 6 d  S(   Ns   http://example.comRA   R   R   (   R   Ra   RA   (   R&   R0   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_headers  s    c         C` s:   t  d  } i d d 6| _ |  j | j i d d 6 d  S(   Ns   http://example.comt   bazR   (   R   RA   Ra   (   R&   R0   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_headers_setter  s    c         C` s,   t  d  } d  | _ |  j | j i   d  S(   Ns   http://example.com(   R   R   RA   Ra   (   R&   R0   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_null_headers_setter  s    	c         C` s/   t  d d d } |  j | j t d   d  S(   Ns   http://example.comR1   R   (   R   Ra   R1   R   (   R&   R0   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt	   test_body  s    c         C` s2   t  d  } d | _ |  j | j t d   d  S(   Ns   http://example.comR   (   R   R1   Ra   R   (   R&   R0   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_body_setter  s    	c         C` sE   t  j  j   } t d d | } |  j | j i t |  d 6 d  S(   Ns   http://example.comt   if_modified_sinces   If-Modified-Since(   t   datetimet   utcnowR   Ra   RA   R   (   R&   t	   http_dateR0   (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_if_modified_since  s    (   R(   R)   R'  R)  R*  R+  R,  R1  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR&    s   					t   HTTPErrorTestCasec           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` sE   t  d  } t j |  } |  j | |  |  j | j | j  d  S(   Ni  (   R   t   copyt   assertIsNotRa   Rb   (   R&   t   et   e2(    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt	   test_copy  s    c         C` s<   t  d  } |  j t |  d  |  j t |  d  d  S(   Ni  s   HTTP 403: Forbidden(   R   Ra   R   t   repr(   R&   R5  (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_plain_error  s    c         C` sp   t  t d  d  } |  j t   } | j   Wd  QX| j } |  j t |  d  |  j t |  d  d  S(   Ns   http://example.com/i  s   HTTP 403: Forbidden(	   R	   R   R   R   R{   R   Ra   R   R8  (   R&   R   t   cmR5  (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   test_error_with_response  s    	(   R(   R)   R7  R9  R;  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyR2    s   		(K   t
   __future__R    R   R   R   R   t
   contextlibR   R3  R   R  R.  t   ioR   R   R   t   tornado.escapeR   R   t   tornadoR   t   tornado.httpclientR   R	   R
   R   R   t   tornado.httpserverR   t   tornado.ioloopR   t   tornado.iostreamR   t   tornado.logR   R   t   tornado.stack_contextR   R   t   tornado.testingR   R   R   R   t   tornado.test.utilR   R   R   t   tornado.webR   R   R   t   tornado.httputilR   R   R    R*   R.   R3   R9   R?   RB   RG   RH   RI   RL   RN   RU   R[   t   TestCaseR   R  R	  R&  R2  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpclient_test.pyt   <module>   sV   ("
		 "	;