
    ^h                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJr  S S
KJrJr  S SKJrJrJ r J!r!  S SK"J#r#J$r$   S SK%r
S SK&J'r'  S SK%J*r*J+r+J,r,J-r-   S SK
J.r.   " S S\*5      r/ " S S\/5      r0 " S S\/5      r1 " S S\/5      r2 " S S\/5      r3 " S S\$5      r4 " S S\$5      r5 " S S\/5      r6 " S  S!\/5      r7 " S" S#\/5      r8 " S$ S%\/5      r9 " S& S'\/5      r: " S( S)\/5      r; " S* S+\/5      r< " S, S-\/5      r= " S. S/\/5      r> " S0 S1\/5      r? " S2 S3\5      r@ " S4 S5\@5      rA " S6 S7\/5      rB " S8 S9\@5      rC\ " S: S;\@5      5       rD\ " S< S=\D5      5       rE " S> S?\E5      rF " S@ SA\E5      rG " SB SC\E5      rH " SD SE\D5      rI\ " SF SG\R                  5      5       rK " SH SI\K5      rL\R                  " \.SL SJ5       " SK SL\K5      5       rN " SM SN\@5      rO " SO SP\@5      rP " SQ SR\@5      rQ " SS ST\R                  5      rR " SU SV\@5      rS " SW SX\@5      rTg! \( a    \RR                  " 5         e f = f! \( a    Sr. GNf = f)Y    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                   .    \ rS rSrSrSS jrS rS rSrg)	TestWebSocketHandler.   zBase 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                     Xl         X l        g Nclose_futurecompression_options)selfr#   r$   s      U/home/james-whalen/.local/lib/python3.13/site-packages/tornado/test/websocket_test.py
initializeTestWebSocketHandler.initialize6   s    (#6     c                     U R                   $ r!   r$   r%   s    r&   get_compression_options,TestWebSocketHandler.get_compression_options:   s    '''r)   c                     U R                   b2  U R                   R                  U R                  U R                  45        g g r!   )r#   
set_result
close_codeclose_reasonr,   s    r&   on_closeTestWebSocketHandler.on_close=   s6    ((($//4;L;L)MN )r)   r"   NN)	__name__
__module____qualname____firstlineno____doc__r'   r-   r3   __static_attributes__ r)   r&   r   r   .   s    7(Or)   r   c                   8    \ rS rSr\R
                  S 5       rSrg)EchoHandlerB   c              #      #     U R                  U[        U[        5      5      v   g ! [        R                   a     g [
         a     g f = f7fr!   )write_message
isinstancebytesasyncioCancelledErrorr   r%   messages     r&   
on_messageEchoHandler.on_messageC   sF     	$$Wj%.HII%% 	# 		s/   A"' AA	A	A	AA		Ar<   N)r6   r7   r8   r9   r   	coroutinerH   r;   r<   r)   r&   r>   r>   B   s    ]] r)   r>   c                       \ rS rSrS rSrg)ErrorInOnMessageHandlerM   c                     SS-    g )N   r   r<   rF   s     r&   rH   "ErrorInOnMessageHandler.on_messageN   s	    	Ar)   r<   Nr6   r7   r8   r9   rH   r;   r<   r)   r&   rL   rL   M   s    r)   rL   c                       \ rS rSrS rSrg)HeaderHandlerR   c                 8   [         R                  " U R                  S5      [         R                  " U R                  S5      [         R                  " U R                  SS5      [         R                  " U R
                  SS5      [         R                  " U R                  S5      U R                  U R                  /nU H  n U" 5         [        S5      e   U R                  U R                  R                  R                  SS5      5        g ! [         a     M[  f = f)	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RuntimeErrorrA   requestheadersget)r%   methods_to_testmethods      r&   openHeaderHandler.openS   s    djj*@Admm-IJdoox<doo{FCdoos3JJKK
 &F  @AA & 	4<<//33HbAB   s   D
DDr<   Nr6   r7   r8   r9   rj   r;   r<   r)   r&   rS   rS   R   s    Cr)   rS   c                        \ rS rSrS rS rSrg)HeaderEchoHandlerh   c                 (    U R                  SS5        g )NX-Extra-Response-HeaderExtra-Response-Value)r^   r,   s    r&   set_default_headers%HeaderEchoHandler.set_default_headersi   s    13IJr)   c                     U R                   R                  R                  5        H<  u  pUR                  5       R	                  S5      (       d  M+  U R                  X5        M>     g )Nzx-test)re   rf   get_alllower
startswithr^   )r%   kvs      r&   prepareHeaderEchoHandler.preparel   sD    LL((002DAwwy##H--% 3r)   r<   N)r6   r7   r8   r9   rs   r{   r;   r<   r)   r&   rn   rn   h   s    K&r)   rn   c                       \ rS rSrS rSrg)NonWebSocketHandlerr   c                 &    U R                  S5        g )Nok)r\   r,   s    r&   rg   NonWebSocketHandler.gets   s    

4r)   r<   Nr6   r7   r8   r9   rg   r;   r<   r)   r&   r~   r~   r   s    r)   r~   c                       \ rS rSrS rSrg)RedirectHandlerw   c                 &    U R                  S5        g )N/echo)r]   r,   s    r&   rg   RedirectHandler.getx   s    gr)   r<   Nr   r<   r)   r&   r   r   w   s    r)   r   c                       \ rS rSrS rSrg)CloseReasonHandler|   c                 6    SU l         U R                  SS5        g )NF  goodbye)on_close_calledcloser,   s    r&   rj   CloseReasonHandler.open}   s    $

