
    Mh)|                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ 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 d d
lmZmZ d dlmZmZmZm Z  d dl!m"Z"m#Z# 	 d dl$Z	d dl%m&Z& n# e'$ r  ej(                      w xY wd dl$m)Z)m*Z*m+Z+m,Z, 	 d dl	m-Z- n# e'$ r dZ-Y nw xY w G d de)          Z. G d de.          Z/ G d de.          Z0 G d de.          Z1 G d de.          Z2 G d de#          Z3 G d de#          Z4 G d de.          Z5 G d  d!e.          Z6 G d" d#e.          Z7 G d$ d%e.          Z8 G d& d'e.          Z9 G d( d)e.          Z: G d* d+e.          Z; G d, d-e.          Z< G d. d/e.          Z= G d0 d1e.          Z> G d2 d3e          Z? G d4 d5e?          Z@ G d6 d7e.          ZA G d8 d9e?          ZBe G d: d;e?                      ZCe G d< d=eC                      ZD G d> d?eD          ZE G d@ dAeD          ZF G dB dCeD          ZG G dD dEeC          ZHe G dF dGejI                              ZJ G dH dIeJ          ZK ejL        e-du dJ           G dK dLeJ                      ZM G dM dNe?          ZN G dO dPe?          ZO G dQ dRe?          ZP G dS dTe?          ZQ G dU dVe?          ZRdS )W    N)Future)gen)	HTTPErrorHTTPRequest)Event)gen_logapp_log)ResolverSimpleAsyncHTTPClient)
DictLoader)abstract_base_testignore_deprecation)AsyncHTTPTestCasegen_testbind_unused_port	ExpectLog)ApplicationRequestHandler_websocket_mask_python)WebSocketHandlerwebsocket_connectWebSocketErrorWebSocketClosedError)speedupsc                   &    e Zd ZdZddZd Zd ZdS )TestWebSocketHandlerzBase class for testing handlers that exposes the on_close event.

    This allows for tests to see the close code and reason on the
    server side.

    Nc                 "    || _         || _        d S Nclose_futurecompression_options)selfr"   r#   s      [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/websocket_test.py
