§
    ‹Ÿj€  ã                   óØ  — 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' n# e($ r  ej)        ¦   «          ‚ w xY wd dl%m*Z*m+Z+m,Z,m-Z- 	 d dl
m.Z. n# e($ r dZ.Y nw xY w G d„ de*¦  «        Z/ G d„ de/¦  «        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jJ        ¦  «        ¦   «         ZK G dH„ dIeK¦  «        ZL ejM        e.du dJ¦  «         G dK„ dLeK¦  «        ¦   «         ZN G dM„ dNe@¦  «        ZO G dO„ dPe@¦  «        ZP G dQ„ dRe@¦  «        ZQ G dS„ dTejJ        ¦  «        ZR G dU„ dVe@¦  «        ZS G dW„ dXe@¦  «        ZTdS )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dS )Ú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                 ó"   — || _         || _        d S ©N©Úclose_futureÚcompression_options)Úselfr"   r#   s      úh/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/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                 ód   — | j         �(| j                              | j        | j        f¦  «         d S d S r    )r"   Ú
set_resultÚ
close_codeÚclose_reasonr*   s    r%   Úon_closezTestWebSocketHandler.on_close=   s:   € ØÔÐ(ØÔ×(Ò(¨$¬/¸4Ô;LÐ)MÑNÔNÐNÐNÐNð )Ð(r'   ©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r+   r0   © r'   r%   r   r   .   sU   € € € € € ðð ð7ð 7ð 7ð 7ð(ð (ð (ðOð Oð Oð Oð Or'   r   c                   ó.   — e Zd Zej        d„ ¦   «         ZdS )ÚEchoHandlerc              #   ó¦   K  — 	 |                       |t          |t          ¦  «        ¦  «        V — d S # t          j        $ r Y d S t
          $ r Y d S w xY wr    )Úwrite_messageÚ
isinstanceÚbytesÚasyncioÚCancelledErrorr   ©r$   Úmessages     r%   Ú
on_messagezEchoHandler.on_messageC   su   è è € ð	Ø×$Ò$ W­j¸Å%Ñ.HÔ.HÑIÔIÐIÐIÐIÐIÐIøÝÔ%ð 	ð 	ð 	ØˆDˆDÝ#ð 	ð 	ð 	ØˆDˆDð	øøøs   „+1 ±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dS )ÚErrorInOnMessageHandlerc                 ó   — ddz   d S )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dS )ÚHeaderHandlerc                 óâ  — t          j        | j        d¦  «        t          j        | j        d¦  «        t          j        | j        dd¦  «        t          j        | j        dd¦  «        t          j        | j        d¦  «        | j        | j        g}|D ]+}	  |¦   «          t          d¦  «        ‚# t          $ r Y Œ(w xY w|                      | j        j                             dd¦  «        ¦  «         d S )	NzThis should not workzhttp://localhost/elsewhereúX-TestÚ Ú	ChocolateÚChipi÷  zdid not get expected exception)Ú	functoolsÚpartialÚwriteÚredirectÚ
set_headerÚ
set_cookieÚ
set_statusÚflushÚfinishÚ	ExceptionÚRuntimeErrorr:   ÚrequestÚheadersÚget)r$   Úmethods_to_testÚmethods      r%   ÚopenzHeaderHandler.openS   sô   € åÔ˜dœjÐ*@ÑAÔAÝÔ˜dœmÐ-IÑJÔJÝÔ˜dœo¨x¸Ñ<Ô<ÝÔ˜dœo¨{¸FÑCÔCÝÔ˜dœo¨sÑ3Ô3ØŒJØŒKð
ˆð &ð 	ð 	ˆFðð �‘”�ÝÐ @ÑAÔAÐAøÝð ð ð Ø�ðøøøà×Ò˜4œ<Ô/×3Ò3°H¸bÑAÔAÑBÔBÐBÐBÐBs   ÂB,Â,
B9Â8B9N©r2   r3   r4   r_   r6   r'   r%   rI   rI   R   s(   € € € € € ðCð Cð Cð Cð Cr'   rI   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚHeaderEchoHandlerc                 ó2   — |                       dd¦  «         d S )NúX-Extra-Response-HeaderúExtra-Response-Value)rS   r*   s    r%   Úset_default_headersz%HeaderEchoHandler.set_default_headersi   s   € Ø�ŠÐ1Ð3IÑJÔJÐJÐJÐJr'   c                 óÈ   — | j         j                             ¦   «         D ]B\  }}|                     ¦   «                              d¦  «        r|                      ||¦  «         ŒCd S )Nzx-test)rZ   r[   Úget_allÚlowerÚ
startswithrS   )r$   ÚkÚvs      r%   ÚpreparezHeaderEchoHandler.preparel   sc   € Ø”LÔ(×0Ò0Ñ2Ô2ð 	&ð 	&‰DˆAˆqØ�wŠw‰yŒy×#Ò# HÑ-Ô-ð &Ø—’  1Ñ%Ô%Ð%øð	&ð 	&r'   N)r2   r3   r4   rf   rm   r6   r'   r%   rb   rb   h   s5   € € € € € ðKð Kð Kð&ð &ð &ð &ð &r'   rb   c                   ó   — e Zd Zd„ ZdS )ÚNonWebSocketHandlerc                 ó0   — |                       d¦  «         d S )NÚok)rQ   r*   s    r%   r\   zNonWebSocketHandler.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dS )ÚRedirectHandlerc                 ó0   — |                       d¦  «         d S )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dS )ÚCloseReasonHandlerc                 ó@   — d| _         |                      dd¦  «         d S )NFéé  Úgoodbye)Úon_close_calledÚcloser*   s    r%   r_   zCloseReasonHandler.open}   s$   € Ø$ˆÔØ�
Š
�4˜Ñ#Ô#Ð#Ð#Ð#r'   Nr`   r6   r'   r%   rx   rx   |   ó#   € € € € € ð$ð $ð $ð $ð $r'   rx   c                   ó4   — e Zd Zej        d„ ¦   «         Zd„ ZdS )ÚAsyncPrepareHandlerc              #   ó&   K  — t           j        V — d S r    )r   Úmomentr*   s    r%   rm   zAsyncPrepareHandler.prepareƒ   s   è è € åŒjÐÐÐÐÐr'   c                 ó0   — |                       |¦  «         d S r    ©r:   r?   s     r%   rA   zAsyncPrepareHandler.on_message‡   s   € Ø×Ò˜7Ñ#Ô#Ð#Ð#Ð#r'   N)r2   r3   r4   r   rB   rm   rA   r6   r'   r%   r€   r€   ‚   s>   € € € € € Ø„]ðð ñ „]ðð$ð $ð $ð $ð $r'   r€   c                   ó   — e Zd Zd„ ZdS )ÚPathArgsHandlerc                 ó0   — |                       |¦  «         d S r    r„   )r$   Úargs     r%   r_   zPathArgsHandler.openŒ   s   € Ø×Ò˜3ÑÔÐÐÐr'   Nr`   r6   r'   r%   r†   r†   ‹   ó#   € € € € € ð ð  ð  ð  ð  r'   r†   c                   ó>   ‡ — e Zd Zˆ fd„Zej        d„ ¦   «         Zˆ xZS )ÚCoroutineOnMessageHandlerc                 óH   •—  t          ¦   «         j        di |¤Ž d| _        d S ©Nr   r6   ©Úsuperr&   Úsleeping©r$   ÚkwargsÚ	__class__s     €r%   r&   z$CoroutineOnMessageHandler.initialize‘   ó+   ø€ Ø�‰ŒÔÐ$Ð$˜VÐ$Ð$Ð$ØˆŒˆˆr'   c              #   óà   K  — | j         dk    r|                      d¦  «         | xj         dz  c_         t          j        d¦  «        V — | xj         dz  c_         |                      |¦  «         d S ©Nr   z%another coroutine is already sleepingrF   ç{®Gáz„?©r�   r:   r   Úsleepr?   s     r%   rA   z$CoroutineOnMessageHandler.on_message•   sv   è è € àŒ=˜1ÒÐØ×ÒÐFÑGÔGÐGØˆŒ˜ÑˆŒÝŒi˜‰oŒoÐÐÐØˆŒ˜ÑˆŒØ×Ò˜7Ñ#Ô#Ð#Ð#Ð#r'   )r2   r3   r4   r&   r   rB   rA   Ú__classcell__©r“   s   @r%   r‹   r‹   �   sU   ø€ € € € € ðð ð ð ð ð 	„]ð$ð $ñ „]ð$ð $ð $ð $ð $r'   r‹   c                   ó   — e Zd Zd„ ZdS )ÚRenderMessageHandlerc                 óZ   — |                       |                      d|¬¦  «        ¦  «         d S )Númessage.html)r@   )r:   Úrender_stringr?   s     r%   rA   zRenderMessageHandler.on_message    s/   € Ø×Ò˜4×-Ò-¨nÀgÐ-ÑNÔNÑOÔOÐOÐOÐOr'   NrG   r6   r'   r%   r�   r�   Ÿ   s(   € € € € € ðPð Pð Pð Pð Pr'   r�   c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚSubprotocolHandlerc                 óH   •—  t          ¦   «         j        di |¤Ž d| _        d S ©NFr6   )r�   r&   Úselect_subprotocol_calledr‘   s     €r%   r&   zSubprotocolHandler.initialize¥   s.   ø€ Ø�‰ŒÔÐ$Ð$˜VÐ$Ð$Ð$Ø).ˆÔ&Ð&Ð&r'   c                 óL   — | j         rt          d¦  «        ‚d| _         d|v rdS d S )Nzselect_subprotocol called twiceTÚ	goodproto)r¥   rX   )r$   Úsubprotocolss     r%   Úselect_subprotocolz%SubprotocolHandler.select_subprotocol©   s9   € ØÔ)ð 	?ÝÐ=Ñ>Ô>Ð>Ø)-ˆÔ&Ø˜,Ð&Ð&Ø�;Øˆtr'   c                 ól   — | j         st          d¦  «        ‚|                      d| j        z  ¦  «         d S )Nzselect_subprotocol not calledzsubprotocol=%s)r¥   rX   r:   Úselected_subprotocolr*   s    r%   r_   zSubprotocolHandler.open±   s?   € ØÔ-ð 	=ÝÐ;Ñ<Ô<Ð<Ø×ÒÐ+¨dÔ.GÑGÑHÔHÐHÐHÐHr'   )r2   r3   r4   r&   r©   r_   rš   r›   s   @r%   r¢   r¢   ¤   s]   ø€ € € € € ð/ð /ð /ð /ð /ðð ð ðIð Ið Ið Ið Ið Ið Ir'   r¢   c                   óD   ‡ — e Zd Zˆ fd„Zej        d„ ¦   «         Zd„ Zˆ xZS )ÚOpenCoroutineHandlerc                 óV   •—  t          ¦   «         j        di |¤Ž || _        d| _        d S r¤   )r�   r&   ÚtestÚopen_finished)r$   r¯   r’   r“   s      €r%   r&   zOpenCoroutineHandler.initialize¸   s5   ø€ Ø�‰ŒÔÐ$Ð$˜VÐ$Ð$Ð$ØˆŒ	Ø"ˆÔÐÐr'   c              #   ó„   K  — | j         j                             ¦   «         V — t          j        d¦  «        V — d| _        d S )Nr—   T)r¯   Úmessage_sentÚwaitr   r™   r°   r*   s    r%   r_   zOpenCoroutineHandler.open½   sG   è è € àŒiÔ$×)Ò)Ñ+Ô+Ð+Ð+Ð+ÝŒi˜ÑÔÐÐÐØ!ˆÔÐÐr'   c                 ó\   — | j         st          d¦  «        ‚|                      d¦  «         d S )Nz&on_message called before open finishedrq   )r°   rX   r:   r?   s     r%   rA   zOpenCoroutineHandler.on_messageÃ   s7   € ØÔ!ð 	FÝÐDÑEÔEÐEØ×Ò˜4Ñ Ô Ð Ð Ð r'   )	r2   r3   r4   r&   r   rB   r_   rA   rš   r›   s   @r%   r­   r­   ·   sd   ø€ € € € € ð#ð #ð #ð #ð #ð
 	„]ð"ð "ñ „]ð"ð
