
[c           @` sC  d  d l  m Z m Z m Z d  d l Z d  d l m Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d  d l m Z d  d l m Z m Z d  d l m Z d  d	 l m Z 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) d  d l* m+ Z+ m, Z, m- Z- m. Z. d  d l/ m0 Z0 d  d l1 m2 Z2 m3 Z3 m4 Z4 m5 Z5 m6 Z6 d  d l7 m8 Z8 m9 Z9 m: Z: m; Z; m< Z< d  d l= m> Z> m? Z? m@ Z@ mA ZA d e0 jB f d     YZC d e> f d     YZD d e> f d     YZE d e> f d     YZF d e> f d     YZG d e> f d     YZH d  e> f d!     YZI d" e> f d#     YZJ d$ e> f d%     YZK d& e> f d'     YZL d( e> f d)     YZM d* e> f d+     YZN eA d, e> f d-     Y ZO d. eP f d/     YZQ d0 eQ e2 f d1     YZR d2 eQ e3 f d3     YZS d4 e4 f d5     YZT d6 e2 f d7     YZU d8 e2 f d9     YZV d: e2 f d;     YZW d< e2 f d=     YZX d> e2 f d?     YZY d@ e2 f dA     YZZ dB e2 f dC     YZ[ dD e2 f dE     YZ\ d S(F   i    (   t   absolute_importt   divisiont   print_functionN(   t   closing(   t
   to_unicodet   utf8(   t   gen(   t   AsyncHTTPClient(   t   HTTPHeaderst   ResponseStartLine(   t   IOLoop(   t   UnsatisfiableReadError(   t   Event(   t   gen_log(   t   Future(   t   Resolvert   bind_sockets(   t   SimpleAsyncHTTPClientt   HTTPStreamClosedErrort   HTTPTimeoutError(   t   ChunkHandlert   CountdownHandlert   HelloWorldHandlert   RedirectHandler(   t   httpclient_test(   t   AsyncHTTPTestCaset   AsyncHTTPSTestCaset   AsyncTestCaset	   ExpectLogt   gen_test(   t   skipOnTravist   skipIfNoIPv6t   refusing_portt   skipBefore35t	   exec_test(   t   RequestHandlert   Applicationt   urlt   stream_request_bodyt   SimpleHTTPClientCommonTestCasec           B` s   e  Z d    Z RS(   c         C` s)   t  d t  } |  j t | t    | S(   Nt   force_instance(   R   t   Truet
   assertTruet
   isinstance(   t   selft   client(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   get_http_client"   s    (   t   __name__t
   __module__R.   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR'   !   s   t   TriggerHandlerc           B` s#   e  Z d    Z e j d    Z RS(   c         C` s   | |  _  | |  _ d  S(   N(   t   queuet   wake_callback(   R,   R2   R3   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt
   initialize)   s    	c         c` s]   t  j d  |  j j |  j  |  j d d  d k rE |  j   n  t   } | j   Vd  S(   Ns   queuing triggert   waket   true(	   t   loggingt   debugR2   t   appendt   finisht   get_argumentR3   R   t   wait(   R,   t   never_finish(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   get-   s    	(   R/   R0   R4   R   t	   coroutineR>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR1   (   s   	t   HangHandlerc           B` s   e  Z e j d     Z RS(   c         c` s   t    } | j   Vd  S(   N(   R   R<   (   R,   R=   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>   8   s    	(   R/   R0   R   R?   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR@   7   s   t   ContentLengthHandlerc           B` s#   e  Z d    Z e j d    Z RS(   c         C` s)   |  j    |  _ t j   j |  j  d  S(   N(   t   detacht   streamR
   t   currentt   spawn_callbackt   write_response(   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>   ?   s    c         c` s5   |  j  j t d |  j d    V|  j  j   d  S(   Ns)   HTTP/1.0 200 OK
Content-Length: %s

okt   value(   RC   t   writeR   R;   t   close(   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRF   C   s    (   R/   R0   R>   R   R?   RF   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRA   >   s   	t   HeadHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  d d  d  S(   Ns   Content-Lengtht   7(   t
   set_header(   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   headK   s    (   R/   R0   RM   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRJ   J   s   t   OptionsHandlerc           B` s   e  Z d    Z RS(   c         C` s!   |  j  d d  |  j d  d  S(   Ns   Access-Control-Allow-Origint   *t   ok(   RL   RH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   optionsP   s    (   R/   R0   RQ   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRN   O   s   t   NoContentHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  d  |  j   d  S(   Ni   (   t
   set_statusR:   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>   V   s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRR   U   s   t   SeeOtherPostHandlerc           B` s   e  Z d    Z RS(   c         C` sU   t  |  j j  } | d k s4 t d |  j j   |  j d d  |  j |  d  S(   Ni.  i/  s   unexpected body %rt   Locations   /see_other_get(   i.  i/  (   t   intt   requestt   bodyt   AssertionErrorRL   RS   (   R,   t   redirect_code(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   post\   s    "(   R/   R0   R[   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRT   [   s   t   SeeOtherGetHandlerc           B` s   e  Z d    Z RS(   c         C` s6   |  j  j r% t d |  j  j   n  |  j d  d  S(   Ns   unexpected body %rRP   (   RW   RX   t	   ExceptionRH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>   d   s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR\   c   s   t   HostEchoHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  |  j j d  d  S(   Nt   Host(   RH   RW   t   headers(   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>   k   s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR^   j   s   t   NoContentLengthHandlerc           B` s   e  Z d    Z RS(   c         C` sL   |  j  j j d  r; |  j   } | j d  | j   n |  j d  d  S(   Ns   HTTP/1s   HTTP/1.0 200 OK

hellos   HTTP/1 required(   RW   t   versiont
   startswithRB   RH   RI   R:   (   R,   RC   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>   p   s
    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRa   o   s   t   EchoPostHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  |  j j  d  S(   N(   RH   RW   RX   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR[   ~   s    (   R/   R0   R[   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRd   }   s   t   RespondInPrepareHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  d  |  j d  d  S(   Ni  t	   forbidden(   RS   R:   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   prepare   s    (   R/   R0   Rg   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRe      s   t   SimpleHTTPClientTestMixinc           B` sI  e  Z d    Z d   Z d   Z e d    Z d   Z d   Z d   Z	 d   Z
 e e d     Z e d	    Z e d
    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e j d    Z d   Z d   Z d   Z d   Z e  d    Z! e  d    Z" d   Z# d   Z$ d   Z% RS(   c         C` s   t  j   |  _ t t d t t d |  j d |  j   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  t d t  t d t  t d t  t d t  t d t  t d t  t d t  g d t S(   Ns   /triggerR2   R3   s   /chunks   /countdown/([0-9]+)t   namet	   countdowns   /hangs   /hellos   /content_lengths   /heads   /optionss   /no_contents   /see_other_posts   /see_other_gets
   /host_echos   /no_content_lengths
   /echo_posts   /respond_in_prepares	   /redirectt   gzip(   t   collectionst   dequet   triggersR$   R%   R1   t   dictt   stopR   R   R@   R   RA   RJ   RN   RR   RT   R\   R^   Ra   Rd   Re   R   R)   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   get_app   s(    c         C` s   |  j  t   t   k  |  j  t   t d t  k	  t t    M } |  j j t j t   } | j t j t   } |  j  | | k	  Wd  QXd  S(   NR(   (	   R*   R   R)   R   R
   t   io_loopt   run_syncR   R?   (   R,   t   io_loop2t   client1t   client2(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_singleton   s    c         ` s  t   j d d   }  j | j d  g    xB t d  D]4 } | j  j d   j |    f d   qA W j d  f d     j t	 | j
  d   j j      j j      j d    f d     j t    t d	 d
 g    j t	 | j
  d	   j j      j j      j d   f d     j t    t d	 d
 d d g    j t	  j  d	  Wd  QXd  S(   Nt   max_clientsi   i   s   /triggerc         ` s     j  |   j   f S(   N(   R9   Rp   (   t   futt   i(   t   seenR,   (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   <lambda>   s    t	   conditionc           ` s   t    j  d k S(   Ni   (   t   lenRn   (    (   R,   (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR|      s    c           ` s%   t   j  d k o$ t     d k S(   Ni   (   R~   Rn   (    (   R{   R,   (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR|      s   i    i   c           ` s   t     d k S(   Ni   (   R~   (    (   R{   (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR|      s    i   (   R   t   create_clientt   assertEqualRx   t   ranget   fetcht   get_urlt   add_done_callbackR<   R~   R2   Rn   t   popleftt   set(   R,   R-   Rz   (    (   R{   R,   sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_connection_limit   s$    "(c         c` sN   t  |  j d d   0 } | j |  j d  d d V} | j   Wd  QXd  S(   NRx   i   s   /countdown/3t   max_redirectsi   (   R   R   R   R   t   rethrow(   R,   R-   t   response(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_redirect_connection_limit   s    
c         C` s   |  j  d d t d i d d 6} |  j | j d d  |  j | j d  |  j t | j  d  t j d	 d
 d | j	  } |  j | j
   d  d  S(   Ns   /chunkt   use_gzipR`   Rk   s   Accept-Encodings   Content-Encodingt   asdfqweri"   t   modet   rt   fileobj(   R   t   FalseR   R`   t   assertNotEqualRX   R~   Rk   t   GzipFilet   buffert   read(   R,   R   t   f(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt	   test_gzip   s    c         C` s~   |  j  d d d } |  j d | j  |  j | j j j d   |  j | j j d   |  j | j d j d   d  S(   Ns   /countdown/5R   i   i.  s   /countdown/2RU   s   /countdown/1(	   R   R   t   codeR*   RW   R%   t   endswitht   effective_urlR`   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_max_redirects   s
    c         C` sI   t  i d d 6 } |  j d d | |  j t | j    d g  d  S(   Nt   Foos
   User-Agents   /helloR`   (   s
   User-AgentR   (   R   R   R   t   listt   get_all(   R,   R`   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_header_reuse   s    c         C` s   x d
 D] } |  j  d d d d d | } |  j d | j  |  j | j j j d   |  j | j j d	   |  j d | j j  q Wd  S(   Ni.  i/  s   /see_other_postt   methodt   POSTRX   s   %di   s   /see_other_get(   i.  i/  (	   R   R   R   R*   RW   R%   R   R   R   (   R,   R   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_see_other_redirect   s    c         c` s   d } d t  f d     Y} t |  j d |     F } |  j t  . | j |  j d  d | d d d	 t VWd  QXWd  QXd  S(
   Ng?t   TimeoutResolverc           B` s   e  Z d    Z RS(   c         _` s   t    S(   N(   R   (   R,   t   argst   kwargs(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   resolve   s    (   R/   R0   R   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR      s   t   resolvers   /hellot   connect_timeoutt   request_timeouti  t   raise_error(   R   R   R   t   assertRaisesR   R   R   R)   (   R,   t   timeoutR   R-   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_connect_timeout   s    c      
   C` sa   d } t  j d k r d } n  |  j t   |  j d d | d t Wd  QX|  j j     d  S(   Ng?t   ntg      ?s   /trigger?wake=falseR   R   (   t   osRi   R   R   R   R)   Rn   R   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_request_timeout	  s    	c      
   C` s   t  d  d d t j \ } | j   d } |  j j |  d |  j   | f } |  j t	   |  j
 | d t d t Wd  QX|  j
 |  } |  j | j d  d  S(   Ns   ::1t   familyi   s   %s://[::1]:%d/hellot
   allow_ipv6R   s   Hello world!(   R   t   Nonet   sockett   AF_INET6t   getsocknamet   http_servert
   add_sockett   get_protocolR   R]   R   R   R)   R   RX   (   R,   t   sockt   portR%   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt	   test_ipv6  s    c         C` s   |  j  d  } |  j | j d  |  j  d  } |  j | j d  t t d  W |  j t   |  j  d d t Wd  QX|  j t   |  j  d d t Wd  QXWd  QXd  S(   Ns   /content_length?value=2,2RP   s   /content_length?value=2,%202,2s"   .*Multiple unequal Content-Lengthss   /content_length?value=2,4R   s   /content_length?value=2,%202,3(   R   R   RX   R   R   R   R   R)   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt%   test_multiple_content_length_accepted"  s    c         C` sS   |  j  d d d } |  j | j d  |  j | j d d  |  j | j  d  S(   Ns   /headR   t   HEADi   s   content-lengthRK   (   R   R   R   R`   t   assertFalseRX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_head_request.  s    c         C` sm   |  j  d d d } |  j | j d  |  j | j d d  |  j | j d d  |  j | j d	  d  S(
   Ns   /optionsR   t   OPTIONSi   s   content-lengtht   2s   access-control-allow-originRO   RP   (   R   R   R   R`   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_options_request4  s
    c         C` s9   |  j  d  } |  j | j d  |  j d | j  d  S(   Ns   /no_contenti   s   Content-Length(   R   R   R   t   assertNotInR`   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_no_content;  s    c         C` s   t  j d  } |  j d  } |  j | j | j   |  j d  j d d  } |  j |  } |  j | j | j  | j  d  S(   Ns   ^127.0.0.1:[0-9]+$s
   /host_echos   http://s   http://me:secret@(   t   ret   compileR   R*   t   matchRX   R   t   replace(   R,   t   host_reR   R%   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_host_headerD  s    c         C` s  t    \ } } |  j |  t t d d t 7 |  j t j   } |  j d | d t	 Wd  QXWd  QXt
 j d k rt t j  t | j  k } | r t t d  r t t j  t | j  k } n  |  j | | j  t j t j  } |  j | t | j  k | j  n  d  S(   Ns   .*t   requireds   http://127.0.0.1:%d/R   t   cygwint   WSAECONNREFUSED(   R    t
   addCleanupR   R   R   R   R   t   errorR   R)   t   syst   platformt   strt   errnot   ECONNREFUSEDt	   exceptiont   hasattrR   R*   R   t   strerror(   R,   t   cleanup_funcR   t   cmt   contains_errnot   expected_message(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_connection_refusedM  s    #!c         ` s   t   j d d        j  j d  d d   j    j t  # }  j j    f d    Wd  QX j	 t
 | j  d   j j      j j  f d    Wd  QXd  S(	   NRx   i   s   /triggerR   i
   c           ` s"     j   j d  d d d t S(   Ns   /helloR   g?R   (   R   R   R)   (    (   R-   R,   (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR|   f  s   s   Timeout in request queuec           ` s     S(   N(    (    (   t   fut1(    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR|   k  s    (   R   R   R   R   R<   R   R   Rr   Rs   R   R   R   Rn   R   (   R,   R   (    (   R-   R   R,   sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_queue_timeout`  s    
"c         C` sE   |  j  d  } | j d k r. |  j d  n |  j d | j  d  S(   Ns   /no_content_lengths   HTTP/1 requireds   requires HTTP/1.xt   hello(   R   RX   t   skipTestt   assertEquals(   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_no_content_lengthm  s    c         C` s   | d  | d  d  S(   Nt   1234t   5678(    (   R,   RH   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   sync_body_producert  s    
c         c` s"   | d  Vt  j V| d  Vd  S(   NR   R   (   R   t   moment(   R,   RH   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   async_body_producerx  s    c         C` s?   |  j  d d d d |  j } | j   |  j | j d  d  S(   Ns
   /echo_postR   R   t   body_producert   12345678(   R   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_sync_body_producer_chunked~  s    
c      
   C` sL   |  j  d d d d |  j d i d d 6} | j   |  j | j d  d  S(	   Ns
   /echo_postR   R   R   R`   t   8s   Content-LengthR   (   R   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt&   test_sync_body_producer_content_length  s
    	
c         C` s?   |  j  d d d d |  j } | j   |  j | j d  d  S(   Ns
   /echo_postR   R   R   R   (   R   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt    test_async_body_producer_chunked  s    
c      
   C` sL   |  j  d d d d |  j d i d d 6} | j   |  j | j d  d  S(	   Ns
   /echo_postR   R   R   R`   R   s   Content-LengthR   (   R   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt'   test_async_body_producer_content_length  s
    	
c         C` sX   t  t   t   d  } |  j d d d d | d } | j   |  j | j d  d  S(   Ns   
        async def body_producer(write):
            await write(b'1234')
            import asyncio
            await asyncio.sleep(0)
            await write(b'5678')
        s
   /echo_postR   R   R   R   (   R"   t   globalst   localsR   R   R   RX   (   R,   t	   namespaceR   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt!   test_native_body_producer_chunked  s    	
c      
   C` se   t  t   t   d  } |  j d d d d | d d i d d 6} | j   |  j | j d	  d  S(
   Ns   
        async def body_producer(write):
            await write(b'1234')
            import asyncio
            await asyncio.sleep(0)
            await write(b'5678')
        s
   /echo_postR   R   R   R`   R   s   Content-LengthR   (   R"   R   R   R   R   R   RX   (   R,   R   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt(   test_native_body_producer_content_length  s    	

c         C` s8   |  j  d d d d d d t } |  j | j d  d  S(   Ns
   /echo_postR   R   RX   R   t   expect_100_continue(   R   R)   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_100_continue  s    	c         C` sA   d   } |  j  d d d d | d t } |  j | j d  d  S(   Nc         S` s   t  d   d  S(   Ns   should not be called(   R]   (   RH   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR     s    s   /respond_in_prepareR   R   R   R   i  (   R   R)   R   R   (   R,   R   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt    test_100_continue_early_response  s
    		c         C` s   g  } g  } |  j  d d | j d | j t t t |   } |  j | d g  t g  | D] } | j d  r] | ^ q]  } |  j | d  d  S(   Ns   /redirect?url=/hellot   header_callbackt   streaming_callbacks   Hello world!s   HTTP/i   (   R   R9   R   t   mapR   R   R~   Rc   (   R,   R`   t   chunkst   ht   num_start_lines(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_streaming_follow_redirects  s    	
.(&   R/   R0   Rq   Rw   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   R   R!   R   R   R   R   R   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRh      s>   																										t   SimpleHTTPClientTestCasec           B` s   e  Z d    Z d   Z RS(   c         C` s&   t  t |   j   |  j   |  _ d  S(   N(   t   superR   t   setUpR   t   http_client(   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR    s    c         K` s   t  d t |  S(   NR(   (   R   R)   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR     s    (   R/   R0   R  R   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR     s   	t   SimpleHTTPSClientTestCasec           B` sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s&   t  t |   j   |  j   |  _ d  S(   N(   R   R  R  R   R  (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR    s    c         K` s   t  d t d t d t  |  S(   NR(   t   defaultst   validate_cert(   R   R)   Ro   R   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR     s    c         C` s,   |  j  d d i  } |  j | j d  d  S(   Ns   /hellot   ssl_optionss   Hello world!(   R   R   RX   (   R,   t   resp(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_ssl_options  s    c         C` s8   |  j  d d t j t j  } |  j | j d  d  S(   Ns   /helloR  s   Hello world!(   R   t   sslt
   SSLContextt   PROTOCOL_SSLv23R   RX   (   R,   R  (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_ssl_context  s    c         C` s^   t  t d d t C |  j t j  * |  j d d t d t j  d t	 Wd  QXWd  QXd  S(   Ns   SSL Error|Uncaught exceptionR   s   /helloR  t	   cert_reqsR   (
   R   R   R   R   R	  t   SSLErrorR   Ro   t   CERT_REQUIREDR)   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_ssl_options_handshake_fail  s    
c         C` sj   t  t d  U t j t j  } t j | _ |  j t j   |  j	 d d | d t
 Wd  QXWd  QXd  S(   Ns   SSL Error|Uncaught exceptions   /helloR  R   (   R   R   R	  R
  R  R  t   verify_modeR   R  R   R)   (   R,   t   ctx(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_ssl_context_handshake_fail  s
    c         C` s^   t  t d  9 } |  j t j   |  j d d t d t Wd  QXWd  QX|  j | j  d  S(   Ns   .*t   /R  R   (	   R   R   R   R	  R  R   R)   R   t   logged_stack(   R,   t
   expect_log(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_error_logging  s    %(	   R/   R0   R  R   R  R  R  R  R  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR    s   						t   CreateAsyncHTTPClientTestCasec           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s&   t  t |   j   t j   |  _ d  S(   N(   R   R  R  R   t   _save_configurationt   saved(   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR    s    c         C` s'   t  j |  j  t t |   j   d  S(   N(   R   t   _restore_configurationR  R   R  t   tearDown(   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR    s    c         C` s+  t  j t  t t  d t    } |  j | j d  Wd  QXt t  d d d t    } |  j | j d  Wd  QXt  j t d d t t  d t    } |  j | j d  Wd  QXt t  d d d t    } |  j | j d  Wd  QXt t  d d d t    } |  j | j d  Wd  QXd  S(   NR(   i
   Rx   i   i   i   i   (   R   t	   configureR   R   R)   R   Rx   (   R,   R-   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_max_clients  s    			(   R/   R0   R  R  R  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR    s   		t   HTTP100ContinueTestCasec           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` s   | j  j d  |  _ |  j sQ | j j t d d d  t    | j j   d  S| |  _ |  j j j	 j
 d  } | j |  j  d  S(   Ns   HTTP/1.t    i   t   OKs   HTTP/1.1 100 CONTINUE

(   Rb   Rc   t   http1t
   connectiont   write_headersR	   R   R:   RW   RC   RH   R   t   respond_200(   R,   RW   Ry   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   respond_100*  s    	
		c         ` s<   | j      j j j j d  } | j   f d    d  S(   Ns'   HTTP/1.1 200 OK
Content-Length: 1

Ac         ` s     j  j j j   S(   N(   RW   R#  RC   RI   (   R   (   R,   (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR|   :  s    (   t   resultRW   R#  RC   RH   R   (   R,   Ry   (    (   R,   sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR%  6  s    
	c         C` s   |  j  S(   N(   R&  (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq   <  s    c         C` s?   |  j  d  } |  j s( |  j d  n  |  j | j d  d  S(   NR  s   requires HTTP/1.xt   A(   R   R"  R   R   RX   (   R,   t   res(    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR   @  s    	(   R/   R0   R&  R%  Rq   R   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR  )  s   			t   HTTP204NoContentTestCasec           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` s   | j  j d  |  _ |  j sQ | j j t d d d  t    | j j   d  S| j j   } | j	 d  | j
 j d t g  d r | j	 d  n | j	 d	  | j	 d
  | j   d  S(   Ns   HTTP/1.R   i   R!  s   HTTP/1.1 204 No content
R   is   Content-Length: 5
s   Content-Length: 0
s   
(   Rb   Rc   R"  R#  R$  R	   R   R:   RB   RH   t	   argumentsR>   R   RI   (   R,   RW   RC   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   respond_204H  s    	
c         C` s   |  j  S(   N(   R,  (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq   `  s    c         C` sR   |  j  d  } |  j s( |  j d  n  |  j | j d  |  j | j d  d  S(   NR  s   requires HTTP/1.xi   R   (   R   R"  R   R   R   RX   (   R,   R  (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_204_no_contentc  s
    	c         C` s~   t  t d  i |  j t  S |  j d d t |  j sL |  j d  n  |  j j	 t
 k rn |  j d  n  Wd  QXWd  QXd  S(   Ns-   .*Response with code 204 should not have bodys	   /?error=1R   s   requires HTTP/1.xs#   curl client accepts invalid headers(   R   R   R   R   R   R)   R"  R   R  t   configured_classR   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_204_invalid_content_lengthj  s    	(   R/   R0   R,  Rq   R-  R/  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR*  G  s   			t   HostnameMappingTestCasec           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` sC   t  t |   j   t d i d d 6d |  j   f d 6 |  _ d  S(   Nt   hostname_mappings	   127.0.0.1s   www.example.coms   foo.example.comi@  (   s   foo.example.comi@  (   R   R0  R  R   t   get_http_portR  (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR  v  s
    c         C` s   t  t d t  g  S(   Ns   /hello(   R$   R%   R   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq   ~  s    c         C` s:   |  j  d |  j    } | j   |  j | j d  d  S(   Ns   http://www.example.com:%d/hellos   Hello world!(   R   R2  R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_hostname_mapping  s    
c         C` s0   |  j  d  } | j   |  j | j d  d  S(   Ns!   http://foo.example.com:8000/hellos   Hello world!(   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_port_mapping  s    
(   R/   R0   R  Rq   R3  R4  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR0  u  s   			t   ResolveTimeoutTestCasec           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` sB   d t  f d     Y} t t |   j   t d |    |  _ d  S(   Nt   BadResolverc           B` s   e  Z e j d     Z RS(   c         ` s   t    j   Vd  S(   N(   R   R<   (   R,   R   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR     s    (   R/   R0   R   R?   R   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR6    s   R   (   R   R   R5  R  R   R  (   R,   R6  (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR    s    c         C` s   t  t d t  g  S(   Ns   /hello(   R$   R%   R   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq     s    c      
   C` s3   |  j  t   |  j d d d d t Wd  QXd  S(   Ns   /helloR   g?R   (   R   R   R   R)   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_resolve_timeout  s    (   R/   R0   R  Rq   R7  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR5    s   		t   MaxHeaderSizeTestc           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` sH   d t  f d     Y} d t  f d     Y} t d | f d | f g  S(   Nt   SmallHeadersc           B` s   e  Z d    Z RS(   c         S` s%   |  j  d d d  |  j d  d  S(   Ns   X-Fillert   aid   RP   (   RL   RH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>     s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR9    s   t   LargeHeadersc           B` s   e  Z d    Z RS(   c         S` s%   |  j  d d d  |  j d  d  S(   Ns   X-FillerR:  i  RP   (   RL   RH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>     s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR;    s   s   /smalls   /large(   R#   R$   (   R,   R9  R;  (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq     s    c         C` s   t  d d  S(   Nt   max_header_sizei   (   R   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR.     s    c         C` s0   |  j  d  } | j   |  j | j d  d  S(   Ns   /smallRP   (   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_small_headers  s    
c         C` sC   t  t d  . |  j t   |  j d d t Wd  QXWd  QXd  S(   Ns   Unsatisfiable reads   /largeR   (   R   R   R   R   R   R)   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_large_headers  s    (   R/   R0   Rq   R.   R=  R>  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR8    s   			t   MaxBodySizeTestc           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C` sH   d t  f d     Y} d t  f d     Y} t d | f d | f g  S(   Nt	   SmallBodyc           B` s   e  Z d    Z RS(   c         S` s   |  j  d d d  d  S(   NR:  i   i@   (   RH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>     s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR@    s   t	   LargeBodyc           B` s   e  Z d    Z RS(   c         S` s   |  j  d d d  d  S(   NR:  i   id   (   RH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>     s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRA    s   s   /smalls   /large(   R#   R$   (   R,   R@  RA  (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq     s    c         C` s   t  d d  S(   Nt   max_body_sizei   i@   i   (   R   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR.     s    c         C` s8   |  j  d  } | j   |  j | j d d d  d  S(   Ns   /smallR:  i   i@   (   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_small_body  s    
c         C` sC   t  t d  . |  j t   |  j d d t Wd  QXWd  QXd  S(   Ns9   Malformed HTTP message from None: Content-Length too longs   /largeR   (   R   R   R   R   R   R)   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   test_large_body  s    (   R/   R0   Rq   R.   RC  RD  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR?    s   			t   MaxBufferSizeTestc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s)   d t  f d     Y} t d | f g  S(   NRA  c           B` s   e  Z d    Z RS(   c         S` s   |  j  d d d  d  S(   NR:  i   id   (   RH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>     s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRA    s   s   /large(   R#   R$   (   R,   RA  (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq     s    c         C` s   t  d d d d  S(   NRB  i   id   t   max_buffer_sizei@   i  i   (   R   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR.     s    c         C` s8   |  j  d  } | j   |  j | j d d d  d  S(   Ns   /largeR:  i   id   (   R   R   R   RX   (   R,   R   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRD    s    
(   R/   R0   Rq   R.   RD  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRE    s   		t   ChunkedWithContentLengthTestc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s)   d t  f d     Y} t d | f g  S(   Nt   ChunkedWithContentLengthc           B` s   e  Z d    Z RS(   c         S` s!   |  j  d d  |  j d  d  S(   Ns   Transfer-Encodingt   chunkeds   Hello world(   RL   RH   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR>     s    (   R/   R0   R>   (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRH    s   s   /chunkwithcl(   R#   R$   (   R,   RH  (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRq     s    c         C` s   t    S(   N(   R   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyR.     s    c         C` sC   t  t d  . |  j t   |  j d d t Wd  QXWd  QXd  S(   NsY   Malformed HTTP message from None: Response with both Transfer-Encoding and Content-Lengths   /chunkwithclR   (   R   R   R   R   R   R)   (   R,   (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt    test_chunked_with_content_length  s    (   R/   R0   Rq   R.   RJ  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyRG    s   	
	(]   t
   __future__R    R   R   Rl   t
   contextlibR   R   Rk   R7   R   R   R   R	  R   t   tornado.escapeR   R   t   tornadoR   t   tornado.httpclientR   t   tornado.httputilR   R	   t   tornado.ioloopR
   t   tornado.iostreamR   t   tornado.locksR   t   tornado.logR   t   tornado.concurrentR   t   tornado.netutilR   R   t   tornado.simple_httpclientR   R   R   t   tornado.test.httpclient_testR   R   R   R   t   tornado.testR   t   tornado.testingR   R   R   R   R   t   tornado.test.utilR   R   R    R!   R"   t   tornado.webR#   R$   R%   R&   t   HTTPClientCommonTestCaseR'   R1   R@   RA   RJ   RN   RR   RT   R\   R^   Ra   Rd   Re   t   objectRh   R   R  R  R  R*  R0  R5  R8  R?  RE  RG  (    (    (    sB   lib/python2.7/site-packages/tornado/test/simple_httpclient_test.pyt   <module>   sj   "((" N	,.