initializezTestWebSocketHandler.initialize5   s    (#6       c                     | j         S r    r#   r$   s    r%   get_compression_optionsz,TestWebSocketHandler.get_compression_options9   s    ''r'   c                 d    | j         (| j                             | j        | j        f           d S d S r    )r"   
set_result
close_codeclose_reasonr*   s    r%   on_closezTestWebSocketHandler.on_close<   s:    ((($/4;L)MNNNNN )(r'   NN)__name__
__module____qualname____doc__r&   r+   r0    r'   r%   r   r   -   sU         7 7 7 7( ( (O O O O Or'   r   c                   .    e Zd Zej        d             ZdS )EchoHandlerc              #      K   	 |                      |t          |t                              V  d S # t          j        $ r Y d S t
          $ r Y d S w xY wr    )write_message
isinstancebytesasyncioCancelledErrorr   r$   messages     r%   
on_messagezEchoHandler.on_messageB   su      	$$Wj%.H.HIIIIIII% 	 	 	DD# 	 	 	DD	s   +1 A	AAN)r2   r3   r4   r   	coroutinerA   r6   r'   r%   r8   r8   A   s/        ]  ]  r'   r8   c                       e Zd Zd ZdS )ErrorInOnMessageHandlerc                     ddz   d S )N   r   r6   r?   s     r%   rA   z"ErrorInOnMessageHandler.on_messageM   s    	Ar'   Nr2   r3   r4   rA   r6   r'   r%   rD   rD   L   s#            r'   rD   c                       e Zd Zd ZdS )HeaderHandlerc                    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}|D ]+}	  |             t          d          # t          $ r Y (w xY w|                     | j        j                            dd                     d S )	NzThis should not workzhttp://localhost/elsewhereX-Test 	ChocolateChipi  zdid not get expected exception)	functoolspartialwriteredirect
set_header
set_cookie
set_statusflushfinish	ExceptionRuntimeErrorr:   requestheadersget)r$   methods_to_testmethods      r%   openzHeaderHandler.openR   s    dj*@AAdm-IJJdox<<do{FCCdos33JK
 & 	 	F  @AAA   4</33HbAABBBBBs   B,,
B98B9Nr2   r3   r4   r_   r6   r'   r%   rI   rI   Q   s(        C C C C Cr'   rI   c                       e Zd Zd Zd ZdS )HeaderEchoHandlerc                 2    |                      dd           d S )NX-Extra-Response-HeaderExtra-Response-Value)rS   r*   s    r%   set_default_headersz%HeaderEchoHandler.set_default_headersh   s    13IJJJJJr'   c                     | j         j                                        D ]B\  }}|                                                    d          r|                     ||           Cd S )Nzx-test)rZ   r[   get_alllower
startswithrS   )r$   kvs      r%   preparezHeaderEchoHandler.preparek   sc    L(0022 	& 	&DAqwwyy##H-- &1%%%	& 	&r'   N)r2   r3   r4   rf   rm   r6   r'   r%   rb   rb   g   s5        K K K& & & & &r'   rb   c                       e Zd Zd ZdS )NonWebSocketHandlerc                 0    |                      d           d S )Nok)rQ   r*   s    r%   r\   zNonWebSocketHandler.getr   s    

4r'   Nr2   r3   r4   r\   r6   r'   r%   ro   ro   q   s#            r'   ro   c                       e Zd Zd ZdS )RedirectHandlerc                 0    |                      d           d S )N/echo)rR   r*   s    r%   r\   zRedirectHandler.getw   s    gr'   Nrr   r6   r'   r%   rt   rt   v   s#            r'   rt   c                       e Zd Zd ZdS )CloseReasonHandlerc                 @    d| _         |                     dd           d S )NF  goodbye)on_close_calledcloser*   s    r%   r_   zCloseReasonHandler.open|   s$    $

4#####r'   Nr`   r6   r'   r%   rx   rx   {   #        $ $ $ $ $r'   rx   c                   4    e Zd Zej        d             Zd ZdS )AsyncPrepareHandlerc              #   &   K   t           j        V  d S r    )r   momentr*   s    r%   rm   zAsyncPrepareHandler.prepare   s      jr'   c                 0    |                      |           d S r    r:   r?   s     r%   rA   zAsyncPrepareHandler.on_message   s    7#####r'   N)r2   r3   r4   r   rB   rm   rA   r6   r'   r%   r   r      s>        ]  ]$ $ $ $ $r'   r   c                       e Zd Zd ZdS )PathArgsHandlerc                 0    |                      |           d S r    r   )r$   args     r%   r_   zPathArgsHandler.open   s    3r'   Nr`   r6   r'   r%   r   r      #                 r'   r   c                   >     e Zd Z fdZej        d             Z xZS )CoroutineOnMessageHandlerc                 H     t                      j        di | d| _        d S Nr   r6   superr&   sleepingr$   kwargs	__class__s     r%   r&   z$CoroutineOnMessageHandler.initialize   +    $$V$$$r'   c              #      K   | j         dk    r|                     d           | xj         dz  c_         t          j        d          V  | xj         dz  c_         |                     |           d S Nr   z%another coroutine is already sleepingrF   {Gz?r   r:   r   sleepr?   s     r%   rA   z$CoroutineOnMessageHandler.on_message   sv      =1FGGGioo7#####r'   )r2   r3   r4   r&   r   rB   rA   __classcell__r   s   @r%   r   r      sU             	]$ $ ]$ $ $ $ $r'   r   c                       e Zd Zd ZdS )RenderMessageHandlerc                 Z    |                      |                     d|                     d S )Nmessage.html)r@   )r:   render_stringr?   s     r%   rA   zRenderMessageHandler.on_message   s/    4--ng-NNOOOOOr'   NrG   r6   r'   r%   r   r      s(        P P P P Pr'   r   c                   *     e Zd Z fdZd Zd Z xZS )SubprotocolHandlerc                 H     t                      j        di | d| _        d S NFr6   )r   r&   select_subprotocol_calledr   s     r%   r&   zSubprotocolHandler.initialize   s.    $$V$$$).&&&r'   c                 L    | j         rt          d          d| _         d|v rdS d S )Nzselect_subprotocol called twiceT	goodproto)r   rX   )r$   subprotocolss     r%   select_subprotocolz%SubprotocolHandler.select_subprotocol   s9    ) 	?=>>>)-&,&&;tr'   c                 l    | j         st          d          |                     d| j        z             d S )Nzselect_subprotocol not calledzsubprotocol=%s)r   rX   r:   selected_subprotocolr*   s    r%   r_   zSubprotocolHandler.open   s?    - 	=;<<<+d.GGHHHHHr'   )r2   r3   r4   r&   r   r_   r   r   s   @r%   r   r      s]        / / / / /  I I I I I I Ir'   r   c                   D     e Zd Z fdZej        d             Zd Z xZS )OpenCoroutineHandlerc                 V     t                      j        di | || _        d| _        d S r   )r   r&   testopen_finished)r$   r   r   r   s      r%   r&   zOpenCoroutineHandler.initialize   s5    $$V$$$	"r'   c              #      K   | j         j                                        V  t          j        d          V  d| _        d S )Nr   T)r   message_sentwaitr   r   r   r*   s    r%   r_   zOpenCoroutineHandler.open   sG      i$))+++++i!r'   c                 \    | j         st          d          |                     d           d S )Nz&on_message called before open finishedrq   )r   rX   r:   r?   s     r%   rA   zOpenCoroutineHandler.on_message   s7    ! 	FDEEE4     r'   )	r2   r3   r4   r&   r   rB   r_   rA   r   r   s   @r%   r   r      sd        # # # # #
 	]" " ]"
! ! ! ! ! ! !r'   r   c                       e Zd Zd ZdS )ErrorInOpenHandlerc                      t          d          )Nboom)rX   r*   s    r%   r_   zErrorInOpenHandler.open   s    r'   Nr`   r6   r'   r%   r   r      r   r'   r   c                       e Zd Zd ZdS )ErrorInAsyncOpenHandlerc                 X   K   t          j        d           d {V  t          d          )Nr   r   )r=   r   rX   r*   s    r%   r_   zErrorInAsyncOpenHandler.open   s6      mAr'   Nr`   r6   r'   r%   r   r      s#                 r'   r   c                       e Zd Zd ZdS )NoDelayHandlerc                 Z    |                      d           |                     d           d S )NThello)set_nodelayr:   r*   s    r%   r_   zNoDelayHandler.open   s0    7#####r'   Nr`   r6   r'   r%   r   r      r~   r'   r   c                   H     e Zd Z fdZ fdZej        d             Z xZS )WebSocketBaseTestCasec                 V    t                                                       g | _        d S r    )r   setUpconns_to_closer$   r   s    r%   r   zWebSocketBaseTestCase.setUp   s"     r'   c                     | j         D ]}|                                 t                                                       d S r    )r   r}   r   tearDown)r$   connr   s     r%   r   zWebSocketBaseTestCase.tearDown   s@    ' 	 	DJJLLLLr'   c              +      K   t          d|                                 |fz  fi |V }| j                            |           t	          j        |          )Nzws://127.0.0.1:%d%s)r   get_http_portr   appendr   Return)r$   pathr   wss       r%   
ws_connectz WebSocketBaseTestCase.ws_connect   sl      $!T%7%7%9%94$@@
 
