Ë
    êmxi€  ã                   ó   — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 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' d dl%m*Z*m+Z+m,Z,m-Z- 	 d dl
m.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 d.„ d/e/«      Z> G d0„ d1e/«      Z? G d2„ d3e«      Z@ G d4„ d5e@«      ZA G d6„ d7e/«      ZB G d8„ d9e@«      ZCe G d:„ d;e@«      «       ZDe G d<„ d=eD«      «       ZE G d>„ d?eE«      ZF G d@„ dAeE«      ZG G dB„ dCeE«      ZH G dD„ dEeD«      ZIe G dF„ dGej”                  «      «       ZK G dH„ dIeK«      ZL ejš                  e.du dJ«       G dK„ dLeK«      «       ZN G dM„ dNe@«      ZO G dO„ dPe@«      ZP G dQ„ dRe@«      ZQ G dS„ dTej”                  «      ZR G dU„ dVe@«      ZS G dW„ dXe@«      ZTy# e($ r  ejR                  «        ‚ w xY w# e($ r dZ.Y �Œíw xY w)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                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)ÚTestWebSocketHandlerzšBase 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                 ó    — || _         || _        y ©N©Úclose_futureÚcompression_options)Úselfr"   r#   s      úR/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/test/websocket_test.pyÚ
initializezTestWebSocketHandler.initialize6   s   € Ø(ˆÔØ#6ˆÕ ó    c                 ó   — | j                   S r    ©r#   ©r$   s    r%   Úget_compression_optionsz,TestWebSocketHandler.get_compression_options:   s   € Ø×'Ñ'Ð'r'   c                 ó€   — | j                   �2| j                   j                  | j                  | j                  f«       y y r    )r"   Ú
set_resultÚ
close_codeÚclose_reasonr*   s    r%   Úon_closezTestWebSocketHandler.on_close=   s6   € Ø×ÑÐ(Ø×Ñ×(Ñ(¨$¯/©/¸4×;LÑ;LÐ)MÕNð )r'   ©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r+   r0   © r'   r%   r   r   .   s   „ ñó7ò(óOr'   r   c                   ó0   — e Zd Zej                  d„ «       Zy)ÚEchoHandlerc              #   ó˜   K  — 	 | j                  |t        |t        «      «      –— y # t        j                  $ r Y y t
        $ r Y y w xY w­wr    )Úwrite_messageÚ
isinstanceÚbytesÚasyncioÚCancelledErrorr   ©r$   Úmessages     r%   Ú
on_messagezEchoHandler.on_messageC   sG   è ø€ ð	Ø×$Ñ$ W¬j¸Ä%Ó.HÓIÓIøÜ×%Ñ%ò 	ÙÜ#ò 	Ùð	üs/   ‚A
„"' ¦A
§AºA
¼AÁA
ÁAÁA
N)r2   r3   r4   r   Ú	coroutinerA   r6   r'   r%   r8   r8   B   s   „ Ø‡]�]ñó ñr'   r8   c                   ó   — e Zd Zd„ Zy)ÚErrorInOnMessageHandlerc                 ó   — ddz   y )Né   r   r6   r?   s     r%   rA   z"ErrorInOnMessageHandler.on_messageN   s	   € Ø	ˆA‹r'   N©r2   r3   r4   rA   r6   r'   r%   rD   rD   M   s   „ ór'   rD   c                   ó   — e Zd Zd„ Zy)Ú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«      ‚ | j                  | j                  j                  j                  dd«      «       y # t        $ r Y ŒXw xY w)	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.openS   så   € ä×Ñ˜dŸj™jÐ*@ÓAÜ×Ñ˜dŸm™mÐ-IÓJÜ×Ñ˜dŸo™o¨x¸Ó<Ü×Ñ˜dŸo™o¨{¸FÓCÜ×Ñ˜dŸo™o¨sÓ3Ø�J‰JØ�K‰Kð
ˆð &ò 	ˆFðñ ”ÜÐ @ÓAÐAð	ð 	×Ñ˜4Ÿ<™<×/Ñ/×3Ñ3°H¸bÓAÕBøô  ò Ùðús   Â<DÄ	DÄDN©r2   r3   r4   r_   r6   r'   r%   rI   rI   R   s   „ óCr'   rI   c                   ó   — e Zd Zd„ Zd„ Zy)ÚHeaderEchoHandlerc                 ó(   — | j                  dd«       y )NúX-Extra-Response-HeaderúExtra-Response-Value)rS   r*   s    r%   Úset_default_headersz%HeaderEchoHandler.set_default_headersi   s   € Ø�‰Ð1Ð3IÕJr'   c                 óÀ   — | j                   j                  j                  «       D ]7  \  }}|j                  «       j	                  d«      sŒ&| j                  ||«       Œ9 y )Nzx-test)rZ   r[   Úget_allÚlowerÚ
startswithrS   )r$   ÚkÚvs      r%   ÚpreparezHeaderEchoHandler.preparel   sJ   € Ø—L‘L×(Ñ(×0Ñ0Ó2ò 	&‰DˆAˆqØ�w‰w‹y×#Ñ# HÕ-Ø—‘  1Õ%ñ	&r'   N)r2   r3   r4   rf   rm   r6   r'   r%   rb   rb   h   s   „ òKó&r'   rb   c                   ó   — e Zd Zd„ Zy)ÚNonWebSocketHandlerc                 ó&   — | j                  d«       y )NÚok)rQ   r*   s    r%   r\   zNonWebSocketHandler.gets   s   € Ø�
‰
�4Õr'   N©r2   r3   r4   r\   r6   r'   r%   ro   ro   r   s   „ ór'   ro   c                   ó   — e Zd Zd„ Zy)ÚRedirectHandlerc                 ó&   — | j                  d«       y )Nú/echo)rR   r*   s    r%   r\   zRedirectHandler.getx   s   € Ø�‰�gÕr'   Nrr   r6   r'   r%   rt   rt   w   s   „ ór'   rt   c                   ó   — e Zd Zd„ Zy)ÚCloseReasonHandlerc                 ó6   — d| _         | j                  dd«       y )NFéé  Úgoodbye)Úon_close_calledÚcloser*   s    r%   r_   zCloseReasonHandler.open}   s   € Ø$ˆÔØ�
‰
�4˜Õ#r'   Nr`   r6   r'   r%   rx   rx   |   ó   „ ó$r'   rx   c                   ó6   — e Zd Zej                  d„ «       Zd„ Zy)ÚAsyncPrepareHandlerc              #   ó0   K  — t         j                  –— y ­wr    )r   Úmomentr*   s    r%   rm   zAsyncPrepareHandler.prepareƒ   s   è ø€ ä�j‰jÓùs   ‚c                 ó&   — | j                  |«       y 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y)ÚPathArgsHandlerc                 ó&   — | j                  |«       y r    r„   )r$   Úargs     r%   r_   zPathArgsHandler.openŒ   s   € Ø×Ñ˜3Õr'   Nr`   r6   r'   r%   r†   r†   ‹   ó   „ ó r'   r†   c                   óB   ‡ — e Zd Zˆ fd„Zej
                  d„ «       Zˆ xZS )ÚCoroutineOnMessageHandlerc                 ó2   •— t        ‰| �  di |¤Ž d| _        y ©Nr   r6   ©Úsuperr&   Úsleeping©r$   ÚkwargsÚ	__class__s     €r%   r&   z$CoroutineOnMessageHandler.initialize‘   ó   ø€ Ü‰ÑÑ$˜VÒ$Øˆ�r'   c              #   óð   K  — | j                   dkD  r| j                  d«       | xj                   dz  c_         t        j                  d«      –— | xj                   dz  c_         | j                  |«       y ­w©Nr   z%another coroutine is already sleepingrF   ç{®Gáz„?©r�   r:   r   Úsleepr?   s     r%   rA   z$CoroutineOnMessageHandler.on_message•   sY   è ø€ à�=‰=˜1ÒØ×ÑÐFÔGØ�Š˜Ñ�Ü�i‰i˜‹oÒØ�Š˜Ñ�Ø×Ñ˜7Õ#ùs   ‚A4A6)r2   r3   r4   r&   r   rB   rA   Ú__classcell__©r“   s   @r%   r‹   r‹   �   s    ø„ ôð 	‡]�]ñ$ó ô$r'   r‹   c                   ó   — e Zd Zd„ Zy)ÚRenderMessageHandlerc                 óH   — | j                  | j                  d|¬«      «       y )Númessage.html)r@   )r:   Úrender_stringr?   s     r%   rA   zRenderMessageHandler.on_message    s    € Ø×Ñ˜4×-Ñ-¨nÀgÐ-ÓNÕOr'   NrG   r6   r'   r%   r�   r�   Ÿ   s   „ óPr'   r�   c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚSubprotocolHandlerc                 ó2   •— t        ‰| �  di |¤Ž d| _        y ©NFr6   )r�   r&   Úselect_subprotocol_calledr‘   s     €r%   r&   zSubprotocolHandler.initialize¥   s   ø€ Ü‰ÑÑ$˜VÒ$Ø).ˆÕ&r'   c                 óJ   — | j                   rt        d«      ‚d| _         d|v ryy )Nzselect_subprotocol called twiceTÚ	goodproto)r¥   rX   )r$   Úsubprotocolss     r%   Úselect_subprotocolz%SubprotocolHandler.select_subprotocol©   s-   € Ø×)Ò)ÜÐ=Ó>Ð>Ø)-ˆÔ&Ø˜,Ñ&ØØr'   c                 ón   — | j                   st        d«      ‚| j                  d| j                  z  «       y )Nzselect_subprotocol not calledzsubprotocol=%s)r¥   rX   r:   Úselected_subprotocolr*   s    r%   r_   zSubprotocolHandler.open±   s1   € Ø×-Ò-ÜÐ;Ó<Ð<Ø×ÑÐ+¨d×.GÑ.GÑGÕHr'   )r2   r3   r4   r&   r©   r_   rš   r›   s   @r%   r¢   r¢   ¤   s   ø„ ô/òöIr'   r¢   c                   óH   ‡ — e Zd Zˆ fd„Zej
                  d„ «       Zd„ Zˆ xZS )ÚOpenCoroutineHandlerc                 ó@   •— t        ‰| �  di |¤Ž || _        d| _        y r¤   )r�   r&   ÚtestÚopen_finished)r$   r¯   r’   r“   s      €r%   r&   zOpenCoroutineHandler.initialize¸   s"   ø€ Ü‰ÑÑ$˜VÒ$ØˆŒ	Ø"ˆÕr'   c              #   ó”   K  — | j                   j                  j                  «       –— t        j                  d«      –— d| _        y ­w)Nr—   T)r¯   Úmessage_sentÚwaitr   r™   r°   r*   s    r%   r_   zOpenCoroutineHandler.open½   s6   è ø€ à�i‰i×$Ñ$×)Ñ)Ó+Ò+Ü�i‰i˜ÓÒØ!ˆÕùs   ‚AAc                 óT   — | j                   st        d«      ‚| j                  d«       y )Nz&on_message called before open finishedrq   )r°   rX   r:   r?   s     r%   rA   zOpenCoroutineHandler.on_messageÃ   s%   € Ø×!Ò!ÜÐDÓEÐEØ×Ñ˜4Õ r'   )	r2   r3   r4   r&   r   rB   r_   rA   rš   r›   s   @r%   r­   r­   ·   s%   ø„ ô#ð
 	‡]�]ñ"ó ð"ö