4#r)   )r   Nrl   r<   r)   r&   r   r   |       $r)   r   c                   >    \ rS rSr\R
                  S 5       rS rSrg)AsyncPrepareHandler   c              #   0   #    [         R                  v   g 7fr!   )r   momentr,   s    r&   r{   AsyncPrepareHandler.prepare   s     jjs   c                 &    U R                  U5        g r!   rA   rF   s     r&   rH   AsyncPrepareHandler.on_message   s    7#r)   r<   N)	r6   r7   r8   r9   r   rJ   r{   rH   r;   r<   r)   r&   r   r      s    ]] $r)   r   c                       \ rS rSrS rSrg)PathArgsHandler   c                 &    U R                  U5        g r!   r   )r%   args     r&   rj   PathArgsHandler.open   s    3r)   r<   Nrl   r<   r)   r&   r   r           r)   r   c                   L   ^  \ rS rSrU 4S jr\R                  S 5       rSrU =r	$ )CoroutineOnMessageHandler   c                 4   > [         TU ]  " S0 UD6  SU l        g Nr   r<   superr'   sleepingr%   kwargs	__class__s     r&   r'   $CoroutineOnMessageHandler.initialize       $V$r)   c              #      #    U R                   S:  a  U R                  S5        U =R                   S-  sl         [        R                  " S5      v   U =R                   S-  sl         U R                  U5        g 7fNr   z%another coroutine is already sleepingrO   {Gz?r   rA   r   sleeprF   s     r&   rH   $CoroutineOnMessageHandler.on_message   sX     ==1FGiio7#s   A6A8r   )
r6   r7   r8   r9   r'   r   rJ   rH   r;   __classcell__r   s   @r&   r   r      s      	]]$ $r)   r   c                       \ rS rSrS rSrg)RenderMessageHandler   c                 B    U R                  U R                  SUS95        g )Nmessage.html)rG   )rA   render_stringrF   s     r&   rH   RenderMessageHandler.on_message   s     4--ng-NOr)   r<   NrQ   r<   r)   r&   r   r      s    Pr)   r   c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )SubprotocolHandler   c                 4   > [         TU ]  " S0 UD6  SU l        g NFr<   )r   r'   select_subprotocol_calledr   s     r&   r'   SubprotocolHandler.initialize   s    $V$).&r)   c                 X    U R                   (       a  [        S5      eSU l         SU;   a  gg )Nzselect_subprotocol called twiceT	goodproto)r   rc   )r%   subprotocolss     r&   select_subprotocol%SubprotocolHandler.select_subprotocol   s-    ))=>>)-&,&r)   c                 x    U R                   (       d  [        S5      eU R                  SU R                  -  5        g )Nzselect_subprotocol not calledzsubprotocol=%s)r   rc   rA   selected_subprotocolr,   s    r&   rj   SubprotocolHandler.open   s1    --;<<+d.G.GGHr)   )r   )	r6   r7   r8   r9   r'   r   rj   r;   r   r   s   @r&   r   r      s    /I Ir)   r   c                   R   ^  \ rS rSrU 4S jr\R                  S 5       rS rSr	U =r
$ )OpenCoroutineHandler   c                 @   > [         TU ]  " S0 UD6  Xl        SU l        g r   )r   r'   testopen_finished)r%   r   r   r   s      r&   r'   OpenCoroutineHandler.initialize   s     $V$	"r)   c              #      #    U R                   R                  R                  5       v   [        R                  " S5      v   SU l        g 7f)Nr   T)r   message_sentwaitr   r   r   r,   s    r&   rj   OpenCoroutineHandler.open   s5     ii$$))++ii!s   AA	c                 ^    U R                   (       d  [        S5      eU R                  S5        g )Nz&on_message called before open finishedr   )r   rc   rA   rF   s     r&   rH   OpenCoroutineHandler.on_message   s%    !!DEE4 r)   )r   r   )r6   r7   r8   r9   r'   r   rJ   rj   rH   r;   r   r   s   @r&   r   r      s*    #
 	]]" "