!ð !ð !ð !ð !ð !ð !r'   r­   c                   ó   — e Zd Zd„ ZdS )ÚErrorInOpenHandlerc                 ó    — t          d¦  «        ‚)NÚboom)rX   r*   s    r%   r_   zErrorInOpenHandler.openÊ   s   € Ý˜ÑÔÐr'   Nr`   r6   r'   r%   r¶   r¶   É   r‰   r'   r¶   c                   ó   — e Zd Zd„ ZdS )ÚErrorInAsyncOpenHandlerc              ƒ   óX   K  — t          j        d¦  «        ƒ d {V —† t          d¦  «        ‚)Nr   r¸   )r=   r™   rX   r*   s    r%   r_   zErrorInAsyncOpenHandler.openÏ   s6   è è € ÝŒm˜AÑÔÐÐÐÐÐÐÐÝ˜ÑÔÐr'   Nr`   r6   r'   r%   rº   rº   Î   s#   € € € € € ð ð  ð  ð  ð  r'   rº   c                   ó   — e Zd Zd„ ZdS )ÚNoDelayHandlerc                 óZ   — |                       d¦  «         |                      d¦  «         d S )NTÚhello)Úset_nodelayr:   r*   s    r%   r_   zNoDelayHandler.openÕ   s0   € Ø×Ò˜ÑÔÐØ×Ò˜7Ñ#Ô#Ð#Ð#Ð#r'   Nr`   r6   r'   r%   r½   r½   Ô   r~   r'   r½   c                   óH   ‡ — e Zd Zˆ fd„Zˆ fd„Zej        d„ ¦   «         Zˆ xZS )ÚWebSocketBaseTestCasec                 óV   •— t          ¦   «                              ¦   «          g | _        d S r    )r�   ÚsetUpÚconns_to_close©r$   r“   s    €r%   rÄ   zWebSocketBaseTestCase.setUpÛ   s"   ø€ Ý‰Œ�Š‰ŒˆØ ˆÔÐÐr'   c                 ó„   •— | j         D ]}|                     ¦   «          Œt          ¦   «                              ¦   «          d S r    )rÅ   r}   r�   ÚtearDown)r$   Úconnr“   s     €r%   rÈ   zWebSocketBaseTestCase.tearDownß   s@   ø€ ØÔ'ð 	ð 	ˆDØ�JŠJ‰LŒLˆLˆLÝ‰Œ×ÒÑÔÐÐÐr'   c              +   ó®   K  — t          d|                      ¦   «         |fz  fi |¤ŽV —}| j                             |¦  «         t	          j        |¦  «        ‚)Nzws://127.0.0.1:%d%s)r   Úget_http_portrÅ   Úappendr   ÚReturn)r$   Úpathr’   Úwss       r%   Ú
ws_connectz WebSocketBaseTestCase.ws_connectä   sl   è è € å$Ø! T×%7Ò%7Ñ%9Ô%9¸4Ð$@Ñ@ð
ð 
ØDJð
ð 
ð 
ð 
ˆð 	Ô×"Ò" 2Ñ&Ô&Ð&ÝŒj˜‰nŒnÐr'   )	r2   r3   r4   rÄ   rÈ   r   rB   rÐ   rš   r›   s   @r%   rÂ   rÂ   Ú   sn   ø€ € € € € ð!ð !ð !ð !ð !ðð ð ð ð ð
 	„]ðð ñ „]ðð ð ð ð r'   rÂ   c                   óÖ  ‡ — e Zd Zd„ Zd„ Zˆ fd„Zd„ Zd„ Zd„ Ze	d„ ¦   «         Z
d„ Ze	d	„ ¦   «         Ze	d
„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Z e	d„ ¦   «         Z!e	d„ ¦   «         Z"e	d „ ¦   «         Z#e	d!„ ¦   «         Z$e	d"„ ¦   «         Z%e	d#„ ¦   «         Z&e	d$„ ¦   «         Z'e	d%„ ¦   «         Z(ˆ xZ)S )&ÚWebSocketTestc                 ó"  — t          ¦   «         | _        t          dt          t	          | j        ¬¦  «        fdt
          fdt          fdt          t	          | j        ¬¦  «        fdt          t	          | j        ¬¦  «        fdt          t	          | j        ¬¦  «        fdt          t	          | j        ¬¦  «        fd	t          t	          | j        ¬¦  «        fd
t          t	          | j        ¬¦  «        fdt          t	          | j        ¬¦  «        fdt          t	          | j        ¬¦  «        fdt          t	          | j        ¬¦  «        fdt           t	          | j        | ¬¦  «        fdt"          fdt$          fdt&          fgt)          ddi¦  «        ¬¦  «        S )Nrv   )r"   ú/non_wsú	/redirectz/headerz/header_echoú/close_reasonú/error_in_on_messageú/async_preparez/path_args/(.*)ú
/coroutineú/renderú/subprotocolú/open_coroutine)r"   r¯   ú/error_in_openú/error_in_async_openú/nodelayrŸ   z<b>{{ message }}</b>)Útemplate_loader)r   r"   r   r8   Údictro   rt   rI   rb   rx   rD   r€   r†   r‹   r�   r¢   r­   r¶   rº   r½   r   r*   s    r%   Úget_appzWebSocketTest.get_appî   s¦  € Ý"™HœHˆÔÝà�+¥t¸Ô9JÐ'KÑ'KÔ'KÐLØÕ/Ð0Ø�oÐ.Ø�M­4¸TÔ=NÐ+OÑ+OÔ+OÐPà"Ý%Ý dÔ&7Ð8Ñ8Ô8ðð $Ý&Ý dÔ&7Ð8Ñ8Ô8ðð +Ý+Ý dÔ&7Ð8Ñ8Ô8ðð %Ý'Ý dÔ&7Ð8Ñ8Ô8ðð &Ý#Ý dÔ&7Ð8Ñ8Ô8ðð !Ý-Ý dÔ&7Ð8Ñ8Ô8ðð
 Õ0µ$ÀDÔDUÐ2VÑ2VÔ2VÐWà"Ý&Ý dÔ&7Ð8Ñ8Ô8ðð &Ý(Ý dÔ&7¸dÐCÑCÔCðð
 "Õ#5Ð6Ø'Õ)@ÐAØ�^Ð,ða1õd '¨Ð8NÐ'OÑPÔPðg4