!r'   r­   c                   ó   — e Zd Zd„ Zy)Ú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y)ÚErrorInAsyncOpenHandlerc              ƒ   ó^   K  — t        j                  d«      ƒ d {  –—†  t        d«      ‚7 Œ­w)Nr   r¸   )r=   r™   rX   r*   s    r%   r_   zErrorInAsyncOpenHandler.openÏ   s(   è ø€ Ü�m‰m˜AÓ×ÐÜ˜ÓÐð 	ús   ‚-›+œ-Nr`   r6   r'   r%   rº   rº   Î   s   „ ó r'   rº   c                   ó   — e Zd Zd„ Zy)ÚNoDelayHandlerc                 óH   — | j                  d«       | j                  d«       y )NTÚhello)Úset_nodelayr:   r*   s    r%   r_   zNoDelayHandler.openÕ   s   € Ø×Ñ˜ÔØ×Ñ˜7Õ#r'   Nr`   r6   r'   r%   r½   r½   Ô   r~   r'   r½   c                   óL   ‡ — e Zd Zˆ fd„Zˆ fd„Zej                  d„ «       Zˆ xZS )ÚWebSocketBaseTestCasec                 ó0   •— t         ‰| �  «        g | _        y r    )r�   ÚsetUpÚconns_to_close©r$   r“   s    €r%   rÄ   zWebSocketBaseTestCase.setUpÛ   s   ø€ Ü‰‰ŒØ ˆÕr'   c                 ód   •— | j                   D ]  }|j                  «        Œ t        ‰| �  «        y r    )rÅ   r}   r�   ÚtearDown)r$   Úconnr“   s     €r%   rÈ   zWebSocketBaseTestCase.tearDownß   s,   ø€ Ø×'Ñ'ò 	ˆDØ�J‰J�Lð	ä‰ÑÕr'   c              +   ó¬   K  — t        d| j                  «       |fz  fi |¤Ž–—}| j                  j                  |«       t	        j
                  |«      ‚­w)Nzws://127.0.0.1:%d%s)r   Úget_http_portrÅ   Úappendr   ÚReturn)r$   Úpathr’   Úwss       r%   Ú
ws_connectz WebSocketBaseTestCase.ws_connectä   sW   è ø€ ä$Ø! T×%7Ñ%7Ó%9¸4Ð$@Ñ@ñ
ØDJñ
ñ 
ˆð 	×Ñ×"Ñ" 2Ô&Ü�j‰j˜‹nÐùs   ‚AA)	r2   r3   r4   rÄ   rÈ   r   rB   rÐ   rš   r›   s   @r%   rÂ   rÂ   Ú   s%   ø„ ô!ôð
 	‡]�]ñó ô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î   sv  € Ü"›HˆÔÜàœ+¤t¸×9JÑ9JÔ'KÐLØÔ/Ð0ØœoÐ.ØœM¬4¸T×=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´$ÀD×DUÑDUÔ2VÐWà"Ü&Ü d×&7Ñ&7Ô8ðð &Ü(Ü d×&7Ñ&7¸dÔCðð
 "Ô#5Ð6Ø'Ô)@ÐAØœ^Ð,ða1ôd '¨Ð8NÐ'OÓPôg4
ð 4	
r'   c                 ó   — t        «       S r    r   r*   s    r%   Úget_http_clientzWebSocketTest.get_http_client&  s   € ä$Ó&Ð&r'   c                 ó^   •— t         ‰| �  «        t        j                  j	                  «        y r    )r�   rÈ   r   Ú_template_loadersÚclearrÆ   s    €r%   rÈ   zWebSocketTest.tearDown*  s    ø€ Ü‰ÑÔÜ×(Ñ(×.Ñ.Õ0r'   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nrv   é�  ©ÚfetchÚassertEqualÚcode©r$   Úresponses     r%   Útest_http_requestzWebSocketTest.test_http_request.  s$   € à—:‘:˜gÓ&ˆØ×Ñ˜Ÿ™¨Õ,r'   c                 ój   — | j                  dddddœ¬«      }| j                  |j                  d«       y )Nrv   ÚUpgradeÚ	WebSocketÚ13©Ú
Connectionrò   zSec-WebSocket-Version©r[   ré   rê   rî   s     r%   Útest_missing_websocket_keyz(WebSocketTest.test_missing_websocket_key3  ó<   € Ø—:‘:Øà'Ø&Ø)-ñð ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r'   c                 ój   — | j                  dddddœ¬«      }| j                  |j                  d«       y )Nrv   rò   ró   Ú12rõ   r÷   iª  rê   rî   s     r%   Útest_bad_websocket_versionz(WebSocketTest.test_bad_websocket_version>  rù   r'   c              #   ó    K  — | j                  d«      –—}|j                  d«      –— |j                  «       –—}| j                  |d«       y ­w)Nrv   r¿   ©rÐ   r:   Úread_messagerì   ©r$   rÏ   rï   s      r%   Útest_websocket_genz WebSocketTest.test_websocket_genI  sG   è ø€ à—?‘? 7Ó+Ñ+ˆØ×Ñ˜wÓ'Ò'ØŸ™Ó*Ñ*ˆØ×Ñ˜ 7Õ+ùó   ‚AAc                 ó  ‡ — t        «       5  t        d‰ j                  «       z  ‰ j                  ¬«       d d d «       ‰ j	                  «       j                  «       }|j                  d«       |j                  ‰ j                  «       ‰ j	                  «       j                  «       }‰ j                  |d«       ‰ j                  j                  ˆ fd„«       |j                  «        ‰ j	                  «        y # 1 sw Y   ŒÂxY w)Núws://127.0.0.1:%d/echo)Úcallbackr¿   c                 ó$   •— ‰j                  «       S r    )Ústop)Úfr$   s    €r%   ú<lambda>z8WebSocketTest.test_websocket_callbacks.<locals>.<lambda>Z  s   ø€ °d·i±i³k€ r'   )r   r   rË   r  r³   Úresultr:   rÿ   rì   r"   Úadd_done_callbackr}   r   s   `  r%   Útest_websocket_callbacksz&WebSocketTest.test_websocket_callbacksP  s¼   ø€ ÜÓ!ñ 	ÜØ(¨4×+=Ñ+=Ó+?Ñ?È$Ï)É)õ÷	ð �Y‰Y‹[×ÑÓ!ˆØ
×Ñ˜Ô!Ø
�‰˜Ÿ	™	Ô"Ø—9‘9“;×%Ñ%Ó'ˆØ×Ñ˜ 7Ô+Ø×Ñ×+Ñ+Ó,AÔBØ
�‰Œ
Ø�	‰	�÷	ð 	ús   Œ)C6Ã6C?c              #   ó    K  — | j                  d«      –—}|j                  dd¬«       |j                  «       –—}| j                  |d«       y ­w)Nrv   s   hello éT©Úbinaryrþ   r   s      r%   Útest_binary_messagez!WebSocketTest.test_binary_message^  sI   è ø€ à—?‘? 7Ó+Ñ+ˆØ
×Ñ˜¨tÐÔ4ØŸ™Ó*Ñ*ˆØ×Ñ˜ =Õ1ùr  c              #   óœ   K  — | j                  d«      –—}|j                  d«       |j                  «       –—}| j                  |d«       y ­w©Nrv   u   hello Ã©rþ   r   s      r%   Útest_unicode_messagez"WebSocketTest.test_unicode_messagee  sD   è ø€ à—?‘? 7Ó+Ñ+ˆØ
×Ñ˜Ô(ØŸ™Ó*Ñ*ˆØ×Ñ˜ >Õ2ùó   ‚A
Ac              #   óÈ   K  — | j                  d«      –—}|j                  «        | j                  t        «      5  |j	                  d«       d d d «       y # 1 sw Y   y xY w­wr  )rÐ   r}   ÚassertRaisesr   r:   ©r$   rÏ   s     r%   Ú)test_error_in_closed_client_write_messagez7WebSocketTest.test_error_in_closed_client_write_messagel  sQ   è ø€ à—?‘? 7Ó+Ñ+ˆØ
�‰Œ
Ø×ÑÔ3Ó4ñ 	-Ø×Ñ˜^Ô,÷	-÷ 	-ñ 	-üs   ‚9A"»AÁ	A"ÁAÁA"c              #   óœ   K  — | j                  d«      –—}|j                  d«       |j                  «       –—}| j                  |d«       y ­w)NrÚ   r¿   z<b>hello</b>rþ   r   s      r%   Útest_render_messagez!WebSocketTest.test_render_messages  sD   è ø€ à—?‘? 9Ó-Ñ-ˆØ
×Ñ˜Ô!ØŸ™Ó*Ñ*ˆØ×Ñ˜ >Õ2ùr  c              #   óä   K  — | j                  d«      –—}|j                  d«       t        t        d«      5  |j	                  «       –—}d d d «       | j                  «       y # 1 sw Y   ŒxY w­w)Nr×   r¿   úUncaught exception)rÐ   r:   r   r	   rÿ   ÚassertIsNoner   s      r%   Útest_error_in_on_messagez&WebSocketTest.test_error_in_on_messagez  sb   è ø€ à—?‘?Ð#9Ó:Ñ:ˆØ
×Ñ˜Ô!Ü”wÐ 4Ó5ñ 	/ØŸ_™_Ó.Ñ.ˆH÷	/à×Ñ˜(Õ#÷	/ð 	/üs   ‚5A0·A$Á
A0Á$A-Á)A0c              #   óÒ   K  — | j                  t        «      5 }| j                  d«      –— d d d «       | j                  j                  j
                  d«       y # 1 sw Y   Œ0xY w­w)Nz	/notfoundi”  )r  r   rÐ   rì   Ú	exceptionrí   )r$   Úcms     r%   Útest_websocket_http_failz&WebSocketTest.test_websocket_http_fail‚  sS   è ø€ à×ÑœyÓ)ð 	/¨RØ—/‘/ +Ó.Ò.÷	/à×Ñ˜Ÿ™×*Ñ*¨CÕ0÷	/ð 	/üs   ‚A'˜A¬/A'ÁA$Á A'c              #   ó†   K  — | j                  t        «      5  | j                  d«      –— d d d «       y # 1 sw Y   y xY w­w)NrÔ   )r  r   rÐ   r*   s    r%   Útest_websocket_http_successz)WebSocketTest.test_websocket_http_successˆ  s7   è ø€ à×Ñœ~Ó.ñ 	-Ø—/‘/ )Ó,Ò,÷	-÷ 	-ñ 	-üó   ‚A˜5¬	Aµ>ºAc              #   ó†   K  — | j                  t        «      5  | j                  d«      –— d d d «       y # 1 sw Y   y xY w­w)NrÕ   )r  r   rÐ   r*   s    r%   Útest_websocket_http_redirectz*WebSocketTest.test_websocket_http_redirect�  s7   è ø€ à×ÑœyÓ)ñ 	/Ø—/‘/ +Ó.Ò.÷	/÷ 	/ñ 	/ür%  c              #   ó  K  — t        «       \  }}|j                  «        | j                  t        «      5  t	        t
        dd¬«      5  t        d|z  d¬«      –— d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)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’  sz   è ø€ ä%Ó'‰