! !r)   r   c                       \ rS rSrS rSrg)ErrorInOpenHandler   c                     [        S5      e)Nboom)rc   r,   s    r&   rj   ErrorInOpenHandler.open   s    r)   r<   Nrl   r<   r)   r&   r   r      r   r)   r   c                       \ rS rSrS rSrg)ErrorInAsyncOpenHandler   c                 `   #    [         R                  " S5      I S h  vN   [        S5      e N7f)Nr   r   )rD   r   rc   r,   s    r&   rj   ErrorInAsyncOpenHandler.open   s'     mmA 	s   .,.r<   Nrl   r<   r)   r&   r   r      s     r)   r   c                       \ rS rSrS rSrg)NoDelayHandler   c                 H    U R                  S5        U R                  S5        g )NThello)set_nodelayrA   r,   s    r&   rj   NoDelayHandler.open   s    7#r)   r<   Nrl   r<   r)   r&   r   r      r   r)   r   c                   X   ^  \ rS rSrU 4S jrU 4S jr\R                  S 5       rSr	U =r
$ )WebSocketBaseTestCase   c                 0   > [         TU ]  5         / U l        g r!   )r   setUpconns_to_closer%   r   s    r&   r   WebSocketBaseTestCase.setUp   s     r)   c                 h   > U R                    H  nUR                  5         M     [        TU ]  5         g r!   )r   r   r   tearDown)r%   connr   s     r&   r   WebSocketBaseTestCase.tearDown   s'    ''DJJL (r)   c              +      #    [        SU R                  5       U4-  40 UD6v nU R                  R                  U5        [        R
                  " U5      e7f)Nzws://127.0.0.1:%d%s)r   get_http_portr   appendr   Return)r%   pathr   wss       r&   
ws_connect WebSocketBaseTestCase.ws_connect   sV     $!T%7%7%94$@@
DJ
 
 	""2&jjns   AA)r   )r6   r7   r8   r9   r   r   r   rJ   r  r;   r   r   s   @r&   r   r      s%    !
 	]] r)   r   c                   ,  ^  \ rS rSrS rS rU 4S jrS rS rS r	\
S 5       rS	 r\
S
 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r \
S 5       r!\
S 5       r"\
S  5       r#\
S! 5       r$\
S" 5       r%\
S# 5       r&\
S$ 5       r'\
S% 5       r(\
S& 5       r)S'r*U =r+$ )(WebSocketTest   c                    [        5       U l        [        S[        [	        U R                  S94S[
        4S[        4S[        [	        U R                  S94S[        [	        U R                  S94S[        [	        U R                  S94S[        [	        U R                  S94S	[        [	        U R                  S94S
[        [	        U R                  S94S[        [	        U R                  S94S[        [	        U R                  S94S[        [	        U R                  S94S[         [	        U R                  U S94S["        4S[$        4S[&        4/[)        SS05      S9$ )Nr   )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   r>   dictr~   r   rS   rn   r   rL   r   r   r   r   r   r   r   r   r   r   r,   s    r&   get_appWebSocketTest.get_app   sv   "H+t9J9J'KL/0o.M4T=N=N+OP"%d&7&78 $&d&7&78 ++d&7&78 %'d&7&78 &#d&7&78 !-d&7&78
 0$DDUDU2VW"&d&7&78 &(d&7&7dC
 "#56')@A^,a1d '8N'OPg4
 4	
r)   c                     [        5       $ r!   r   r,   s    r&   get_http_clientWebSocketTest.get_http_client&  s    $&&r)   c                 ^   > [         TU ]  5         [        R                  R	                  5         g r!   )r   r   r   _template_loadersclearr   s    r&   r   WebSocketTest.tearDown*  s     ((..0r)   c                 ^    U R                  S5      nU R                  UR                  S5        g )Nr     fetchassertEqualcoder%   responses     r&   test_http_requestWebSocketTest.test_http_request.  s$    ::g&,r)   c                 d    U R                  SSSSS.S9nU R                  UR                  S5        g )Nr   Upgrade	WebSocket13
Connectionr)  zSec-WebSocket-Versionrf   r  r   r$  s     r&   test_missing_websocket_key(WebSocketTest.test_missing_websocket_key3  <    ::'&)-  
 	,r)   c                 d    U R                  SSSSS.S9nU R                  UR                  S5        g )Nr   r)  r*  12r,  r.  i  r   r$  s     r&   test_bad_websocket_version(WebSocketTest.test_bad_websocket_version>  r1  r)   c              #      #    U R                  S5      v nUR                  S5      v   UR                  5       v nU R                  US5        g 7f)Nr   r   r  rA   read_messager"  r%   r   r%  s      r&   test_websocket_gen WebSocketTest.test_websocket_genI  sF     ??7++w''**7+s   AAc                 
  ^  [        5          [        ST R                  5       -  T R                  S9  S S S 5        T R	                  5       R                  5       nUR                  S5        UR                  T R                  5        T R	                  5       R                  5       nT R                  US5        T R                  R                  U 4S j5        UR                  5         T R	                  5         g ! , (       d  f       N= f)Nws://127.0.0.1:%d/echo)callbackr   c                 $   > TR                  5       $ r!   )stop)fr%   s    r&   <lambda>8WebSocketTest.test_websocket_callbacks.<locals>.<lambda>Z  s    diikr)   )r   r   r   r@  r   resultrA   r8  r"  r#   add_done_callbackr   r9  s   `  r&   test_websocket_callbacks&WebSocketTest.test_websocket_callbacksP  s    !(4+=+=+??$)) " YY[!
!
		"99;%%'7+++,AB

		 "!s   &C44
Dc              #      #    U R                  S5      v nUR                  SSS9  UR                  5       v nU R                  US5        g 7f)Nr   s   hello Tbinaryr7  r9  s      r&   test_binary_message!WebSocketTest.test_binary_message^  sH     ??7++
t4**=1s   A	Ac              #      #    U R                  S5      v nUR                  S5        UR                  5       v nU R                  US5        g 7fNr   u   hello ér7  r9  s      r&   test_unicode_message"WebSocketTest.test_unicode_messagee  sC     ??7++
(**>2   A
Ac              #      #    U R                  S5      v nUR                  5         U R                  [        5         UR	                  S5        S S S 5        g ! , (       d  f       g = f7frN  )r  r   assertRaisesr   rA   r%   r   s     r&   )test_error_in_closed_client_write_message7WebSocketTest.test_error_in_closed_client_write_messagel  sG     ??7++

34^, 544s   9A'A	A'
A$ A'c              #      #    U R                  S5      v nUR                  S5        UR                  5       v nU R                  US5        g 7f)Nr  r   z<b>hello</b>r7  r9  s      r&   test_render_message!WebSocketTest.test_render_messages  sC     ??9--
!**>2rQ  c              #      #    U R                  S5      v nUR                  S5        [        [        S5         UR	                  5       v nS S S 5        U R                  W5        g ! , (       d  f       N = f7f)Nr
  r   Uncaught exception)r  rA   r   r	   r8  assertIsNoner9  s      r&   test_error_in_on_message&WebSocketTest.test_error_in_on_messagez  sZ     ??#9::
