§
    JŠtjþG  ã                   óD  — 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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ÚWebSocketException)Ú_create_sec_websocket_key)Ú	_validate)Úread_headers)Úvalidate_utf8c                   ó   — e Zd ZdS )ÚSSLErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú\/var/www/html/CA-Chatbot/venv/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   7   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__<   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.gettimeoutC   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.recvF   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.sendO   s$   € ØŒ	×Ò˜ÑÔÐÝ�4‰yŒyÐr   c                 ó   — d S r   r   r!   s    r   ÚclosezSockMock.closeS   ó   € Øˆr   N)	r   r   r   r#   r'   r)   r2   r4   r6   r   r   r   r   r   ;   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__X   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   r9   r9   W   s#   € € € € € ð&ð &ð &ð &ð &r   r9   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.tearDownc   r7   r   c                 óò   — |                       t          j        ¦   «         d ¦  «         t          j        d¦  «         |                       t          j        ¦   «         d¦  «         t          j        d ¦  «         d S )Né
   )ÚassertEqualrH   ÚgetdefaulttimeoutÚsetdefaulttimeoutr!   s    r   Útest_default_timeoutz"WebSocketTest.test_default_timeoutf   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_keyl   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ÚencoderP   r.   )r"   rW   Únonces      r   Ú
test_noncezWebSocketTest.test_nonceq   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=)ra   Ú
connectionúsec-websocket-accept)TNÚhttp)FNÚ	somethingrb   rc   Úsub1zsec-websocket-protocolÚsub2)Trf   Úsub3ÚsUb1ÚSub1ÚsuB2)rP   Ú_validate_headerÚcopy)r"   rW   Úrequired_headerÚheaders       r   Útest_ws_utilszWebSocketTest.test_ws_utilsw   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   rb   ÚUpgradezdata/header03.txtzUpgrade, Keep-Alivezdata/header02.txt)r	   r9   rP   ÚassertRaisesrH   r   )r"   Ústatusro   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 )
Nrr   ÚHellor   ó   �…abcd)õ   ã�“ã‚“ã�«ã�¡ã�¯é   ó   ��abcd‚ãð‡ãñ€åÊ�âÅ‚ãÌs   1111111111101é   )
rH   Ú	WebSocketÚset_mask_keyr   r9   Úsockr4   rP   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   )rH   r   r   r�   r'   r2   rP   )r"   r�   r„   re   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   )rH   Úcreate_connectionr4   )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‹   )rH   rŒ   rP   Ú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|   )rH   r   r   r�   r'   ÚsocketÚtimeoutru   ÚWebSocketTimeoutExceptionÚframe_bufferÚrecv_strictrP   Ú"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!)rH   r   r   r�   r'   r–   r—   ru   r˜   r2   rP   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©	rH   r   r   r�   r'   r2   rP   ru   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)rH   r   r   r�   r'   Ú	recv_datarP   ru   r   r›   r2   )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                 óH  — t          j        ¦   «         }d|_        |                     ¦   «          t          j        ¦   «         }t	          ¦   «         x}|_        d|_        |                     d¦  «         |                     ¦   «          |                      |j        d¦  «         d S )NTs   ˆ€˜p„F)	rH   r   Ú	connectedr6   r   r�   r'   r2   rP   rƒ   s      r   Ú
test_closezWebSocketTest.test_close+  s�   € ÝŒ|‰~Œ~ˆØˆŒØ�
Š
‰ŒˆåŒ|‰~Œ~ˆÝ ™
œ
Ð"ˆˆDŒIØˆŒØ	�ŠÐ-Ñ.Ô.Ð.Ø�	Š	‰ŒˆØ×Ò˜œ¨Ñ/Ô/Ð/Ð/Ð/r   c                 óÊ   — t          j        ¦   «         }t          ¦   «         x}|_        |                     d¦  «         |                      t           j        |j        ¦  «         d S )Nr£   )rH   r   r   r�   r'   ru   r   r2   rƒ   s      r   Útest_recv_cont_fragmentationz*WebSocketTest.test_recv_cont_fragmentation7  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

)rH   r   r€   r   r   r�   r'   r2   rP   ru   r›   r    rœ   s       r   Ú.test_recv_with_fragmentation_and_control_framez<WebSocketTest.test_recv_with_fragmentation_and_control_frameN  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   ã�“ã�«ã‚ƒã�«ã‚ƒã�¡ã�¯ã€�ä¸–ç•ŒéÿÿÿÿÚ )rH   rŒ   r   ÚassertNotEqualr4   r’   ÚfilenorP   r2   ru   Ú
ValueErrorÚ
send_closer6   ©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)rH   rŒ   r   r¹   ÚpingÚpongr6   ©r"   r„   s     r   Útest_ping_pongzWebSocketTest.test_ping_pongq  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/)rH   r   ru   r   ÚconnectrÄ   s     r   Útest_support_redirectz#WebSocketTest.test_support_redirect{  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‹   rs   rO   )rH   rŒ   r¹   rV   r,   r�   ÚsslÚ	SSLSocketrP   Ú	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¸   )rH   rŒ   r   r¹   rP   rÏ   r4   r2   ru   r»   r6   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   )	rH   rŒ   r   r¹   r6   ru   r›   r4   r2   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   rK   rM   rS   rX   r^   rp   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   rF   rF   _   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   rF   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_NODELAYrH   rŒ   r   r¹   r�   Ú
getsockoptr6   )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
   rP   )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ì   )	rH   r   rÊ   Úget_default_verify_pathsÚcapathru   r»   rÇ   r   )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ˆØ×ÒÝ Ô 0Ð2Oñ	
ô 	
ð 	
ð 	
ð 	
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Ú	testprotort   Ú123Ú	TestValuezk9kFAUWNAMmf5OEMfTlOEA==Únewprotocol)ÚCustomHeader1ÚCookiezSec-WebSocket-KeyzSec-WebSocket-Protocol)ÚcookieÚoriginÚhostÚsubprotocolsrb   ro   )	rH   r   rÊ   rñ   Úcafilerò   ru   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)rH   r   ru   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)rH   r   ru   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   r[   r`   rH   Úwebsocket._exceptionsr   r   r   Úwebsocket._handshaker   r   rl   Úwebsocket._httpr	   Úwebsocket._utilsr
   rÊ   ÚImportErrorr-   r   ÚenvironÚgetr   r   rÚ   rJ   r   r   r9   ÚTestCaserF   rÜ   rä   ré   r   Úmainr   r   r   ú<module>r     sÃ  ðð 
€	€	€	Ø €€€Ø €€€Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
 ;Ð :Ð :Ð :Ð :Ð :Ø >Ð >Ð >Ð >Ð >Ð >Ø (Ð (Ð (Ð (Ð (Ð (Ø *Ð *Ð *Ð *Ð *Ð *ðð&Ø€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