ˆˆdØ�
‰
ŒØ×ÑœwÓ'ñ 	Üœ7 D°5Ô9ñ Ü'Ø(¨4Ñ/Àôò ÷÷	ð 	÷ð ú÷	ð 	üs4   ‚3BµA8ÁA,ÁA8Á#	BÁ,A5	Á1A8Á8BÁ=Bc              #   ó  K  — t        j                  t        d| j                  «       z  «      –—«      5 }|j	                  d«       |j	                  d«       |j
                  j                  «        d d d «       y # 1 sw Y   y xY w­w)Nr  r¿   Úworld)Ú
contextlibÚclosingr   rË   r:   Ústreamr}   r  s     r%   Ú"test_websocket_close_buffered_dataz0WebSocketTest.test_websocket_close_buffered_dataœ  so   è ø€ ä×ÑÜ$Ð%=À×@RÑ@RÓ@TÑ%TÓUÑUó
ð 	àØ×Ñ˜WÔ%Ø×Ñ˜WÔ%à�I‰I�O‰OÔ÷	÷ 	ñ 	üs   ‚2B´=A:Á1	BÁ:BÁ?Bc           	   #   óú   K  — t        j                  t        t        d| j	                  «       z  ddi¬«      «      –—«      5 }|j                  «       –—}| j                  |d«       d d d «       y # 1 sw Y   y xY w­w)Nzws://127.0.0.1:%d/headerrK   r¿   r÷   )r1  r2  r   r   rË   rÿ   rì   r   s      r%   Útest_websocket_headersz$WebSocketTest.test_websocket_headers¦  s|   è ø€ ô ×Ñä'ÜØ2°T×5GÑ5GÓ5IÑIØ!)¨7Ð 3ôóñ ó	
ð 	0ð ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X wÔ/÷	0÷ 	0ñ 	0üs   ‚?A;Á%A/Á&	A;Á/A8Á4A;c           	   #   ó^  K  — t        j                  t        t        d| j	                  «       z  ddi¬«      «      –—«      5 }| j                  |j                  j                  d«      d«       | j                  |j                  j                  d«      d«       d d d «       y # 1 sw Y   y xY w­w)Nzws://127.0.0.1:%d/header_echozX-Test-Hellor¿   r÷   rd   re   )r1  r2  r   r   rË   rì   r[   r\   r  s     r%   Útest_websocket_header_echoz(WebSocketTest.test_websocket_header_echo¶  sœ   è ø€ ô
 ×Ñä'ÜØ7¸$×:LÑ:LÓ:NÑNØ!/°Ð 9ôóñ ó	