!w 45__..H 6(# 65s   5A5A$
A5$
A2.A5c              #      #    U R                  [        5       nU R                  S5      v   S S S 5        U R                  WR                  R
                  S5        g ! , (       d  f       N5= f7f)Nz	/notfoundi  )rS  r   r  r"  	exceptionr#  )r%   cms     r&   test_websocket_http_fail&WebSocketTest.test_websocket_http_fail  sK     y)R//+.. ***C0 *)s   A,A/A,
A)%A,c              #      #    U R                  [        5         U R                  S5      v   S S S 5        g ! , (       d  f       g = f7f)Nr  )rS  r   r  r,   s    r&   test_websocket_http_success)WebSocketTest.test_websocket_http_success  s-     ~.//),, /..   A5	A
AAc              #      #    U R                  [        5         U R                  S5      v   S S S 5        g ! , (       d  f       g = f7f)Nr  )rS  r   r  r,   s    r&   test_websocket_http_redirect*WebSocketTest.test_websocket_http_redirect  s-     y)//+.. *))rg  c              #     #    [        5       u  pUR                  5         U R                  [        5         [	        [
        SSS9   [        SU-  SS9v   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)Nz.*F)requiredzws://127.0.0.1:%d/i  )connect_timeout)r   r   rS  IOErrorr   r   r   )r%   sockports      r&   test_websocket_network_fail)WebSocketTest.test_websocket_network_fail  se     %'


w'7D59'(4/  : ('99 ('s4   2BA6A%A6	B%
A3	/A66
B Bc              #     #    [         R                  " [        SU R                  5       -  5      v 5       nUR	                  S5        UR	                  S5        UR
                  R                  5         S S S 5        g ! , (       d  f       g = f7f)Nr=  r   world)
contextlibclosingr   r   rA   streamr   rT  s     r&   "test_websocket_close_buffered_data0WebSocketTest.test_websocket_close_buffered_data  si     $%=@R@R@T%TUU
W%W%IIOO
 
 
s   3B=A;2	B;
B	Bc           	   #      #    [         R                  " [        [        SU R	                  5       -  SS0S95      v 5       nUR                  5       v nU R                  US5        S S S 5        g ! , (       d  f       g = f7f)Nzws://127.0.0.1:%d/headerrV   r   r.  )ru  rv  r   r   r   r8  r"  r9  s      r&   test_websocket_headers$WebSocketTest.test_websocket_headers  sv      '2T5G5G5II!)7 3 	
 __..HXw/	
 	
 	
s   =A>%A-$	A>-
A;7A>c           	   #   d  #    [         R                  " [        [        SU R	                  5       -  SS0S95      v 5       nU R                  UR                  R                  S5      S5        U R                  UR                  R                  S5      S5        S S S 5        g ! , (       d  f       g = f7f)Nzws://127.0.0.1:%d/header_echozX-Test-Hellor   r.  rq   rr   )ru  rv  r   r   r   r"  rf   rg   rT  s     r&   test_websocket_header_echo(WebSocketTest.test_websocket_header_echo  s     
 '7$:L:L:NN!/ 9 	
 RZZ^^N;WE

89;Q	
 	
 	
s   =B0AB	B0
B-)B0c              #   .  #    U R                  S5      v nUR                  5       v nU R                  US 5        U R                  UR                  S5        U R                  UR
                  S5        U R                  v u  p4U R                  US5        g 7f)Nr	  r   r   )r  r8  assertIsr"  r1   r2   r#   )r%   r   msgr#  reasons        r&   test_server_close_reason&WebSocketTest.test_server_close_reason  s}     ???33OO%%c4 -)4!... 	t$s   BBc              #      #    U R                  S5      v nUR                  SS5        U R                  v u  p#U R                  US5        U R                  US5        g 7f)Nr   r   r   )r  r   r#   r"  )r%   r   r#  r  s       r&   test_client_close_reason&WebSocketTest.test_client_close_reason  sT     ??7++
y!!...t$+   AAc              #      #    U R                  S5      v nUR                  5       v nU R                  US 5        U R                  [        5         UR                  S5        S S S 5        g ! , (       d  f       g = f7f)Nr	  r   )r  r8  r  rS  r   rA   )r%   r   r  s      r&   test_write_after_close$WebSocketTest.test_write_after_close  s[     ???33OO%%c4 34W% 544s   AA;A*!	A;*
A84A;c              #      #    U R                  S5      v nUR                  S5        UR                  5       v nU R                  US5        g 7f)Nr  r   r7  r%   r   ress      r&   test_async_prepare WebSocketTest.test_async_prepare  sF      ??#344
!OO%%g&rQ  c              #   z   #    U R                  S5      v nUR                  5       v nU R                  US5        g 7f)Nz/path_args/hellor   r  r8  r"  r  s      r&   test_path_argsWebSocketTest.test_path_args  s6     ??#566OO%%g&   9;c              #     #    U R                  S5      v nUR                  S5      v   UR                  S5      v   UR                  5       v nU R                  US5        UR                  5       v nU R                  US5        g 7f)Nr  hello1hello2r7  r  s      r&   test_coroutineWebSocketTest.test_coroutine  sv     ??<00x((x((OO%%h'OO%%h'   BBc           	   #   2  #    U R                  5       nSU-  nSSU-  0n[        R                  " [        [	        X#S95      v 5       nUR                  S5        UR                  5       v nU R                  US5        S S S 5        g ! , (       d  f       g = f7f)Nr=  Originzhttp://127.0.0.1:%dr.  r   r   ru  rv  r   r   rA   r8  r"  r%   rp  urlrf   r   r%  s         r&   test_check_origin_valid_no_path-WebSocketTest.test_check_origin_valid_no_path  s     !!#&-2T9:$[%FGG
W%__..HXw/
 
 
   AB6B=	B