ñ 4
ô 4
ð 4	
r'   c                 ó   — t          ¦   «         S r    r   r*   s    r%   Úget_http_clientzWebSocketTest.get_http_client&  s   € å$Ñ&Ô&Ð&r'   c                 ó„   •— t          ¦   «                              ¦   «          t          j                             ¦   «          d S r    )r�   rÈ   r   Ú_template_loadersÚclearrÆ   s    €r%   rÈ   zWebSocketTest.tearDown*  s4   ø€ Ý‰Œ×ÒÑÔÐÝÔ(×.Ò.Ñ0Ô0Ð0Ð0Ð0r'   c                 óf   — |                       d¦  «        }|                      |j        d¦  «         d S )Nrv   é�  ©ÚfetchÚassertEqualÚcode©r$   Úresponses     r%   Útest_http_requestzWebSocketTest.test_http_request.  s1   € à—:’:˜gÑ&Ô&ˆØ×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r'   c                 ór   — |                       dddddœ¬¦  «        }|                      |j        d¦  «         d S )Nrv   ÚUpgradeÚ	WebSocketÚ13©Ú
Connectionrò   zSec-WebSocket-Version©r[   ré   rê   rî   s     r%   Útest_missing_websocket_keyz(WebSocketTest.test_missing_websocket_key3  óP   € Ø—:’:Øà'Ø&Ø)-ðð ð ñ 
ô 
ˆð 	×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r'   c                 ór   — |                       dddddœ¬¦  «        }|                      |j        d¦  «         d S )Nrv   rò   ró   Ú12rõ   r÷   iª  rê   rî   s     r%   Útest_bad_websocket_versionz(WebSocketTest.test_bad_websocket_version>  rù   r'   c              #   ó¾   K  — |                       d¦  «        V —}|                     d¦  «        V — |                     ¦   «         V —}|                      |d¦  «         d S )Nrv   r¿   ©rÐ   r:   Úread_messagerì   ©r$   rÏ   rï   s      r%   Útest_websocket_genz WebSocketTest.test_websocket_genI  sh   è è € à—?’? 7Ñ+Ô+Ð+Ð+ˆØ×Ò˜wÑ'Ô'Ð'Ð'Ð'ØŸšÑ*Ô*Ð*Ð*ˆØ×Ò˜ 7Ñ+Ô+Ð+Ð+Ð+r'   c                 óV  ‡ — t          ¦   «         5  t          d‰                      ¦   «         z  ‰ j        ¬¦  «         d d d ¦  «         n# 1 swxY w Y   ‰                      ¦   «                              ¦   «         }|                     d¦  «         |                     ‰ j        ¦  «         ‰                      ¦   «                              ¦   «         }‰                      |d¦  «         ‰ j	         
                    ˆ fd„¦  «         |                     ¦   «          ‰                      ¦   «          d S )Núws://127.0.0.1:%d/echo)Úcallbackr¿   c                 ó,   •— ‰                      ¦   «         S r    )Ústop)Úfr$   s    €r%   ú<lambda>z8WebSocketTest.test_websocket_callbacks.<locals>.<lambda>Z  s   ø€ °d·i²i±k´k€ r'   )r   r   rË   r  r³   Úresultr:   rÿ   rì   r"   Úadd_done_callbackr}   r   s   `  r%   Útest_websocket_callbacksz&WebSocketTest.test_websocket_callbacksP  sD  ø€ ÝÑ!Ô!ð 	ð 	ÝØ(¨4×+=Ò+=Ñ+?Ô+?Ñ?È$Ì)ðñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð �YŠY‰[Œ[×ÒÑ!Ô!ˆØ
×Ò˜Ñ!Ô!Ð!Ø
�Š˜œ	Ñ"Ô"Ð"Ø—9’9‘;”;×%Ò%Ñ'Ô'ˆØ×Ò˜ 7Ñ+Ô+Ð+ØÔ×+Ò+Ð,AÐ,AÐ,AÐ,AÑBÔBÐBØ
�Š‰
Œ
ˆ
Ø�	Š	‰Œˆˆˆs   �,AÁAÁAc              #   ó¾   K  — |                       d¦  «        V —}|                     dd¬¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )Nrv   s   hello éT©Úbinaryrþ   r   s      r%   Útest_binary_messagez!WebSocketTest.test_binary_message^  sg   è è € à—?’? 7Ñ+Ô+Ð+Ð+ˆØ
×Ò˜¨tÐÑ4Ô4Ð4ØŸšÑ*Ô*Ð*Ð*ˆØ×Ò˜ =Ñ1Ô1Ð1Ð1Ð1r'   c              #   óº   K  — |                       d¦  «        V —}|                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         d S ©Nrv   u   hello Ã©rþ   r   s      r%   Útest_unicode_messagez"WebSocketTest.test_unicode_messagee  sb   è è € à—?’? 7Ñ+Ô+Ð+Ð+ˆØ
×Ò˜Ñ(Ô(Ð(ØŸšÑ*Ô*Ð*Ð*ˆØ×Ò˜ >Ñ2Ô2Ð2Ð2Ð2r'   c              #   óð   K  — |                       d¦  «        V —}|                     ¦   «          |                      t          ¦  «        5  |                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r  )rÐ   r}   ÚassertRaisesr   r:   ©r$   rÏ   s     r%   Ú)test_error_in_closed_client_write_messagez7WebSocketTest.test_error_in_closed_client_write_messagel  s·   è è € à—?’? 7Ñ+Ô+Ð+Ð+ˆØ
�Š‰
Œ
ˆ
Ø×ÒÕ3Ñ4Ô4ð 	-ð 	-Ø×Ò˜^Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s   ÁA+Á+A/Á2A/c              #   óº   K  — |                       d¦  «        V —}|                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )NrÚ   r¿   z<b>hello</b>rþ   r   s      r%   Útest_render_messagez!WebSocketTest.test_render_messages  sb   è è € à—?’? 9Ñ-Ô-Ð-Ð-ˆØ
×Ò˜Ñ!Ô!Ð!ØŸšÑ*Ô*Ð*Ð*ˆØ×Ò˜ >Ñ2Ô2Ð2Ð2Ð2r'   c              #   ó  K  — |                       d¦  «        V —}|                     d¦  «         t          t          d¦  «        5  |                     ¦   «         V —}d d d ¦  «         n# 1 swxY w Y   |                      |¦  «         d S )Nr×   r¿   úUncaught exception)rÐ   r:   r   r	   rÿ   ÚassertIsNoner   s      r%   Útest_error_in_on_messagez&WebSocketTest.test_error_in_on_messagez  sÇ   è è € à—?’?Ð#9Ñ:Ô:Ð:Ð:ˆØ
×Ò˜Ñ!Ô!Ð!Ý•wÐ 4Ñ5Ô5ð 	/ð 	/ØŸ_š_Ñ.Ô.Ð.Ð.ˆHð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/à×Ò˜(Ñ#Ô#Ð#Ð#Ð#s   ÁA'Á'A+Á.A+c              #   óÜ   K  — |                       t          ¦  «        5 }|                      d¦  «        V — d d d ¦  «         n# 1 swxY w Y   |                      |j        j        d¦  «         d S )Nz	/notfoundi”  )r  r   rÐ   rì   Ú	exceptionrí   )r$   Úcms     r%   Útest_websocket_http_failz&WebSocketTest.test_websocket_http_fail‚  s¥   è è € à×Ò�yÑ)Ô)ð 	/¨RØ—/’/ +Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/à×Ò˜œÔ*¨CÑ0Ô0Ð0Ð0Ð0s   �AÁAÁAc              #   óž   K  — |                       t          ¦  «        5  |                      d¦  «        V — d d d ¦  «         d S # 1 swxY w Y   d S )NrÔ   )r  r   rÐ   r*   s    r%   Útest_websocket_http_successz)WebSocketTest.test_websocket_http_successˆ  s–   è è € à×Ò�~Ñ.Ô.ð 	-ð 	-Ø—/’/ )Ñ,Ô,Ð,Ð,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ó   �AÁAÁ	Ac              #   óž   K  — |                       t          ¦  «        5  |                      d¦  «        V — d d d ¦  «         d S # 1 swxY w Y   d S )NrÕ   )r  r   rÐ   r*   s    r%   Útest_websocket_http_redirectz*WebSocketTest.test_websocket_http_redirect�  s–   è è € à×Ò�yÑ)Ô)ð 	/ð 	/Ø—/’/ +Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/r#  c              #   óD  K  — t          ¦   «         \  }}|                     ¦   «          |                      t          ¦  «        5  t	          t
          dd¬¦  «        5  t          d|z  d¬¦  «        V — d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nz.*F)Úrequiredzws://127.0.0.1:%d/i  )Úconnect_timeout)r   r}   r  ÚIOErrorr   r   r   )r$   ÚsockÚports      r%   Útest_websocket_network_failz)WebSocketTest.test_websocket_network_fail’  s/  è è € å%Ñ'Ô'‰
ˆˆdØ�
Š
‰ŒˆØ×Ò�wÑ'Ô'ð 	ð 	Ý�7 D°5Ð9Ñ9Ô9ð ð Ý'Ø(¨4Ñ/Àðñ ô ð ð ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s6   ÁBÁA=Á1BÁ=B	ÂBÂB	ÂBÂBÂBc              #   ó2  K  — t          j        t          d|                      ¦   «         z  ¦  «        V —¦  «        5 }|                     d¦  «         |                     d¦  «         |j                             ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nr  r¿   Úworld)Ú
contextlibÚclosingr   rË   r:   Ústreamr}   r  s     r%   Ú"test_websocket_close_buffered_dataz0WebSocketTest.test_websocket_close_buffered_dataœ  sØ   è è € åÔÝ$Ð%=À×@RÒ@RÑ@TÔ@TÑ%TÑUÔUÐUÐUñ
ô 
ð 	àØ×Ò˜WÑ%Ô%Ð%Ø×Ò˜WÑ%Ô%Ð%àŒI�OŠOÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   »ABÂBÂBc           	   #   ó&  K  — t          j        t          t          d|                      ¦   «         z  ddi¬¦  «        ¦  «        V —¦  «        5 }|                     ¦   «         V —}|                      |d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzws://127.0.0.1:%d/headerrK   r¿   r÷   )r/  r0  r   r   rË   rÿ   rì   r   s      r%   Útest_websocket_headersz$WebSocketTest.test_websocket_headers¦  sï   è è € õ Ôå'ÝØ2°T×5GÒ5GÑ5IÔ5IÑIØ!)¨7Ð 3ðñ ô ñô ð ð ñ	
ô 	
ð 	0ð ØŸ_š_Ñ.Ô.Ð.Ð.ˆHØ×Ò˜X wÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   Á-BÂB
ÂB
c           	   #   ó†  K  — t          j        t          t          d|                      ¦   «         z  ddi¬¦  «        ¦  «        V —¦  «        5 }|                      |j                             d¦  «        d¦  «         |                      |j                             d¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzws://127.0.0.1:%d/header_echozX-Test-Hellor¿   r÷   rd   re   )r/  r0  r   r   rË   rì   r[   r\   r  s     r%   Útest_websocket_header_echoz(WebSocketTest.test_websocket_header_echo¶  s  è è € õ
 Ôå'ÝØ7¸$×:LÒ:LÑ:NÔ:NÑNØ!/°Ð 9ðñ ô ñô ð ð ñ	
ô 	
ð 	ð Ø×Ò˜RœZŸ^š^¨NÑ;Ô;¸WÑEÔEÐEØ×ÒØ”
—’Ð8Ñ9Ô9Ð;Qñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÁAB6Â6B:Â=B:c              #   ó@  K  — |                       d¦  «        V —}|                     ¦   «         V —}|                      |d ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         | j        V —\  }}|                      |d¦  «         d S )NrÖ   rz   r{   )rÐ   rÿ   ÚassertIsrì   r.   r/   r"   )r$   rÏ   Úmsgrí   Úreasons        r%   Útest_server_close_reasonz&WebSocketTest.test_server_close_reasonÊ  s¦   è è € à—?’? ?Ñ3Ô3Ð3Ð3ˆØ—O’OÑ%Ô%Ð%Ð%ˆà�Š�c˜4Ñ Ô Ð Ø×Ò˜œ¨Ñ-Ô-Ð-Ø×Ò˜œ¨)Ñ4Ô4Ð4à!Ô.Ð.Ð.‰ˆˆfð 	×Ò˜˜tÑ$Ô$Ð$Ð$Ð$r'   c              #   óÔ   K  — |                       d¦  «        V —}|                     dd¦  «         | j        V —\  }}|                      |d¦  «         |                      |d¦  «         d S )Nrv   rz   r{   )rÐ   r}   r"   rì   )r$   rÏ   rí   r:  s       r%   Útest_client_close_reasonz&WebSocketTest.test_client_close_reasonÙ  su   è è € à—?’? 7Ñ+Ô+Ð+Ð+ˆØ
�Š��yÑ!Ô!Ð!Ø!Ô.Ð.Ð.‰ˆˆfØ×Ò˜˜tÑ$Ô$Ð$Ø×Ò˜ Ñ+Ô+Ð+Ð+Ð+r'   c              #   ó   K  — |                       d¦  «        V —}|                     ¦   «         V —}|                      |d ¦  «         |                      t          ¦  «        5  |                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÖ   r¿   )rÐ   rÿ   r8  r  r   r:   )r$   rÏ   r9  s      r%   Útest_write_after_closez$WebSocketTest.test_write_after_closeá  sÓ   è è € à—?’? ?Ñ3Ô3Ð3Ð3ˆØ—O’OÑ%Ô%Ð%Ð%ˆØ�Š�c˜4Ñ Ô Ð Ø×ÒÕ3Ñ4Ô4ð 	&ð 	&Ø×Ò˜WÑ%Ô%Ð%ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&ð 	&ð 	&s   Á BÂBÂ
Bc              #   óº   K  — |                       d¦  «        V —}|                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )NrØ   r¿   rþ   ©r$   rÏ   Úress      r%   Útest_async_preparez WebSocketTest.test_async_prepareé  se   è è € ð —?’?Ð#3Ñ4Ô4Ð4Ð4ˆØ
×Ò˜Ñ!Ô!Ð!Ø—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜gÑ&Ô&Ð&Ð&Ð&r'   c              #   ó�   K  — |                       d¦  «        V —}|                     ¦   «         V —}|                      |d¦  «         d S )Nz/path_args/hellor¿   ©rÐ   rÿ   rì   rA  s      r%   Útest_path_argszWebSocketTest.test_path_argsò  sO   è è € à—?’?Ð#5Ñ6Ô6Ð6Ð6ˆØ—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜gÑ&Ô&Ð&Ð&Ð&r'   c              #   óD  K  — |                       d¦  «        V —}|                     d¦  «        V — |                     d¦  «        V — |                     ¦   «         V —}|                      |d¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )NrÙ   Úhello1Úhello2rþ   rA  s      r%   Útest_coroutinezWebSocketTest.test_coroutineø  s­   è è € à—?’? <Ñ0Ô0Ð0Ð0ˆà×Ò˜xÑ(Ô(Ð(Ð(Ð(Ø×Ò˜xÑ(Ô(Ð(Ð(Ð(Ø—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜hÑ'Ô'Ð'Ø—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜hÑ'Ô'Ð'Ð'Ð'r'   c              #   ób  K  — |                       ¦   «         }d|z  }dd|z  i}t          j        t          t	          ||¬¦  «        ¦  «        V —¦  «        5 }|                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr  ÚOriginzhttp://127.0.0.1:%dr÷   r¿   ©rË   r/  r0  r   r   r:   rÿ   rì   ©r$   r+  Úurlr[   rÏ   rï   s         r%   Útest_check_origin_valid_no_pathz-WebSocketTest.test_check_origin_valid_no_path  s  è è € à×!Ò!Ñ#Ô#ˆà&¨Ñ-ˆØÐ2°TÑ9Ð:ˆåÔÝ$¥[°¸gÐ%FÑ%FÔ%FÑGÔGÐGÐGñ
ô 
ð 	0àØ×Ò˜WÑ%Ô%Ð%ØŸ_š_Ñ.Ô.Ð.Ð.ˆHØ×Ò˜X wÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ó   ÁAB$Â$B(Â+B(c              #   ób  K  — |                       ¦   «         }d|z  }dd|z  i}t          j        t          t	          ||¬¦  «        ¦  «        V —¦  «        5 }|                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr  rL  zhttp://127.0.0.1:%d/somethingr÷   r¿   rM  rN  s         r%   Ú!test_check_origin_valid_with_pathz/WebSocketTest.test_check_origin_valid_with_path  s  è è € à×!Ò!Ñ#Ô#ˆà&¨Ñ-ˆØÐ<¸tÑCÐDˆåÔÝ$¥[°¸gÐ%FÑ%FÔ%FÑGÔGÐGÐGñ
ô 
ð 	0àØ×Ò˜WÑ%Ô%Ð%ØŸ_š_Ñ.Ô.Ð.Ð.ˆHØ×Ò˜X wÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0rQ  c              #   ó.  K  — |                       ¦   «         }d|z  }dd|z  i}|                      t          ¦  «        5 }t          t	          ||¬¦  «        ¦  «        V — d d d ¦  «         n# 1 swxY w Y   |                      |j        j        d¦  «         d S )Nr  rL  z127.0.0.1:%dr÷   é“  ©rË   r  r   r   r   rì   r  rí   ©r$   r+  rO  r[   r  s        r%   Ú%test_check_origin_invalid_partial_urlz3WebSocketTest.test_check_origin_invalid_partial_url  sè   è è € à×!Ò!Ñ#Ô#ˆà&¨Ñ-ˆØ˜^¨dÑ2Ð3ˆà×Ò�yÑ)Ô)ð 	G¨RÝ#¥K°¸WÐ$EÑ$EÔ$EÑFÔFÐFÐFÐFð	Gð 	Gð 	Gñ 	Gô 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gøøøð 	Gð 	Gð 	Gð 	Gà×Ò˜œÔ*¨CÑ0Ô0Ð0Ð0Ð0s   ½!A*Á*A.Á1A.c              #   ó(  K  — |                       ¦   «         }d|z  }ddi}|                      t          ¦  «        5 }t          t	          ||¬¦  «        ¦  «        V — d d d ¦  «         n# 1 swxY w Y   |                      |j        j        d¦  «         d S )Nr  rL  zhttp://somewhereelse.comr÷   rU  rV  rW  s        r%   Útest_check_origin_invalidz'WebSocketTest.test_check_origin_invalid*  sè   è è € à×!Ò!Ñ#Ô#ˆà&¨Ñ-ˆð Ð7Ð8ˆà×Ò�yÑ)Ô)ð 	G¨RÝ#¥K°¸WÐ$EÑ$EÔ$EÑFÔFÐFÐFÐFð	Gð 	Gð 	Gñ 	Gô 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gøøøð 	Gð 	Gð 	Gð 	Gð 	×Ò˜œÔ*¨CÑ0Ô0Ð0Ð0Ð0s   º!A'Á'A+Á.A+c              #   óÒ  K  — |                       ¦   «         }t          ¦   «                              d|¦  «        V —}d„ |D ¦   «         }t          j        |vr|                      d¦  «         d S d|z  }ddi}|                      t          ¦  «        5 }t          t          ||¬¦  «        ¦  «        V — d d d ¦  «         n# 1 swxY w Y   |  
                    |j        j        d¦  «         d S )	NÚ	localhostc                 ó   — h | ]
}|d          ’ŒS )r   r6   )Ú.0Úaddrs     r%   ú	<setcomp>zEWebSocketTest.test_check_origin_invalid_subdomains.<locals>.<setcomp>@  s   € Ð1Ð1Ð1 �D˜”GÐ1Ð1Ð1r'   z"localhost does not resolve to ipv4zws://localhost:%d/echorL  zhttp://subtenant.localhostr÷   rU  )rË   r
   ÚresolveÚsocketÚAF_INETÚskipTestr  r   r   r   rì   r  rí   )r$   r+  ÚaddrinfoÚfamiliesrO  r[   r  s          r%   Ú$test_check_origin_invalid_subdomainsz2WebSocketTest.test_check_origin_invalid_subdomains8  sA  è è € à×!Ò!Ñ#Ô#ˆõ
 "™œ×+Ò+¨K¸Ñ>Ô>Ð>Ð>ˆØ1Ð1¨Ð1Ñ1Ô1ˆÝŒ> Ð)Ð)Ø�MŠMÐ>Ñ?Ô?Ð?ØˆFà&¨Ñ-ˆð Ð9Ð:ˆà×Ò�yÑ)Ô)ð 	G¨RÝ#¥K°¸WÐ$EÑ$EÔ$EÑFÔFÐFÐFÐFð	Gð 	Gð 	Gñ 	Gô 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gøøøð 	Gð 	Gð 	Gð 	Gð 	×Ò˜œÔ*¨CÑ0Ô0Ð0Ð0Ð0s   Â!B<Â<C ÃC c              #   óÎ   K  — |                       dddg¬¦  «        V —}|                      |j        d¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )NrÛ   Úbadprotor§   )r¨   zsubprotocol=goodproto)rÐ   rì   r«   rÿ   rA  s      r%   Útest_subprotocolszWebSocketTest.test_subprotocolsO  s   è è € à—?’?Ø¨*°kÐ)Bð #ñ 
ô 
ð 
ð 
ˆð 	×Ò˜Ô0°+Ñ>Ô>Ð>Ø—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜Ð5Ñ6Ô6Ð6Ð6Ð6r'   c              #   óÆ   K  — |                       d¦  «        V —}|                      |j        d ¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )NrÛ   zsubprotocol=None)rÐ   r8  r«   rÿ   rì   rA  s      r%   Útest_subprotocols_not_offeredz+WebSocketTest.test_subprotocols_not_offeredX  sf   è è € à—?’? >Ñ2Ô2Ð2Ð2ˆØ�Š�bÔ-¨tÑ4Ô4Ð4Ø—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜Ð0Ñ1Ô1Ð1Ð1Ð1r'   c              #   ó  K  — t          ¦   «         | _        |                      d¦  «        V —}|                     d¦  «        V — | j                             ¦   «          |                     ¦   «         V —}|                      |d¦  «         d S )NrÜ   r¿   rq   )r   r²   rÐ   r:   Úsetrÿ   rì   rA  s      r%   Útest_open_coroutinez!WebSocketTest.test_open_coroutine_  sŠ   è è € å!™GœGˆÔØ—?’?Ð#4Ñ5Ô5Ð5Ð5ˆØ×Ò˜wÑ'Ô'Ð'Ð'Ð'ØÔ×ÒÑÔÐØ—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜dÑ#Ô#Ð#Ð#Ð#r'   c              #   óè   K  — t          t          d¦  «        5  |                      d¦  «        V —}|                     ¦   «         V —}d d d ¦  «         n# 1 swxY w Y   |                      |¦  «         d S )Nr  rÝ   ©r   r	   rÐ   rÿ   r  rA  s      r%   Útest_error_in_openz WebSocketTest.test_error_in_openh  sµ   è è € å•wÐ 4Ñ5Ô5ð 	*ð 	*Ø—’Ð'7Ñ8Ô8Ð8Ð8ˆBØŸšÑ)Ô)Ð)Ð)ˆCð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	×Ò˜#ÑÔÐÐÐó   ˜.AÁAÁAc              #   óè   K  — t          t          d¦  «        5  |                      d¦  «        V —}|                     ¦   «         V —}d d d ¦  «         n# 1 swxY w Y   |                      |¦  «         d S )Nr  rÞ   rq  rA  s      r%   Útest_error_in_async_openz&WebSocketTest.test_error_in_async_openo  sµ   è è € å•wÐ 4Ñ5Ô5ð 	*ð 	*Ø—’Ð'=Ñ>Ô>Ð>Ð>ˆBØŸšÑ)Ô)Ð)Ð)ˆCð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	×Ò˜#ÑÔÐÐÐrs  c              #   ó�   K  — |                       d¦  «        V —}|                     ¦   «         V —}|                      |d¦  «         d S )Nrß   r¿   rE  rA  s      r%   Útest_nodelayzWebSocketTest.test_nodelayv  sN   è è € à—?’? :Ñ.Ô.Ð.Ð.ˆØ—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜gÑ&Ô&Ð&Ð&Ð&r'   )*r2   r3   r4   râ   rä   rÈ   rð   rø   rü   r   r  r  r  r  r  r  r  r   r"  r%  r,  r2  r4  r6  r;  r=  r?  rC  rF  rJ  rP  rS  rX  rZ  rg  rj  rl  ro  rr  ru  rw  rš   r›   s   @r%   rÒ   rÒ   í   s½  ø€ € € € € ð6
ð 6
ð 6
ðp'ð 'ð 'ð1ð 1ð 1ð 1ð 1ð-ð -ð -ð
	-ð 	-ð 	-ð	-ð 	-ð 	-ð ð,ð ,ñ „Xð,ðð ð ð ð2ð 2ñ „Xð2ð ð3ð 3ñ „Xð3ð ð-ð -ñ „Xð-ð ð3ð 3ñ „Xð3ð ð$ð $ñ „Xð$ð ð1ð 1ñ „Xð1ð
 ð-ð -ñ „Xð-ð ð/ð /ñ „Xð/ð ðð ñ „Xðð ðð ñ „Xðð ð0ð 0ñ „Xð0ð ðð ñ „Xðð& ð%ð %ñ „Xð%ð ð,ð ,ñ „Xð,ð ð&ð &ñ „Xð&ð ð'ð 'ñ „Xð'ð ð'ð 'ñ „Xð'ð
 ð(ð (ñ „Xð(ð ð0ð 0ñ „Xð0ð ð0ð 0ñ „Xð0ð ð1ð 1ñ „Xð1ð ð1ð 1ñ „Xð1ð ð1ð 1ñ „Xð1ð, ð7ð 7ñ „Xð7ð ð2ð 2ñ „Xð2ð ð$ð $ñ „Xð$ð ðð ñ „Xðð ðð ñ „Xðð ð'ð 'ñ „Xð'ð 'ð 'ð 'ð 'r'   rÒ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚNativeCoroutineOnMessageHandlerc                 óH   •—  t          ¦   «         j        di |¤Ž d| _        d S r�   rŽ   r‘   s     €r%   r&   z*NativeCoroutineOnMessageHandler.initialize~  r”   r'   c              ƒ   óè   K  — | j         dk    r|                      d¦  «         | xj         dz  c_         t          j        d¦  «        ƒ d {V —† | xj         dz  c_         |                      |¦  «         d S r–   r˜   r?   s     r%   rA   z*NativeCoroutineOnMessageHandler.on_message‚  s‚   è è € ØŒ=˜1ÒÐØ×ÒÐFÑGÔGÐGØˆŒ˜ÑˆŒÝŒi˜‰oŒoÐÐÐÐÐÐÐØˆŒ˜ÑˆŒØ×Ò˜7Ñ#Ô#Ð#Ð#Ð#r'   )r2   r3   r4   r&   rA   rš   r›   s   @r%   ry  ry  }  sG   ø€ € € € € ðð ð ð ð ð$ð $ð $ð $ð $ð $ð $r'   ry  c                   ó*   — e Zd Zd„ Zed„ ¦   «         ZdS )ÚWebSocketNativeCoroutineTestc                 ó0   — t          dt          fg¦  «        S )Nú/native)r   ry  r*   s    r%   râ   z$WebSocketNativeCoroutineTest.get_appŒ  s   € Ý˜YÕ(GÐHÐIÑJÔJÐJr'   c              #   óD  K  — |                       d¦  «        V —}|                     d¦  «        V — |                     d¦  «        V — |                     ¦   «         V —}|                      |d¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )Nr  rH  rI  rþ   rA  s      r%   Útest_native_coroutinez2WebSocketNativeCoroutineTest.test_native_coroutine�  s­   è è € à—?’? 9Ñ-Ô-Ð-Ð-ˆà×Ò˜xÑ(Ô(Ð(Ð(Ð(Ø×Ò˜xÑ(Ô(Ð(Ð(Ð(Ø—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜hÑ'Ô'Ð'Ø—O’OÑ%Ô%Ð%Ð%ˆØ×Ò˜˜hÑ'Ô'Ð'Ð'Ð'r'   N)r2   r3   r4   râ   r   r�  r6   r'   r%   r}  r}  ‹  sA   € € € € € ðKð Kð Kð ð(ð (ñ „Xð(ð (ð (r'   r}  c                   ód   — e Zd ZdZd„ Zd„ Zd„ Zdededdfd	„Ze	d
„ ¦   «         Z
e	d„ ¦   «         ZdS )ÚCompressionTestMixinzHello world. Testing 123 123c           	      óà   —  G d„ dt           ¦  «        }t          dt          t          |                      ¦   «         ¬¦  «        fd|t          |                      ¦   «         ¬¦  «        fg¦  «        S )Nc                   ó*   — e Zd Zed„ ¦   «         Zd„ ZdS )ú4CompressionTestMixin.get_app.<locals>.LimitedHandlerc                 ó   — dS )Né   r6   r*   s    r%   Úmax_message_sizezECompressionTestMixin.get_app.<locals>.LimitedHandler.max_message_size¡  s   € à�tr'   c                 ód   — |                       t          t          |¦  «        ¦  «        ¦  «         d S r    )r:   ÚstrÚlenr?   s     r%   rA   z?CompressionTestMixin.get_app.<locals>.LimitedHandler.on_message¥  s*   € Ø×"Ò"¥3¥s¨7¡|¤|Ñ#4Ô#4Ñ5Ô5Ð5Ð5Ð5r'   N)r2   r3   r4   Úpropertyr‰  rA   r6   r'   r%   ÚLimitedHandlerr†     s<   € € € € € Øðð ñ ŒXðð6ð 6ð 6ð 6ð 6r'   rŽ  rv   r)   ú/limited)r   r   r8   rá   Úget_server_compression_options)r$   rŽ  s     r%   râ   zCompressionTestMixin.get_appŸ  s”   € ð	6ð 	6ð 	6ð 	6ð 	6Õ1ñ 	6ô 	6ð 	6õ ð ÝÝ¨T×-PÒ-PÑ-RÔ-RÐSÑSÔSðð Ø"Ý¨T×-PÒ-PÑ-RÔ-RÐSÑSÔSððñ
ô 
ð 	
r'   c                 ó   — d S r    r6   r*   s    r%   r�  z3CompressionTestMixin.get_server_compression_options·  ó   € Øˆtr'   c                 ó   — d S r    r6   r*   s    r%   Úget_client_compression_optionsz3CompressionTestMixin.get_client_compression_optionsº  r’  r'   Úbytes_inÚ	bytes_outÚreturnNc                 ó   — t          ¦   «         ‚r    ©ÚNotImplementedError©r$   r•  r–  s      r%   Úverify_wire_bytesz&CompressionTestMixin.verify_wire_bytes½  ó   € Ý!Ñ#Ô#Ð#r'   c              #   óB  K  — |                       d|                      ¦   «         ¬¦  «        V —}t          d¦  «        D ]M}|                     | j        ¦  «         |                     ¦   «         V —}|                      || j        ¦  «         ŒN|                      |j        j        t          | j        ¦  «        dz  ¦  «         |                      |j        j
        t          | j        ¦  «        dz  ¦  «         |                      |j        j        |j        j        ¦  «         d S )Nrv   r)   é   )rÐ   r”  Úranger:   ÚMESSAGErÿ   rì   ÚprotocolÚ_message_bytes_outrŒ  Ú_message_bytes_inrœ  Ú_wire_bytes_inÚ_wire_bytes_out©r$   rÏ   Úirï   s       r%   Útest_message_sizesz'CompressionTestMixin.test_message_sizesÀ  s  è è € à—?’?Ø¨×)LÒ)LÑ)NÔ)Nð #ñ 