ð 	ð Ø×Ñ˜RŸZ™ZŸ^™^¨NÓ;¸WÔEØ×ÑØ—
‘
—‘Ð8Ó9Ð;Qô÷	÷ 	ñ 	üs   ‚?B-ÁAB!Â	B-Â!B*Â&B-c              #   ó0  K  — | j                  d«      –—}|j                  «       –—}| j                  |d «       | j                  |j                  d«       | j                  |j
                  d«       | j                  –—\  }}| j                  |d«       y ­w)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ˆØ—O‘OÓ%Ñ%ˆà�‰�c˜4Ô Ø×Ñ˜Ÿ™¨Ô-Ø×Ñ˜Ÿ™¨)Ô4à!×.Ñ.Ñ.‰ˆˆfð 	×Ñ˜˜tÕ$ùs   ‚BBc              #   óÀ   K  — | j                  d«      –—}|j                  dd«       | j                  –—\  }}| j                  |d«       | j                  |d«       y ­w)Nrv   rz   r{   )rÐ   r}   r"   rì   )r$   rÏ   rí   r<  s       r%   Útest_client_close_reasonz&WebSocketTest.test_client_close_reasonÙ  sW   è ø€ à—?‘? 7Ó+Ñ+ˆØ
�‰��yÔ!Ø!×.Ñ.Ñ.‰ˆˆfØ×Ñ˜˜tÔ$Ø×Ñ˜ Õ+ùó   ‚AAc              #   óð   K  — | j                  d«      –—}|j                  «       –—}| j                  |d «       | j                  t        «      5  |j                  d«       d d d «       y # 1 sw Y   y xY w­w)NrÖ   r¿   )rÐ   rÿ   r:  r  r   r:   )r$   rÏ   r;  s      r%   Útest_write_after_closez$WebSocketTest.test_write_after_closeá  se   è ø€ à—?‘? ?Ó3Ñ3ˆØ—O‘OÓ%Ñ%ˆØ�‰�c˜4Ô Ø×ÑÔ3Ó4ñ 	&Ø×Ñ˜WÔ%÷	&÷ 	&ñ 	&üs   ‚AA6ÁA*Á!	A6Á*A3Á/A6c              #   óœ   K  — | j                  d«      –—}|j                  d«       |j                  «       –—}| j                  |d«       y ­w)NrØ   r¿   rþ   ©r$   rÏ   Úress      r%   Útest_async_preparez WebSocketTest.test_async_prepareé  sG   è ø€ ð —?‘?Ð#3Ó4Ñ4ˆØ
×Ñ˜Ô!Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜gÕ&ùr  c              #   óz   K  — | j                  d«      –—}|j                  «       –—}| j                  |d«       y ­w)Nz/path_args/hellor¿   ©rÐ   rÿ   rì   rD  s      r%   Útest_path_argszWebSocketTest.test_path_argsò  s7   è ø€ à—?‘?Ð#5Ó6Ñ6ˆØ—O‘OÓ%Ñ%ˆØ×Ñ˜˜gÕ&ùó   ‚9;c              #   ó  K  — | j                  d«      –—}|j                  d«      –— |j                  d«      –— |j                  «       –—}| j                  |d«       |j                  «       –—}| j                  |d«       y ­w)NrÙ   Úhello1Úhello2rþ   rD  s      r%   Útest_coroutinezWebSocketTest.test_coroutineø  sw   è ø€ à—?‘? <Ó0Ñ0ˆà×Ñ˜xÓ(Ò(Ø×Ñ˜xÓ(Ò(Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÔ'Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÕ'ùó   ‚BBc              #   ó.  K  — | j                  «       }d|z  }dd|z  i}t        j                  t        t	        ||¬«      «      –—«      5 }|j                  d«       |j                  «       –—}| j                  |d«       d d d «       y # 1 sw Y   y xY w­w)Nr  ÚOriginzhttp://127.0.0.1:%dr÷   r¿   ©rË   r1  r2  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’   è ø€ à×!Ñ!Ó#ˆà&¨Ñ-ˆØÐ2°TÑ9Ð:ˆä×ÑÜ$¤[°¸gÔ%FÓGÑGó
ð 	0àØ×Ñ˜WÔ%ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X wÔ/÷	0÷ 	0ñ 	0üó   ‚ABÁ
6B	Â 	BÂ	BÂBc              #   ó.  K  — | j                  «       }d|z  }dd|z  i}t        j                  t        t	        ||¬«      «      –—«      5 }|j                  d«       |j                  «       –—}| j                  |d«       d d d «       y # 1 sw Y   y xY w­w)Nr  rQ  zhttp://127.0.0.1:%d/somethingr÷   r¿   rR  rS  s         r%   Ú!test_check_origin_valid_with_pathz/WebSocketTest.test_check_origin_valid_with_path  s’   è ø€ à×!Ñ!Ó#ˆà&¨Ñ-ˆØÐ<¸tÑCÐDˆä×ÑÜ$¤[°¸gÔ%FÓGÑGó
ð 	0àØ×Ñ˜WÔ%ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X wÔ/÷	0÷ 	0ñ 	0ürV  c              #   ó  K  — | j                  «       }d|z  }dd|z  i}| j                  t        «      5 }t        t	        ||¬«      «      –— d d d «       | j                  j                  j                  d«       y # 1 sw Y   Œ0xY w­w)Nr  rQ  z127.0.0.1:%dr÷   é“  ©rË   r  r   r   r   rì   r   rí   ©r$   r-  rT  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ÓFÒF÷	Gà×Ñ˜Ÿ™×*Ñ*¨CÕ0÷	Gð 	Güs   ‚2B´A<Á/BÁ<BÂBc              #   ó  K  — | j                  «       }d|z  }ddi}| j                  t        «      5 }t        t	        ||¬«      «      –— d d d «       | j                  j                  j                  d«       y # 1 sw Y   Œ0xY w­w)Nr  rQ  zhttp://somewhereelse.comr÷   rZ  r[  r\  s        r%   Útest_check_origin_invalidz'WebSocketTest.test_check_origin_invalid*  s�   è ø€ à×!Ñ!Ó#ˆà&¨Ñ-ˆð Ð7Ð8ˆà×ÑœyÓ)ð 	G¨RÜ#¤K°¸WÔ$EÓFÒF÷	Gð 	×Ñ˜Ÿ™×*Ñ*¨CÕ0÷	Gð 	Güs   ‚/B±A9Á
/BÁ9BÁ>Bc              #   ó¼  K  — | j                  «       }t        «       j                  d|«      –—}|D �ch c]  }|d   ’Œ	 }}t        j                  |vr| j                  d«       y d|z  }ddi}| j                  t        «      5 }t        t        ||¬«      «      –— d d d «       | j                  j                  j                  d«       y c c}w # 1 sw Y   Œ5xY w­w)	NÚ	localhostr   z"localhost does not resolve to ipv4zws://localhost:%d/echorQ  zhttp://subtenant.localhostr÷   rZ  )rË   r
   ÚresolveÚsocketÚAF_INETÚskipTestr  r   r   r   rì   r   rí   )r$   r-  ÚaddrinfoÚaddrÚfamiliesrT  r[   r!  s           r%   Ú$test_check_origin_invalid_subdomainsz2WebSocketTest.test_check_origin_invalid_subdomains8  sÒ   è ø€ à×!Ñ!Ó#ˆô
 "›×+Ñ+¨K¸Ó>Ñ>ˆØ(0Ö1 �D˜“GÐ1ˆÐ1Ü�>‰> Ñ)Ø�M‰MÐ>Ô?Øà&¨Ñ-ˆð Ð9Ð:ˆà×ÑœyÓ)ð 	G¨RÜ#¤K°¸WÔ$EÓFÒF÷	Gð 	×Ñ˜Ÿ™×*Ñ*¨CÕ0ùò 2÷	Gð 	Güs(   ‚1C³C¿ACÂCÂ4CÃCÃCc              #   óº   K  — | j                  dddg¬«      –—}| j                  |j                  d«       |j                  «       –—}| j                  |d«       y ­w)NrÛ   Úbadprotor§   )r¨   zsubprotocol=goodproto)rÐ   rì   r«   rÿ   rD  s      r%   Útest_subprotocolszWebSocketTest.test_subprotocolsO  s`   è ø€ à—?‘?Ø¨*°kÐ)Bð #ó 
ñ 
ˆð 	×Ñ˜×0Ñ0°+Ô>Ø—O‘OÓ%Ñ%ˆØ×Ñ˜Ð5Õ6ùs   ‚AAc              #   ó²   K  — | j                  d«      –—}| j                  |j                  d «       |j                  «       –—}| j	                  |d«       y ­w)NrÛ   zsubprotocol=None)rÐ   r:  r«   rÿ   rì   rD  s      r%   Útest_subprotocols_not_offeredz+WebSocketTest.test_subprotocols_not_offeredX  sK   è ø€ à—?‘? >Ó2Ñ2ˆØ�‰�b×-Ñ-¨tÔ4Ø—O‘OÓ%Ñ%ˆØ×Ñ˜Ð0Õ1ùs   ‚AAc              #   óò   K  — t        «       | _        | j                  d«      –—}|j                  d«      –— | j                  j	                  «        |j                  «       –—}| j                  |d«       y ­w)NrÜ   r¿   rq   )r   r²   rÐ   r:   Úsetrÿ   rì   rD  s      r%   Útest_open_coroutinez!WebSocketTest.test_open_coroutine_  sd   è ø€ ä!›GˆÔØ—?‘?Ð#4Ó5Ñ5ˆØ×Ñ˜wÓ'Ò'Ø×Ñ×ÑÔØ—O‘OÓ%Ñ%ˆØ×Ñ˜˜dÕ#ùs   ‚A5A7c              #   óÂ   K  — t        t        d«      5  | j                  d«      –—}|j                  «       –—}d d d «       | j	                  «       y # 1 sw Y   ŒxY w­w)Nr  rÝ   ©r   r	   rÐ   rÿ   r  rD  s      r%   Útest_error_in_openz WebSocketTest.test_error_in_openh  sV   è ø€ ä”wÐ 4Ó5ñ 	*Ø—‘Ð'7Ó8Ñ8ˆBØŸ™Ó)Ñ)ˆC÷	*ð 	×Ñ˜#Õ÷	*ð 	*üó   ‚A“&A¹AÁAÁAc              #   óÂ   K  — t        t        d«      5  | j                  d«      –—}|j                  «       –—}d d d «       | j	                  «       y # 1 sw Y   ŒxY w­w)Nr  rÞ   rs  rD  s      r%   Útest_error_in_async_openz&WebSocketTest.test_error_in_async_openo  sV   è ø€ ä”wÐ 4Ó5ñ 	*Ø—‘Ð'=Ó>Ñ>ˆBØŸ™Ó)Ñ)ˆC÷	*ð 	×Ñ˜#Õ÷	*ð 	*üru  c              #   óz   K  — | j                  d«      –—}|j                  «       –—}| j                  |d«       y ­w)Nrß   r¿   rH  rD  s      r%   Útest_nodelayzWebSocketTest.test_nodelayv  s6   è ø€ à—?‘? :Ó.Ñ.ˆØ—O‘OÓ%Ñ%ˆØ×Ñ˜˜gÕ&ùrJ  )*r2   r3   r4   râ   rä   rÈ   rð   rø   rü   r   r  r  r  r  r  r  r  r"  r$  r'  r.  r4  r6  r8  r=  r?  rB  rF  rI  rN  rU  rX  r]  r_  ri  rl  rn  rq  rt  rw  ry  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                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚNativeCoroutineOnMessageHandlerc                 ó2   •— t        ‰| �  di |¤Ž d| _        y r�   rŽ   r‘   s     €r%   r&   z*NativeCoroutineOnMessageHandler.initialize~  r”   r'   c              ƒ   ó   K  — | j                   dkD  r| j                  d«       | xj                   dz  c_         t        j                  d«      ƒ d {  –—†  | xj                   dz  c_         | j                  |«       y 7 Œ+­wr–   r˜   r?   s     r%   rA   z*NativeCoroutineOnMessageHandler.on_message‚  sa   è ø€ Ø�=‰=˜1ÒØ×ÑÐFÔGØ�Š˜Ñ�Ü�i‰i˜‹o×ÐØ�Š˜Ñ�Ø×Ñ˜7Õ#ð 	ús   ‚AA>ÁA<Á,A>)r2   r3   r4   r&   rA   rš   r›   s   @r%   r{  r{  }  s   ø„ ôö$r'   r{  c                   ó"   — e Zd Zd„ Zed„ «       Zy)ÚWebSocketNativeCoroutineTestc                 ó&   — t        dt        fg«      S )Nú/native)r   r{  r*   s    r%   râ   z$WebSocketNativeCoroutineTest.get_appŒ  s   € Ü˜YÔ(GÐHÐIÓJÐJr'   c              #   ó  K  — | j                  d«      –—}|j                  d«      –— |j                  d«      –— |j                  «       –—}| j                  |d«       |j                  «       –—}| j                  |d«       y ­w)Nr�  rL  rM  rþ   rD  s      r%   Útest_native_coroutinez2WebSocketNativeCoroutineTest.test_native_coroutine�  sw   è ø€ à—?‘? 9Ó-Ñ-ˆà×Ñ˜xÓ(Ò(Ø×Ñ˜xÓ(Ò(Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÔ'Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÕ'ùrO  N)r2   r3   r4   râ   r   rƒ  r6   r'   r%   r  r  ‹  s   „ òKð ñ(ó ñ(r'   r  c                   óV   — 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y)ÚCompressionTestMixinzHello world. Testing 123 123c           	      ó®   —  G d„ dt         «      }t        dt        t        | j	                  «       ¬«      fd|t        | j	                  «       ¬«      fg«      S )Nc                   ó"   — e Zd Zed„ «       Zd„ Zy)ú4CompressionTestMixin.get_app.<locals>.LimitedHandlerc                  ó   — y)Né   r6   r*   s    r%   Úmax_message_sizezECompressionTestMixin.get_app.<locals>.LimitedHandler.max_message_size¡  s   € àr'   c                 óJ   — | j                  t        t        |«      «      «       y r    )r:   ÚstrÚlenr?   s     r%   rA   z?CompressionTestMixin.get_app.<locals>.LimitedHandler.on_message¥  s   € Ø×"Ñ"¤3¤s¨7£|Ó#4Õ5r'   N)r2   r3   r4   Úpropertyr‹  rA   r6   r'   r%   ÚLimitedHandlerrˆ     s   „ Øñó ðó6r'   r�  rv   r)   ú/limited)r   r   r8   rá   Úget_server_compression_options)r$   r�  s     r%   râ   zCompressionTestMixin.get_appŸ  s_   € ô	6Ô1ô 	6ô ð ÜÜ¨T×-PÑ-PÓ-RÔSðð Ø"Ü¨T×-PÑ-PÓ-RÔSððó
ð 	
r'   c                  ó   — y r    r6   r*   s    r%   r’  z3CompressionTestMixin.get_server_compression_options·  ó   € Ør'   c                  ó   — y 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              #   óh  K  — | j                  d| j                  «       ¬«      –—}t        d«      D ]K  }|j                  | j                  «       |j                  «       –—}| j                  || j                  «       ŒM | j                  |j                  j                  t        | j                  «      dz  «       | j                  |j                  j                  t        | j                  «      dz  «       | j                  |j                  j                  |j                  j                  «       y ­w)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ð #ó 
ñ 
ˆô
 �q“ò 	5ˆAØ×Ñ˜TŸ\™\Ô*ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X t§|¡|Õ4ð	5ð 	×Ñ˜Ÿ™×7Ñ7¼¸T¿\¹\Ó9JÈQÑ9NÔOØ×Ñ˜Ÿ™×6Ñ6¼¸D¿L¹LÓ8IÈAÑ8MÔNØ×Ñ˜rŸ{™{×9Ñ9¸2¿;¹;×;VÑ;VÕWùs   ‚D0D2c              #   ó$  K  — | j                  d| j                  «       ¬«      –—}|j                  d«       |j                  «       –—}| j	                  |d«       |j                  d«       |j                  «       –—}| j                  |«       y ­w)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ð #ó 
ñ 
ˆð 	×Ñ˜Ô#ØŸ™Ó*Ñ*ˆØ×Ñ˜ 5Ô)ð 	×Ñ˜Ô$ØŸ™Ó*Ñ*ˆØ×Ñ˜(Õ#ùs   ‚BB)r2   r3   r4   r£  râ   r’  r–  Úintrž  r   r«  r°  r6   r'   r%   r…  r…  ›  sZ   „ à,€Gò
ò0òð$¨#ð $¸#ð $À$ó $ð ñXó ðXð ñ$ó ñ$r'   r…  c                   ó   — e Zd ZdZd„ Zy)ÚUncompressedTestMixinzESpecialization of CompressionTestMixin when we expect no compression.c                 ó°   — | j                  |dt        | j                  «      dz   z  «       | j                  |dt        | j                  «      dz   z  «       y )Nr¡  é   é   )rì   rŽ  r£  r�  s      r%   rž  z'UncompressedTestMixin.verify_wire_bytesã  sH   € à×Ñ˜ A¬¨T¯\©\Ó):¸QÑ)>Ñ$?Ô@Ø×Ñ˜ 1¬¨D¯L©LÓ(9¸AÑ(=Ñ#>Õ?r'   N)r2   r3   r4   r5   rž  r6   r'   r%   r³  r³  ß  s   „ áOó@r'   r³  c                   ó   — e Zd Zy)ÚNoCompressionTestN)r2   r3   r4   r6   r'   r%   r¸  r¸  é  s   „ Ør'   r¸  c                   ó   — e Zd Zd„ Zy)Ú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y)Ú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y)Ú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                 óÚ   — | j                  |dt        | j                  «      dz   z  «       | j                  |dt        | j                  «      dz   z  «       | j                  ||dz   «       y )Nr¡  rµ  r¶  é   )Ú
assertLessrŽ  r£  rì   r�  s      r%   rž  z(DefaultCompressionTest.verify_wire_bytesÿ  sX   € Ø�‰˜	 1¬¨D¯L©LÓ(9¸AÑ(=Ñ#>Ô?Ø�‰˜ !¤s¨4¯<©<Ó'8¸1Ñ'<Ñ"=Ô>à×Ñ˜ H¨r¡MÕ2r'   N)r2   r3   r4   r’  r–  rž  r6   r'   r%   rÂ  rÂ  ø  s   „ òòó3r'   rÂ  c                   ó@   — e Zd Zdededefd„Zdej                  fd„Zy)ÚMaskFunctionMixinÚmaskÚdatar™  c                 ó   — t        «       ‚r    r›  ©r$   rÊ  rË  s      r%   rÊ  zMaskFunctionMixin.mask	  rŸ  r'   r$   c                 óœ  — | j                  | j                  dd«      d«       | j                  | j                  dd«      d«       | j                  | j                  dd«      d«       | j                  | j                  dd«      d	«       | j                  | j                  d
d«      d«       | j                  | j                  dd«      d«       y )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´   € Ø×Ñ˜Ÿ™ 7¨CÓ0°#Ô6Ø×Ñ˜Ÿ™ 7¨DÓ1°7Ô;Ø×Ñ˜Ÿ™ 7¨HÓ5°xÔ@Ø×Ñ˜Ÿ™ 7¨KÓ8¸+ÔFð 	×ÑØ�I‰IÐ)Ð+FÓGØ'ô	
ð 	×ÑØ�I‰IÐ)Ð+FÓGØ'õ	
r'   N)r2   r3   r4   r<   rÊ  ÚtypingÚAnyrÑ  r6   r'   r%   rÉ  rÉ    s,   „ ð$˜ð $ eð $°ó $ð
˜Ÿ
™
ô 
r'   rÉ  c                   ó   — e Zd Zd„ Zy)ÚPythonMaskFunctionTestc                 ó   — t        ||«      S r    r   rÍ  s      r%   rÊ  zPythonMaskFunctionTest.mask  s   € Ü% d¨DÓ1Ð1r'   N©r2   r3   r4   rÊ  r6   r'   r%   rÕ  rÕ    s   „ ó2r'   rÕ  z#tornado.speedups module not presentc                   ó   — e Zd Zd„ Zy)ÚCythonMaskFunctionTestc                 ó.   — t        j                  ||«      S r    )r   Úwebsocket_maskrÍ  s      r%   rÊ  zCythonMaskFunctionTest.mask%  s   € Ü×&Ñ& t¨TÓ2Ð2r'   Nr×  r6   r'   r%   rÙ  rÙ  #  s   „ ó3r'   rÙ  c                   ó"   — e Zd Zd„ Zed„ «       Zy)ÚServerPeriodicPingTestc                 óB   —  G d„ dt         «      }t        d|fgdd¬«      S )Nc                   ó   — e Zd Zd„ Zy)ú3ServerPeriodicPingTest.get_app.<locals>.PingHandlerc                 ó&   — | j                  d«       y )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*  s/   € ô	/Ô.ô 	/ô Ø�;ÐÐ Ø$(Ø#$ô
ð 	
r'   c              #   óš   K  — | j                  d«      –—}t        d«      D ]&  }|j                  «       –—}| j                  |d«       Œ( y ­w)Nrè  r¡  râ  )rÐ   r¢  rÿ   rì   r©  s       r%   Útest_server_pingz'ServerPeriodicPingTest.test_server_ping5  sI   è ø€ à—?‘? 3Ó'Ñ'ˆÜ�q“ò 	3ˆAØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X zÕ2ñ	3ùs   ‚A	AN)r2   r3   r4   râ   r   rî  r6   r'   r%   rÝ  rÝ  )  s   „ ò	
ð ñ3ó ñ3r'   rÝ  c                   ó"   — e Zd Zd„ Zed„ «       Zy)ÚClientPeriodicPingTestc                 ó<   —  G d„ dt         «      }t        d|fg«      S )Nc                   ó   — e Zd Zd„ Zy)ú3ClientPeriodicPingTest.get_app.<locals>.PingHandlerc                 ó&   — | j                  d«       y )Núgot pingr„   rã  s     r%   Úon_pingz;ClientPeriodicPingTest.get_app.<locals>.PingHandler.on_pingA  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?  s$   € ô	/Ô.ô 	/ô ˜S +Ð.Ð/Ó0Ð0r'   c              #   óÀ   K  — | j                  ddd¬«      –—}t        d«      D ]&  }|j                  «       –—}| j                  |d«       Œ( |j	                  «        y ­w)Nrè  r—   r   ©Úping_intervalÚping_timeoutr¡  rõ  )rÐ   r¢  rÿ   rì   r}   r©  s       r%   Útest_client_pingz'ClientPeriodicPingTest.test_client_pingF  sZ   è ø€ à—?‘? 3°dÈ�?ÓKÑKˆÜ�q“ò 	3ˆAØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X zÕ2ð	3ð 	�‰�
ùr@  N)r2   r3   r4   râ   r   rü  r6   r'   r%   rð  rð  >  s   „ ò1ð ñó ñr'   rð  c                   ó2   — e Zd Zd„ Zed„ «       Zed„ «       Zy)ÚServerPingTimeoutTestc                 óX   ‡— 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>.PingHandlerc                 ó~   •— ‰j                   | _         | j                   j                  | «       t        ‰| �  ||¬«      S )Nr!   )ÚhandlersrÌ   r�   r&   )r$   r"   r#   r“   r¯   s      €€r%   r&   z=ServerPingTimeoutTest.get_app.<locals>.PingHandler.initializeU  s=   ø€ Ø $§¡�”à—‘×$Ñ$ TÔ*Ü‘wÑ)Ø!-ÐCVð *ó ð r'   r1   )r2   r3   r4   r&   rš   )r“   r¯   s   @€r%   ræ  r  T  s   ù„ ÷ò r'   ræ  rè  )r  r   r   )r$   ræ  Úappr¯   s      @r%   râ   zServerPingTimeoutTest.get_appP  s5   ø€ Ø02ˆŒØˆö	Ô.ô 	ô ˜C Ð-Ð.Ó/ˆØˆ
r'   c                 ó‚   ‡ — d‰ _         d‰ _        ˆ fd„} |‰ j                  j                  «      ‰ j                  _        y)z1Optionally suppress the client's "pong" response.Fr   c                 ó0   •‡ — dt         dt        fˆ ˆfd„}|S )NÚopcoderË  c                 ód   •— | dk(  r"‰xj                   dz  c_         ‰j                  ry  ‰| |«      S )Né
   rF   )Úpongs_receivedÚ