BBc           	   #   2  #    U R                  5       nSU-  nSSU-  0n[        R                  " [        [	        X#S95      v 5       nUR                  S5        UR                  5       v nU R                  US5        S S S 5        g ! , (       d  f       g = f7f)Nr=  r  zhttp://127.0.0.1:%d/somethingr.  r   r  r  s         r&   !test_check_origin_valid_with_path/WebSocketTest.test_check_origin_valid_with_path  s     !!#&-<tCD$[%FGG
W%__..HXw/
 
 
r  c              #     #    U R                  5       nSU-  nSSU-  0nU R                  [        5       n[        [	        X#S95      v   S S S 5        U R                  WR                  R                  S5        g ! , (       d  f       N5= f7f)Nr=  r  z127.0.0.1:%dr.    r   rS  r   r   r   r"  r`  r#  r%   rp  r  rf   ra  s        r&   %test_check_origin_invalid_partial_url3WebSocketTest.test_check_origin_invalid_partial_url  ss     !!#&-^d23y)R#K$EFF ***C0 *)s   2B	A8	/B	8
BB	c              #     #    U R                  5       nSU-  nSS0nU R                  [        5       n[        [	        X#S95      v   S S S 5        U R                  WR                  R                  S5        g ! , (       d  f       N5= f7f)Nr=  r  zhttp://somewhereelse.comr.  r  r  r  s        r&   test_check_origin_invalid'WebSocketTest.test_check_origin_invalid*  ss     !!#&- 78y)R#K$EFF * 	**C0 *)s   /BA5/B5
B?Bc              #     #    U R                  5       n[        5       R                  SU5      v nU Vs1 s H  o3S   iM	     nn[        R                  U;  a  U R                  S5        g SU-  nSS0nU R                  [        5       n[        [        XVS95      v   S S S 5        U R                  WR                  R                  S5        g s  snf ! , (       d  f       N:= f7f)	N	localhostr   z"localhost does not resolve to ipv4zws://localhost:%d/echor  zhttp://subtenant.localhostr.  r  )r   r
   resolvesocketAF_INETskipTestrS  r   r   r   r"  r`  r#  )r%   rp  addrinfoaddrfamiliesr  rf   ra  s           r&   $test_check_origin_invalid_subdomains2WebSocketTest.test_check_origin_invalid_subdomains8  s     !!#
 "++K>>(01G1>>)MM>?&- 9:y)R#K$EFF * 	**C0 2 *)s)   1C!CAC!C4C!
CC!c              #      #    U R                  SSS/S9v nU R                  UR                  S5        UR                  5       v nU R                  US5        g 7f)Nr  badprotor   )r   zsubprotocol=goodproto)r  r"  r   r8  r  s      r&   test_subprotocolsWebSocketTest.test_subprotocolsO  s_     ??*k)B # 
 
 	00+>OO%%56s   AAc              #      #    U R                  S5      v nU R                  UR                  S 5        UR                  5       v nU R	                  US5        g 7f)Nr  zsubprotocol=None)r  r  r   r8  r"  r  s      r&   test_subprotocols_not_offered+WebSocketTest.test_subprotocols_not_offeredX  sJ     ??>22b--t4OO%%01s   AAc              #      #    [        5       U l        U R                  S5      v nUR                  S5      v   U R                  R	                  5         UR                  5       v nU R                  US5        g 7f)Nr  r   r   )r   r   r  rA   setr8  r"  r  s      r&   test_open_coroutine!WebSocketTest.test_open_coroutine_  sc     !G??#455w''OO%%d#s   A5A7c              #      #    [        [        S5         U R                  S5      v nUR                  5       v nS S S 5        U R	                  W5        g ! , (       d  f       N = f7f)Nr[  r  r   r	   r  r8  r\  r  s      r&   test_error_in_open WebSocketTest.test_error_in_openh  sN     w 45'788B))C 6 	# 65   A$&AA$
A!A$c              #      #    [        [        S5         U R                  S5      v nUR                  5       v nS S S 5        U R	                  W5        g ! , (       d  f       N = f7f)Nr[  r  r  r  s      r&   test_error_in_async_open&WebSocketTest.test_error_in_async_openo  sN     w 45'=>>B))C 6 	# 65r  c              #   z   #    U R                  S5      v nUR                  5       v nU R                  US5        g 7f)Nr  r   r  r  s      r&   test_nodelayWebSocketTest.test_nodelayv  s5     ??:..OO%%g&r  )r#   r   ),r6   r7   r8   r9   r  r  r   r&  r/  r4  r   r:  rF  rK  rO  rU  rX  r]  rb  re  ri  rq  rx  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r;   r   r   s   @r&   r  r     s   6
p'1-
	-	- , , 2 2 3 3 - - 3 3 $ $ 1 1
 - - / /     0 0  & % % , , & & ' ' ' '
 ( ( 0 0 0 0 1 1 1 1 1 1, 7 7 2 2 $ $     ' 'r)   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )NativeCoroutineOnMessageHandleri}  c                 4   > [         TU ]  " S0 UD6  SU l        g r   r   r   s     r&   r'   *NativeCoroutineOnMessageHandler.initialize~  r   r)   c                   #    U R                   S:  a  U R                  S5        U =R                   S-  sl         [        R                  " S5      I S h  vN   U =R                   S-  sl         U R                  U5        g  N+7fr   r   rF   s     r&   rH   *NativeCoroutineOnMessageHandler.on_message  s`     ==1FGiio7# 	s   AB A>,B r   )r6   r7   r8   r9   r'   rH   r;   r   r   s   @r&   r  r  }  s    $ $r)   r  c                   *    \ rS rSrS r\S 5       rSrg)WebSocketNativeCoroutineTesti  c                 &    [        S[        4/5      $ )N/native)r   r  r,   s    r&   r  $WebSocketNativeCoroutineTest.get_app  s    Y(GHIJJr)   c              #     #    U R                  S5      v nUR                  S5      v   UR                  S5      v   UR                  5       v nU R                  US5        UR                  5       v nU R                  US5        g 7f)Nr  r  r  r7  r  s      r&   test_native_coroutine2WebSocketNativeCoroutineTest.test_native_coroutine  sv     ??9--x((x((OO%%h'OO%%h'r  r<   N)r6   r7   r8   r9   r  r   r  r;   r<   r)   r&   r  r    s    K ( (r)   r  c                   `    \ rS rSrSrS rS rS rS\S\SS	4S
 jr	\