ô 
ð 
ð 
ˆõ
 �q‘”ð 	5ð 	5ˆAØ×Ò˜Tœ\Ñ*Ô*Ð*ØŸ_š_Ñ.Ô.Ð.Ð.ˆHØ×Ò˜X t¤|Ñ4Ô4Ð4Ð4Ø×Ò˜œÔ7½¸T¼\Ñ9JÔ9JÈQÑ9NÑOÔOÐOØ×Ò˜œÔ6½¸D¼LÑ8IÔ8IÈAÑ8MÑNÔNÐNØ×Ò˜rœ{Ô9¸2¼;Ô;VÑWÔWÐWÐWÐWr'   c              #   ób  K  — |                       d|                      ¦   «         ¬¦  «        V —}|                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         |                     d¦  «         |                     ¦   «         V —}|                      |¦  «         d S )Nr�  r)   Ú€aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaÚ128Á   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rÐ   r”  r:   rÿ   rì   r  r   s      r%   Útest_size_limitz$CompressionTestMixin.test_size_limitÏ  s¿   è è € à—?’?Ø¨D×,OÒ,OÑ,QÔ,Qð #ñ 
ô 
ð 
ð 
ˆð 	×Ò˜Ñ#Ô#Ð#ØŸšÑ*Ô*Ð*Ð*ˆØ×Ò˜ 5Ñ)Ô)Ð)ð 	×Ò˜Ñ$Ô$Ð$ØŸšÑ*Ô*Ð*Ð*ˆØ×Ò˜(Ñ#Ô#Ð#Ð#Ð#r'   )r2   r3   r4   r¡  râ   r�  r”  Úintrœ  r   r©  r®  r6   r'   r%   rƒ  rƒ  ›  s¨   € € € € € à,€Gð
ð 
ð 
ð0ð ð ðð ð ð$¨#ð $¸#ð $À$ð $ð $ð $ð $ð ðXð Xñ „XðXð ð$ð $ñ „Xð$ð $ð $r'   rƒ  c                   ó   — e Zd ZdZd„ ZdS )ÚUncompressedTestMixinzESpecialization of CompressionTestMixin when we expect no compression.c                 ó¾   — |                       |dt          | j        ¦  «        dz   z  ¦  «         |                       |dt          | j        ¦  «        dz   z  ¦  «         d S )NrŸ  é   é   )rì   rŒ  r¡  r›  s      r%   rœ  z'UncompressedTestMixin.verify_wire_bytesã  s\   € à×Ò˜ A­¨T¬\Ñ):Ô):¸QÑ)>Ñ$?Ñ@Ô@Ð@Ø×Ò˜ 1­¨D¬LÑ(9Ô(9¸AÑ(=Ñ#>Ñ?Ô?Ð?Ð?Ð?r'   N)r2   r3   r4   r5   rœ  r6   r'   r%   r±  r±  ß  s.   € € € € € àOÐOð@ð @ð @ð @ð @r'   r±  c                   ó   — e Zd ZdS )ÚNoCompressionTestN)r2   r3   r4   r6   r'   r%   r¶  r¶  é  s   € € € € € Ø€Dr'   r¶  c                   ó   — e Zd Zd„ ZdS )ÚServerOnlyCompressionTestc                 ó   — i S r    r6   r*   s    r%   r�  z8ServerOnlyCompressionTest.get_server_compression_optionsï  ó   € Øˆ	r'   N)r2   r3   r4   r�  r6   r'   r%   r¸  r¸  î  ó#   € € € € € ðð ð ð ð r'   r¸  c                   ó   — e Zd Zd„ ZdS )ÚClientOnlyCompressionTestc                 ó   — i S r    r6   r*   s    r%   r”  z8ClientOnlyCompressionTest.get_client_compression_optionsô  rº  r'   N)r2   r3   r4   r”  r6   r'   r%   r½  r½  ó  r»  r'   r½  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚDefaultCompressionTestc                 ó   — i S r    r6   r*   s    r%   r�  z5DefaultCompressionTest.get_server_compression_optionsù  rº  r'   c                 ó   — i S r    r6   r*   s    r%   r”  z5DefaultCompressionTest.get_client_compression_optionsü  rº  r'   c                 óð   — |                       |dt          | j        ¦  «        dz   z  ¦  «         |                       |dt          | j        ¦  «        dz   z  ¦  «         |                      ||dz   ¦  «         d S )NrŸ  r³  r´  é   )Ú
assertLessrŒ  r¡  rì   r›  s      r%   rœ  z(DefaultCompressionTest.verify_wire_bytesÿ  sr   € Ø�Š˜	 1­¨D¬LÑ(9Ô(9¸AÑ(=Ñ#>Ñ?Ô?Ð?Ø�Š˜ !¥s¨4¬<Ñ'8Ô'8¸1Ñ'<Ñ"=Ñ>Ô>Ð>à×Ò˜ H¨r¡MÑ2Ô2Ð2Ð2Ð2r'   N)r2   r3   r4   r�  r”  rœ  r6   r'   r%   rÀ  rÀ  ø  sA   € € € € € ðð ð ðð ð ð3ð 3ð 3ð 3ð 3r'   rÀ  c                   ó8   — e Zd Zdededefd„Zdej        fd„ZdS )ÚMaskFunctionMixinÚmaskÚdatar—  c                 ó   — t          ¦   «         ‚r    r™  ©r$   rÈ  rÉ  s      r%   rÈ  zMaskFunctionMixin.mask	  r�  r'   r$   c                 óþ  — |                       |                      dd¦  «        d¦  «         |                       |                      dd¦  «        d¦  «         |                       |                      dd¦  «        d¦  «         |                       |                      dd¦  «        d	¦  «         |                       |                      d
d¦  «        d¦  «         |                       |                      dd¦  «        d¦  «         d S )Ns   abcdr'   ó   bó   s   54321s   TVPVPs   ZXCVs   98765432s   c`t`olpds    s   ÿûýüþús   ÿúÿÿþûs   ÿûýüs    s   ÿúÿÿûþ)rì   rÈ  r*   s    r%   Ú	test_maskzMaskFunctionMixin.test_mask  sü   € Ø×Ò˜Ÿš 7¨CÑ0Ô0°#Ñ6Ô6Ð6Ø×Ò˜Ÿš 7¨DÑ1Ô1°7Ñ;Ô;Ð;Ø×Ò˜Ÿš 7¨HÑ5Ô5°xÑ@Ô@Ð@Ø×Ò˜Ÿš 7¨KÑ8Ô8¸+ÑFÔFÐFð 	×ÒØ�IŠIÐ)Ð+FÑGÔGØ'ñ	
ô 	
ð 	
ð 	×ÒØ�IŠIÐ)Ð+FÑGÔGØ'ñ	
ô 	
ð 	
ð 	
ð 	
r'   N)r2   r3   r4   r<   rÈ  ÚtypingÚAnyrÏ  r6   r'   r%   rÇ  rÇ    sZ   € € € € € ð$˜ð $ eð $°ð $ð $ð $ð $ð
˜œ
ð 
ð 
ð 
ð 
ð 
ð 
r'   rÇ  c                   ó   — e Zd Zd„ ZdS )ÚPythonMaskFunctionTestc                 ó"   — t          ||¦  «        S r    r   rË  s      r%   rÈ  zPythonMaskFunctionTest.mask  s   € Ý% d¨DÑ1Ô1Ð1r'   N©r2   r3   r4   rÈ  r6   r'   r%   rÓ  rÓ    s#   € € € € € ð2ð 2ð 2ð 2ð 2r'   rÓ  z#tornado.speedups module not presentc                   ó   — e Zd Zd„ ZdS )ÚCythonMaskFunctionTestc                 ó,   — t          j        ||¦  «        S r    )r   Úwebsocket_maskrË  s      r%   rÈ  zCythonMaskFunctionTest.mask%  s   € ÝÔ& t¨TÑ2Ô2Ð2r'   NrÕ  r6   r'   r%   r×  r×  #  s#   € € € € € ð3ð 3ð 3ð 3ð 3r'   r×  c                   ó*   — e Zd Zd„ Zed„ ¦   «         ZdS )ÚServerPeriodicPingTestc                 óR   —  G d„ dt           ¦  «        }t          d|fgdd¬¦  «        S )Nc                   ó   — e Zd Zd„ ZdS )ú3ServerPeriodicPingTest.get_app.<locals>.PingHandlerc                 ó0   — |                       d¦  «         d S )Núgot pongr„   ©r$   rÉ  s     r%   Úon_pongz;ServerPeriodicPingTest.get_app.<locals>.PingHandler.on_pong,  ó   € Ø×"Ò" :Ñ.Ô.Ð.Ð.Ð.r'   N)r2   r3   r4   râ  r6   r'   r%   ÚPingHandlerrÞ  +  ó#   € € € € € ð/ð /ð /ð /ð /r'   rä  ú/r—   r   )Úwebsocket_ping_intervalÚwebsocket_ping_timeout©r   r   ©r$   rä  s     r%   râ   zServerPeriodicPingTest.get_app*  sW   € ð	/ð 	/ð 	/ð 	/ð 	/Õ.ñ 	/ô 	/ð 	/õ Ø�;ÐÐ Ø$(Ø#$ð
ñ 
ô 
ð 	
r'   c              #   ó´   K  — |                       d¦  «        V —}t          d¦  «        D ].}|                     ¦   «         V —}|                      |d¦  «         Œ/d S )Nræ  rŸ  rà  )rÐ   r   rÿ   rì   r§  s       r%   Útest_server_pingz'ServerPeriodicPingTest.test_server_ping5  sj   è è € à—?’? 3Ñ'Ô'Ð'Ð'ˆÝ�q‘”ð 	3ð 	3ˆAØŸ_š_Ñ.Ô.Ð.Ð.ˆHØ×Ò˜X zÑ2Ô2Ð2Ð2ð	3ð 	3r'   N)r2   r3   r4   râ   r   rì  r6   r'   r%   rÛ  rÛ  )  s>   € € € € € ð	
ð 	
ð 	
ð ð3ð 3ñ „Xð3ð 3ð 3r'   rÛ  c                   ó*   — e Zd Zd„ Zed„ ¦   «         ZdS )ÚClientPeriodicPingTestc                 óL   —  G d„ dt           ¦  «        }t          d|fg¦  «        S )Nc                   ó   — e Zd Zd„ ZdS )ú3ClientPeriodicPingTest.get_app.<locals>.PingHandlerc                 ó0   — |                       d¦  «         d S )Núgot pingr„   rá  s     r%   Úon_pingz;ClientPeriodicPingTest.get_app.<locals>.PingHandler.on_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?  sE   € ð	/ð 	/ð 	/ð 	/ð 	/Õ.ñ 	/ô 	/ð 	/õ ˜S +Ð.Ð/Ñ0Ô0Ð0r'   c              #   óâ   K  — |                       ddd¬¦  «        V —}t          d¦  «        D ].}|                     ¦   «         V —}|                      |d¦  «         Œ/|                     ¦   «          d S )Nræ  r—   r   ©Úping_intervalÚping_timeoutrŸ  ró  )rÐ   r   rÿ   rì   r}   r§  s       r%   Útest_client_pingz'ClientPeriodicPingTest.test_client_pingF  sw   è è € à—?’? 3°dÈ�?ÑKÔKÐKÐKˆÝ�q‘”ð 	3ð 	3ˆAØŸ_š_Ñ.Ô.Ð.Ð.ˆHØ×Ò˜X zÑ2Ô2Ð2Ð2Ø
�Š‰
Œ
ˆ
ˆ
ˆ
r'   N)r2   r3   r4   râ   r   rú  r6   r'   r%   rî  rî  >  s>   € € € € € ð1ð 1ð 1ð ðð ñ „Xðð ð r'   rî  c                   ó@   — e Zd Zd„ Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚServerPingTimeoutTestc                 óh   ‡— g | _         | Š G ˆfd„dt          ¦  «        }t          d|fg¦  «        }|S )Nc                   ó$   •‡ — e Zd Zdˆ ˆfd„	Zˆ xZS )ú2ServerPingTimeoutTest.get_app.<locals>.PingHandlerNc                 ó–   •— ‰j         | _         | j                              | ¦  «         t          ¦   «                              ||¬¦  «        S )Nr!   )ÚhandlersrÌ   r�   r&   )r$   r"   r#   r“   r¯   s      €€r%   r&   z=ServerPingTimeoutTest.get_app.<locals>.PingHandler.initializeU  sI   ø€ Ø $¤�”à”×$Ò$ TÑ*Ô*Ð*Ý‘w”w×)Ò)Ø!-ÐCVð *ñ ô ð r'   r1   )r2   r3   r4   r&   rš   )r“   r¯   s   @€r%   rä  rÿ  T  sC   øø€ € € € € ðð ð ð ð ð ð ð ð ð ð r'   rä  ræ  )r  r   r   )r$   rä  Úappr¯   s      @r%   râ   zServerPingTimeoutTest.get_appP  s`   ø€ Ø02ˆŒØˆð	ð 	ð 	ð 	ð 	ð 	ð 	Õ.ñ 	ô 	ð 	õ ˜C Ð-Ð.Ñ/Ô/ˆØˆ
r'   c                 ól   ‡ — d‰ _         d‰ _        ˆ fd„} |‰ j        j        ¦  «        ‰ j        _        dS )z1Optionally suppress the client's "pong" response.Fr   c                 ó4   •‡ — dt           dt          fˆ ˆfd„}|S )NÚopcoderÉ  c                 óZ   •— | dk    r‰xj         dz  c_         ‰j        rd S  ‰| |¦  «        S )Né
   rF   )Úpongs_receivedÚ