drop_pongs)r  rË  ÚfcnrÏ   s     €€r%   Ú_innerzCServerPingTimeoutTest.install_hook.<locals>.wrapper.<locals>._innerh  s2   ø€ Ø˜S’=Ø×%Ò%¨Ñ*Õ%Ø—}’}àá˜6 4Ó(Ð(r'   )r±  r<   )r  r  rÏ   s   ` €r%   Úwrapperz3ServerPingTimeoutTest.install_hook.<locals>.wrapperg  s   ù€ ð)œsð )¬%ö )ð ˆMr'   N)r  r
  r¤  Ú_handle_message)rÏ   r  s   ` r%   Úinstall_hookz"ServerPingTimeoutTest.install_hook`  s6   ø€ ð ˆŒØˆÔô
	ñ '.¨b¯k©k×.IÑ.IÓ&Jˆ�‰Õ#r'   c              #   ó¢  K  — d}| j                  d||dz  ¬«      –—}| j                  |«       | j                  d   }t        d«      D ]g  }t	        j
                  |«      –— | j                  |j                  «       | j                  |j                  «       |j                  j                  €ŒgJ ‚ | j                  |j                  d«       d|_        t	        j
                  |dz  «      –— | j                  |j                  d	«       | j                  |j                  d
«       | j                  |j                  j                  d	«       y ­w)Ngš™™™™™É?rè  é   rù  r   é   Tg      ø?iè  zping timed out)rÐ   r  r  r¢  r   r™   r  r.   r/   r¤  ÚassertGreaterEqualr
  r  rì   )r$   ÚintervalrÏ   ÚhandlerÚ_s        r%   Útest_client_ping_timeoutz.ServerPingTimeoutTest.test_client_ping_timeoutu  s5  è ø€ ð ˆØ—?‘?Ø˜x°hÀ±lð #ó 