S 5       r\
S 5       rSrg	)CompressionTestMixini  zHello world. Testing 123 123c           	           " S S[         5      n[        S[        [        U R	                  5       S94SU[        U R	                  5       S94/5      $ )Nc                   *    \ rS rSr\S 5       rS rSrg)4CompressionTestMixin.get_app.<locals>.LimitedHandleri  c                     g)N   r<   r,   s    r&   max_message_sizeECompressionTestMixin.get_app.<locals>.LimitedHandler.max_message_size  s    r)   c                 J    U R                  [        [        U5      5      5        g r!   )rA   strlenrF   s     r&   rH   ?CompressionTestMixin.get_app.<locals>.LimitedHandler.on_message  s    ""3s7|#45r)   r<   N)r6   r7   r8   r9   propertyr  rH   r;   r<   r)   r&   LimitedHandlerr    s     6r)   r  r   r+   /limited)r   r   r>   r  get_server_compression_options)r%   r  s     r&   r  CompressionTestMixin.get_app  s_    	61 	6  T-P-P-RS "T-P-P-RS
 	
r)   c                     g r!   r<   r,   s    r&   r  3CompressionTestMixin.get_server_compression_options      r)   c                     g r!   r<   r,   s    r&   get_client_compression_options3CompressionTestMixin.get_client_compression_options  r  r)   bytes_in	bytes_outreturnNc                     [        5       er!   NotImplementedErrorr%   r  r  s      r&   verify_wire_bytes&CompressionTestMixin.verify_wire_bytes      !##r)   c              #   d  #    U R                  SU R                  5       S9v n[        S5       HK  nUR                  U R                  5        UR                  5       v nU R                  X0R                  5        MM     U R                  UR                  R                  [        U R                  5      S-  5        U R                  UR                  R                  [        U R                  5      S-  5        U R                  UR                  R                  UR                  R                  5        g 7f)Nr   r+      )r  r  rangerA   MESSAGEr8  r"  protocol_message_bytes_outr  _message_bytes_inr  _wire_bytes_in_wire_bytes_outr%   r   ir%  s       r&   test_message_sizes'CompressionTestMixin.test_message_sizes  s     ??)L)L)N # 
 

 qAT\\*__..HX||4  	77T\\9JQ9NO66DLL8IA8MNr{{992;;;V;VWs   D.D0c              #     #    U R                  SU R                  5       S9v nUR                  S5        UR                  5       v nU R	                  US5        UR                  S5        UR                  5       v nU R                  U5        g 7f)Nr  r+   ڀaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa128   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r  r  rA   r8  r"  r\  r9  s      r&   test_size_limit$CompressionTestMixin.test_size_limit  s     ??D,O,O,Q # 
 
 	#**5) 	$**(#s   BBr<   )r6   r7   r8   r9   r  r  r  r  intr  r   r  r  r;   r<   r)   r&   r  r    sZ    ,G
0$# $# $$ $ X X $ $r)   r  c                       \ rS rSrSrS rSrg)UncompressedTestMixini  zESpecialization of CompressionTestMixin when we expect no compression.c                     U R                  US[        U R                  5      S-   -  5        U R                  US[        U R                  5      S-   -  5        g )Nr        )r"  r  r  r  s      r&   r  'UncompressedTestMixin.verify_wire_bytes  sH    AT\\):Q)>$?@1DLL(9A(=#>?r)   r<   N)r6   r7   r8   r9   r:   r  r;   r<   r)   r&   r  r    s    O@r)   r  c                       \ rS rSrSrg)NoCompressionTesti  r<   N)r6   r7   r8   r9   r;   r<   r)   r&   r  r    s    r)   r  c                       \ rS rSrS rSrg)ServerOnlyCompressionTesti  c                     0 $ r!   r<   r,   s    r&   r  8ServerOnlyCompressionTest.get_server_compression_options      	r)   r<   N)r6   r7   r8   r9   r  r;   r<   r)   r&   r  r        r)   r  c                       \ rS rSrS rSrg)ClientOnlyCompressionTesti  c                     0 $ r!   r<   r,   s    r&   r  8ClientOnlyCompressionTest.get_client_compression_options  r"  r)   r<   N)r6   r7   r8   r9   r  r;   r<   r)   r&   r%  r%    r#  r)   r%  c                   &    \ rS rSrS rS rS rSrg)DefaultCompressionTesti  c                     0 $ r!   r<   r,   s    r&   r  5DefaultCompressionTest.get_server_compression_options  r"  r)   c                     0 $ r!   r<   r,   s    r&   r  5DefaultCompressionTest.get_client_compression_options  r"  r)   c                     U R                  US[        U R                  5      S-   -  5        U R                  US[        U R                  5      S-   -  5        U R                  X!S-   5        g )Nr  r  r     )
assertLessr  r  r"  r  s      r&   r  (DefaultCompressionTest.verify_wire_bytes  sV    	1DLL(9A(=#>?!s4<<'81'<"=>rM2r)   r<   N)r6   r7   r8   r9   r  r  r  r;   r<   r)   r&   r)  r)    s    3r)   r)  c                   L    \ rS rSrS\S\S\4S jrS\R                  4S jrSr	g	)
MaskFunctionMixini  maskdatar  c                     [        5       er!   r  r%   r4  r5  s      r&   r4  MaskFunctionMixin.mask	  r  r)   r%   c                    U R                  U R                  SS5      S5        U R                  U R                  SS5      S5        U R                  U R                  SS5      S5        U R                  U R                  SS5      S	5        U R                  U R                  S
S5      S5        U R                  U R                  SS5      S5        g )Ns   abcdr)      b   s   54321s   TVPVPs   ZXCVs   98765432s   c`t`olpds    s   s   s   s    s   )r"  r4  r,   s    r&   	test_maskMaskFunctionMixin.test_mask  s    7C0#67D17;7H5x@7K8+F 	II)+FG'	
 	II)+FG'	