drop_pongs)r  rÉ  ÚfcnrÏ   s     €€r%   Ú_innerzCServerPingTimeoutTest.install_hook.<locals>.wrapper.<locals>._innerh  sA   ø€ Ø˜S’=�=ØÐ%Ô%¨Ñ*Ð%Ô%Ø”}ð à˜à�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`  sN   ø€ ð ˆŒØˆÔð
	ð 
	ð 
	ð 
	ð 
	ð '. g¨b¬kÔ.IÑ&JÔ&JˆŒÔ#Ð#Ð#r'   c              #   ó‚  K  — d}|                       d||dz  ¬¦  «        V —}|                      |¦  «         | j        d         }t          d¦  «        D ]Z}t	          j        |¦  «        V — |                      |j        ¦  «         |                      |j        ¦  «         |j	        j        �J ‚Œ[|  
                    |j        d¦  «         d|_        t	          j        |dz  ¦  «        V — |                      |j        d	¦  «         |                      |j        d
¦  «         |                      |j	        j        d	¦  «         d S )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  sg  è è € ð ˆØ—?’?Ø˜x°hÀ±lð #ñ 
ô 
ð 
ð 
ˆð 	×Ò˜"ÑÔÐð ”- Ô"ˆå�q‘”ð 		2ð 		2ˆAå”)˜HÑ%Ô%Ð%Ð%Ð%ð ×Ò˜gÔ0Ñ1Ô1Ð1Ø×Ò˜gÔ2Ñ3Ô3Ð3ð ”;Ô)Ð1Ð1Ð1Ð1ð 	×Ò Ô 1°1Ñ5Ô5Ð5ð ˆŒõ Œi˜ 3™Ñ'Ô'Ð'Ð'Ð'ð 	×Ò˜Ô+¨TÑ2Ô2Ð2Ø×Ò˜Ô-Ð/?Ñ@Ô@Ð@ð 	×Ò˜œÔ/°Ñ6Ô6Ð6Ð6Ð6r'   N)r2   r3   r4   râ   Ústaticmethodr  r   r  r6   r'   r%   rü  rü  O  s\   € € € € € ðð ð ð  ðKð Kñ „\ðKð( ð%7ð %7ñ „Xð%7ð %7ð %7r'   rü  c                   ó   — e Zd Zd„ ZdS )ÚPingCalculationTestc           	      ób  — 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        ¬¦  «        }|                     |                     ¦   «         ||                     ¦   «         ¬¦  «        }|                      |d¦  «         d S )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Ð9Ð9Ð9Ð9Ð9åÔ  a¨¨B°°1½XÔ=NÔ=RÐSÑSÔSˆØˆÝ!Ô*Ø�!�Q˜˜B ­8Ô+<Ô+@ð
ñ 
ô 
ˆð )×8Ò8Ø)×3Ò3Ñ5Ô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dS )ÚManualPingTestc                 óL   —  G d„ dt           ¦  «        }t          d|fg¦  «        S )Nc                   ó   — e Zd Zd„ ZdS )ú+ManualPingTest.get_app.<locals>.PingHandlerc                 óZ   — |                       |t          |t          ¦  «        ¬¦  «         d S )Nr  )r:   r;   r<   rá  s     r%   rô  z3ManualPingTest.get_app.<locals>.PingHandler.on_ping²  s+   € Ø×"Ò" 4µ
¸4ÅÑ0GÔ0GÐ"ÑHÔHÐHÐHÐHr'   Nrõ  r6   r'   r%   rä  r.  ±  s(   € € € € € ðIð Ið Ið Ið Ir'   rä  ræ  ré  rê  s     r%   râ   zManualPingTest.get_app°  sM   € ð	Ið 	Ið 	Ið 	Ið 	IÕ.ñ 	Iô 	Ið 	Iõ ˜S +Ð.Ð/Ñ0Ô0Ð0r'   c              #   ó~  K  — |                       d¦  «        V —}|                      t          |j        d¦  «         |                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         |                     d¦  «         |                     ¦   «         V —}|                      |d¦  «         d S )Nræ  Ú~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar¿   s   hellos   binary hello)rÐ   r  Ú
ValueErrorÚpingrÿ   rì   )r$   rÏ   Úresps      r%   Útest_manual_pingzManualPingTest.test_manual_ping·  s·   è è € à—?’? 3Ñ'Ô'Ð'Ð'ˆà×Ò�* b¤g¨yÑ9Ô9Ð9à
�Š�ÑÔÐØ—_’_Ñ&Ô&Ð&Ð&ˆà×Ò˜˜xÑ(Ô(Ð(à
�Š�Ñ Ô Ð Ø—_’_Ñ&Ô&Ð&Ð&ˆØ×Ò˜˜Ñ/Ô/Ð/Ð/Ð/r'   N)r2   r3   r4   râ   r   r5  r6   r'   r%   r+  r+  ¯  s>   € € € € € ð1ð 1ð 1ð ð0ð 0ñ „Xð0ð 0ð 0r'   r+  c                   ó*   — e Zd Zd„ Zed„ ¦   «         ZdS )ÚMaxMessageSizeTestc                 ó4   — t          dt          fgd¬¦  «        S )Nræ  rˆ  )Úwebsocket_max_message_size)r   r8   r*   s    r%   râ   zMaxMessageSizeTest.get_appÈ  s   € Ý˜S¥+Ð.Ð/ÈDÐQÑQÔQÐQr'   c              #   ó²  K  — |                       d¦  «        V —}d}|                     |¦  «         |                     ¦   «         V —}|                      ||¦  «         |                     |dz   ¦  «         |                     ¦   «         V —}|                      |d ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         d S )Nræ  Á   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaÚbiñ  zmessage too big)rÐ   r:   rÿ   rì   r8  r.   r/   )r$   rÏ   r9  r4  s       r%   Útest_large_messagez%MaxMessageSizeTest.test_large_messageË  sÝ   è è € à—?’? 3Ñ'Ô'Ð'Ð'ˆð ˆØ
×Ò˜ÑÔÐØ—_’_Ñ&Ô&Ð&Ð&ˆØ×Ò˜˜sÑ#Ô#Ð#ð 	×Ò˜˜s™Ñ#Ô#Ð#Ø—_’_Ñ&Ô&Ð&Ð&ˆà�Š�d˜DÑ!Ô!Ð!Ø×Ò˜œ¨Ñ-Ô-Ð-Ø×Ò˜œÐ*;Ñ<Ô<Ð<Ð<Ð<r'   N)r2   r3   r4   râ   r   r=  r6   r'   r%   r7  r7  Ç  sA   € € € € € ðRð Rð Rð ð=ð =ñ „Xð=ð =ð =r'   r7  )Ur=   r/  r#  rO   rb  Ú	tracebackrÐ  ÚunittestÚtornado.concurrentr   Útornador   Útornado.httpclientr   r   Útornado.locksr   Útornado.logr   r	   Útornado.netutilr
   Útornado.simple_httpclientr   Útornado.templater   Útornado.test.utilr   r   Útornado.testingr   r   r   r   Útornado.webr   r   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Ò   ry  r}  rƒ  r±  r¶  r¸  r½  rÀ  ÚTestCaserÇ  rÓ  ÚskipIfr×  rÛ  rî  rü  r  r+  r7  r6   r'   r%   ú<module>rP     s»  ðØ €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€à %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø $Ð $Ð $Ð $Ð $Ð $Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ð	
ØÐÐÐØ3Ð3Ð3Ð3Ð3Ð3Ð3øØð 
ð 
ð 
ð
 €IÔÑÔÐØ	ð
øøøðð ð ð ð ð ð ð ð ð ð ð ðØ Ð Ð Ð Ð Ð Ð øØð ð ð Ø€H€H€HðøøøðOð Oð Oð Oð OÐ+ñ Oô Oð Oð(ð ð ð ð Ð&ñ ô ð ðð ð ð ð Ð2ñ ô ð ð
Cð Cð Cð Cð CÐ(ñ Cô Cð Cð,&ð &ð &ð &ð &Ð,ñ &ô &ð &ðð ð ð ð ˜.ñ ô ð ð
ð ð ð ð �nñ ô ð ð
$ð $ð $ð $ð $Ð-ñ $ô $ð $ð$ð $ð $ð $ð $Ð.ñ $ô $ð $ð ð  ð  ð  ð  Ð*ñ  ô  ð  ð
$ð $ð $ð $ð $Ð 4ñ $ô $ð $ðPð Pð Pð Pð PÐ/ñ Pô Pð Pð
Ið Ið Ið Ið IÐ-ñ Iô Ið Ið&!ð !ð !ð !ð !Ð/ñ !ô !ð !ð$ ð  ð  ð  ð  Ð-ñ  ô  ð  ð
 ð  ð  ð  ð  Ð2ñ  ô  ð  ð$ð $ð $ð $ð $Ð)ñ $ô $ð $ðð ð ð ð Ð-ñ ô ð ð&M'ð M'ð M'ð M'ð M'Ð)ñ M'ô M'ð M'ð`$ð $ð $ð $ð $Ð&:ñ $ô $ð $ð(ð (ð (ð (ð (Ð#8ñ (ô (ð (ð  ð@$ð @$ð @$ð @$ð @$Ð0ñ @$ô @$ñ Ôð@$ðF ð@ð @ð @ð @ð @Ð0ñ @ô @ñ Ôð@ð	ð 	ð 	ð 	ð 	Ð-ñ 	ô 	ð 	ð
ð ð ð ð Ð 5ñ ô ð ð
ð ð ð ð Ð 5ñ ô ð ð
3ð 3ð 3ð 3ð 3Ð1ñ 3ô 3ð 3ð ð
ð 
ð 
ð 
ð 
˜Ô)ñ 
ô 
ñ Ôð
ð.2ð 2ð 2ð 2ð 2Ð.ñ 2ô 2ð 2ð
 €„�˜TÐ!Ð#HÑIÔIð3ð 3ð 3ð 3ð 3Ð.ñ 3ô 3ñ JÔIð3ð
3ð 3ð 3ð 3ð 3Ð2ñ 3ô 3ð 3ð*ð ð ð ð Ð2ñ ô ð ð"L7ð L7ð L7ð L7ð L7Ð1ñ L7ô L7ð L7ð^(ð (ð (ð (ð (˜(Ô+ñ (ô (ð (ð"0ð 0ð 0ð 0ð 0Ð*ñ 0ô 0ð 0ð0=ð =ð =ð =ð =Ð.ñ =ô =ð =ð =ð =s   Á2
A= Á=BÂ#B* Â*B4Â3B4