ñ 
ˆð 	×Ñ˜"Ôð —-‘- Ñ"ˆä�q“ò 		2ˆAä—)‘)˜HÓ%Ò%ð ×Ñ˜g×0Ñ0Ô1Ø×Ñ˜g×2Ñ2Ô3ð —;‘;×)Ñ)Ñ1Ð1Ð1ð		2ð 	×Ñ × 1Ñ 1°1Ô5ð ˆŒô �i‰i˜ 3™Ó'Ò'ð 	×Ñ˜×+Ñ+¨TÔ2Ø×Ñ˜×-Ñ-Ð/?Ô@ð 	×Ñ˜Ÿ™×/Ñ/°Õ6ùs   ‚B-EÂ0BEN)r2   r3   r4   râ   Ústaticmethodr  r   r  r6   r'   r%   rþ  rþ  O  s1   „ òð  ñKó ðKð( ñ%7ó ñ%7r'   rþ  c                   ó   — e Zd Zd„ Zy)ÚPingCalculationTestc           	      óh  — ddl m} t        j                  ddddddt        j                  j                  ¬«      }d}t        j                  ddddd	d
t        j                  j                  ¬«      }|j                  |j                  «       ||j                  «       ¬«      }| j                  |d«       y )Nr   )ÚWebSocketProtocol13ié  rF   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_timez(PingCalculationTest.test_ping_sleep_timeŸ  sž   € Ý9ä×Ñ  a¨¨B°°1¼X×=NÑ=N×=RÑ=RÔSˆØˆÜ!×*Ñ*Ø�!�Q˜˜B ¬8×+<Ñ+<×+@Ñ+@ô
ˆð )×8Ñ8Ø)×3Ñ3Ó5ØØ—‘“ð 9ó 
ˆ
ð
 	×Ñ˜ QÕ'r'   N)r2   r3   r4   r+  r6   r'   r%   r  r  ž  s   „ ó(r'   r  c                   ó"   — e Zd Zd„ Zed„ «       Zy)ÚManualPingTestc                 ó<   —  G d„ dt         «      }t        d|fg«      S )Nc                   ó   — e Zd Zd„ Zy)ú+ManualPingTest.get_app.<locals>.PingHandlerc                 óF   — | j                  |t        |t        «      ¬«       y )Nr  )r:   r;   r<   rã  s     r%   rö  z3ManualPingTest.get_app.<locals>.PingHandler.on_ping²  s   € Ø×"Ñ" 4´
