
[c           @` s  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l 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 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 m Z m Z d  d l  m! Z! m" Z" y  d  d l# Z	 d  d l$ m% Z% Wn e& k
 rPe j'     n Xd  d l# m( Z( m) Z) m* Z* m+ Z+ y d  d l	 m, Z, Wn e& k
 re- Z, n Xd e( f d     YZ. d e. f d     YZ/ d e. f d     YZ0 d e. f d     YZ1 d e. f d     YZ2 d e" f d     YZ3 d e. f d     YZ4 d e. f d     YZ5 d  e. f d!     YZ6 d" e. f d#     YZ7 d$ e. f d%     YZ8 d& e. f d'     YZ9 d( e. f d)     YZ: d* e f d+     YZ; d, e; f d-     YZ< e j= d. d/ f k re e>   e?   d0  d1 Z@ n  d2 e; f d3     YZA d4 eB f d5     YZC d6 eC f d7     YZD d8 eD e; f d9     YZE d: eD e; f d;     YZF d< eD e; f d=     YZG d> eC e; f d?     YZH d@ eB f dA     YZI dB eI e jJ f dC     YZK e jL e, e- k dD  dE eI e jJ f dF     Y ZM dG e; f dH     YZN dI e; f dJ     YZO dK e; f dL     YZP dM e; f dN     YZQ d S(O   i    (   t   absolute_importt   divisiont   print_functionN(   t   Future(   t   gen(   t	   HTTPErrort   HTTPRequest(   t   Event(   t   gen_logt   app_log(   t   SimpleAsyncHTTPClient(   t
   DictLoader(   t   AsyncHTTPTestCaset   gen_testt   bind_unused_portt	   ExpectLog(   t   unittestt   skipBefore35t	   exec_test(   t   Applicationt   RequestHandler(   t   _websocket_mask_python(   t   WebSocketHandlert   websocket_connectt   WebSocketErrort   WebSocketClosedError(   t   speedupst   TestWebSocketHandlerc           B` s,   e  Z d  Z d d  Z d   Z d   Z RS(   s   Base class for testing handlers that exposes the on_close event.

    This allows for deterministic cleanup of the associated socket.
    c         C` s   | |  _  | |  _ d  S(   N(   t   close_futuret   compression_options(   t   selfR   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt
   initialize,   s    	c         C` s   |  j  S(   N(   R   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   get_compression_options0   s    c         C` s    |  j  j |  j |  j f  d  S(   N(   R   t
   set_resultt
   close_codet   close_reason(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   on_close3   s    N(   t   __name__t
   __module__t   __doc__t   NoneR   R    R$   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   '   s   	t   EchoHandlerc           B` s   e  Z e j d     Z RS(   c         c` s6   y |  j  | t | t   VWn t k
 r1 n Xd  S(   N(   t   write_messaget
   isinstancet   bytesR   (   R   t   message(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt
   on_message8   s    (   R%   R&   R   t	   coroutineR.   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR)   7   s   t   ErrorInOnMessageHandlerc           B` s   e  Z d    Z RS(   c         C` s   d d d  S(   Ni   i    (    (   R   R-   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR.   A   s    (   R%   R&   R.   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR0   @   s   t   HeaderHandlerc           B` s   e  Z d    Z RS(   c         C` s   t  j |  j d  t  j |  j d  t  j |  j d d  t  j |  j d d  t  j |  j d  |  j |  j g } x9 | D]1 } y |   t	 d   Wqy t
 k
 r qy Xqy W|  j |  j j j d d   d  S(	   Ns   This should not works   http://localhost/elsewheres   X-Testt    t	   Chocolatet   Chipi  s   did not get expected exception(   t	   functoolst   partialt   writet   redirectt
   set_headert
   set_cookiet
   set_statust   flusht   finisht	   Exceptiont   RuntimeErrorR*   t   requestt   headerst   get(   R   t   methods_to_testt   method(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   openF   s    (   R%   R&   RE   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR1   E   s   t   HeaderEchoHandlerc           B` s   e  Z d    Z d   Z RS(   c         C` s   |  j  d d  d  S(   Ns   X-Extra-Response-Headers   Extra-Response-Value(   R9   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   set_default_headers\   s    c         C` sO   xH |  j  j j   D]4 \ } } | j   j d  r |  j | |  q q Wd  S(   Ns   x-test(   R@   RA   t   get_allt   lowert
   startswithR9   (   R   t   kt   v(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   prepare_   s    (   R%   R&   RG   RM   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRF   [   s   	t   NonWebSocketHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  d  d  S(   Nt   ok(   R7   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRB   f   s    (   R%   R&   RB   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRN   e   s   t   CloseReasonHandlerc           B` s   e  Z d    Z RS(   c         C` s   t  |  _ |  j d d  d  S(   Ni  t   goodbye(   t   Falset   on_close_calledt   close(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRE   k   s    	(   R%   R&   RE   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRP   j   s   t   AsyncPrepareHandlerc           B` s#   e  Z e j d     Z d   Z RS(   c         c` s   t  j Vd  S(   N(   R   t   moment(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRM   q   s    c         C` s   |  j  |  d  S(   N(   R*   (   R   R-   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR.   u   s    (   R%   R&   R   R/   RM   R.   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRU   p   s   t   PathArgsHandlerc           B` s   e  Z d    Z RS(   c         C` s   |  j  |  d  S(   N(   R*   (   R   t   arg(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRE   z   s    (   R%   R&   RE   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRW   y   s   t   CoroutineOnMessageHandlerc           B` s&   e  Z d d   Z e j d    Z RS(   c         C` s&   t  t |   j | |  d |  _ d  S(   Ni    (   t   superRY   R   t   sleeping(   R   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR      s    c         c` s\   |  j  d k r |  j d  n  |  j  d 7_  t j d  V|  j  d 8_  |  j |  d  S(   Ni    s%   another coroutine is already sleepingi   g{Gz?(   R[   R*   R   t   sleep(   R   R-   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR.      s    N(   R%   R&   R(   R   R   R/   R.   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRY   ~   s   t   RenderMessageHandlerc           B` s   e  Z d    Z RS(   c         C` s    |  j  |  j d d |  d  S(   Ns   message.htmlR-   (   R*   t   render_string(   R   R-   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR.      s    (   R%   R&   R.   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR]      s   t   SubprotocolHandlerc           B` s#   e  Z d    Z d   Z d   Z RS(   c         K` s#   t  t |   j |   t |  _ d  S(   N(   RZ   R_   R   RR   t   select_subprotocol_called(   R   t   kwargs(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR      s    c         C` s5   |  j  r t d   n  t |  _  d | k r1 d Sd  S(   Ns   select_subprotocol called twicet	   goodproto(   R`   R>   t   TrueR(   (   R   t   subprotocols(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   select_subprotocol   s    		c         C` s0   |  j  s t d   n  |  j d |  j  d  S(   Ns   select_subprotocol not calleds   subprotocol=%s(   R`   R>   R*   t   selected_subprotocol(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRE      s    	(   R%   R&   R   Re   RE   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR_      s   		t   OpenCoroutineHandlerc           B` s,   e  Z d    Z e j d    Z d   Z RS(   c         K` s,   t  t |   j |   | |  _ t |  _ d  S(   N(   RZ   Rg   R   t   testRR   t   open_finished(   R   Rh   Ra   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR      s    	c         c` s,   |  j  j j   Vt j d  Vt |  _ d  S(   Ng{Gz?(   Rh   t   message_sentt   waitR   R\   Rc   Ri   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRE      s    c         C` s)   |  j  s t d   n  |  j d  d  S(   Ns&   on_message called before open finishedRO   (   Ri   R>   R*   (   R   R-   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR.      s    	(   R%   R&   R   R   R/   RE   R.   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRg      s   	t   WebSocketBaseTestCasec           B` s,   e  Z e j d     Z e j d    Z RS(   c         k` s3   t  d |  j   | f |  V} t j |   d  S(   Ns   ws://127.0.0.1:%d%s(   R   t   get_http_portR   t   Return(   R   t   pathRa   t   ws(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt
   ws_connect   s    
c         c` s   | j    |  j Vd S(   s   Close a websocket connection and wait for the server side.

        If we don't wait here, there are sometimes leak warnings in the
        tests.
        N(   RT   R   (   R   Rp   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRT      s    
(   R%   R&   R   R/   Rq   RT   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRl      s   t   WebSocketTestc           B` s  e  Z d    Z d   Z d   Z d   Z d   Z d   Z e 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 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 e d    Z e d    Z  e d    Z! e d    Z" RS(    c         C` s@  t    |  _ t d t t d |  j  f d t f d t t d |  j  f d t t d |  j  f d t t d |  j  f d t	 t d |  j  f d t
 t d |  j  f d	 t t d |  j  f d
 t t d |  j  f d t t d |  j  f d t t d |  j  f d t t d |  j d |   f g d t i d d 6 S(   Ns   /echoR   s   /non_wss   /headers   /header_echos   /close_reasons   /error_in_on_messages   /async_prepares   /path_args/(.*)s
   /coroutines   /renders   /subprotocols   /open_coroutineRh   t   template_loaders   <b>{{ message }}</b>s   message.html(   R   R   R   R)   t   dictRN   R1   RF   RP   R0   RU   RW   RY   R]   R_   Rg   R   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   get_app   s2    	c         C` s   t    S(   N(   R
   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   get_http_client   s    c         C` s$   t  t |   j   t j j   d  S(   N(   RZ   Rr   t   tearDownR   t   _template_loaderst   clear(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRw      s    c         C` s&   |  j  d  } |  j | j d  d  S(   Ns   /echoi  (   t   fetcht   assertEqualt   code(   R   t   response(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_http_request   s    c         C` sA   |  j  d d i d d 6d d 6d d 6} |  j | j d  d  S(	   Ns   /echoRA   t   Upgradet
   Connectiont	   WebSockett   13s   Sec-WebSocket-Versioni  (   Rz   R{   R|   (   R   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_missing_websocket_key   s
    
c         C` sA   |  j  d d i d d 6d d 6d d 6} |  j | j d  d  S(	   Ns   /echoRA   R   R   R   t   12s   Sec-WebSocket-Versioni  (   Rz   R{   R|   (   R   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_bad_websocket_version   s
    
c         c` sM   |  j  d  V} | j d  V| j   V} |  j | d  |  j |  Vd  S(   Ns   /echot   hello(   Rq   R*   t   read_messageR{   RT   (   R   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_websocket_gen  s
    c         ` s   t  d   j   d   j   j   j   } | j d  | j   j    j   j   }   j | d    j j	   f d    | j
     j   d  S(   Ns   ws://127.0.0.1:%d/echot   callbackR   c         ` s
     j    S(   N(   t   stop(   t   f(   R   (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   <lambda>  s    (   R   Rm   R   Rk   t   resultR*   R   R{   R   t   add_done_callbackRT   (   R   Rp   R}   (    (   R   s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_websocket_callbacks  s    

c         c` sR   |  j  d  V} | j d d t | j   V} |  j | d  |  j |  Vd  S(   Ns   /echos   hello t   binary(   Rq   R*   Rc   R   R{   RT   (   R   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_binary_message  s
    c         c` sL   |  j  d  V} | j d  | j   V} |  j | d  |  j |  Vd  S(   Ns   /echou   hello é(   Rq   R*   R   R{   RT   (   R   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_unicode_message   s
    c         c` sL   |  j  d  V} | j d  | j   V} |  j | d  |  j |  Vd  S(   Ns   /renderR   s   <b>hello</b>(   Rq   R*   R   R{   RT   (   R   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_render_message(  s
    c         c` sb   |  j  d  V} | j d  t t d   | j   V} Wd  QX|  j | d   |  j |  Vd  S(   Ns   /error_in_on_messageR   s   Uncaught exception(   Rq   R*   R   R	   R   t   assertIsR(   RT   (   R   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_error_in_on_message0  s    c         c` s@   |  j  t   } |  j d  VWd  QX|  j | j j d  d  S(   Ns	   /notfoundi  (   t   assertRaisesR   Rq   R{   t	   exceptionR|   (   R   t   cm(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_websocket_http_fail9  s    c         c` s(   |  j  t   |  j d  VWd  QXd  S(   Ns   /non_ws(   R   R   Rq   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_websocket_http_success?  s    c         c` s^   t    \ } } | j   |  j t  0 t t d   t d | d d VWd  QXWd  QXd  S(   Ns   .*s   ws://127.0.0.1:%d/t   connect_timeouti  (   R   RT   R   t   IOErrorR   R   R   (   R   t   sockt   port(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_websocket_network_failD  s    

c         c` sJ   t  d |  j    V} | j d  | j d  | j j   |  j Vd  S(   Ns   ws://127.0.0.1:%d/echoR   t   world(   R   Rm   R*   t   streamRT   R   (   R   Rp   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt"   test_websocket_close_buffered_dataN  s    c         c` sY   t  t d |  j   d i d d 6 V} | j   V} |  j | d  |  j |  Vd  S(   Ns   ws://127.0.0.1:%d/headerRA   R   s   X-Test(   R   R   Rm   R   R{   RT   (   R   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_websocket_headersX  s    c         c` st   t  t d |  j   d i d d 6 V} |  j | j j d  d  |  j | j j d  d  |  j |  Vd  S(   Ns   ws://127.0.0.1:%d/header_echoRA   R   s   X-Test-Hellos   X-Extra-Response-Headers   Extra-Response-Value(   R   R   Rm   R{   RA   RB   RT   (   R   Rp   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_websocket_header_echob  s    c         c` sw   |  j  d  V} | j   V} |  j | d   |  j | j d  |  j | j d  |  j V\ } } |  j | d  d  S(   Ns   /close_reasoni  RQ   (   Rq   R   R   R(   R{   R"   R#   R   (   R   Rp   t   msgR|   t   reason(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_server_close_reasonn  s    c         c` sT   |  j  d  V} | j d d  |  j V\ } } |  j | d  |  j | d  d  S(   Ns   /echoi  RQ   (   Rq   RT   R   R{   (   R   Rp   R|   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_client_close_reason}  s
    c         c` sT   |  j  d  V} | j   V} |  j | d   |  j t   | j d  Wd  QXd  S(   Ns   /close_reasonR   (   Rq   R   R   R(   R   R   R*   (   R   Rp   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_write_after_close  s
    c         c` s>   |  j  d  V} | j d  | j   V} |  j | d  d  S(   Ns   /async_prepareR   (   Rq   R*   R   R{   (   R   Rp   t   res(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_async_prepare  s    c         c` s1   |  j  d  V} | j   V} |  j | d  d  S(   Ns   /path_args/helloR   (   Rq   R   R{   (   R   Rp   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_path_args  s    c         c` sj   |  j  d  V} | j d  V| j d  V| j   V} |  j | d  | j   V} |  j | d  d  S(   Ns
   /coroutinet   hello1t   hello2(   Rq   R*   R   R{   (   R   Rp   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_coroutine  s    c         c` s|   |  j    } d | } i d | d 6} t t | d |  V} | j d  | j   V} |  j | d  |  j |  Vd  S(   Ns   ws://127.0.0.1:%d/echos   http://127.0.0.1:%dt   OriginRA   R   (   Rm   R   R   R*   R   R{   RT   (   R   R   t   urlRA   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_check_origin_valid_no_path  s    
c         c` s|   |  j    } d | } i d | d 6} t t | d |  V} | j d  | j   V} |  j | d  |  j |  Vd  S(   Ns   ws://127.0.0.1:%d/echos   http://127.0.0.1:%d/somethingR   RA   R   (   Rm   R   R   R*   R   R{   RT   (   R   R   R   RA   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt!   test_check_origin_valid_with_path  s    
c      	   c` sp   |  j    } d | } i d | d 6} |  j t   } t t | d |  VWd  QX|  j | j j d  d  S(   Ns   ws://127.0.0.1:%d/echos   127.0.0.1:%dR   RA   i  (   Rm   R   R   R   R   R{   R   R|   (   R   R   R   RA   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt%   test_check_origin_invalid_partial_url  s    
c      	   c` sl   |  j    } d | } i d d 6} |  j t   } t t | d |  VWd  QX|  j | j j d  d  S(   Ns   ws://127.0.0.1:%d/echos   http://somewhereelse.comR   RA   i  (   Rm   R   R   R   R   R{   R   R|   (   R   R   R   RA   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_check_origin_invalid  s    
c      	   c` sl   |  j    } d | } i d d 6} |  j t   } t t | d |  VWd  QX|  j | j j d  d  S(   Ns   ws://localhost:%d/echos   http://subtenant.localhostR   RA   i  (   Rm   R   R   R   R   R{   R   R|   (   R   R   R   RA   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt$   test_check_origin_invalid_subdomains  s    
c         c` s^   |  j  d d d d g V} |  j | j d  | j   V} |  j | d  |  j |  Vd  S(   Ns   /subprotocolRd   t   badprotoRb   s   subprotocol=goodproto(   Rq   R{   Rf   R   RT   (   R   Rp   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_subprotocols  s
    c         c` sR   |  j  d  V} |  j | j d   | j   V} |  j | d  |  j |  Vd  S(   Ns   /subprotocols   subprotocol=None(   Rq   R   Rf   R(   R   R{   RT   (   R   Rp   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_subprotocols_not_offered  s
    c         c` sf   t    |  _ |  j d  V} | j d  V|  j j   | j   V} |  j | d  |  j |  Vd  S(   Ns   /open_coroutineR   RO   (   R   Rj   Rq   R*   t   setR   R{   RT   (   R   Rp   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_open_coroutine  s    (#   R%   R&   Ru   Rv   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   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRr      s@   								


	i   i   s  
class NativeCoroutineOnMessageHandler(TestWebSocketHandler):
    def initialize(self, close_future, compression_options=None):
        super().initialize(close_future, compression_options)
        self.sleeping = 0

    async def on_message(self, message):
        if self.sleeping > 0:
            self.write_message('another coroutine is already sleeping')
        self.sleeping += 1
        await gen.sleep(0.01)
        self.sleeping -= 1
        self.write_message(message)t   NativeCoroutineOnMessageHandlert   WebSocketNativeCoroutineTestc           B` s&   e  Z d    Z e e d     Z RS(   c         C` s.   t    |  _ t d t t d |  j  f g  S(   Ns   /nativeR   (   R   R   R   R   Rt   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRu     s    c         c` sj   |  j  d  V} | j d  V| j d  V| j   V} |  j | d  | j   V} |  j | d  d  S(   Ns   /nativeR   R   (   Rq   R*   R   R{   (   R   Rp   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_native_coroutine  s    (   R%   R&   Ru   R   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   	t   CompressionTestMixinc           B` sG   e  Z d  Z d   Z d   Z d   Z e d    Z e d    Z RS(   s   Hello world. Testing 123 123c      	   C` st   t    |  _ d t f d     Y} t d t t d |  j d |  j    f d | t d |  j d |  j    f g  S(   Nt   LimitedHandlerc           B` s    e  Z e d     Z d   Z RS(   c         S` s   d S(   Ni   (    (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   max_message_size.  s    c         S` s   |  j  t t |    d  S(   N(   R*   t   strt   len(   R   R-   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR.   2  s    (   R%   R&   t   propertyR   R.   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   -  s   s   /echoR   R   s   /limited(   R   R   R   R   R)   Rt   t   get_server_compression_options(   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRu   *  s    		c         C` s   d  S(   N(   R(   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   >  s    c         C` s   d  S(   N(   R(   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   get_client_compression_optionsA  s    c         c` s   |  j  d d |  j   V} xD t d  D]6 } | j |  j  | j   V} |  j | |  j  q) W|  j | j j t	 |  j  d  |  j | j j
 t	 |  j  d  |  j | j j | j j  |  j |  Vd  S(   Ns   /echoR   i   (   Rq   R   t   rangeR*   t   MESSAGER   R{   t   protocolt   _message_bytes_outR   t   _message_bytes_int   verify_wire_bytest   _wire_bytes_int   _wire_bytes_outRT   (   R   Rp   t   iR}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_message_sizesD  s    ##c         c` s   |  j  d d |  j   V} | j d d  | j   V} |  j | d  | j d d  | j   V} |  j |  |  j |  Vd  S(   Ns   /limitedR   t   ai   t   128i   (   Rq   R   R*   R   R{   t   assertIsNoneRT   (   R   Rp   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_size_limitU  s    (	   R%   R&   R   Ru   R   R   R   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   '  s   			t   UncompressedTestMixinc           B` s   e  Z d  Z d   Z RS(   sE   Specialization of CompressionTestMixin when we expect no compression.c         C` sF   |  j  | d t |  j  d  |  j  | d t |  j  d  d  S(   Ni   i   i   (   R{   R   R   (   R   t   bytes_int	   bytes_out(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   h  s    !(   R%   R&   R'   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   f  s   t   NoCompressionTestc           B` s   e  Z RS(    (   R%   R&   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   n  s   t   ServerOnlyCompressionTestc           B` s   e  Z d    Z RS(   c         C` s   i  S(   N(    (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   t  s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   s  s   t   ClientOnlyCompressionTestc           B` s   e  Z d    Z RS(   c         C` s   i  S(   N(    (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   y  s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   x  s   t   DefaultCompressionTestc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   i  S(   N(    (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   ~  s    c         C` s   i  S(   N(    (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s    c         C` sZ   |  j  | d t |  j  d  |  j  | d t |  j  d  |  j | | d  d  S(   Ni   i   i   i   (   t
   assertLessR   R   R{   (   R   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s    !!(   R%   R&   R   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR   }  s   		t   MaskFunctionMixinc           B` s   e  Z d    Z RS(   c         C` s   |  j  |  j d d  d  |  j  |  j d d  d  |  j  |  j d d  d  |  j  |  j d d  d	  |  j  |  j d
 d  d  |  j  |  j d d  d  d  S(   Nt   abcdR2   t   bs   t   54321t   TVPVPt   ZXCVt   98765432s   c`t`olpds    s   s   s   s    s   (   R{   t   mask(   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt	   test_mask  s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   t   PythonMaskFunctionTestc           B` s   e  Z d    Z RS(   c         C` s   t  | |  S(   N(   R   (   R   R   t   data(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   s#   tornado.speedups module not presentt   CythonMaskFunctionTestc           B` s   e  Z d    Z RS(   c         C` s   t  j | |  S(   N(   R   t   websocket_mask(   R   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   t   ServerPeriodicPingTestc           B` s    e  Z d    Z e d    Z RS(   c         C` sJ   d t  f d     Y} t   |  _ t d | t d |  j  f g d d S(   Nt   PingHandlerc           B` s   e  Z d    Z RS(   c         S` s   |  j  d  d  S(   Ns   got pong(   R*   (   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   on_pong  s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   t   /R   t   websocket_ping_intervalg{Gz?(   R   R   R   R   Rt   (   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRu     s
    c         c` sV   |  j  d  V} x1 t d  D]# } | j   V} |  j | d  q W|  j |  Vd  S(   NR   i   s   got pong(   Rq   R   R   R{   RT   (   R   Rp   R   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_server_ping  s
    (   R%   R&   Ru   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   	
t   ClientPeriodicPingTestc           B` s    e  Z d    Z e d    Z RS(   c         C` sD   d t  f d     Y} t   |  _ t d | t d |  j  f g  S(   NR   c           B` s   e  Z d    Z RS(   c         S` s   |  j  d  d  S(   Ns   got ping(   R*   (   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   on_ping  s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   R   R   (   R   R   R   R   Rt   (   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRu     s    c         c` s\   |  j  d d d V} x1 t d  D]# } | j   V} |  j | d  q# W|  j |  Vd  S(   NR   t   ping_intervalg{Gz?i   s   got ping(   Rq   R   R   R{   RT   (   R   Rp   R   R}   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_client_ping  s
    (   R%   R&   Ru   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   	
t   ManualPingTestc           B` s    e  Z d    Z e d    Z RS(   c         C` sD   d t  f d     Y} t   |  _ t d | t d |  j  f g  S(   NR   c           B` s   e  Z d    Z RS(   c         S` s    |  j  | d t | t  d  S(   NR   (   R*   R+   R,   (   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s    (   R%   R&   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   R   R   (   R   R   R   R   Rt   (   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRu     s    c         c` s   |  j  d  V} |  j t | j d d  | j d  | j   V} |  j | d  | j d  | j   V} |  j | d  |  j |  Vd  S(   NR   R   i~   R   s   binary hello(   Rq   R   t
   ValueErrort   pingR   R{   RT   (   R   Rp   t   resp(    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_manual_ping  s    (   R%   R&   Ru   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   	
t   MaxMessageSizeTestc           B` s    e  Z d    Z e d    Z RS(   c         C` s4   t    |  _ t d t t d |  j  f g d d S(   NR   R   t   websocket_max_message_sizei   (   R   R   R   R)   Rt   (   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyRu     s    c         c` s   |  j  d  V} d d } | j |  | j   V} |  j | |  | j | d  | j   V} |  j | d   |  j | j d  |  j | j d  d  S(   NR   R   i   R   i  s   message too big(   Rq   R*   R   R{   R   R(   R"   R#   (   R   Rp   R   R   (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   test_large_message  s    
(   R%   R&   Ru   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyR     s   	(R   t
   __future__R    R   R   R5   t   syst	   tracebackt   tornado.concurrentR   t   tornadoR   t   tornado.httpclientR   R   t   tornado.locksR   t   tornado.logR   R	   t   tornado.simple_httpclientR
   t   tornado.templateR   t   tornado.testingR   R   R   R   t   tornado.test.utilR   R   R   t   tornado.webR   R   t   tornado.websockett   tornado.utilR   t   ImportErrort	   print_excR   R   R   R   R   R(   R   R)   R0   R1   RF   RN   RP   RU   RW   RY   R]   R_   Rg   Rl   Rr   t   version_infot   globalst   localsR   R   t   objectR   R   R   R   R   R   R   t   TestCaseR   t   skipIfR   R   R   R   R   (    (    (    s:   lib/python2.7/site-packages/tornado/test/websocket_test.pyt   <module>   st   "
"
	
	 9?