§
    ŸöÉgÖG  ã                   ó@  — d dl Z d dlZ d dlZd dlZd dlmZ d dl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 	 	 d dlZn# e$ r  G d„ d	e¦  «        ZY nw xY we j                             d
d¦  «        dk    Ze j                             dd¦  «        Zedk    ZdZd„ Z G d„ d¦  «        Z G d„ de¦  «        Z  G d„ dej!        ¦  «        Z" G d„ dej!        ¦  «        Z# G d„ dej!        ¦  «        Z$ G d„ dej!        ¦  «        Z%e&dk    r ej'        ¦   «          dS dS )é    N)Údecodebytes)ÚWebSocketBadStatusExceptionÚWebSocketAddressException)Ú_create_sec_websocket_key)Ú	_validate)Úread_headers)Úvalidate_utf8c                   ó   — e Zd ZdS )ÚSSLErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    új/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/websocket/tests/test_websocket.pyr   r   '   s   € € € € € Øˆr   r   ÚTEST_WITH_INTERNETÚ0Ú1ÚLOCAL_WS_SERVER_PORTz-1Tc                 ó   — dS )NÚabcdr   )Ú_s    r   Úcreate_mask_keyr   3   s   € Øˆ6r   c                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSockMockc                 ó"   — g | _         g | _        d S ©N)ÚdataÚsent©Úselfs    r   Ú__init__zSockMock.__init__8   s   € ØˆŒ	ØˆŒ	ˆ	ˆ	r   c                 ó:   — | j                              |¦  «         d S r   )r   Úappend©r!   r   s     r   Ú
add_packetzSockMock.add_packet<   s   € ØŒ	×Ò˜ÑÔÐÐÐr   c                 ó   — d S r   r   r    s    r   Ú
gettimeoutzSockMock.gettimeout?   s   € Øˆtr   c                 óö   — | j         rq| j                              d¦  «        }t          |t          ¦  «        r|‚t	          |¦  «        |k    r#| j                              d||d …         ¦  «         |d |…         S d S )Nr   )r   ÚpopÚ
isinstanceÚ	ExceptionÚlenÚinsert)r!   ÚbufsizeÚes      r   ÚrecvzSockMock.recvB   s   € ØŒ9ð 	Ø”	—’˜aÑ Ô ˆAÝ˜!�YÑ'Ô'ð Ø�Ý�1‰vŒv˜ÒÐØ”	× Ò   A g h h¤KÑ0Ô0Ð0Ø�X�g�X”;Ðð	ð 	r   c                 óT   — | j                              |¦  «         t          |¦  «        S r   )r   r$   r-   r%   s     r   ÚsendzSockMock.sendK   s$   € ØŒ	×Ò˜ÑÔÐÝ�4‰yŒyÐr   c                 ó   — d S r   r   r    s    r   ÚclosezSockMock.closeO   ó   € Øˆr   N)	r   r   r   r"   r&   r(   r1   r3   r5   r   r   r   r   r   7   sn   € € € € € ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð ð r   r   c                   ó   — e Zd Zd„ ZdS )ÚHeaderSockMockc                 ó^  — t                                | ¦  «         t          j                             t          j                             t          ¦  «        |¦  «        }t          |d¦  «        5 }|                      | 	                    ¦   «         ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚrb)
r   r"   ÚosÚpathÚjoinÚdirnameÚ__file__Úopenr&   Úread)r!   Úfnamer<   Úfs       r   r"   zHeaderSockMock.__init__T   sÄ   € Ý×Ò˜$ÑÔÐÝŒw�|Š|�BœGŸOšO­HÑ5Ô5°uÑ=Ô=ˆÝ�$˜ÑÔð 	& Ø�OŠO˜AŸFšF™HœHÑ%Ô%Ð%ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&ð 	&ð 	&s   Á-(B"Â"B&Â)B&N)r   r   r   r"   r   r   r   r8   r8   S   s#   € € € € € ð&ð &ð &ð &ð &r   r8   c                   ó  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Z ej        ed
¦  «        d„ ¦   «         Z ej        ed
¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z ej        ed¦  «        d„ ¦   «         Z ej        ed¦  «        d„ ¦   «         Z ej        ed
¦  «        d„ ¦   «         Z ej        ed
¦  «        d„ ¦   «         Z ej        ed¦  «        d„ ¦   «         Z ej        ed¦  «        d„ ¦   «         ZdS )ÚWebSocketTestc                 ó8   — t          j        t          ¦  «         d S r   )ÚwsÚenableTraceÚ	TRACEABLEr    s    r   ÚsetUpzWebSocketTest.setUp\   s   € Ý
Œ•yÑ!Ô!Ð!Ð!Ð!r   c                 ó   — d S r   r   r    s    r   ÚtearDownzWebSocketTest.tearDown_   r6   r   c                 óò   — |                       t          j        ¦   «         d ¦  «         t          j        d¦  «         |                       t          j        ¦   «         d¦  «         t          j        d ¦  «         d S )Né
   )ÚassertEqualrG   ÚgetdefaulttimeoutÚsetdefaulttimeoutr    s    r   Útest_default_timeoutz"WebSocketTest.test_default_timeoutb   sh   € Ø×Ò�Ô-Ñ/Ô/°Ñ6Ô6Ð6Ý