¸4ÄÓ0GÐ"ÕHr'   Nr÷  r6   r'   r%   ræ  r0  ±  s   „ óIr'   ræ  rè  rë  rì  s     r%   râ   zManualPingTest.get_app°  s&   € ô	IÔ.ô 	Iô ˜S +Ð.Ð/Ó0Ð0r'   c              #   óH  K  — | j                  d«      –—}| j                  t        |j                  d«       |j                  d«       |j	                  «       –—}| j                  |d«       |j                  d«       |j	                  «       –—}| j                  |d«       y ­w)Nrè  Ú~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar¿   s   hellos   binary hello)rÐ   r  Ú
ValueErrorÚpingrÿ   rì   )r$   rÏ   Úresps      r%   Útest_manual_pingzManualPingTest.test_manual_ping·  sƒ   è ø€ à—?‘? 3Ó'Ñ'ˆà×Ñœ* b§g¡g¨yÔ9à
�‰�ÔØ—_‘_Ó&Ñ&ˆà×Ñ˜˜xÔ(à
�‰�Ô Ø—_‘_Ó&Ñ&ˆØ×Ñ˜˜Õ/ùs   ‚B B"N)r2   r3   r4   râ   r   r7  r6   r'   r%   r-  r-  ¯  s   „ ò1ð ñ0ó ñ0r'   r-  c                   ó"   — e Zd Zd„ Zed„ «       Zy)ÚMaxMessageSizeTestc                 ó*   — 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ÐQr'   c              #   ó€  K  — | j                  d«      –—}d}|j                  |«       |j                  «       –—}| j                  ||«       |j                  |dz   «       |j                  «       –—}| j	                  |d «       | j                  |j
                  d«       | j                  |j                  d«       y ­w)Nrè  Á   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaÚbiñ  zmessage too big)rÐ   r:   rÿ   rì   r:  r.   r/   )r$   rÏ   r;  r6  s       r%   Útest_large_messagez%MaxMessageSizeTest.test_large_messageË  s¥   è ø€ à—?‘? 3Ó'Ñ'ˆð ˆØ
×Ñ˜ÔØ—_‘_Ó&Ñ&ˆØ×Ñ˜˜sÔ#ð 	×Ñ˜˜s™Ô#Ø—_‘_Ó&Ñ&ˆà�‰�d˜DÔ!Ø×Ñ˜Ÿ™¨Ô-Ø×Ñ˜Ÿ™Ð*;Õ<ùs   ‚B<B>N)r2   r3   r4   râ   r   r?  r6   r'   r%   r9  r9  Ç  s   „ òRð ñ=ó ñ=r'   r9  )Ur=   r1  r%  rO   rc  Ú	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   r8   rD   rI   rb   ro   rt   rx   r€   r†   r‹   r�   r¢   r­   r¶   rº   r½   rÂ   rÒ   r{  r  r…  r³  r¸  rº  r¿  rÂ  ÚTestCaserÉ  rÕ  ÚskipIfrÙ  rÝ  rð  rþ  r  r-  r9  r6   r'   r%   ú<module>rR     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Ð*ô 0ô0=Ð.õ =øð] ò 
ð
 €I×ÑÔØ	ð
ûð" ò ØƒHðús   Á2
I Â	I2 ÉI/É2I=É<I=