ó
¨œž[c           @` sÚ  d  d l  m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l	 m
 Z
 m Z m Z m Z m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z m Z 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' m( Z( m) Z) m* Z* d  d l+ m, Z, m- Z- d  d l. m/ Z/ m0 Z0 m1 Z1 d  d l2 m3 Z3 d  d l4 Z4 d  d l5 Z5 d  d l6 Z6 d  d l7 Z7 d  d l8 Z8 d  d l9 Z9 d  d l: Z: d  d l; Z; d  d l< m= Z= d „  Z> d e& f d „  ƒ  YZ? d e0 f d „  ƒ  YZ@ e, jA eB e9 d dS ƒ dT k  d ƒ ZC d e' f d „  ƒ  YZD d eE f d „  ƒ  YZF d  eD eF f d! „  ƒ  YZG eC d" eD eF f d# „  ƒ  Yƒ ZH eC d$ eD eF f d% „  ƒ  Yƒ ZI d& eD eF f d' „  ƒ  YZJ d( e, jK f d) „  ƒ  YZL d* e0 f d+ „  ƒ  YZM d, e& f d- „  ƒ  YZN d. e0 f d/ „  ƒ  YZO d0 e0 f d1 „  ƒ  YZP d2 e& f d3 „  ƒ  YZQ d4 e& f d5 „  ƒ  YZR d6 e? f d7 „  ƒ  YZS d8 e' e? f d9 „  ƒ  YZT d: e? f d; „  ƒ  YZU e, jA eV e8 d< ƒ påe: jW d= k d> ƒ d? e( f d@ „  ƒ  Yƒ ZX dA e& f dB „  ƒ  YZY dC eE f dD „  ƒ  YZZ dE eZ e& f dF „  ƒ  YZ[ dG eZ e& f dH „  ƒ  YZ\ dI e& f dJ „  ƒ  YZ] dK e& f dL „  ƒ  YZ^ e- dM e& f dN „  ƒ  Yƒ Z_ dO e& f dP „  ƒ  YZ` dQ e& f dR „  ƒ  YZa d S(U   i    (   t   absolute_importt   divisiont   print_function(   t   gent   netutil(   t   Future(   t   json_decodet   json_encodet   utf8t   _unicodet   recursive_unicodet
   native_str(   t   HTTP1Connection(   t	   HTTPError(   t
   HTTPServer(   t   HTTPHeaderst   HTTPMessageDelegatet   HTTPServerConnectionDelegatet   ResponseStartLine(   t   IOStream(   t   Event(   t   gen_log(   t   ssl_options_to_context(   t   SimpleAsyncHTTPClient(   t   AsyncHTTPTestCaset   AsyncHTTPSTestCaset   AsyncTestCaset	   ExpectLogt   gen_test(   t   unittestt   skipOnTravis(   t   Applicationt   RequestHandlert   stream_request_body(   t   closingN(   t   BytesIOc         ` sK   g  ‰ d t  f ‡  ‡ ‡ f d †  ƒ  Y} t |  t ƒ ‰ ˆ j | ƒ  ƒ d S(   sa   Reads an HTTP response from `stream` and runs callback with its
    start_line, headers and body.t   Delegatec           ` s5   e  Z d  „  Z ‡ f d †  Z ‡  ‡ ‡ f d †  Z RS(   c         S` s   | |  _  | |  _ d  S(   N(   t   headerst
   start_line(   t   selfR&   R%   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   headers_received%   s    	c         ` s   ˆ  j  | ƒ d  S(   N(   t   append(   R'   t   chunk(   t   chunks(    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   data_received)   s    c         ` s0   ˆ j  ƒ  ˆ  |  j |  j d j ˆ ƒ f ƒ d  S(   Nt    (   t   detachR&   R%   t   join(   R'   (   t   callbackR+   t   conn(    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   finish,   s    
(   t   __name__t
   __module__R(   R,   R2   (    (   R0   R+   R1   (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR$   $   s   	N(   R   R   t   Truet   read_response(   t   streamR0   R$   (    (   R0   R+   R1   s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   read_stream_body   s    "t   HandlerBaseTestCasec           B` s   e  Z d  „  Z d „  Z RS(   c         C` s   t  d |  j j f g ƒ S(   Nt   /(   R   t	   __class__t   Handler(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   get_app4   s    c         O` s)   |  j  | | Ž  } | j ƒ  t | j ƒ S(   N(   t   fetcht   rethrowR   t   body(   R'   t   argst   kwargst   response(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt
   fetch_json7   s    
(   R3   R4   R=   RD   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR9   3   s   	t   HelloWorldRequestHandlerc           B` s&   e  Z d  d „ Z d „  Z d „  Z RS(   t   httpc         C` s   | |  _  d  S(   N(   t   expected_protocol(   R'   t   protocol(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt
   initialize>   s    c         C` s5   |  j  j |  j k r$ t d ƒ ‚ n  |  j d ƒ d  S(   Ns   unexpected protocols   Hello world(   t   requestRH   RG   t	   ExceptionR2   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   getA   s    c         C` s!   |  j  d t |  j j ƒ ƒ d  S(   Ns   Got %d bytes in POST(   R2   t   lenRJ   R@   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   postF   s    (   R3   R4   RI   RL   RN   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRE   =   s   	t   OPENSSL_VERSION_INFOi   s(   old version of ssl module and/or opensslt   BaseSSLTestc           B` s   e  Z d  „  Z RS(   c         C` s   t  d t t d d ƒ f g ƒ S(   NR:   RH   t   https(   R   RE   t   dict(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   U   s    	(   R3   R4   R=   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRP   T   s   t   SSLTestMixinc           B` s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` s   t  d |  j ƒ  t j ƒ   S(   Nt   ssl_version(   RR   t   get_ssl_versionR   t   get_ssl_options(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRV   [   s    c         C` s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRU   _   s    c         C` s&   |  j  d ƒ } |  j | j d ƒ d  S(   NR:   s   Hello world(   R>   t   assertEqualR@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_sslb   s    c         C` s6   |  j  d d d d d d ƒ} |  j | j d ƒ d  S(   NR:   t   methodt   POSTR@   t   Aiˆ  s   Got 5000 bytes in POST(   R>   RX   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_large_postf   s    c         C` s†   t  t d ƒ q t  t d d t ƒU |  j t t f ƒ 9 |  j |  j d ƒ j d d ƒ d d d	 d d
 t	 ƒWd  QXWd  QXWd  QXd  S(   Ns   (SSL Error|uncaught exception)s   Uncaught exceptiont   requiredR:   s   https:s   http:t   request_timeouti  t   connect_timeoutt   raise_error(
   R   R   t   Falset   assertRaisest   IOErrorR   R>   t   get_urlt   replaceR5   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_non_ssl_requestl   s    c         C` sp   t  t d ƒ K } |  j t t f ƒ - |  j |  j d ƒ j d d ƒ d t ƒWd  QXWd  QX|  j	 | j
 ƒ d  S(   Ns	   SSL ErrorR:   s   https:s   http:Ra   (   R   R   Rc   Rd   R   R>   Re   Rf   R5   t   assertFalset   logged_stack(   R'   t
   expect_log(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_error_loggingy   s
    !(   R3   R4   RV   RU   RY   R]   Rg   Rk   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRS   Z   s   					t
   SSLv23Testc           B` s   e  Z d  „  Z RS(   c         C` s   t  j S(   N(   t   sslt   PROTOCOL_SSLv23(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRU   ˆ   s    (   R3   R4   RU   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRl   ‡   s   t	   SSLv3Testc           B` s   e  Z d  „  Z RS(   c         C` s   t  j S(   N(   Rm   t   PROTOCOL_SSLv3(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRU   Ž   s    (   R3   R4   RU   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRo   Œ   s   t	   TLSv1Testc           B` s   e  Z d  „  Z RS(   c         C` s   t  j S(   N(   Rm   t   PROTOCOL_TLSv1(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRU   ”   s    (   R3   R4   RU   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRq   ’   s   t   SSLContextTestc           B` s   e  Z d  „  Z RS(   c         C` s1   t  t j |  ƒ ƒ } t | t j ƒ s- t ‚ | S(   N(   R   R   RV   t
   isinstanceRm   t
   SSLContextt   AssertionError(   R'   t   context(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRV   ™   s    (   R3   R4   RV   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRs   ˜   s   t   BadSSLOptionsTestc           B` s   e  Z d  „  Z d „  Z RS(   c         C` s-   t  ƒ  } |  j t t | d i d d 6ƒd  S(   Nt   ssl_optionss   /__missing__.crtt   keyfile(   R   Rc   t   KeyErrorR   (   R'   t   application(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_missing_arguments¡   s    	c         C` sº   t  ƒ  } t j j t ƒ } t j j | d ƒ } t j j | d ƒ } |  j t t f t	 | d i d d 6ƒ|  j t t f t	 | d i | d 6d d 6ƒt	 | d i | d 6| d 6ƒd S(	   s6   A missing SSL key should cause an immediate exception.s   test.crts   test.keyRy   s   /__mising__.crtt   certfiles   /__missing__.keyRz   N(
   R   t   ost   patht   dirnamet   __file__R/   Rc   t
   ValueErrorRd   R   (   R'   R|   t
   module_dirt   existing_certificatet   existing_key(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_missing_key§   s    	(   R3   R4   R}   R‡   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRx       s   	t   MultipartTestHandlerc           B` s   e  Z d  „  Z RS(   c         C` si   |  j  i |  j j d d 6|  j d ƒ d 6|  j j d d j d 6t |  j j d d d ƒ d 6ƒ d  S(	   Ns   X-Header-Encoding-Testt   headert   argumentt   filesi    t   filenameR@   t   filebody(   R2   RJ   R%   t   get_argumentR‹   RŒ   R	   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRN   Á   s    (   R3   R4   RN   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRˆ   À   s   t   HTTPConnectionTestc           B` sG   e  Z d  „  Z d „  Z d d „ Z d „  Z d „  Z e d „  ƒ Z RS(   c         C` s   d t  f d t f g S(   Ns
   /multiparts   /hello(   Rˆ   RE   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   get_handlersË   s    	c         C` s   t  |  j ƒ  ƒ S(   N(   R   R   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   Ï   s    s   
c         ` s£   t  t t j ƒ  ƒ ƒ … ‰ ˆ  j j ‡  ‡ f d †  ƒ ˆ j | j | t d t | ƒ ƒ g ƒ | | | ƒ t	 ˆ ˆ  j
 ƒ ˆ  j ƒ  \ } } } | SWd  QXd  S(   Nc           ` s   ˆ j  d ˆ  j ƒ  f ƒ S(   Ns	   127.0.0.1(   t   connectt   get_http_port(    (   R'   R7   (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   <lambda>Ô   s    s   Content-Length: %d(   R"   R   t   sockett   io_loopt   run_synct   writeR/   R   RM   R8   t   stopt   wait(   R'   R%   R@   t   newlineR&   (    (   R'   R7   s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt	   raw_fetchÒ   s    3c         C` sº   |  j  d d d g d j d d d j d ƒ d	 d
 j d ƒ d d j d ƒ d d g	 ƒ ƒ } t | ƒ } |  j d | d ƒ |  j d | d ƒ |  j d | d ƒ |  j d | d ƒ d  S(   Ns   POST /multipart HTTP/1.0s6   Content-Type: multipart/form-data; boundary=1234567890s   X-Header-encoding-test: és   
s-   Content-Disposition: form-data; name=argumentR-   u   Ã¡s   utf-8s   --1234567890u;   Content-Disposition: form-data; name="files"; filename="Ã³"R   u   Ãºs   --1234567890--u   Ã©R‰   RŠ   u   Ã³RŒ   R   (   R›   R/   t   encodeR   RX   (   R'   RC   t   data(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_multipart_formÝ   s&    c         C` s@   x9 d D]1 } |  j  d g d d | ƒ} |  j | d ƒ q Wd  S(   Ns   
s   
s   GET /hello HTTP/1.0R-   Rš   s   Hello world(   s   
s   
(   R›   RX   (   R'   Rš   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_newlinesö   s    	c         c` s  t  t j ƒ  ƒ } | j d |  j ƒ  f ƒ V| j d j d d d d d g ƒ ƒ V| j d ƒ V} |  j | j d ƒ | ƒ | j d	 d
 ƒ | j d ƒ V} |  j | j d ƒ | ƒ | j d ƒ V} t	 j
 t | j d ƒ ƒ ƒ } | j t | d ƒ ƒ V} |  j | d ƒ | j ƒ  d  S(   Ns	   127.0.0.1s   
s   POST /hello HTTP/1.1s   Content-Length: 1024s   Expect: 100-continues   Connection: closes   

s   HTTP/1.1 100 t   ai   s   HTTP/1.1 200t   latin1s   Content-Lengths   Got 1024 bytes in POST(   R   R”   R‘   R’   R—   R/   t
   read_untilt
   assertTruet
   startswithR   t   parseR   t   decodet
   read_bytest   intRX   t   close(   R'   R7   R   t
   first_linet   header_dataR%   R@   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_100_continueý   s$    (	   R3   R4   R   R=   R›   Rž   RŸ   R   R¬   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR   Ê   s   				t   EchoHandlerc           B` s   e  Z d  „  Z d „  Z RS(   c         C` s   |  j  t |  j j ƒ ƒ d  S(   N(   R—   R
   RJ   t	   arguments(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRL     s    c         C` s   |  j  t |  j j ƒ ƒ d  S(   N(   R—   R
   RJ   R®   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRN     s    (   R3   R4   RL   RN   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR­     s   	t   TypeCheckHandlerc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c      	   C` sŽ  i  |  _  d t f d t f d t f d t f d t f d t f d t f d t f g } x3 | D]+ \ } } |  j | t |  j | ƒ | ƒ q^ W|  j d	 t |  j j j ƒ  ƒ d
 t ƒ |  j d t |  j j j ƒ  ƒ d
 t ƒ |  j d t |  j j	 j ƒ  ƒ d
 t ƒ |  j d t |  j j	 j ƒ  ƒ d
 j
 t ƒ |  j d t |  j j j ƒ  ƒ d
 t ƒ |  j d t |  j j j ƒ  ƒ d
 d
 t ƒ d  S(   NRZ   t   urit   versiont	   remote_ipRH   t   hostR€   t   queryt
   header_keyi    t   header_valuet
   cookie_keyt   cookie_valuet   arg_keyt	   arg_value(   t   errorst   strt
   check_typet   getattrRJ   t   listR%   t   keyst   valuest   cookiest   valueR®   t   bytes(   R'   t   fieldst   fieldt   expected_type(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   prepare  s"    								#))),)c         C` s-   |  j  d |  j j t ƒ |  j |  j ƒ d  S(   NR@   (   R½   RJ   R@   RÄ   R—   R»   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRN   8  s    c         C` s   |  j  |  j ƒ d  S(   N(   R—   R»   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRL   <  s    c         C` s6   t  | ƒ } | | k r2 d | | f |  j | <n  d  S(   Ns   expected %s, got %s(   t   typeR»   (   R'   t   namet   objRÇ   t   actual_type(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR½   ?  s    (   R3   R4   RÈ   RN   RL   R½   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR¯     s   			t   HTTPServerTestc           B` sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` s%   t  d t f d t f d t f g ƒ S(   Ns   /echos
   /typechecks   //doubleslash(   R   R­   R¯   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   G  s    	c         C` s<   |  j  d ƒ } t | j ƒ } |  j | i d g d 6ƒ d  S(   Ns   /echo?foo=%C3%A9u   Ã©u   foo(   R>   R   R@   RX   (   R'   RC   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_query_string_encodingM  s    c         C` s?   |  j  d ƒ } t | j ƒ } |  j | i d d g d 6ƒ d  S(   Ns   /echo?foo=&foo=u    u   foo(   R>   R   R@   RX   (   R'   RC   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_empty_query_stringR  s    c         C` sR   |  j  d d d d d ƒ} t | j ƒ } |  j | i d g d 6d g d 6ƒ d  S(	   Ns   /echoRZ   R[   R@   s	   foo=&bar=u    u   foou   bar(   R>   R   R@   RX   (   R'   RC   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_empty_post_parametersW  s    c         C` s…   i d d 6} |  j  d d | ƒ} t | j ƒ } |  j | i  ƒ |  j  d d d d d d | ƒ} t | j ƒ } |  j | i  ƒ d  S(	   Ns   foo=bart   Cookies   /typecheck?foo=barR%   s
   /typecheckRZ   R[   R@   (   R>   R   R@   RX   (   R'   R%   RC   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt
   test_types\  s    !c         C` s?   |  j  d ƒ } |  j d | j ƒ |  j t | j ƒ i  ƒ d  S(   Ns   //doubleslashiÈ   (   R>   RX   t   codeR   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_double_slashf  s    c         C` sx   t  t k r d  St t d ƒ - |  j d d d d i d d 6d d	 ƒ} Wd  QX|  j d
 | j ƒ |  j d | j ƒ d  S(   Ns"   Invalid x-www-form-urlencoded bodys   /echoRZ   R[   R%   s!   application/x-www-form-urlencodeds   Content-TypeR@   s   éiÈ   s   {}(   R¼   RÄ   R   R   R>   RX   RÓ   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_malformed_bodyn  s    (	   R3   R4   R=   RÎ   RÏ   RÐ   RÒ   RÔ   RÕ   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRÍ   F  s   					
	t   HTTPServerRawTestc           B` sh   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e d	 „  ƒ Z RS(
   c         C` s   t  d t f g ƒ S(   Ns   /echo(   R   R­   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=     s    c         ` sE   t  t ˆ  ƒ j ƒ  t t j ƒ  ƒ ˆ  _ ˆ  j j ‡  f d †  ƒ d  S(   Nc           ` s   ˆ  j  j d ˆ  j ƒ  f ƒ S(   Ns	   127.0.0.1(   R7   R‘   R’   (    (   R'   (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR“   ‡  s    (   t   superRÖ   t   setUpR   R”   R7   R•   R–   (   R'   (    (   R'   s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRØ   „  s    c         C` s$   |  j  j ƒ  t t |  ƒ j ƒ  d  S(   N(   R7   R©   R×   RÖ   t   tearDown(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRÙ   ‰  s    c         C` s=   |  j  j ƒ  |  j j t j d d ƒ |  j ƒ |  j ƒ  d  S(   Nt   secondsgü©ñÒMbP?(   R7   R©   R•   t   add_timeoutt   datetimet	   timedeltaR˜   R™   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_empty_request  s    "c         C` s‹   t  t d ƒ v |  j j d ƒ t |  j |  j ƒ |  j ƒ  \ } } } |  j d | j ƒ |  j d | j	 ƒ |  j d | j
 ƒ Wd  QXd  S(   Ns   .*Malformed HTTP request lines   asdf

s   HTTP/1.1i  s   Bad Request(   R   R   R7   R—   R8   R˜   R™   RX   R±   RÓ   t   reason(   R'   R&   R%   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt"   test_malformed_first_line_response’  s    c         C` sV   t  t d ƒ A |  j j d ƒ |  j j t j d d ƒ |  j ƒ |  j	 ƒ  Wd  QXd  S(   Ns   .*Malformed HTTP request lines   asdf

RÚ   gš™™™™™©?(
   R   R   R7   R—   R•   RÛ   RÜ   RÝ   R˜   R™   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_malformed_first_line_log›  s
    
c         C` sV   t  t d ƒ A |  j j d ƒ |  j j t j d d ƒ |  j ƒ |  j	 ƒ  Wd  QXd  S(   Ns1   .*Malformed HTTP message.*no colon in header lines   GET / HTTP/1.0
asdf

RÚ   gš™™™™™©?(
   R   R   R7   R—   R•   RÛ   RÜ   RÝ   R˜   R™   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_malformed_headers¤  s
    
c         C` sh   |  j  j d j d d ƒ ƒ t |  j  |  j ƒ |  j ƒ  \ } } } |  j t | ƒ i d g d 6ƒ d  S(   Nsp   POST /echo HTTP/1.1
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

s   
s   
u   baru   foo(   R7   R—   Rf   R8   R˜   R™   RX   R   (   R'   R&   R%   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_chunked_request_body«  s
    	c         C` sh   |  j  j d j d d ƒ ƒ t |  j  |  j ƒ |  j ƒ  \ } } } |  j t | ƒ i d g d 6ƒ d  S(   Nsp   POST /echo HTTP/1.1
Transfer-Encoding: Chunked
Content-Type: application/x-www-form-urlencoded

4
foo=
3
bar
0

s   
s   
u   baru   foo(   R7   R—   Rf   R8   R˜   R™   RX   R   (   R'   R&   R%   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_chunked_request_uppercase¾  s
    	c         c` sD   t  t d ƒ / |  j j d j d d ƒ ƒ |  j j ƒ  VWd  QXd  S(   Ns(   .*Only integer Content-Length is alloweds.   POST /echo HTTP/1.1
Content-Length: foo

bar

s   
s   
(   R   R   R7   R—   Rf   t   read_until_close(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_invalid_content_lengthÑ  s    	(   R3   R4   R=   RØ   RÙ   RÞ   Rà   Rá   Râ   Rã   Rä   R   Ræ   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRÖ   ~  s   											t   XHeaderTestc           B` sB   e  Z d  e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z RS(   R<   c           B` s   e  Z d  „  Z RS(   c         C` sB   |  j  d |  j j ƒ |  j t d |  j j d |  j j ƒ ƒ d  S(   Ns   request-versionR²   t   remote_protocol(   t
   set_headerRJ   R±   R—   RR   R²   RH   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRL   à  s    (   R3   R4   RL   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR<   ß  s   c         C` s   t  d t d d g ƒ S(   Nt   xheaderst   trusted_downstreams   5.5.5.5(   RR   R5   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   get_httpserver_optionså  s    c         C` sq  |  j  |  j d ƒ d d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d	 d 6} |  j  |  j d d | ƒd d	 ƒ i d
 d 6} |  j  |  j d d | ƒd d	 ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ d  S(   NR:   R²   s	   127.0.0.1s   4.4.4.4s	   X-Real-IPR%   s   127.0.0.1, 4.4.4.4s   X-Forwarded-Fors   2620:0:1cfe:face:b00c::3s   ::1, 2620:0:1cfe:face:b00c::3s   4.4.4.4<script>s   4.4.4.4, 5.5.5.5<script>s   www.google.com(   RX   RD   (   R'   t
   valid_ipv4t   valid_ipv4_listt
   valid_ipv6t   valid_ipv6_listt   invalid_charst   invalid_chars_listt   invalid_host(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_ip_headersè  s:    c         C` so   i d d 6} |  j  d d | ƒ} | j d j d ƒ rH |  j d ƒ n  t | j ƒ } |  j | d d	 ƒ d  S(
   Ns   127.0.0.1, 4.4.4.4, 5.5.5.5s   X-Forwarded-ForR:   R%   s   request-versions   HTTP/2s   requires HTTP/1.xR²   s   4.4.4.4(   R>   R%   R¤   t   skipTestR   R@   RX   (   R'   Rî   t   respt   result(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_trusted_downstream  s    c         C` s  |  j  |  j d ƒ d d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d	 d 6} |  j  |  j d d | ƒd d ƒ i d
 d 6} |  j  |  j d d | ƒd d ƒ d  S(   NR:   Rè   RF   RQ   s   X-SchemeR%   s   X-Forwarded-Protos   https , https
   http,httpst   unknown(   RX   RD   (   R'   t   https_schemet   https_forwardedt   https_multi_forwardedt   http_multi_forwardedt   bad_forwarded(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_scheme_headers  s*    (   R3   R4   R    R<   Rì   Rô   Rø   Rÿ   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRç   Þ  s
   		&	
t   SSLXHeaderTestc           B` s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C` s   t  d t j f g ƒ S(   NR:   (   R   Rç   R<   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   6  s    c         C` s#   t  t |  ƒ j ƒ  } t | d <| S(   NRê   (   R×   R   Rì   R5   (   R'   t   output(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRì   9  s    
c         C` s   |  j  |  j d ƒ d d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ i d d 6} |  j  |  j d d | ƒd d ƒ d  S(   NR:   Rè   RQ   RF   s   X-SchemeR%   Rù   (   RX   RD   (   R'   t   http_schemet
   bad_scheme(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_request_without_xprotocol>  s    (   R3   R4   R=   Rì   R  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR   5  s   		t   ManualProtocolTestc           B` s0   e  Z d  e f d „  ƒ  YZ d „  Z d „  Z RS(   R<   c           B` s   e  Z d  „  Z RS(   c         C` s    |  j  t d |  j j ƒ ƒ d  S(   NRH   (   R—   RR   RJ   RH   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRL   L  s    (   R3   R4   RL   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR<   K  s   c         C` s   t  d d ƒ S(   NRH   RQ   (   RR   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRì   O  s    c         C` s!   |  j  |  j d ƒ d d ƒ d  S(   NR:   RH   RQ   (   RX   RD   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_manual_protocolR  s    (   R3   R4   R    R<   Rì   R  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR  J  s   	t   AF_UNIXt   cygwins+   unix sockets not supported on this platformt   UnixSocketTestc           B` s>   e  Z d  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   s…  HTTPServers can listen on Unix sockets too.

    Why would you want to do this?  Nginx can proxy to backends listening
    on unix sockets, for one thing (and managing a namespace for unix
    sockets can be easier than managing a bunch of TCP port numbers).

    Unfortunately, there's no way to specify a unix socket in a url for
    an HTTP client, so we have to test this by hand.
    c         ` s»   t  t ˆ  ƒ j ƒ  t j ƒ  ˆ  _ t j j ˆ  j d ƒ ˆ  _	 t
 j ˆ  j	 ƒ } t d t f g ƒ } t | ƒ ˆ  _ ˆ  j j | ƒ t t j t j ƒ ƒ ˆ  _ ˆ  j j ‡  f d †  ƒ d  S(   Ns	   test.socks   /helloc           ` s   ˆ  j  j ˆ  j ƒ S(   N(   R7   R‘   t   sockfile(    (   R'   (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR“   k  s    (   R×   R	  RØ   t   tempfilet   mkdtempt   tmpdirR   R€   R/   R
  R   t   bind_unix_socketR   RE   R   t   servert
   add_socketR   R”   R  R7   R•   R–   (   R'   t   sockt   app(    (   R'   s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRØ   b  s    c         C` sW   |  j  j ƒ  |  j j |  j j ƒ |  j j ƒ  t j |  j	 ƒ t
 t |  ƒ j ƒ  d  S(   N(   R7   R©   R•   R–   R  t   close_all_connectionsR˜   t   shutilt   rmtreeR  R×   R	  RÙ   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRÙ   m  s
    c         c` s   |  j  j d ƒ |  j  j d ƒ V} |  j | d ƒ |  j  j d ƒ V} t j | j d ƒ ƒ } |  j  j t | d ƒ ƒ V} |  j | d ƒ d  S(   Ns   GET /hello HTTP/1.0

s   
s   HTTP/1.1 200 OK
s   

R¡   s   Content-Lengths   Hello world(	   R7   R—   R¢   RX   R   R¥   R¦   R§   R¨   (   R'   RC   R«   R%   R@   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_unix_sockett  s    c         c` sJ   t  t d ƒ % |  j j d ƒ |  j j ƒ  V} Wd  QX|  j | d ƒ d  S(   Ns   Malformed HTTP message froms   garbage

s   HTTP/1.1 400 Bad Request

(   R   R   R7   R—   Rå   RX   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_unix_socket_bad_request~  s    (   R3   R4   t   __doc__RØ   RÙ   R   R  R  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR	  V  s
   		
t   KeepAliveTestc           B` sþ   e  Z d  Z d „  Z d „  Z d „  Z e j d „  ƒ Z e j d „  ƒ Z	 e j d „  ƒ Z
 d „  Z e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   s¥   Tests various scenarios for HTTP 1.1 keep-alive support.

    These tests don't use AsyncHTTPClient because we want to control
    connection reuse and closing.
    c         C` sg   d t  f d „  ƒ  Y} d t  f d „  ƒ  Y} d t  f d „  ƒ  Y} t d | f d | f d	 | f g ƒ S(
   Nt   HelloHandlerc           B` s   e  Z d  „  Z d „  Z RS(   c         S` s   |  j  d ƒ d  S(   Ns   Hello world(   R2   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRL     s    c         S` s   |  j  d ƒ d  S(   Ns   Hello world(   R2   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRN   “  s    (   R3   R4   RL   RN   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR    s   	t   LargeHandlerc           B` s   e  Z d  „  Z RS(   c         S` s*   |  j  d j d „  t d ƒ Dƒ ƒ ƒ d  S(   NR-   c         s` s#   |  ] } t  | d  ƒ d Vq d S(   i   i   N(   t   chr(   t   .0t   i(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pys	   <genexpr>š  s    i   (   R—   R/   t   range(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRL   —  s    (   R3   R4   RL   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR  –  s   t   FinishOnCloseHandlerc           B` s#   e  Z e j d  „  ƒ Z d „  Z RS(   c         s` s"   |  j  ƒ  t ƒ  } | j ƒ  Vd  S(   N(   t   flushR   R™   (   R'   t   never_finish(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRL     s    
	c         S` s   |  j  d ƒ d  S(   Nt   closed(   R2   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   on_connection_close£  s    (   R3   R4   R   t	   coroutineRL   R$  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR   œ  s   R:   s   /larges   /finish_on_close(   R    R   (   R'   R  R  R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   Ž  s    	c         C` s    t  t |  ƒ j ƒ  d |  _ d  S(   Ns   HTTP/1.1(   R×   R  RØ   t   http_version(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRØ   ­  s    c         C` sb   |  j  j t j d d ƒ |  j ƒ |  j ƒ  t |  d ƒ rK |  j j ƒ  n  t	 t
 |  ƒ j ƒ  d  S(   NRÚ   gü©ñÒMbP?R7   (   R•   RÛ   RÜ   RÝ   R˜   R™   t   hasattrR7   R©   R×   R  RÙ   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRÙ   ±  s
    "
c         c` s6   t  t j ƒ  ƒ |  _ |  j j d |  j ƒ  f ƒ Vd  S(   Ns	   127.0.0.1(   R   R”   R7   R‘   R’   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR‘   ¼  s    c         c` sj   |  j  j d ƒ V} |  j | j d ƒ | ƒ |  j  j d ƒ V} t j | j d ƒ ƒ } t j | ƒ ‚ d  S(   Ns   
s   HTTP/1.1 200s   

R¡   (	   R7   R¢   R£   R¤   R   R¥   R¦   R   t   Return(   R'   Rª   t   header_bytesR%   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   read_headersÁ  s
    c         c` sD   |  j  ƒ  V|  _ |  j j t |  j d ƒ ƒ V} |  j d | ƒ d  S(   Ns   Content-Lengths   Hello world(   R*  R%   R7   R§   R¨   RX   (   R'   R@   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR6   É  s     c         C` s   |  j  j ƒ  |  `  d  S(   N(   R7   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR©   Ï  s    c         c` sO   |  j  ƒ  V|  j j d ƒ |  j ƒ  V|  j j d ƒ |  j ƒ  V|  j ƒ  d  S(   Ns   GET / HTTP/1.1

(   R‘   R7   R—   R6   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_two_requestsÓ  s    c         c` si   |  j  ƒ  V|  j j d ƒ |  j ƒ  V|  j j ƒ  V} |  j | ƒ |  j |  j d d ƒ |  j ƒ  d  S(   Ns%   GET / HTTP/1.1
Connection: close

t
   ConnectionR©   (	   R‘   R7   R—   R6   Rå   R£   RX   R%   R©   (   R'   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_request_closeÜ  s    c         c` sq   d |  _  |  j ƒ  V|  j j d ƒ |  j ƒ  V|  j j ƒ  V} |  j | ƒ |  j d |  j k ƒ |  j ƒ  d  S(   Ns   HTTP/1.0s   GET / HTTP/1.0

R,  (	   R&  R‘   R7   R—   R6   Rå   R£   R%   R©   (   R'   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_http10ç  s    	c         c` s†   d |  _  |  j ƒ  V|  j j d ƒ |  j ƒ  V|  j |  j d d ƒ |  j j d ƒ |  j ƒ  V|  j |  j d d ƒ |  j ƒ  d  S(   Ns   HTTP/1.0s*   GET / HTTP/1.0
Connection: keep-alive

R,  s
   Keep-Alive(   R&  R‘   R7   R—   R6   RX   R%   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_http10_keepaliveò  s    	c         c` s†   d |  _  |  j ƒ  V|  j j d ƒ |  j ƒ  V|  j |  j d d ƒ |  j j d ƒ |  j ƒ  V|  j |  j d d ƒ |  j ƒ  d  S(   Ns   HTTP/1.0s,   GET / HTTP/1.0
Connection: keep-alive


R,  s
   Keep-Alives*   GET / HTTP/1.0
Connection: keep-alive

(   R&  R‘   R7   R—   R6   RX   R%   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt    test_http10_keepalive_extra_crlfþ  s    	c         c` s?   |  j  ƒ  V|  j j d ƒ |  j ƒ  V|  j ƒ  V|  j ƒ  d  S(   Ns$   GET / HTTP/1.1

GET / HTTP/1.1

(   R‘   R7   R—   R6   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_pipelined_requests
  s
    c         c` s4   |  j  ƒ  V|  j j d ƒ |  j ƒ  V|  j ƒ  d  S(   Ns$   GET / HTTP/1.1

GET / HTTP/1.1

(   R‘   R7   R—   R6   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_pipelined_cancel  s    c         c` sE   |  j  ƒ  V|  j j d ƒ |  j ƒ  V|  j j d ƒ V|  j ƒ  d  S(   Ns   GET /large HTTP/1.1

i   (   R‘   R7   R—   R*  R§   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_cancel_during_download  s
    c         c` s4   |  j  ƒ  V|  j j d ƒ |  j ƒ  V|  j ƒ  d  S(   Ns!   GET /finish_on_close HTTP/1.1

(   R‘   R7   R—   R*  R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_finish_while_closed"  s    c         c` s†   d |  _  |  j ƒ  V|  j j d ƒ |  j ƒ  V|  j |  j d d ƒ |  j j d ƒ |  j ƒ  V|  j |  j d d ƒ |  j ƒ  d  S(   Ns   HTTP/1.0sL   POST / HTTP/1.0
Connection: keep-alive
Transfer-Encoding: chunked

0

R,  s
   Keep-Alives*   GET / HTTP/1.0
Connection: keep-alive

(   R&  R‘   R7   R—   R6   RX   R%   R©   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_keepalive_chunked)  s    	(   R3   R4   R  R=   RØ   RÙ   R   R%  R‘   R*  R6   R©   R   R+  R-  R.  R/  R0  R1  R2  R3  R4  R5  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR  ˆ  s$   					t   GzipBaseTestc           B` s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C` s   t  d t f g ƒ S(   NR:   (   R   R­   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   <  s    c      
   C` sp   t  ƒ  } t j d d d | ƒ } | j t | ƒ ƒ | j ƒ  | j ƒ  } |  j d d d d | d i d	 d
 6ƒS(   Nt   modet   wt   fileobjR:   RZ   R[   R@   R%   t   gzips   Content-Encoding(   R#   R:  t   GzipFileR—   R   R©   t   getvalueR>   (   R'   R@   t   bytesiot	   gzip_filet   compressed_body(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt	   post_gzip?  s    	
c         C` sB   |  j  d d d d d ƒ} |  j t | j ƒ i d g d 6ƒ d  S(   NR:   RZ   R[   R@   s   foo=baru   baru   foo(   R>   t   assertEqualsR   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_uncompressedH  s    (   R3   R4   R=   R@  RB  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR6  ;  s   			t   GzipTestc           B` s   e  Z d  „  Z d „  Z RS(   c         C` s   t  d t ƒ S(   Nt   decompress_request(   RR   R5   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRì   N  s    c         C` s6   |  j  d ƒ } |  j t | j ƒ i d g d 6ƒ d  S(   Ns   foo=baru   baru   foo(   R@  RA  R   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt	   test_gzipQ  s    (   R3   R4   Rì   RE  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRC  M  s   	t   GzipUnsupportedTestc           B` s   e  Z d  „  Z RS(   c         C` sB   t  t d ƒ  |  j d ƒ } Wd  QX|  j t | j ƒ i  ƒ d  S(   Ns   Unsupported Content-Encodings   foo=bar(   R   R   R@  RA  R   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_gzip_unsupportedW  s    (   R3   R4   RG  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRF  V  s   t   StreamingChunkSizeTestc           B` s{   e  Z d  Z d Z d „  Z d „  Z d e f d „  ƒ  YZ d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z RS(   t2   01234567890123456789012345678901234567890123456789i   c         C` s   t  ƒ  S(   N(   R   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   get_http_cliente  s    c         C` s   t  d |  j d t ƒ S(   Nt
   chunk_sizeRD  (   RR   t
   CHUNK_SIZER5   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRì   j  s    t   MessageDelegatec           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` s   | |  _  d  S(   N(   t
   connection(   R'   RN  (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   __init__n  s    c         C` s   g  |  _  d  S(   N(   t   chunk_lengths(   R'   R&   R%   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR(   q  s    c         C` s   |  j  j t | ƒ ƒ d  S(   N(   RP  R)   RM   (   R'   R*   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR,   t  s    c         C` sn   t  t |  j ƒ ƒ } |  j j t d d d ƒ t i t t | ƒ ƒ d 6ƒ ƒ |  j j	 | ƒ |  j j
 ƒ  d  S(   Ns   HTTP/1.1iÈ   t   OKs   Content-Length(   R   R   RP  RN  t   write_headersR   R   R¼   RM   R—   R2   (   R'   t   response_body(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR2   w  s    	 (   R3   R4   RO  R(   R,   R2   (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRM  m  s   			c         C` s   d t  f d „  ƒ  Y} | ƒ  S(   Nt   Appc           B` s   e  Z d  „  Z RS(   c         S` s   t  j | ƒ S(   N(   RH  RM  (   R'   t   server_connt   request_conn(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   start_request  s    (   R3   R4   RW  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRT  €  s   (   R   (   R'   RT  (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=     s    c         K` s¢   |  j  d d d | } | j ƒ  t | j ƒ } |  j t |  j ƒ t | ƒ ƒ xK | D]C } |  j | |  j	 d t
 | ƒ ƒ |  j | d d t
 | ƒ ƒ qW W| S(   NR:   RZ   R[   s   oversized chunk: i    s   empty chunk: (   R>   R?   R   R@   RX   RM   t   BODYt   sumt   assertLessEqualRL  R¼   t   assertGreater(   R'   RB   RC   R+   RK  (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   fetch_chunk_sizes…  s    
c         C` so   t  ƒ  } t j d d d | ƒ } | j | ƒ | j ƒ  | j ƒ  } t | ƒ t | ƒ k rk t d ƒ ‚ n  | S(   NR7  R8  R9  s#   body did not shrink when compressed(   R#   R:  R;  R—   R©   R<  RM   RK   (   R'   R@   R=  t   gzfilet
   compressed(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   compress‘  s    	
c         C` s5   |  j  d |  j ƒ } |  j d d d d g | ƒ d  S(   NR@   i   i   (   R\  RX  RX   (   R'   R+   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_regular_body›  s    c         C` s-   |  j  d |  j |  j ƒ d i d d 6ƒ d  S(   NR@   R%   R:  s   Content-Encoding(   R\  R_  RX  (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_compressed_body   s    c         ` sA   ‡  f d †  } ˆ  j  d | ƒ } ˆ  j d d d d g | ƒ d  S(   Nc         ` s&   |  ˆ  j  d  ƒ |  ˆ  j  d ƒ d  S(   Ni   (   RX  (   R—   (   R'   (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   body_producer§  s    Rb  i   i   i   (   R\  RX   (   R'   Rb  R+   (    (   R'   s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_chunked_body¦  s    c         ` sX   |  j  |  j ƒ ‰  |  j t ˆ  ƒ d ƒ ‡  f d †  } |  j d | d i d d 6ƒ d  S(   Ni   c         ` s    |  ˆ  d  ƒ |  ˆ  d ƒ d  S(   Ni   (    (   R—   (   R^  (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRb  ²  s    Rb  R%   R:  s   Content-Encoding(   R_  RX  R[  RM   R\  (   R'   Rb  (    (   R^  s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_chunked_compressed®  s
    (   R3   R4   RX  RL  RJ  Rì   R   RM  R=   R\  R_  R`  Ra  Rc  Rd  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRH  `  s   					
			t   MaxHeaderSizeTestc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` s   t  d t f g ƒ S(   NR:   (   R   RE   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   º  s    c         C` s   t  d d ƒ S(   Nt   max_header_sizei   (   RR   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRì   ½  s    c         C` sA   |  j  d d i d d d 6ƒ} | j ƒ  |  j | j d ƒ d  S(   NR:   R%   R    id   s   X-Fillers   Hello world(   R>   R?   RX   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_small_headersÀ  s     
c      
   C` s   t  t d d t ƒf y5 |  j d d i d d d 6d t ƒ|  j d	 ƒ Wn) t k
 rv } |  j | j j	 d ƒ n XWd  QXd  S(   Ns   Unsatisfiable readR^   R:   R%   R    iè  s   X-FillerRa   s    did not raise expected exceptioni¯  iW  (   i¯  iW  (
   R   R   Rb   R>   R5   t   failR   t   assertInRC   RÓ   (   R'   t   e(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_large_headersÅ  s    $(   R3   R4   R=   Rì   Rg  Rk  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRe  ¹  s   			t   IdleTimeoutTestc           B` s\   e  Z d  „  Z d „  Z d „  Z d „  Z e j d „  ƒ Z e	 d „  ƒ Z
 e	 d „  ƒ Z RS(   c         C` s   t  d t f g ƒ S(   NR:   (   R   RE   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   Ó  s    c         C` s   t  d d ƒ S(   Nt   idle_connection_timeoutgš™™™™™¹?(   RR   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRì   Ö  s    c         C` s    t  t |  ƒ j ƒ  g  |  _ d  S(   N(   R×   Rl  RØ   t   streams(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRØ   Ù  s    c         C` s5   t  t |  ƒ j ƒ  x |  j D] } | j ƒ  q Wd  S(   N(   R×   Rl  RÙ   Rn  R©   (   R'   R7   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRÙ   Ý  s    c         c` sO   t  t j ƒ  ƒ } | j d |  j ƒ  f ƒ V|  j j | ƒ t j | ƒ ‚ d  S(   Ns	   127.0.0.1(   R   R”   R‘   R’   Rn  R)   R   R(  (   R'   R7   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR‘   â  s    c         c` s5   |  j  ƒ  V} t ƒ  } | j | j ƒ | j ƒ  Vd  S(   N(   R‘   R   t   set_close_callbackt   setR™   (   R'   R7   t   event(    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_unused_connectioné  s    	c         c` s‡   |  j  ƒ  V} t ƒ  } | j | j ƒ xO t d ƒ D]A } | j d ƒ | j d ƒ V| j d ƒ V} |  j | d ƒ q3 W| j	 ƒ  Vd  S(   Ni   s   GET / HTTP/1.1

s   

i   s   Hello world(
   R‘   R   Ro  Rp  R  R—   R¢   R§   RX   R™   (   R'   R7   Rq  R  R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_idle_after_useð  s    	(   R3   R4   R=   Rì   RØ   RÙ   R   R%  R‘   R   Rr  Rs  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRl  Ñ  s   				t   BodyLimitsTestc           B` s¶   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z e j e	 j
 d k d ƒ d „  ƒ Z d „  Z e j e	 j
 d k d ƒ d	 „  ƒ Z d
 „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   c         C` sN   d t  f d „  ƒ  Y} t d t  f d „  ƒ  Yƒ } t d | f d | f g ƒ S(   Nt   BufferedHandlerc           B` s   e  Z d  „  Z RS(   c         S` s#   |  j  t t |  j j ƒ ƒ ƒ d  S(   N(   R—   R¼   RM   RJ   R@   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   put  s    (   R3   R4   Rv  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRu    s   t   StreamingHandlerc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         S` s   d |  _  d  S(   Ni    (   t
   bytes_read(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRI   	  s    c         S` sr   d |  j  j k r7 |  j  j j t |  j d ƒ ƒ ƒ n  d |  j  j k rn |  j  j j t |  j d ƒ ƒ ƒ n  d  S(   Nt   expected_sizet   body_timeout(   RJ   R®   RN  t   set_max_body_sizeR¨   RŽ   t   set_body_timeoutt   float(   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRÈ     s    c         S` s   |  j  t | ƒ 7_  d  S(   N(   Rx  RM   (   R'   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR,     s    c         S` s   |  j  t |  j ƒ ƒ d  S(   N(   R—   R¼   Rx  (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRv    s    (   R3   R4   RI   RÈ   R,   Rv  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRw    s   			s	   /buffereds
   /streaming(   R    R!   R   (   R'   Ru  Rw  (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=     s
    c         C` s   t  d d d d ƒ S(   NRz  i  t   max_body_sizei   (   RR   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRì     s    c         C` s   t  ƒ  S(   N(   R   (   R'   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRJ     s    c         C` sh   |  j  d d d d d d ƒ} |  j | j d ƒ |  j  d d d d d d ƒ} |  j | j d ƒ d  S(	   Ns	   /bufferedRZ   t   PUTR@   R    i   t   4096s
   /streaming(   R>   RX   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_small_body%  s    c         C` sL   t  t d ƒ $ |  j d d d d d d ƒ} Wd  QX|  j | j d ƒ d  S(	   Ns   .*Content-Length too longs	   /bufferedRZ   R  R@   R    i (  i  (   R   R   R>   RX   RÓ   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_large_body_buffered+  s    %t   nts   flaky on windowsc      
   C` sK   t  t d ƒ # |  j d d d d d „  ƒ} Wd  QX|  j | j d ƒ d  S(   Ns   .*chunked body too larges	   /bufferedRZ   R  Rb  c         S` s   |  d d ƒ S(   NR    i (  (    (   R—   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR“   5  s    i  (   R   R   R>   RX   RÓ   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt    test_large_body_buffered_chunked0  s    c         C` sL   t  t d ƒ $ |  j d d d d d d ƒ} Wd  QX|  j | j d ƒ d  S(	   Ns   .*Content-Length too longs
   /streamingRZ   R  R@   R    i (  i  (   R   R   R>   RX   RÓ   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_large_body_streaming8  s    %c      
   C` sK   t  t d ƒ # |  j d d d d d „  ƒ} Wd  QX|  j | j d ƒ d  S(   Ns   .*chunked body too larges
   /streamingRZ   R  Rb  c         S` s   |  d d ƒ S(   NR    i (  (    (   R—   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR“   A  s    i  (   R   R   R>   RX   RÓ   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt!   test_large_body_streaming_chunked=  s    c         C` s6   |  j  d d d d d d ƒ} |  j | j d ƒ d  S(   Ns   /streaming?expected_size=10240RZ   R  R@   R    i (  t   10240(   R>   RX   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt"   test_large_body_streaming_overrideD  s    c         C` s5   |  j  d d d d d „  ƒ} |  j | j d ƒ d  S(   Ns   /streaming?expected_size=10240RZ   R  Rb  c         S` s   |  d d ƒ S(   NR    i (  (    (   R—   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR“   K  s    R‡  (   R>   RX   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt*   test_large_body_streaming_chunked_overrideI  s    c         c` s‚   t  t j ƒ  ƒ } z^ | j d |  j ƒ  f ƒ V| j d ƒ t t d ƒ  | j ƒ  V} Wd  QX|  j | d ƒ Wd  | j	 ƒ  Xd  S(   Ns	   127.0.0.1s@   PUT /streaming?body_timeout=0.1 HTTP/1.0
Content-Length: 42

s   Timeout reading bodyR-   (
   R   R”   R‘   R’   R—   R   R   Rå   RX   R©   (   R'   R7   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_timeoutN  s    c         c` sÜ   t  t j ƒ  ƒ } z¸ | j d |  j ƒ  f ƒ V| j d ƒ | j d d ƒ t ƒ  } t | d | j ƒ| V\ } } } |  j | d ƒ | j d ƒ t	 t
 d ƒ  | j ƒ  V} Wd  QX|  j | d	 ƒ Wd  | j ƒ  Xd  S(
   Ns	   127.0.0.1sF   PUT /streaming?expected_size=10240 HTTP/1.1
Content-Length: 10240

R    i (  R0   R‡  s2   PUT /streaming HTTP/1.1
Content-Length: 10240

s   .*Content-Length too longs   HTTP/1.1 400 Bad Request

(   R   R”   R‘   R’   R—   R   R8   t
   set_resultRX   R   R   Rå   R©   (   R'   R7   t   futR&   R%   RC   R   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_body_size_override_reset]  s    	(   R3   R4   R=   Rì   RJ  R  R‚  R   t   skipIfR   RÊ   R„  R…  R†  Rˆ  R‰  R   RŠ  R  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyRt    s   					$	$		t   LegacyInterfaceTestc           B` s   e  Z d  „  Z d „  Z RS(   c         ` s   ‡  f d †  } | S(   Nc         ` s˜   |  j  j d ƒ ˆ  _ ˆ  j sQ |  j j t d d d ƒ t ƒ  ƒ |  j j ƒ  d  Sd } |  j j t	 d t
 | ƒ ƒ ƒ |  j j | ƒ |  j j ƒ  d  S(   Ns   HTTP/1.R-   iÈ   RQ  s   Hello worlds'   HTTP/1.1 200 OK
Content-Length: %d

(   R±   R¤   t   http1RN  RR  R   R   R2   R—   R   RM   (   RJ   t   message(   R'   (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   handle_requestz  s    		
(    (   R'   R’  (    (   R'   s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR=   v  s    c         C` s?   |  j  d ƒ } |  j s( |  j d ƒ n  |  j | j d ƒ d  S(   NR:   s   requires HTTP/1.xs   Hello world(   R>   R  Rõ   RX   R@   (   R'   RC   (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   test_legacy_interface‹  s    	(   R3   R4   R=   R“  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyR  u  s   	(   i    i    (   i   i    (b   t
   __future__R    R   R   t   tornadoR   R   t   tornado.concurrentR   t   tornado.escapeR   R   R   R	   R
   R   t   tornado.http1connectionR   t   tornado.httpclientR   t   tornado.httpserverR   t   tornado.httputilR   R   R   R   t   tornado.iostreamR   t   tornado.locksR   t   tornado.logR   t   tornado.netutilR   t   tornado.simple_httpclientR   t   tornado.testingR   R   R   R   R   t   tornado.test.utilR   R   t   tornado.webR   R    R!   t
   contextlibR"   RÜ   R:  R   R  R”   Rm   t   sysR  t   ioR#   R8   R9   RE   RŽ  R¾   t   skipIfOldSSLRP   t   objectRS   Rl   Ro   Rq   Rs   t   TestCaseRx   Rˆ   R   R­   R¯   RÍ   RÖ   Rç   R   R  R'  t   platformR	  R  R6  RC  RF  RH  Re  Rl  Rt  R  (    (    (    s;   lib/python2.7/site-packages/tornado/test/httpserver_test.pyt   <module>   s|   ."(	
	- 
L(8`W"	0³	
Y/t