r)   r<   N)
r6   r7   r8   r9   rC   r4  typingAnyr<  r;   r<   r)   r&   r3  r3    s,    $ $e $ $


 
r)   r3  c                       \ rS rSrS rSrg)PythonMaskFunctionTesti  c                     [        X5      $ r!   r   r7  s      r&   r4  PythonMaskFunctionTest.mask  s    %d11r)   r<   Nr6   r7   r8   r9   r4  r;   r<   r)   r&   rA  rA    s    2r)   rA  z#tornado.speedups module not presentc                       \ rS rSrS rSrg)CythonMaskFunctionTesti#  c                 .    [         R                  " X5      $ r!   )r   websocket_maskr7  s      r&   r4  CythonMaskFunctionTest.mask%  s    &&t22r)   r<   NrD  r<   r)   r&   rF  rF  #  s    3r)   rF  c                   *    \ rS rSrS r\S 5       rSrg)ServerPeriodicPingTesti)  c                 <     " S S[         5      n[        SU4/SSS9$ )Nc                       \ rS rSrS rSrg)3ServerPeriodicPingTest.get_app.<locals>.PingHandleri+  c                 &    U R                  S5        g )Ngot pongr   r%   r5  s     r&   on_pong;ServerPeriodicPingTest.get_app.<locals>.PingHandler.on_pong,      "":.r)   r<   N)r6   r7   r8   r9   rR  r;   r<   r)   r&   PingHandlerrN  +      /r)   rU  /r   r   )websocket_ping_intervalwebsocket_ping_timeoutr   r   r%   rU  s     r&   r  ServerPeriodicPingTest.get_app*  s/    	/. 	/ ; $(#$
 	
r)   c              #      #    U R                  S5      v n[        S5       H'  nUR                  5       v nU R                  US5        M)     g 7f)NrW  r  rP  )r  r  r8  r"  r  s       r&   test_server_ping'ServerPeriodicPingTest.test_server_ping5  sC     ??3''qA__..HXz2 s   AAr<   N)r6   r7   r8   r9   r  r   r^  r;   r<   r)   r&   rK  rK  )  s    	
 3 3r)   rK  c                   *    \ rS rSrS r\S 5       rSrg)ClientPeriodicPingTesti>  c                 <     " S S[         5      n[        SU4/5      $ )Nc                       \ rS rSrS rSrg)3ClientPeriodicPingTest.get_app.<locals>.PingHandleri@  c                 &    U R                  S5        g )Ngot pingr   rQ  s     r&   on_ping;ClientPeriodicPingTest.get_app.<locals>.PingHandler.on_pingA  rT  r)   r<   Nr6   r7   r8   r9   rg  r;   r<   r)   r&   rU  rd  @  rV  r)   rU  rW  rZ  r[  s     r&   r  ClientPeriodicPingTest.get_app?  s$    	/. 	/ S+./00r)   c              #      #    U R                  SSSS9v n[        S5       H'  nUR                  5       v nU R                  US5        M)     UR	                  5         g 7f)NrW  r   r   ping_intervalping_timeoutr  rf  )r  r  r8  r"  r   r  s       r&   test_client_ping'ClientPeriodicPingTest.test_client_pingF  sT     ??3d?KKqA__..HXz2  	
r  r<   N)r6   r7   r8   r9   r  r   ro  r;   r<   r)   r&   ra  ra  >  s    1  r)   ra  c                   :    \ rS rSrS r\S 5       r\S 5       rSr	g)ServerPingTimeoutTestiO  c                 Z   ^ / U l         U m " U4S jS[        5      n[        SU4/5      nU$ )Nc                   0   >^  \ rS rSrSU U4S jjrSrU =r$ )2ServerPingTimeoutTest.get_app.<locals>.PingHandleriT  c                 v   > TR                   U l         U R                   R                  U 5        [        TU ]  XS9$ )Nr"   )handlersr   r   r'   )r%   r#   r$   r   r   s      r&   r'   =ServerPingTimeoutTest.get_app.<locals>.PingHandler.initializeU  s:     $$$T*w)!- *  r)   rw  r5   )r6   r7   r8   r9   r'   r;   r   )r   r   s   @r&   rU  ru  T  s     r)   rU  rW  )rw  r   r   )r%   rU  appr   s      @r&   r  ServerPingTimeoutTest.get_appP  s5    02	. 	 C-./
r)   c                    ^  ST l         ST l        U 4S jnU" T R                  R                  5      T R                  l        g)z1Optionally suppress the client's "pong" response.Fr   c                 4   >^  S[         S[        4U U4S jjnU$ )Nopcoder5  c                 n   > U S:X  a'  T=R                   S-  sl         TR                  (       a  g T" X5      $ )N
   rO   )pongs_received