DJ
 
 
 
 	""2&&&jnnr'   )	r2   r3   r4   r   r   r   rB   r   r   r   s   @r%   r   r      sn        ! ! ! ! !    
 	]  ]    r'   r   c                       e Zd Zd Zd Z f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#e	d!             Z$e	d"             Z%e	d#             Z&e	d$             Z'e	d%             Z( xZ)S )&WebSocketTestc                 "   t                      | _        t          dt          t	          | j                  fdt
          fdt          fdt          t	          | j                  fdt          t	          | j                  fdt          t	          | j                  fdt          t	          | j                  fd	t          t	          | j                  fd
t          t	          | j                  fdt          t	          | j                  fdt          t	          | j                  fdt          t	          | j                  fdt           t	          | j        |           fdt"          fdt$          fdt&          fgt)          ddi                    S )Nrv   )r"   /non_ws	/redirectz/headerz/header_echo/close_reason/error_in_on_message/async_preparez/path_args/(.*)
/coroutine/render/subprotocol/open_coroutine)r"   r   /error_in_open/error_in_async_open/nodelayr   z<b>{{ message }}</b>)template_loader)r   r"   r   r8   dictro   rt   rI   rb   rx   rD   r   r   r   r   r   r   r   r   r   r   r*   s    r%   get_appzWebSocketTest.get_app   s   "HH+t9J'K'K'KL/0o.M4T=N+O+O+OP"%d&7888 $&d&7888 ++d&7888 %'d&7888 &#d&7888 !-d&7888
 0$DDU2V2V2VW"&d&7888 &(d&7dCCC
 "#56')@A^,a1d '8N'OPPg4
 4
 4
 4	