Ô˜RÑ Ô Ð Ø×Ò�Ô-Ñ/Ô/°Ñ4Ô4Ð4Ý
Ô˜TÑ"Ô"Ð"Ð"Ð"r   c                 ó‚   — t          ¦   «         }|                      |dk    ¦  «         |                      d|v¦  «         d S )Né   u   Â¥n)r   Ú
assertTrue)r!   Úkeys     r   Útest_ws_keyzWebSocketTest.test_ws_keyh   s@   € Ý'Ñ)Ô)ˆØ�Š˜˜rš	Ñ"Ô"Ð"Ø�Š˜ SÐ(Ñ)Ô)Ð)Ð)Ð)r   c                 ó¬   — t          ¦   «         }t          |                     d¦  «        ¦  «        }|                      dt	          |¦  «        ¦  «         dS )z/WebSocket key should be a random 16-byte nonce.zutf-8é   N)r   Úbase64decodeÚencoderO   r-   )r!   rV   Únonces      r   Ú
test_noncezWebSocketTest.test_noncem   sH   € å'Ñ)Ô)ˆÝ˜SŸZšZ¨Ñ0Ô0Ñ1Ô1ˆØ×Ò˜�S ™ZœZÑ(Ô(Ð(Ð(Ð(r   c                 óˆ  — d}ddddœ}|                       t          ||d ¦  «        d¦  «         |                     ¦   «         }d|d<   |                       t          ||d ¦  «        d¦  «         |d= |                       t          ||d ¦  «        d¦  «         |                     ¦   «         }d	|d
<   |                       t          ||d ¦  «        d¦  «         |d
= |                       t          ||d ¦  «        d¦  «         |                     ¦   «         }d	|d<   |                       t          ||d ¦  «        d¦  «         |d= |                       t          ||d ¦  «        d¦  «         |                     ¦   «         }d|d<   |                       t          ||ddg¦  «        d¦  «         |                       t          ||ddg¦  «        d¦  «         |                     ¦   «         }d|d<   |                       t          ||ddg¦  «        d¦  «         |                     ¦   «         }|                       t          ||ddg¦  «        d¦  «         d S )Nzc6b8hTg4EeGb2gQMztV1/g==Ú	websocketÚupgradezKxep+hNu9n51529fGidYu7a3wO0=)r`   Ú
connectionúsec-websocket-accept)TNÚhttp)FNÚ	somethingra   rb   Úsub1zsec-websocket-protocolÚsub2)Tre   Úsub3ÚsUb1ÚSub1ÚsuB2)rO   Ú_validate_headerÚcopy)r!   rV   Úrequired_headerÚheaders       r   Útest_ws_utilszWebSocketTest.test_ws_utilss   s}  € Ø(ˆà"Ø#Ø$Bð
ð 
ˆð
 	×ÒÕ)¨/¸3ÀÑEÔEÀ|ÑTÔTÐTà ×%Ò%Ñ'Ô'ˆØ"ˆˆyÑØ×ÒÕ)¨&°#°tÑ<Ô<¸mÑLÔLÐLØ�9ÐØ×ÒÕ)¨&°#°tÑ<Ô<¸mÑLÔLÐLà ×%Ò%Ñ'Ô'ˆØ*ˆˆ|ÑØ×ÒÕ)¨&°#°tÑ<Ô<¸mÑLÔLÐLØ�<Ð Ø×ÒÕ)¨&°#°tÑ<Ô<¸mÑLÔLÐLà ×%Ò%Ñ'Ô'ˆØ)4ˆÐ%Ñ&Ø×ÒÕ)¨&°#°tÑ<Ô<¸mÑLÔLÐLØÐ)Ð*Ø×ÒÕ)¨&°#°tÑ<Ô<¸mÑLÔLÐLà ×%Ò%Ñ'Ô'ˆØ+1ˆÐ'Ñ(Ø×ÒÝ˜V S¨6°6Ð*:Ñ;Ô;¸^ñ	
ô 	
ð 	
ð 	×ÒÕ)¨&°#¸ÀÐ7GÑHÔHÈ-ÑXÔXÐXà ×%Ò%Ñ'Ô'ˆØ+1ˆÐ'Ñ(Ø×ÒÝ˜V S¨6°6Ð*:Ñ;Ô;¸^ñ	
ô 	
ð 	
ð !×%Ò%Ñ'Ô'ˆà×ÒÕ)¨&°#¸ÀÐ7GÑHÔHÈ-ÑXÔXÐXÐXÐXr   c                 óÒ  — t          t          d¦  «        ¦  «        \  }}}|                      |d¦  «         |                      |d         d¦  «         t          t          d¦  «        ¦  «        \  }}}|                      |d¦  «         |                      |d         d¦  «         t          d¦  «         |                      t          j        t           t          d¦  «        ¦  «         d S )Núdata/header01.txtée   ra   ÚUpgradezdata/header03.txtzUpgrade, Keep-Alivezdata/header02.txt)r   r8   rO   ÚassertRaisesrG   ÚWebSocketException)r!   Ústatusrn   r   s       r   Útest_read_headerzWebSocketTest.test_read_header    sã   € Ý(­Ð8KÑ)LÔ)LÑMÔMÑˆ�˜Ø×Ò˜ Ñ%Ô%Ð%Ø×Ò˜ Ô-¨yÑ9Ô9Ð9å(­Ð8KÑ)LÔ)LÑMÔMÑˆ�˜Ø×Ò˜ Ñ%Ô%Ð%Ø×Ò˜ Ô-Ð/DÑEÔEÐEåÐ*Ñ+Ô+Ð+Ø×ÒÝÔ!¥<µÐ@SÑ1TÔ1Tñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó¶  — t          j        ¦   «         }|                     t          ¦  «         t	          d¦  «        x}|_        |                     d¦  «         |                      |j        d         d¦  «         |                     d¦  «         |                      |j        d         d¦  «         |                      | 	                    d¦  «        d	¦  «         d S )
Nrq   ÚHellor   ó   �…abcd)õ   ã�“ã‚“ã�«ã�¡ã�¯é   ó   ��abcd‚ãð‡ãñ€åÊ�âÅ‚ãÌs   1111111111101é   )
rG   Ú	WebSocketÚset_mask_keyr   r8   Úsockr3   rO   r   Úsend_binary©r!   r�   Úss      r   Ú	test_sendzWebSocketTest.test_send®   sÉ   € åŒ|‰~Œ~ˆØ×Ò�/Ñ*Ô*Ð*Ý&Ð':Ñ;Ô;Ð;ˆˆDŒIØ�	Š	�'ÑÔÐØ×Ò˜œ œÐ$DÑEÔEÐEà�	Š	Ð#Ñ$Ô$Ð$Ø×ÒØŒF�1ŒIØWñ	
ô 	
ð 	
ð 	×Ò˜×)Ò)Ð*:Ñ;Ô;¸RÑ@Ô@Ð@Ð@Ð@r   c                 óV  — t          j        ¦   «         }t          ¦   «         x}|_        d}|                     |¦  «         |                     ¦   «         }|                      |d¦  «         |                     d¦  «         |                     ¦   «         }|                      |d¦  «         d S )Nr}   r{   rz   ry   )rG   r   r   r�   r&   r1   rO   )r!   r�   r„   rd   r   s        r   Ú	test_recvzWebSocketTest.test_recvÁ   s™   € åŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIàWð 	ð 	
�Š�YÑÔÐØ�yŠy‰{Œ{ˆØ×Ò˜Ð0Ñ1Ô1Ð1à	�ŠÐ5Ñ6Ô6Ð6Ø�yŠy‰{Œ{ˆØ×Ò˜˜wÑ'Ô'Ð'Ð'Ð'r   ú%Internet-requiring tests are disabledc                 ó‚   — d}t          j        d¦  «        }|                     d¦  «         |D ]}|dz  }|dk    r d S Œd S )Né   úwss://api.bitfinex.com/ws/2z+{"event": "subscribe", "channel": "ticker"}r|   r   )rG   Úcreate_connectionr3   )r!   Úcountr„   r   s       r   Ú	test_iterzWebSocketTest.test_iterÐ   sb   € àˆÝÔ Ð!>Ñ?Ô?ˆØ	�ŠÐ<Ñ=Ô=Ð=Øð 	ð 	ˆAØ�Q‰JˆEØ˜ŠzˆzØ��ð ð	ð 	r   c                 ó˜   — t          j        d¦  «        }|                      t          t	          t          |¦  «        ¦  «        ¦  «         d S )Nr‹   )rG   rŒ   rO   ÚstrÚtypeÚnext)r!   r�   s     r   Ú	test_nextzWebSocketTest.test_nextÚ   s=   € åÔ#Ð$AÑBÔBˆØ×Ò��d¥4¨¡:¤:Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/r   c                 óÆ  — t          j        ¦   «         }t          ¦   «         x}|_        |                     d¦  «         |                     t          j        ¦   «         ¦  «         |                     d¦  «         |                     d¦  «         |                      t           j        ¦  «        5  |j	         
                    d¦  «         d d d ¦  «         n# 1 swxY w Y   |j	         
                    d¦  «        }|                      |d¦  «         |                      t           j        ¦  «        5  |j	         
                    d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Ns   foos   bars   bazé	   s	   foobarbazr|   )rG   r   r   r�   r&   ÚsocketÚtimeoutrt   ÚWebSocketTimeoutExceptionÚframe_bufferÚrecv_strictrO   Ú"WebSocketConnectionClosedException©r!   r�   r„   r   s       r   Útest_internal_recv_strictz'WebSocketTest.test_internal_recv_strictß   s°  € ÝŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIØ	�Š�VÑÔÐØ	�Š•V”^Ñ%Ô%Ñ&Ô&Ð&Ø	�Š�VÑÔÐà	�Š�VÑÔÐØ×Ò�rÔ;Ñ<Ô<ð 	-ð 	-ØÔ×)Ò)¨!Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð Ô ×,Ò,¨QÑ/Ô/ˆØ×Ò˜˜|Ñ,Ô,Ð,Ø×Ò�rÔDÑEÔEð 	-ð 	-ØÔ×)Ò)¨!Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s$   Â-CÃCÃCÄ.EÅEÅEc                 ó„  — t          j        ¦   «         }t          ¦   «         x}|_        |                     d¦  «         |                     t          j        ¦   «         ¦  «         |                     d¦  «         |                     t          j        ¦   «         ¦  «         |                     d¦  «         |                      t           j        ¦  «        5  | 	                    ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      t           j        ¦  «        5  | 	                    ¦   «          d d d ¦  «         n# 1 swxY w Y   | 	                    ¦   «         }|  
                    |d¦  «         |                      t           j        ¦  «        5  | 	                    ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nó   �s
   �abcd)s   NC3 @zHello, World!)rG   r   r   r�   r&   r–   r—   rt   r˜   r1   rO   r›   rœ   s       r   Útest_recv_timeoutzWebSocketTest.test_recv_timeoutð   s&  € ÝŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIØ	�Š�WÑÔÐØ	�Š•V”^Ñ%Ô%Ñ&Ô&Ð&Ø	�ŠÐ4Ñ5Ô5Ð5Ø	�Š•V”^Ñ%Ô%Ñ&Ô&Ð&Ø	�ŠÐ8Ñ9Ô9Ð9Ø×Ò�rÔ;Ñ<Ô<ð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�rÔ;Ñ<Ô<ð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�yŠy‰{Œ{ˆØ×Ò˜˜Ñ/Ô/Ð/Ø×Ò�rÔDÑEÔEð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s6   ÃC4Ã4C8Ã;C8ÄD?Ä?EÅEÆF5Æ5F9Æ<F9c                 ó–  — t          j        ¦   «         }t          ¦   «         x}|_        |                     d¦  «         |                     d¦  «         |                     ¦   «         }|                      |d¦  «         |                      t           j        ¦  «        5  |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nó   ‹abcd#DCó   €�abcd
DADzBrevity is the soul of wit©	rG   r   r   r�   r&   r1   rO   rt   r›   rœ   s       r   Ú#test_recv_with_simple_fragmentationz1WebSocketTest.test_recv_with_simple_fragmentation  sï   € ÝŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIà	�ŠÐGÑHÔHÐHà	�ŠÐQÑRÔRÐRØ�yŠy‰{Œ{ˆØ×Ò˜Ð;Ñ<Ô<Ð<Ø×Ò�rÔDÑEÔEð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÂB>Â>CÃCc                 ó>  — t          j        d¬¦  «        }t          ¦   «         x}|_        |                     d¦  «         |                     d¦  «         |                     d¦  «         |                     ¦   «         \  }}|                      |d¦  «         |                     ¦   «         \  }}|                      |d¦  «         |                     ¦   «         \  }}|                      |d¦  «         |                     d¦  «         |                      t           j        ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      t           j	        ¦  «        5  | 
                    ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )	NT)Úfire_cont_framer¢   s    ‹abcd#DCr£   s   Brevity is s   the soul of wits   €‹abcd#DC)rG   r   r   r�   r&   Ú	recv_datarO   rt   ru   r›   r1   )r!   r�   r„   r   r   s        r   Ú*test_recv_with_fire_event_of_fragmentationz8WebSocketTest.test_recv_with_fire_event_of_fragmentation  sô  € ÝŒ|¨DÐ1Ñ1Ô1ˆÝ ™
œ
Ð"ˆˆDŒIà	�ŠÐGÑHÔHÐHà	�ŠÐGÑHÔHÐHà	�ŠÐQÑRÔRÐRà—.’.Ñ"Ô"‰ˆˆ4Ø×Ò˜˜~Ñ.Ô.Ð.Ø—.’.Ñ"Ô"‰ˆˆ4Ø×Ò˜˜~Ñ.Ô.Ð.Ø—.’.Ñ"Ô"‰ˆˆ4Ø×Ò˜Ð1Ñ2Ô2Ð2ð 	
�ŠÐGÑHÔHÐHà×Ò�rÔ4Ñ5Ô5ð 	ð 	Ø�NŠNÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ×Ò�rÔDÑEÔEð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s$   Ä%EÅE
ÅE
Å0FÆFÆFc                 ó.  — t          j        ¦   «         }d|_        |j         t          j        ¦   «         }t	          ¦   «         x}|_        d|_        |                     d¦  «         |                     ¦   «          |                      |j        d¦  «         d S )NTs   ˆ€˜p„F)	rG   r   Ú	connectedr5   r   r�   r&   r1   rO   rƒ   s      r   Ú
test_closezWebSocketTest.test_close'  s{   € ÝŒ|‰~Œ~ˆØˆŒØŒ
ˆ
åŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIØˆŒØ	�ŠÐ-Ñ.Ô.Ð.Ø�	Š	‰ŒˆØ×Ò˜œ¨Ñ/Ô/Ð/Ð/Ð/r   c                 óÊ   — t          j        ¦   «         }t          ¦   «         x}|_        |                     d¦  «         |                      t           j        |j        ¦  «         d S )Nr£   )rG   r   r   r�   r&   rt   ru   r1   rƒ   s      r   Útest_recv_cont_fragmentationz*WebSocketTest.test_recv_cont_fragmentation3  sQ   € ÝŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIà	�ŠÐQÑRÔRÐRØ×Ò�"Ô/°´Ñ;Ô;Ð;Ð;Ð;r   c                 óÀ  — t          j        ¦   «         }t          ¦   «         x}|_        |                     d¦  «         |                     d¦  «         |                     d¦  «         |                     ¦   «         }|                      |d¦  «         |                      t           j        ¦  «        5  |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Ns!   ›abcd. AB
C	C	NCs    ŽabcdAMBs   €‰abcd Az2Once more unto the breach, dear friends, once morer¤   rœ   s       r   Ú&test_recv_with_prolonged_fragmentationz4WebSocketTest.test_recv_with_prolonged_fragmentation:  s
  € ÝŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIà	�ŠØjñ	
ô 	
ð 	
ð 	
�ŠÐQÑRÔRÐRà	�ŠÐEÑFÔFÐFØ�yŠy‰{Œ{ˆØ×Ò˜ÐSÑTÔTÐTØ×Ò�rÔDÑEÔEð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Â1CÃCÃCc                 ó4  — t          j        ¦   «         }|                     t          ¦  «         t	          ¦   «         x}|_        |                     d¦  «         |                     d¦  «         |                     d¦  «         |                     ¦   «         }|                      |d¦  «         |  	                    t           j
        ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      |j        d         d¦  «         d S )Ns   ‰abcd5D As   ‰�abcd1C4.,$D

s   €�abcdCABzToo much of a good thingr   s   Š�abcd1C4.,$D

)rG   r   r€   r   r   r�   r&   r1   rO   rt   r›   r   rœ   s       r   Ú.test_recv_with_fragmentation_and_control_framez<WebSocketTest.test_recv_with_fragmentation_and_control_frameJ  s5  € ÝŒ|‰~Œ~ˆØ×Ò�/Ñ*Ô*Ð*Ý ™
œ
Ð"ˆˆDŒIà	�ŠÐ=Ñ>Ô>Ð>à	�ŠÐKÑLÔLÐLà	�ŠÐWÑXÔXÐXØ�yŠy‰{Œ{ˆØ×Ò˜Ð9Ñ:Ô:Ð:Ø×Ò�rÔDÑEÔEð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×ÒØŒF�1ŒIÐMñ	
ô 	
ð 	
ð 	
ð 	
s   ÃC,Ã,C0Ã3C0ú/Tests using local websocket server are disabledc                 óú  — t          j        dt          › �¦  «        }|                      |d ¦  «         |                     d¦  «         |                     ¦   «         }|                     ¦   «          |                      |d¦  «         |                     d¦  «         |                     ¦   «         }|                      |d¦  «         |  	                    t          |j        dd¦  «         |                     ¦   «          d S )Núws://127.0.0.1:úHello, Worldu   ã�“ã�«ã‚ƒã�«ã‚ƒã�¡ã�¯ã€�ä¸–ç•ŒéÿÿÿÿÚ )rG   rŒ   r   ÚassertNotEqualr3   r’   ÚfilenorO   r1   rt   Ú
ValueErrorÚ
send_closer5   ©r!   r„   Úresults      r   Útest_websocketzWebSocketTest.test_websocket\  sÚ   € õ Ô Ð!IÕ3GÐ!IÐ!IÑJÔJˆØ×Ò˜A˜tÑ$Ô$Ð$Ø	�Šˆ~ÑÔÐØ—’‘”ˆØ	�Š‰
Œ
ˆ
Ø×Ò˜ Ñ0Ô0Ð0à	�ŠÐ/Ñ0Ô0Ð0Ø—’‘”ˆØ×Ò˜Ð!AÑBÔBÐBØ×Ò�* a¤l°B¸Ñ;Ô;Ð;Ø	�Š‰	Œ	ˆ	ˆ	ˆ	r   c                 óæ   — t          j        dt          › �¦  «        }|                      |d ¦  «         |                     d¦  «         |                     d¦  «         |                     ¦   «          d S )Nrµ   ry   ÚHi)rG   rŒ   r   r¹   ÚpingÚpongr5   ©r!   r„   s     r   Útest_ping_pongzWebSocketTest.test_ping_pongm  sc   € õ Ô Ð!IÕ3GÐ!IÐ!IÑJÔJˆØ×Ò˜A˜tÑ$Ô$Ð$Ø	�Šˆw‰ŒˆØ	�Šˆt‰ŒˆØ	�Š‰	Œ	ˆ	ˆ	ˆ	r   c                 ón   — t          j        ¦   «         }|                      t          |j        d¦  «         d S )Nzws://google.com/)rG   r   rt   r   ÚconnectrÄ   s     r   Útest_support_redirectz#WebSocketTest.test_support_redirectw  s/   € åŒL‰NŒNˆØ×ÒÕ5°q´yÐBTÑUÔUÐUÐUÐUr   c                 óP  — t          j        d¦  «        }|                      |d ¦  «         |                      t	          |j        t          j        ¦  «        ¦  «         |                      | 	                    ¦   «         d¦  «         |                      | 
                    ¦   «         d ¦  «         |                     d¦  «         |                      |                     ¦   «         d¦  «         |                      |                     ¦   «         d ¦  «         |                     ¦   «          d S )Nr‹   rr   rN   )rG   rŒ   r¹   rU   r+   r�   ÚsslÚ	SSLSocketrO   Ú	getstatusÚ
getheadersÚ
settimeoutr(   ÚgetsubprotocolÚabortrÄ   s     r   Útest_secure_websocketz#WebSocketTest.test_secure_websocket}  sè   € åÔ Ð!>Ñ?Ô?ˆØ×Ò˜A˜tÑ$Ô$Ð$Ø�Š�
 1¤6­3¬=Ñ9Ô9Ñ:Ô:Ð:Ø×Ò˜Ÿš™œ¨Ñ,Ô,Ð,Ø×Ò˜AŸLšL™NœN¨DÑ1Ô1Ð1Ø	�Š�RÑÔÐØ×Ò˜Ÿš™œ¨Ñ,Ô,Ð,Ø×Ò˜×)Ò)Ñ+Ô+¨TÑ2Ô2Ð2Ø	�Š‰	Œ	ˆ	ˆ	ˆ	r   c                 ó¬  — t          j        dt          › �ddi¬¦  «        }|                      |d ¦  «         |                      |                     ¦   «         d ¦  «         |                     d¦  «         |                     ¦   «         }|                      |d¦  «         |                      t          |j
        dd¦  «         | 
                    ¦   «          d S )Nrµ   z
User-AgentÚPythonWebsocketClient)Úheadersr¶   r·   r¸   )rG   rŒ   r   r¹   rO   rÏ   r3   r1   rt   r»   r5   r½   s      r   Ú!test_websocket_with_custom_headerz/WebSocketTest.test_websocket_with_custom_header‰  sÌ   € õ Ô Ø4Õ2Ð4Ð4Ø!Ð#:Ð;ð
ñ 
ô 
ˆð 	×Ò˜A˜tÑ$Ô$Ð$Ø×Ò˜×)Ò)Ñ+Ô+¨TÑ2Ô2Ð2Ø	�Šˆ~ÑÔÐØ—’‘”ˆØ×Ò˜ Ñ0Ô0Ð0Ø×Ò�* a¤g¨r°2Ñ6Ô6Ð6Ø	�Š‰	Œ	ˆ	ˆ	ˆ	r   c                 ó(  — t          j        dt          › �¦  «        }|                      |d ¦  «         |                     ¦   «          |                      t           j        |j        d¦  «         |                      t           j        |j        ¦  «         d S )Nrµ   ry   )	rG   rŒ   r   r¹   r5   rt   r›   r3   r1   rÄ   s     r   Útest_after_closezWebSocketTest.test_after_close™  s   € õ Ô Ð!IÕ3GÐ!IÐ!IÑJÔJˆØ×Ò˜A˜tÑ$Ô$Ð$Ø	�Š‰	Œ	ˆ	Ø×Ò�"Ô?ÀÄÈÑQÔQÐQØ×Ò�"Ô?ÀÄÑHÔHÐHÐHÐHr   N) r   r   r   rJ   rL   rR   rW   r]   ro   rw   r…   r‡   ÚunittestÚ
skipUnlessr   rŽ   r“   r�   r    r¥   r©   r¬   r®   r°   r²   ÚTEST_WITH_LOCAL_SERVERr¿   rÅ   rÈ   rÑ   rÕ   r×   r   r   r   rE   rE   [   s¦  € € € € € ð"ð "ð "ðð ð ð#ð #ð #ð*ð *ð *ð
)ð )ð )ð+Yð +Yð +YðZ
ð 
ð 
ðAð Að Að&(ð (ð (ð €XÔÐ+Ð-TÑUÔUðð ñ VÔUðð €XÔÐ+Ð-TÑUÔUð0ð 0ñ VÔUð0ð-ð -ð -ð"ð ð ð"
ð 
ð 
ðð ð ð4
0ð 
0ð 
0ð<ð <ð <ðð ð ð 
ð 
ð 
ð$ €XÔØÐ Qñô ðð ñô ðð €XÔØÐ Qñô ðð ñô ðð €XÔÐ+Ð-TÑUÔUðVð Vñ VÔUðVð
 €XÔÐ+Ð-TÑUÔUð	ð 	ñ VÔUð	ð €XÔØÐ Qñô ðð ñô ðð €XÔØÐ Qñô ðIð Iñô ðIð Ið Ir   rE   c                   óB   — e Zd Z ej        ed¦  «        d„ ¦   «         ZdS )ÚSockOptTestr³   c                 ó$  — t           j        t           j        dff}t          j        dt
          › �|¬¦  «        }|                      |j                             t           j        t           j        ¦  «        d¦  «         | 	                    ¦   «          d S )Nr|   rµ   )Úsockoptr   )
r–   ÚIPPROTO_TCPÚTCP_NODELAYrG   rŒ   r   r¹   r�   Ú
getsockoptr5   )r!   rÞ   r„   s      r   Útest_sockoptzSockOptTest.test_sockopt¥  sˆ   € õ Ô&­Ô(:¸AÐ>Ð@ˆÝÔ Ø4Õ2Ð4Ð4¸gð
ñ 
ô 
ˆð 	×ÒØŒF×Ò�fÔ0µ&Ô2DÑEÔEÀqñ	
ô 	
ð 	
ð 	
�Š‰	Œ	ˆ	ˆ	ˆ	r   N)r   r   r   rØ   rÙ   rÚ   râ   r   r   r   rÜ   rÜ   ¤  sE   € € € € € Ø€XÔØÐ Qñô ðð ñô ðð ð r   rÜ   c                   ó   — e Zd Zd„ ZdS )Ú	UtilsTestc                 óä   — t          d¦  «        }|                      |d¦  «         t          d¦  «        }|                      |d¦  «         t          d¦  «        }|                      |d¦  «         d S )Ns   ð�€€Ts   Îºá½¹ÏƒÎ¼Îµí €editedFr   )r	   rO   )r!   Ústates     r   Útest_utf8_validatorzUtilsTest.test_utf8_validator´  sy   € ÝÐ1Ñ2Ô2ˆØ×Ò˜ Ñ%Ô%Ð%ÝØMñ
ô 
ˆð 	×Ò˜ Ñ&Ô&Ð&Ý˜cÑ"Ô"ˆØ×Ò˜ Ñ%Ô%Ð%Ð%Ð%r   N)r   r   r   rç   r   r   r   rä   rä   ³  s#   € € € € € ð&ð &ð &ð &ð &r   rä   c                   ó‚   — e Zd Z ej        ed¦  «        d„ ¦   «         Z ej        ed¦  «        d„ ¦   «         Zd„ Zd„ Z	dS )ÚHandshakeTestrˆ   c                 ó  — t          j        dt          j        ¦   «         j        id¬¦  «        }|                      t          |j        d¦  «         t          j        ddi¬¦  «        }|                      t          |j        d¦  «         d S )NÚ
cert_chainF)ÚssloptÚenable_multithreadr‹   ÚcertfileÚmyNonexistentCertFile©rì   )	rG   r   rÊ   Úget_default_verify_pathsÚcapathrt   r»   rÇ   ÚFileNotFoundError)r!   Úwebsock1Úwebsock2s      r   Útest_http_sslzHandshakeTest.test_http_sslÀ  s’   € å”<Ø ¥#Ô">Ñ"@Ô"@Ô"GÐHØ$ð
ñ 
ô 
ˆð 	×Ò�* hÔ&6Ð8UÑVÔVÐVÝ”<¨
Ð4KÐ'LÐMÑMÔMˆØ×ÒÝ˜xÔ/Ð1Nñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óê   — t          j        t          j        ¦   «         j        t          j        ¦   «         j        dœ¬¦  «        }|                      t          |j        dddddgdd	d
dddœ¬¦	  «	         d S )N)Úca_certsÚca_cert_pathrð   r‹   Ú	chocolateztesting_websockets.comz+echo.websocket.events/websocket-client-testÚ	testprotors   Ú123Ú	TestValuezk9kFAUWNAMmf5OEMfTlOEA==Únewprotocol)ÚCustomHeader1ÚCookiezSec-WebSocket-KeyzSec-WebSocket-Protocol)ÚcookieÚoriginÚhostÚsubprotocolsra   rn   )	rG   r   rÊ   rñ   Úcafilerò   rt   r   rÇ   ©r!   Úwebsock3s     r   Útest_manual_headersz!HandshakeTest.test_manual_headersÌ  sœ   € å”<åÔ8Ñ:Ô:ÔAÝ #Ô <Ñ >Ô >Ô Eðð ð
ñ 
ô 
ˆð 	×ÒÝ'ØÔØ)ØØ+Ø>Ø%˜Ø à!&Ø%Ø%?Ø*7ð	ð ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ón   — t          j        ¦   «         }|                      t          |j        d¦  «         d S )Nz2001:4860:4860::8888)rG   r   rt   r»   rÇ   )r!   rõ   s     r   Ú	test_ipv6zHandshakeTest.test_ipv6å  s/   € Ý”<‘>”>ˆØ×Ò�* hÔ&6Ð8NÑOÔOÐOÐOÐOr   c                 óò   — t          j        ¦   «         }|                      t          |j        d¦  «         |                      t
          |j        d¦  «         |                      t          |j        d¦  «         d S )Nzws//example.comzws://examplezexample.com)rG   r   rt   r»   rÇ   r   r  s     r   Útest_bad_urlszHandshakeTest.test_bad_urlsé  sf   € Ý”<‘>”>ˆØ×Ò�* hÔ&6Ð8IÑJÔJÐJØ×ÒÕ3°XÔ5EÀ~ÑVÔVÐVØ×Ò�* hÔ&6¸ÑFÔFÐFÐFÐFr   N)
r   r   r   rØ   rÙ   r   rö   r  r
  r  r   r   r   ré   ré   ¿  s”   € € € € € Ø€XÔÐ+Ð-TÑUÔUð	
ð 	
ñ VÔUð	
ð €XÔÐ+Ð-TÑUÔUð
ð 
ñ VÔUð
ð0Pð Pð PðGð Gð Gð Gð Gr   ré   Ú__main__)(r;   Úos.pathr–   rØ   Úbase64r   rZ   r_   rG   Úwebsocket._exceptionsr   r   Úwebsocket._handshaker   r   rk   Úwebsocket._httpr   Úwebsocket._utilsr	   rÊ   ÚImportErrorr,   r   ÚenvironÚgetr   r   rÚ   rI   r   r   r8   ÚTestCaserE   rÜ   rä   ré   r   Úmainr   r   r   ú<module>r     s§  ðð 
€	€	€	Ø €€€Ø €€€Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .à Ð Ð Ð Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ :Ð :Ð :Ð :Ð :Ð :Ø >Ð >Ð >Ð >Ð >Ð >Ø (Ð (Ð (Ð (Ð (Ð (Ø *Ð *Ð *Ð *Ð *Ð *ðð&Ø€J€J€J€JøØð ð ð ðð ð ð ð �9ñ ô ð ð ð ðøøøð ”Z—^’^Ð$8¸#Ñ>Ô>À#ÒEÐ à”z—~’~Ð&<¸dÑCÔCÐ Ø-°Ò5Ð Ø€	ðð ð ðð ð ð ð ñ ô ð ð8&ð &ð &ð &ð &�Xñ &ô &ð &ðFIð FIð FIð FIð FI�HÔ%ñ FIô FIð FIðR
ð ð ð ð �(Ô#ñ ô ð ð	&ð 	&ð 	&ð 	&ð 	&�Ô!ñ 	&ô 	&ð 	&ð.Gð .Gð .Gð .Gð .G�HÔ%ñ .Gô .Gð .Gðb ˆzÒÐØ€H„M�O„O€O€O€Oð Ðs   ½A ÁAÁA