drop_pongs)r~  r5  fcnr   s     r&   _innerCServerPingTimeoutTest.install_hook.<locals>.wrapper.<locals>._innerh  s0    S=%%*%}}6((r)   )r  rC   )r  r  r   s   ` r&   wrapper3ServerPingTimeoutTest.install_hook.<locals>.wrapperg  s"    )s )% ) ) Mr)   N)r  r  r  _handle_message)r   r  s   ` r&   install_hook"ServerPingTimeoutTest.install_hook`  s6     
	 '.bkk.I.I&J#r)   c              #     #    SnU R                  SXS-  S9v nU R                  U5        U R                  S   n[        S5       Hj  n[        R
                  " U5      v   U R                  UR                  5        U R                  UR                  5        UR                  R                  c  Mj   e   U R                  UR                  S5        SUl        [        R
                  " US-  5      v   U R                  UR                  S	5        U R                  UR                  S
5        U R                  UR                  R                  S	5        g 7f)Ng?rW     rl  r      Tg      ?i  zping timed out)r  r  rw  r  r   r   r\  r1   r2   r  assertGreaterEqualr  r  r"  )r%   intervalr   handler_s        r&   test_client_ping_timeout.ServerPingTimeoutTest.test_client_ping_timeoutu  s-     ??xl # 
 
 	" --"qA))H%% g001g223 ;;))111  	 1 115  ii3'' 	++T2--/?@ 	//6s   B)E/B!Ery  N)
r6   r7   r8   r9   r  staticmethodr  r   r  r;   r<   r)   r&   rr  rr  O  s1      K K( %7 %7r)   rr  c                       \ rS rSrS rSrg)PingCalculationTesti  c           
      Z   SSK Jn  [        R                  " SSSSSS[        R                  R                  S9nSn[        R                  " SSSSS	S
[        R                  R                  S9nUR                  UR                  5       UUR                  5       S9nU R                  US5        g )Nr   )WebSocketProtocol13i  rO   r/  )tzinfor     ;   6   )last_ping_timer  nowr  )tornado.websocketr  datetimetimezoneutcping_sleep_time	timestampr"  )r%   r  r  r  r  
sleep_times         r&   test_ping_sleep_time(PingCalculationTest.test_ping_sleep_time  s    9aB1X=N=N=R=RS!**!QB8+<+<+@+@
 )88)335 9 


 	Q'r)   r<   N)r6   r7   r8   r9   r  r;   r<   r)   r&   r  r    s    (r)   r  c                   *    \ rS rSrS r\S 5       rSrg)ManualPingTesti  c                 <     " S S[         5      n[        SU4/5      $ )Nc                       \ rS rSrS rSrg)+ManualPingTest.get_app.<locals>.PingHandleri  c                 @    U R                  U[        U[        5      S9  g )NrI  )rA   rB   rC   rQ  s     r&   rg  3ManualPingTest.get_app.<locals>.PingHandler.on_ping  s    ""4
40G"Hr)   r<   Nri  r<   r)   r&   rU  r    s    Ir)   rU  rW  rZ  r[  s     r&   r  ManualPingTest.get_app  s&    	I. 	I S+./00r)   c              #   H  #    U R                  S5      v nU R                  [        UR                  S5        UR                  S5        UR	                  5       v nU R                  US5        UR                  S5        UR	                  5       v nU R                  US5        g 7f)NrW  ~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   s   hellos   binary hello)r  rS  
ValueErrorpingr8  r"  )r%   r   resps      r&   test_manual_pingManualPingTest.test_manual_ping  s     ??3''*bggy9
__&&x(
 __&&/s   B B"r<   N)r6   r7   r8   r9   r  r   r  r;   r<   r)   r&   r  r    s    1 0 0r)   r  c                   *    \ rS rSrS r\S 5       rSrg)MaxMessageSizeTesti  c                 $    [        S[        4/SS9$ )NrW  r  )websocket_max_message_size)r   r>   r,   s    r&   r  MaxMessageSizeTest.get_app  s    S+./DQQr)   c              #   ~  #    U R                  S5      v nSnUR                  U5        UR                  5       v nU R                  X25        UR                  US-   5        UR                  5       v nU R	                  US 5        U R                  UR
                  S5        U R                  UR                  S5        g 7f)NrW     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabi  zmessage too big)r  rA   r8  r"  r  r1   r2   )r%   r   r  r  s       r&   test_large_message%MaxMessageSizeTest.test_large_message  s     ??3'' 
__&&# 	s#__&&dD!-*;<s   B;B=r<   N)r6   r7   r8   r9   r  r   r  r;   r<   r)   r&   r  r    s    R = =r)   r  )UrD   ru  r  rZ   r  	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   r  tornado.utilr   ImportError	print_excr   r   r   r   r   r   r>   rL   rS   rn   r~   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r%  r)  TestCaser3  rA  skipIfrF  rK  ra  rr  r  r  r  r<   r)   r&   <module>r     s           %  5  ( $ ; ' D T T 3	
3  
O+ O(& 2 
C( C,&, &. 
n 
$- $$. $ *  
$ 4 $P/ P
I- I&!/ !$ -  
 2  $) $- &M') M'`$&: $(#8 (  @$0 @$ @$F @0 @ @	- 	
 5 
 5 
31 3 
)) 
 
.2. 2
 
T!#HI3. 3 J3
32 3*2 "L71 L7^((++ ("0* 00=. =]  

 	
"  Hs   2
I 	I3 I03I?>I?