r'   c                     t                      S r    r   r*   s    r%   get_http_clientzWebSocketTest.get_http_client%  s    $&&&r'   c                     t                                                       t          j                                         d S r    )r   r   r   _template_loadersclearr   s    r%   r   zWebSocketTest.tearDown)  s4    (..00000r'   c                 f    |                      d          }|                     |j        d           d S )Nrv     fetchassertEqualcoder$   responses     r%   test_http_requestzWebSocketTest.test_http_request-  s1    ::g&&,,,,,r'   c                 r    |                      ddddd          }|                     |j        d           d S )Nrv   Upgrade	WebSocket13
Connectionr   zSec-WebSocket-Versionr[   r   r   r   s     r%   test_missing_websocket_keyz(WebSocketTest.test_missing_websocket_key2  P    ::'&)-   
 
 	,,,,,r'   c                 r    |                      ddddd          }|                     |j        d           d S )Nrv   r   r   12r   r   i  r   r   s     r%   test_bad_websocket_versionz(WebSocketTest.test_bad_websocket_version=  r   r'   c              #      K   |                      d          V }|                    d          V  |                                V }|                     |d           d S )Nrv   r   r   r:   read_messager   r$   r   r   s      r%   test_websocket_genz WebSocketTest.test_websocket_genH  sh      ??7++++w'''''****7+++++r'   c                 V    t                      5  t          d                                 z   j                   d d d            n# 1 swxY w Y                                                                    }|                    d           |                     j                                                                                    }                     |d            j	        
                     fd           |                                                                   d S )Nws://127.0.0.1:%d/echo)callbackr   c                 ,                                     S r    )stop)fr$   s    r%   <lambda>z8WebSocketTest.test_websocket_callbacks.<locals>.<lambda>Y  s    diikk r'   )r   r   r   r  r   resultr:   r   r   r"   add_done_callbackr}   r   s   `  r%   test_websocket_callbacksz&WebSocketTest.test_websocket_callbacksO  sD   !! 	 	(4+=+=+?+??$)   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 YY[[!!
!!!
	"""99;;%%''7+++++,A,A,A,ABBB



		s   ,AAAc              #      K   |                      d          V }|                    dd           |                                V }|                     |d           d S )Nrv   s   hello Tbinaryr   r   s      r%   test_binary_messagez!WebSocketTest.test_binary_message]  sg      ??7++++
t444****=11111r'   c              #      K   |                      d          V }|                    d           |                                V }|                     |d           d S Nrv   u   hello ér   r   s      r%   test_unicode_messagez"WebSocketTest.test_unicode_messaged  sb      ??7++++
(((****>22222r'   c              #      K   |                      d          V }|                                 |                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S r  )r   r}   assertRaisesr   r:   r$   r   s     r%   )test_error_in_closed_client_write_messagez7WebSocketTest.test_error_in_closed_client_write_messagek  s      ??7++++



344 	- 	-^,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   A++A/2A/c              #      K   |                      d          V }|                    d           |                                V }|                     |d           d S )Nr   r   z<b>hello</b>r   r   s      r%   test_render_messagez!WebSocketTest.test_render_messager  sb      ??9----
!!!****>22222r'   c              #     K   |                      d          V }|                    d           t          t          d          5  |                                V }d d d            n# 1 swxY w Y   |                     |           d S )Nr   r   Uncaught exception)r   r:   r   r	   r   assertIsNoner   s      r%   test_error_in_on_messagez&WebSocketTest.test_error_in_on_messagey  s      ??#9::::
!!!w 455 	/ 	/__....H	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/(#####s   A''A+.A+c              #      K   |                      t                    5 }|                     d          V  d d d            n# 1 swxY w Y   |                     |j        j        d           d S )Nz	/notfoundi  )r  r   r   r   	exceptionr   )r$   cms     r%   test_websocket_http_failz&WebSocketTest.test_websocket_http_fail  s      y)) 	/R//+.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/*C00000s   AAAc              #      K   |                      t                    5  |                     d          V  d d d            d S # 1 swxY w Y   d S )Nr   )r  r   r   r*   s    r%   test_websocket_http_successz)WebSocketTest.test_websocket_http_success  s      ~.. 	- 	-//),,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   AA	Ac              #      K   |                      t                    5  |                     d          V  d d d            d S # 1 swxY w Y   d S )Nr   )r  r   r   r*   s    r%   test_websocket_http_redirectz*WebSocketTest.test_websocket_http_redirect  s      y)) 	/ 	///+.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/r#  c              #   D  K   t                      \  }}|                                 |                     t                    5  t	          t
          dd          5  t          d|z  d          V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz.*F)requiredzws://127.0.0.1:%d/i  )connect_timeout)r   r}   r  IOErrorr   r   r   )r$   sockports      r%   test_websocket_network_failz)WebSocketTest.test_websocket_network_fail  s/     %''
d

w'' 	 	7D5999  '(4/                   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   BA=1B=B	BB	BBBc              #   2  K   t          j        t          d|                                 z            V           5 }|                    d           |                    d           |j                                         d d d            d S # 1 swxY w Y   d S )Nr  r   world)
contextlibclosingr   r   r:   streamr}   r  s     r%   "test_websocket_close_buffered_dataz0WebSocketTest.test_websocket_close_buffered_data  s      $%=@R@R@T@T%TUUUU
 
 	W%%%W%%%IOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABBBc           	   #   &  K   t          j        t          t          d|                                 z  ddi                    V           5 }|                                V }|                     |d           d d d            d S # 1 swxY w Y   d S )Nzws://127.0.0.1:%d/headerrK   r   r   )r/  r0  r   r   r   r   r   r   s      r%   test_websocket_headersz$WebSocketTest.test_websocket_headers  s       '2T5G5G5I5II!)7 3     	
 	
 	0 __....HXw///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   -BB
B
c           	   #     K   t          j        t          t          d|                                 z  ddi                    V           5 }|                     |j                            d          d           |                     |j                            d          d           d d d            d S # 1 swxY w Y   d S )Nzws://127.0.0.1:%d/header_echozX-Test-Hellor   r   rd   re   )r/  r0  r   r   r   r   r[   r\   r  s     r%   test_websocket_header_echoz(WebSocketTest.test_websocket_header_echo  s     
 '7$:L:L:N:NN!/ 9     	
 	
 	 RZ^^N;;WEEE
899;Q  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AB66B:=B:c              #   @  K   |                      d          V }|                                V }|                     |d            |                     |j        d           |                     |j        d           | j        V \  }}|                     |d           d S )Nr   rz   r{   )r   r   assertIsr   r.   r/   r"   )r$   r   msgr   reasons        r%   test_server_close_reasonz&WebSocketTest.test_server_close_reason  s      ???3333OO%%%%c4   ---)444!...f 	t$$$$$r'   c              #      K   |                      d          V }|                    dd           | j        V \  }}|                     |d           |                     |d           d S )Nrv   rz   r{   )r   r}   r"   r   )r$   r   r   r:  s       r%   test_client_close_reasonz&WebSocketTest.test_client_close_reason  su      ??7++++
y!!!!...ft$$$+++++r'   c              #      K   |                      d          V }|                                V }|                     |d            |                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   )r   r   r8  r  r   r:   )r$   r   r9  s      r%   test_write_after_closez$WebSocketTest.test_write_after_close  s      ???3333OO%%%%c4   344 	& 	&W%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s    BB
Bc              #      K   |                      d          V }|                    d           |                                V }|                     |d           d S )Nr   r   r   r$   r   ress      r%   test_async_preparez WebSocketTest.test_async_prepare  se       ??#34444
!!!OO%%%%g&&&&&r'   c              #      K   |                      d          V }|                                V }|                     |d           d S )Nz/path_args/hellor   r   r   r   rA  s      r%   test_path_argszWebSocketTest.test_path_args  sO      ??#56666OO%%%%g&&&&&r'   c              #   D  K   |                      d          V }|                    d          V  |                    d          V  |                                V }|                     |d           |                                V }|                     |d           d S )Nr   hello1hello2r   rA  s      r%   test_coroutinezWebSocketTest.test_coroutine  s      ??<0000x(((((x(((((OO%%%%h'''OO%%%%h'''''r'   c              #   b  K   |                                  }d|z  }dd|z  i}t          j        t          t	          ||                    V           5 }|                    d           |                                V }|                     |d           d d d            d S # 1 swxY w Y   d S )Nr  Originzhttp://127.0.0.1:%dr   r   r   r/  r0  r   r   r:   r   r   r$   r+  urlr[   r   r   s         r%   test_check_origin_valid_no_pathz-WebSocketTest.test_check_origin_valid_no_path  s     !!##&-2T9:$[g%F%F%FGGGG
 
 	0W%%%__....HXw///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0   AB$$B(+B(c              #   b  K   |                                  }d|z  }dd|z  i}t          j        t          t	          ||                    V           5 }|                    d           |                                V }|                     |d           d d d            d S # 1 swxY w Y   d S )Nr  rL  zhttp://127.0.0.1:%d/somethingr   r   rM  rN  s         r%   !test_check_origin_valid_with_pathz/WebSocketTest.test_check_origin_valid_with_path  s     !!##&-<tCD$[g%F%F%FGGGG
 
 	0W%%%__....HXw///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0rQ  c              #   .  K   |                                  }d|z  }dd|z  i}|                     t                    5 }t          t	          ||                    V  d d d            n# 1 swxY w Y   |                     |j        j        d           d S )Nr  rL  z127.0.0.1:%dr     r   r  r   r   r   r   r  r   r$   r+  rO  r[   r  s        r%   %test_check_origin_invalid_partial_urlz3WebSocketTest.test_check_origin_invalid_partial_url  s      !!##&-^d23y)) 	GR#KW$E$E$EFFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G*C00000s   !A**A.1A.c              #   (  K   |                                  }d|z  }ddi}|                     t                    5 }t          t	          ||                    V  d d d            n# 1 swxY w Y   |                     |j        j        d           d S )Nr  rL  zhttp://somewhereelse.comr   rU  rV  rW  s        r%   test_check_origin_invalidz'WebSocketTest.test_check_origin_invalid)  s      !!##&- 78y)) 	GR#KW$E$E$EFFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	*C00000s   !A''A+.A+c              #     K   |                                  }t                                          d|          V }d |D             }t          j        |vr|                     d           d S d|z  }ddi}|                     t                    5 }t          t          ||                    V  d d d            n# 1 swxY w Y   | 
                    |j        j        d           d S )	N	localhostc                     h | ]
}|d          S )r   r6   ).0addrs     r%   	<setcomp>zEWebSocketTest.test_check_origin_invalid_subdomains.<locals>.<setcomp>?  s    111DG111r'   z"localhost does not resolve to ipv4zws://localhost:%d/echorL  zhttp://subtenant.localhostr   rU  )r   r
   resolvesocketAF_INETskipTestr  r   r   r   r   r  r   )r$   r+  addrinfofamiliesrO  r[   r  s          r%   $test_check_origin_invalid_subdomainsz2WebSocketTest.test_check_origin_invalid_subdomains7  sA     !!##
 "++K>>>>11111>))MM>???F&- 9:y)) 	GR#KW$E$E$EFFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	*C00000s   !B<<C C c              #      K   |                      dddg          V }|                     |j        d           |                                V }|                     |d           d S )Nr   badprotor   )r   zsubprotocol=goodproto)r   r   r   r   rA  s      r%   test_subprotocolszWebSocketTest.test_subprotocolsN  s      ??*k)B # 
 
 
 
 	0+>>>OO%%%%566666r'   c              #      K   |                      d          V }|                     |j        d            |                                V }|                     |d           d S )Nr   zsubprotocol=None)r   r8  r   r   r   rA  s      r%   test_subprotocols_not_offeredz+WebSocketTest.test_subprotocols_not_offeredW  sf      ??>2222b-t444OO%%%%011111r'   c              #     K   t                      | _        |                     d          V }|                    d          V  | j                                         |                                V }|                     |d           d S )Nr   r   rq   )r   r   r   r:   setr   r   rA  s      r%   test_open_coroutinez!WebSocketTest.test_open_coroutine^  s      !GG??#45555w'''''OO%%%%d#####r'   c              #      K   t          t          d          5  |                     d          V }|                                V }d d d            n# 1 swxY w Y   |                     |           d S )Nr  r   r   r	   r   r   r  rA  s      r%   test_error_in_openz WebSocketTest.test_error_in_openg  s      w 455 	* 	*'78888B))))C	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	#   .AAAc              #      K   t          t          d          5  |                     d          V }|                                V }d d d            n# 1 swxY w Y   |                     |           d S )Nr  r   rq  rA  s      r%   test_error_in_async_openz&WebSocketTest.test_error_in_async_openn  s      w 455 	* 	*'=>>>>B))))C	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	#rs  c              #      K   |                      d          V }|                                V }|                     |d           d S )Nr   r   rE  rA  s      r%   test_nodelayzWebSocketTest.test_nodelayu  sN      ??:....OO%%%%g&&&&&r'   )*r2   r3   r4   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   r"  r%  r,  r2  r4  r6  r;  r=  r?  rC  rF  rJ  rP  rS  rX  rZ  rg  rj  rl  ro  rr  ru  rw  r   r   s   @r%   r   r      s       6
 6
 6
p' ' '1 1 1 1 1- - -
	- 	- 	-	- 	- 	- , , X,   2 2 X2 3 3 X3 - - X- 3 3 X3 $ $ X$ 1 1 X1
 - - X- / / X/   X   X 0 0 X0   X& % % X% , , X, & & X& ' ' X' ' ' X'
 ( ( X( 0 0 X0 0 0 X0 1 1 X1 1 1 X1 1 1 X1, 7 7 X7 2 2 X2 $ $ X$   X   X ' ' X' ' ' ' 'r'   r   c                   $     e Zd Z fdZd Z xZS )NativeCoroutineOnMessageHandlerc                 H     t                      j        di | d| _        d S r   r   r   s     r%   r&   z*NativeCoroutineOnMessageHandler.initialize}  r   r'   c                    K   | j         dk    r|                     d           | xj         dz  c_         t          j        d           d {V  | xj         dz  c_         |                     |           d S r   r   r?   s     r%   rA   z*NativeCoroutineOnMessageHandler.on_message  s      =1FGGGioo7#####r'   )r2   r3   r4   r&   rA   r   r   s   @r%   ry  ry  |  sG            $ $ $ $ $ $ $r'   ry  c                   *    e Zd Zd Zed             ZdS )WebSocketNativeCoroutineTestc                 0    t          dt          fg          S )N/native)r   ry  r*   s    r%   r   z$WebSocketNativeCoroutineTest.get_app  s    Y(GHIJJJr'   c              #   D  K   |                      d          V }|                    d          V  |                    d          V  |                                V }|                     |d           |                                V }|                     |d           d S )Nr  rH  rI  r   rA  s      r%   test_native_coroutinez2WebSocketNativeCoroutineTest.test_native_coroutine  s      ??9----x(((((x(((((OO%%%%h'''OO%%%%h'''''r'   N)r2   r3   r4   r   r   r  r6   r'   r%   r}  r}    sA        K K K ( ( X( ( (r'   r}  c                   d    e Zd ZdZd Zd Zd Zdededdfd	Ze	d
             Z
e	d             ZdS )CompressionTestMixinzHello world. Testing 123 123c           	           G d dt                     }t          dt          t          |                                           fd|t          |                                           fg          S )Nc                   *    e Zd Zed             Zd ZdS )4CompressionTestMixin.get_app.<locals>.LimitedHandlerc                     dS )N   r6   r*   s    r%   max_message_sizezECompressionTestMixin.get_app.<locals>.LimitedHandler.max_message_size  s    tr'   c                 d    |                      t          t          |                               d S r    )r:   strlenr?   s     r%   rA   z?CompressionTestMixin.get_app.<locals>.LimitedHandler.on_message  s*    ""3s7||#4#455555r'   N)r2   r3   r4   propertyr  rA   r6   r'   r%   LimitedHandlerr    s<          X6 6 6 6 6r'   r  rv   r)   /limited)r   r   r8   r   get_server_compression_options)r$   r  s     r%   r   zCompressionTestMixin.get_app  s    	6 	6 	6 	6 	61 	6 	6 	6  T-P-P-R-RSSS "T-P-P-R-RSSS
 
 	
r'   c                     d S r    r6   r*   s    r%   r  z3CompressionTestMixin.get_server_compression_options      tr'   c                     d S r    r6   r*   s    r%   get_client_compression_optionsz3CompressionTestMixin.get_client_compression_options  r  r'   bytes_in	bytes_outreturnNc                     t                      r    NotImplementedErrorr$   r  r  s      r%   verify_wire_bytesz&CompressionTestMixin.verify_wire_bytes      !###r'   c              #   B  K   |                      d|                                           V }t          d          D ]M}|                    | j                   |                                V }|                     || j                   N|                     |j        j        t          | j                  dz             |                     |j        j
        t          | j                  dz             |                     |j        j        |j        j                   d S )Nrv   r)      )r   r  ranger:   MESSAGEr   r   protocol_message_bytes_outr  _message_bytes_inr  _wire_bytes_in_wire_bytes_outr$   r   ir   s       r%   test_message_sizesz'CompressionTestMixin.test_message_sizes  s     ??)L)L)N)N # 
 
 
 

 q 	5 	5AT\***__....HXt|44447T\9J9JQ9NOOO6DL8I8IA8MNNNr{92;;VWWWWWr'   c              #   b  K   |                      d|                                           V }|                    d           |                                V }|                     |d           |                    d           |                                V }|                     |           d S )Nr  r)   ڀaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa128   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r  r:   r   r   r  r   s      r%   test_size_limitz$CompressionTestMixin.test_size_limit  s      ??D,O,O,Q,Q # 
 
 
 
 	###****5))) 	$$$****(#####r'   )r2   r3   r4   r  r   r  r  intr  r   r  r  r6   r'   r%   r  r    s        ,G
 
 
0    $# $# $$ $ $ $ $ X X XX $ $ X$ $ $r'   r  c                       e Zd ZdZd ZdS )UncompressedTestMixinzESpecialization of CompressionTestMixin when we expect no compression.c                     |                      |dt          | j                  dz   z             |                      |dt          | j                  dz   z             d S )Nr        )r   r  r  r  s      r%   r  z'UncompressedTestMixin.verify_wire_bytes  s\    AT\):):Q)>$?@@@1DL(9(9A(=#>?????r'   N)r2   r3   r4   r5   r  r6   r'   r%   r  r    s.        OO@ @ @ @ @r'   r  c                       e Zd ZdS )NoCompressionTestN)r2   r3   r4   r6   r'   r%   r  r    s        Dr'   r  c                       e Zd Zd ZdS )ServerOnlyCompressionTestc                     i S r    r6   r*   s    r%   r  z8ServerOnlyCompressionTest.get_server_compression_options      	r'   N)r2   r3   r4   r  r6   r'   r%   r  r    #            r'   r  c                       e Zd Zd ZdS )ClientOnlyCompressionTestc                     i S r    r6   r*   s    r%   r  z8ClientOnlyCompressionTest.get_client_compression_options  r  r'   N)r2   r3   r4   r  r6   r'   r%   r  r    r  r'   r  c                        e Zd Zd Zd Zd ZdS )DefaultCompressionTestc                     i S r    r6   r*   s    r%   r  z5DefaultCompressionTest.get_server_compression_options  r  r'   c                     i S r    r6   r*   s    r%   r  z5DefaultCompressionTest.get_client_compression_options  r  r'   c                     |                      |dt          | j                  dz   z             |                      |dt          | j                  dz   z             |                     ||dz              d S )Nr  r  r     )
assertLessr  r  r   r  s      r%   r  z(DefaultCompressionTest.verify_wire_bytes  sr    	1DL(9(9A(=#>???!s4<'8'81'<"=>>>HrM22222r'   N)r2   r3   r4   r  r  r  r6   r'   r%   r  r    sA            3 3 3 3 3r'   r  c                   8    e Zd ZdededefdZdej        fdZdS )MaskFunctionMixinmaskdatar  c                     t                      r    r  r$   r  r  s      r%   r  zMaskFunctionMixin.mask  r  r'   r$   c                    |                      |                     dd          d           |                      |                     dd          d           |                      |                     dd          d           |                      |                     dd          d	           |                      |                     d
d          d           |                      |                     dd          d           d S )Ns   abcdr'      b   s   54321s   TVPVPs   ZXCVs   98765432s   c`t`olpds    s   s   s   s    s   )r   r  r*   s    r%   	test_maskzMaskFunctionMixin.test_mask  s    7C00#6667D117;;;7H55x@@@7K88+FFF 	II)+FGG'	
 	
 	
 	II)+FGG'	
 	
 	
 	
 	
r'   N)r2   r3   r4   r<   r  typingAnyr  r6   r'   r%   r  r    sZ        $ $e $ $ $ $ $

 
 
 
 
 
 
r'   r  c                       e Zd Zd ZdS )PythonMaskFunctionTestc                 "    t          ||          S r    r   r  s      r%   r  zPythonMaskFunctionTest.mask  s    %dD111r'   Nr2   r3   r4   r  r6   r'   r%   r  r    s#        2 2 2 2 2r'   r  z#tornado.speedups module not presentc                       e Zd Zd ZdS )CythonMaskFunctionTestc                 ,    t          j        ||          S r    )r   websocket_maskr  s      r%   r  zCythonMaskFunctionTest.mask$  s    &tT222r'   Nr  r6   r'   r%   r  r  "  s#        3 3 3 3 3r'   r  c                   *    e Zd Zd Zed             ZdS )ServerPeriodicPingTestc                 R     G d dt                     }t          d|fgdd          S )Nc                       e Zd Zd ZdS )3ServerPeriodicPingTest.get_app.<locals>.PingHandlerc                 0    |                      d           d S )Ngot pongr   r$   r  s     r%   on_pongz;ServerPeriodicPingTest.get_app.<locals>.PingHandler.on_pong+      "":.....r'   N)r2   r3   r4   r  r6   r'   r%   PingHandlerr  *  #        / / / / /r'   r  /r   r   )websocket_ping_intervalwebsocket_ping_timeoutr   r   r$   r  s     r%   r   zServerPeriodicPingTest.get_app)  sW    	/ 	/ 	/ 	/ 	/. 	/ 	/ 	/ ; $(#$
 
 
 	
r'   c              #      K   |                      d          V }t          d          D ].}|                                V }|                     |d           /d S )Nr  r  r  )r   r  r   r   r  s       r%   test_server_pingz'ServerPeriodicPingTest.test_server_ping4  sj      ??3''''q 	3 	3A__....HXz2222	3 	3r'   N)r2   r3   r4   r   r   r  r6   r'   r%   r  r  (  s>        	
 	
 	
 3 3 X3 3 3r'   r  c                   *    e Zd Zd Zed             ZdS )ClientPeriodicPingTestc                 L     G d dt                     }t          d|fg          S )Nc                       e Zd Zd ZdS )3ClientPeriodicPingTest.get_app.<locals>.PingHandlerc                 0    |                      d           d S )Ngot pingr   r  s     r%   on_pingz;ClientPeriodicPingTest.get_app.<locals>.PingHandler.on_ping@  r  r'   Nr2   r3   r4   r  r6   r'   r%   r  r  ?  r  r'   r  r  r  r  s     r%   r   zClientPeriodicPingTest.get_app>  sE    	/ 	/ 	/ 	/ 	/. 	/ 	/ 	/ S+./000r'   c              #      K   |                      ddd          V }t          d          D ].}|                                V }|                     |d           /|                                 d S )Nr  r   r   ping_intervalping_timeoutr  r  )r   r  r   r   r}   r  s       r%   test_client_pingz'ClientPeriodicPingTest.test_client_pingE  sw      ??3d?KKKKq 	3 	3A__....HXz2222





r'   N)r2   r3   r4   r   r   r  r6   r'   r%   r  r  =  s>        1 1 1   X  r'   r  c                   @    e Zd Zd Zed             Zed             ZdS )ServerPingTimeoutTestc                 h    g | _         |  G fddt                    }t          d|fg          }|S )Nc                   $     e Zd Zd fd	Z xZS )2ServerPingTimeoutTest.get_app.<locals>.PingHandlerNc                     j         | _         | j                             |            t                                          ||          S )Nr!   )handlersr   r   r&   )r$   r"   r#   r   r   s      r%   r&   z=ServerPingTimeoutTest.get_app.<locals>.PingHandler.initializeT  sI     $$$T***ww))!-CV *   r'   r1   )r2   r3   r4   r&   r   )r   r   s   @r%   r  r  S  sC                  r'   r  r  )r  r   r   )r$   r  appr   s      @r%   r   zServerPingTimeoutTest.get_appO  s`    02	 	 	 	 	 	 	. 	 	 	 C-.//
r'   c                 J    d } || j         j                  | j         _        dS )z&Suppress the client's "pong" response.c                 0     dt           dt          f fd}|S )Noppcoder  c                 ,    | dk    rd S  | |          S )N
   r6   )r  r  fcns     r%   _innerzDServerPingTimeoutTest.suppress_pong.<locals>.wrapper.<locals>._innerd  s#    c>>Fs7D)))r'   )r  r<   )r  r	  s   ` r%   wrapperz4ServerPingTimeoutTest.suppress_pong.<locals>.wrapperc  s6    * *5 * * * * * * Mr'   N)r  _handle_message)r   r
  s     r%   suppress_pongz#ServerPingTimeoutTest.suppress_pong_  s2    	 	 	 '.gbk.I&J&J###r'   c              #   >  K   d}|                      d||dz            V }| j        d         }t          d          D ]Z}t          j        d          V  |                     |j                   |                     |j                   |j        j        J [| 	                    |           t          j        |dz            V  | 
                    |j        d           | 
                    |j        d	           | 
                    |j        j        d           d S )
Ng?r     r  r      g      ?i  zping timed out)r   r  r  r   r   r  r.   r/   r  r  r   )r$   intervalr   handler_s        r%   test_client_ping_timeoutz.ServerPingTimeoutTest.test_client_ping_timeouto  sA      ??xhl # 
 
 
 

 -"q 		2 		2A)C..    g0111g2333 ;)1111 	2 i3''''' 	+T222-/?@@@ 	/66666r'   N)r2   r3   r4   r   staticmethodr  r   r  r6   r'   r%   r  r  N  s\            K K \K  7  7 X 7  7  7r'   r  c                   *    e Zd Zd Zed             ZdS )ManualPingTestc                 L     G d dt                     }t          d|fg          S )Nc                       e Zd Zd ZdS )+ManualPingTest.get_app.<locals>.PingHandlerc                 Z    |                      |t          |t                               d S )Nr  )r:   r;   r<   r  s     r%   r  z3ManualPingTest.get_app.<locals>.PingHandler.on_ping  s+    ""4
40G0G"HHHHHr'   Nr  r6   r'   r%   r  r    s(        I I I I Ir'   r  r  r  r  s     r%   r   zManualPingTest.get_app  sM    	I 	I 	I 	I 	I. 	I 	I 	I S+./000r'   c              #   ~  K   |                      d          V }|                     t          |j        d           |                    d           |                                V }|                     |d           |                    d           |                                V }|                     |d           d S )Nr  ~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   s   hellos   binary hello)r   r  
ValueErrorpingr   r   )r$   r   resps      r%   test_manual_pingzManualPingTest.test_manual_ping  s      ??3''''*bgy999
__&&&&x(((
   __&&&&/////r'   N)r2   r3   r4   r   r   r   r6   r'   r%   r  r    s>        1 1 1 0 0 X0 0 0r'   r  c                   *    e Zd Zd Zed             ZdS )MaxMessageSizeTestc                 4    t          dt          fgd          S )Nr  r  )websocket_max_message_size)r   r8   r*   s    r%   r   zMaxMessageSizeTest.get_app  s    S+./DQQQQr'   c              #     K   |                      d          V }d}|                    |           |                                V }|                     ||           |                    |dz              |                                V }|                     |d            |                     |j        d           |                     |j        d           d S )Nr     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabi  zmessage too big)r   r:   r   r   r8  r.   r/   )r$   r   r9  r  s       r%   test_large_messagez%MaxMessageSizeTest.test_large_message  s      ??3'''' 
__&&&&s### 	s###__&&&&dD!!!---*;<<<<<r'   N)r2   r3   r4   r   r   r(  r6   r'   r%   r"  r"    sA        R R R = = X= = =r'   r"  )Sr=   r/  rO   rb  	tracebackr  unittesttornado.concurrentr   tornador   tornado.httpclientr   r   tornado.locksr   tornado.logr   r	   tornado.netutilr
   tornado.simple_httpclientr   tornado.templater   tornado.test.utilr   r   tornado.testingr   r   r   r   tornado.webr   r   tornado.websockettornado.utilr   ImportError	print_excr   r   r   r   r   r   r8   rD   rI   rb   ro   rt   rx   r   r   r   r   r   r   r   r   r   r   r   ry  r}  r  r  r  r  r  r  TestCaser  r  skipIfr  r  r  r  r  r"  r6   r'   r%   <module>r<     s                   % % % % % %       5 5 5 5 5 5 5 5       ( ( ( ( ( ( ( ( $ $ $ $ $ $ ; ; ; ; ; ; ' ' ' ' ' ' D D D D D D D D T T T T T T T T T T T T 3 3 3 3 3 3 3 3	
3333333 
 
 

 I	
                     HHHO O O O O+ O O O(    &       2   
C C C C C( C C C,& & & & &, & & &    .   
    n   
$ $ $ $ $- $ $ $$ $ $ $ $. $ $ $         *      
$ $ $ $ $ 4 $ $ $P P P P P/ P P P
I I I I I- I I I&! ! ! ! !/ ! ! !$         -      
         2      $ $ $ $ $) $ $ $    -   &M' M' M' M' M') M' M' M'`$ $ $ $ $&: $ $ $( ( ( ( (#8 ( ( (  @$ @$ @$ @$ @$0 @$ @$ @$F @ @ @ @ @0 @ @ @	 	 	 	 	- 	 	 	
     5   
     5   
3 3 3 3 31 3 3 3 
 
 
 
 
) 
 
 
.2 2 2 2 2. 2 2 2
 T!#HII3 3 3 3 3. 3 3 JI3
3 3 3 3 32 3 3 3*    2   "B7 B7 B7 B7 B71 B7 B7 B7J0 0 0 0 0* 0 0 00= = = = =. = = = = =s   .
A9 9BB& &B0/B0