Ë
    _§1hÖ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e j0                  j3                  d
d«      dk(  Ze j0                  j3                  dd«      Zedk7  ZdZd„ Z G d„ d«      Z G d„ de«      Z  G d„ dejB                  «      Z" G d„ dejB                  «      Z# G d„ dejB                  «      Z$ G d„ dejB                  «      Z%e&dk(  r ejN                  «        yy# e$ r  G d„ d	e«      ZY ŒØw xY w)é    N)Údecodebytes)ÚWebSocketBadStatusExceptionÚWebSocketAddressException)Ú_create_sec_websocket_key)Ú	_validate)Úread_headers)Úvalidate_utf8c                   ó   — e Zd Zy)ÚSSLErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/websocket/tests/test_websocket.pyr   r   '   s   „ Ør   r   ÚTEST_WITH_INTERNETÚ0Ú1ÚLOCAL_WS_SERVER_PORTz-1Tc                  ó   — y)NÚabcdr   )Ú_s    r   Úcreate_mask_keyr   3   s   € Ør   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚSockMockc                 ó    — g | _         g | _        y ©N)ÚdataÚsent©Úselfs    r   Ú__init__zSockMock.__init__8   s   € ØˆŒ	Øˆ�	r   c                 ó:   — | j                   j                  |«       y r   )r   Úappend©r!   r   s     r   Ú
add_packetzSockMock.add_packet<   s   € Ø�	‰	×Ñ˜Õr   c                  ó   — y r   r   r    s    r   Ú
gettimeoutzSockMock.gettimeout?   s   € Ør   c                 óÚ   — | j                   r_| j                   j                  d«      }t        |t        «      r|‚t	        |«      |kD  r| j                   j                  d||d  «       |d | S y )Nr   )r   ÚpopÚ
isinstanceÚ	ExceptionÚlenÚinsert)r!   ÚbufsizeÚes      r   ÚrecvzSockMock.recvB   sa   € Ø�9Š9Ø—	‘	—‘˜aÓ ˆAÜ˜!œYÔ'Ø�Ü�1‹v˜ÒØ—	‘	× Ñ   A g h KÔ0Ø�X�g�;Ðð r   c                 óN   — | j                   j                  |«       t        |«      S r   )r   r$   r-   r%   s     r   ÚsendzSockMock.sendK   s   € Ø�	‰	×Ñ˜ÔÜ�4‹yÐr   c                  ó   — y 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   s    „ òòòòòór   r   c                   ó   — e Zd Zd„ Zy)ÚHeaderSockMockc                 ó0  — t         j                  | «       t        j                  j	                  t        j                  j                  t        «      |«      }t        |d«      5 }| j                  |j                  «       «       d d d «       y # 1 sw Y   y xY w)NÚrb)
r   r"   ÚosÚpathÚjoinÚdirnameÚ__file__Úopenr&   Úread)r!   Úfnamer<   Úfs       r   r"   zHeaderSockMock.__init__T   sd   € Ü×Ñ˜$ÔÜ�w‰w�|‰|œBŸG™GŸO™O¬HÓ5°uÓ=ˆÜ�$˜Óð 	& Ø�O‰O˜AŸF™F›HÔ%÷	&÷ 	&ñ 	&ús   Á# 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y)ÚWebSocketTestc                 ó6   — t        j                  t        «       y r   )ÚwsÚenableTraceÚ	TRACEABLEr    s    r   ÚsetUpzWebSocketTest.setUp\   s   € Ü
�‰”yÕ!r   c                  ó   — y r   r   r    s    r   ÚtearDownzWebSocketTest.tearDown_   r6   r   c                 óè   — | j                  t        j                  «       d «       t        j                  d«       | j                  t        j                  «       d«       t        j                  d «       y )Né
   )ÚassertEqualrG   ÚgetdefaulttimeoutÚsetdefaulttimeoutr    s    r   Útest_default_timeoutz"WebSocketTest.test_default_timeoutb   sP   € Ø×Ñœ×-Ñ-Ó/°Ô6Ü
×Ñ˜RÔ Ø×Ñœ×-Ñ-Ó/°Ô4Ü
×Ñ˜TÕ"r   c                 óf   — t        «       }| j                  |dk7  «       | j                  d|v«       y )Né   u   Â¥n)r   Ú
assertTrue)r!   Úkeys     r   Útest_ws_keyzWebSocketTest.test_ws_keyh   s+   € Ü'Ó)ˆØ�‰˜˜r™	Ô"Ø�‰˜ SÐ(Õ)r   c                 ó‚   — t        «       }t        |j                  d«      «      }| j                  dt	        |«      «       y)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   s1   € ä'Ó)ˆÜ˜SŸZ™Z¨Ó0Ó1ˆØ×Ñ˜œS ›ZÕ(r   c                 ó¦  — d}ddddœ}| j                  t        ||d «      d«       |j                  «       }d|d<   | j                  t        ||d «      d«       |d= | j                  t        ||d «      d«       |j                  «       }d	|d
<   | j                  t        ||d «      d«       |d
= | j                  t        ||d «      d«       |j                  «       }d	|d<   | j                  t        ||d «      d«       |d= | j                  t        ||d «      d«       |j                  «       }d|d<   | j                  t        ||ddg«      d«       | j                  t        ||ddg«      d«       |j                  «       }d|d<   | j                  t        ||ddg«      d«       |j                  «       }| j                  t        ||ddg«      d«       y )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À|ÔTà ×%Ñ%Ó'ˆØ"ˆˆyÑØ×ÑÔ)¨&°#°tÓ<¸mÔLØ�9ÐØ×ÑÔ)¨&°#°tÓ<¸mÔLà ×%Ñ%Ó'ˆØ*ˆˆ|ÑØ×ÑÔ)¨&°#°tÓ<¸mÔLØ�<Ð Ø×ÑÔ)¨&°#°tÓ<¸mÔLà ×%Ñ%Ó'ˆØ)4ˆÐ%Ñ&Ø×ÑÔ)¨&°#°tÓ<¸mÔLØÐ)Ð*Ø×ÑÔ)¨&°#°tÓ<¸mÔLà ×%Ñ%Ó'ˆØ+1ˆÐ'Ñ(Ø×ÑÜ˜V S¨6°6Ð*:Ó;¸^ô	
ð 	×ÑÔ)¨&°#¸ÀÐ7GÓHÈ-ÔXà ×%Ñ%Ó'ˆØ+1ˆÐ'Ñ(Ø×ÑÜ˜V S¨6°6Ð*:Ó;¸^ô	
ð !×%Ñ%Ó'ˆà×ÑÔ)¨&°#¸ÀÐ7GÓHÈ-ÕXr   c                 ór  — t        t        d«      «      \  }}}| j                  |d«       | j                  |d   d«       t        t        d«      «      \  }}}| j                  |d«       | j                  |d   d«       t        d«       | j                  t        j
                  t         t        d«      «       y )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ÓMÑˆ�˜Ø×Ñ˜ Ô%Ø×Ñ˜ Ñ-¨yÔ9ä(¬Ð8KÓ)LÓMÑˆ�˜Ø×Ñ˜ Ô%Ø×Ñ˜ Ñ-Ð/DÔEäÐ*Ô+Ø×ÑÜ×!Ñ!¤<´Ð@SÓ1Tõ	
r   c                 ó|  — t        j                  «       }|j                  t        «       t	        d«      x}|_        |j                  d«       | j                  |j                  d   d«       |j                  d«       | j                  |j                  d   d«       | j                  |j                  d«      d	«       y )
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à�	‰	Ð#Ô$Ø×ÑØ�F‰F�1‰IØWô	
ð 	×Ñ˜×)Ñ)Ð*:Ó;¸RÕ@r   c                 ó  — t        j                  «       }t        «       x}|_        d}|j	                  |«       |j                  «       }| j                  |d«       |j	                  d«       |j                  «       }| j                  |d«       y )Nr}   r{   rz   ry   )rG   r   r   r�   r&   r1   rO   )r!   r�   r„   rd   r   s        r   Ú	test_recvzWebSocketTest.test_recvÁ   su   € ä�|‰|‹~ˆÜ ›
Ð"ˆˆDŒIàWð 	ð 	
�‰�YÔØ�y‰y‹{ˆØ×Ñ˜Ð0Ô1à	�‰Ð5Ô6Ø�y‰y‹{ˆØ×Ñ˜˜wÕ'r   ú%Internet-requiring tests are disabledc                 óz   — d}t        j                  d«      }|j                  d«       |D ]  }|dz  }|dk(  sŒ y  y )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Ð   sG   € àˆÜ× Ñ Ð!>Ó?ˆØ	�‰Ð<Ô=Øò 	ˆAØ�Q‰JˆEØ˜‹zÙñ	r   c                 ó~   — t        j                  d«      }| j                  t        t	        t        |«      «      «       y )Nr‹   )rG   rŒ   rO   ÚstrÚtypeÚnext)r!   r�   s     r   Ú	test_nextzWebSocketTest.test_nextÚ   s,   € ä×#Ñ#Ð$AÓBˆØ×Ñœœd¤4¨£:Ó.Õ/r   c                 ó�  — t        j                  «       }t        «       x}|_        |j	                  d«       |j	                  t        j                  «       «       |j	                  d«       |j	                  d«       | j                  t         j                  «      5  |j                  j                  d«       d d d «       |j                  j                  d«      }| j                  |d«       | j                  t         j                  «      5  |j                  j                  d«       d d d «       y # 1 sw Y   ŒzxY w# 1 sw Y   y xY w)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ÑDÓEñ 	-Ø×Ñ×)Ñ)¨!Ô,÷	-ð 	-÷	-ð 	-ú÷	-ð 	-ús   ÂD0ÄD<Ä0D9Ä<Ec                 ó  — t        j                  «       }t        «       x}|_        |j	                  d«       |j	                  t        j                  «       «       |j	                  d«       |j	                  t        j                  «       «       |j	                  d«       | j                  t         j                  «      5  |j                  «        d d d «       | j                  t         j                  «      5  |j                  «        d d d «       |j                  «       }| j                  |d«       | j                  t         j                  «      5  |j                  «        d d d «       y # 1 sw Y   ŒœxY w# 1 sw Y   ŒpxY w# 1 sw Y   y xY w)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Ø	�‰”V—^‘^Ó%Ô&Ø	�‰Ð8Ô9Ø×Ñœr×;Ñ;Ó<ñ 	Ø�I‰IŒK÷	à×Ñœr×;Ñ;Ó<ñ 	Ø�I‰IŒK÷	à�y‰y‹{ˆØ×Ñ˜˜Ô/Ø×Ñœr×DÑDÓEñ 	Ø�I‰IŒK÷	ð 	÷	ð 	ú÷	ð 	ú÷	ð 	ús$   Â>E*Ã6E6ÅFÅ*E3Å6E?ÆFc                 ó^  — t        j                  «       }t        «       x}|_        |j	                  d«       |j	                  d«       |j                  «       }| j                  |d«       | j                  t         j                  «      5  |j                  «        d d d «       y # 1 sw Y   y xY w)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à	�‰ÐQÔRØ�y‰y‹{ˆØ×Ñ˜Ð;Ô<Ø×Ñœr×DÑDÓEñ 	Ø�I‰IŒK÷	÷ 	ñ 	ús   Â	B#Â#B,c                 óÈ  — t        j                  d¬«      }t        «       x}|_        |j	                  d«       |j	                  d«       |j	                  d«       |j                  «       \  }}| j                  |d«       |j                  «       \  }}| j                  |d«       |j                  «       \  }}| j                  |d«       |j	                  d«       | j                  t         j                  «      5  |j                  «        d d d «       | j                  t         j                  «      5  |j                  «        d d d «       y # 1 sw Y   ŒBxY w# 1 sw Y   y xY w)	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ˆÜ ›
Ð"ˆˆDŒIà	�‰ÐGÔHà	�‰ÐGÔHà	�‰ÐQÔRà—.‘.Ó"‰ˆˆ4Ø×Ñ˜˜~Ô.Ø—.‘.Ó"‰ˆˆ4Ø×Ñ˜˜~Ô.Ø—.‘.Ó"‰ˆˆ4Ø×Ñ˜Ð1Ô2ð 	
�‰ÐGÔHà×Ñœr×4Ñ4Ó5ñ 	Ø�N‰NÔ÷	ð ×Ñœr×DÑDÓEñ 	Ø�I‰IŒK÷	ð 	÷	ð 	ú÷	ð 	ús   Ã:EÄ2EÅEÅE!c                 ó$  — t        j                  «       }d|_        |j                   t        j                  «       }t	        «       x}|_        d|_        |j                  d«       |j                  «        | j                  |j                  d«       y )NTs   ˆ€˜p„F)	rG   r   Ú	connectedr5   r   r�   r&   r1   rO   rƒ   s      r   Ú
test_closezWebSocketTest.test_close'  se   € Ü�|‰|‹~ˆØˆŒØ�
Š
ä�|‰|‹~ˆÜ ›
Ð"ˆˆDŒIØˆŒØ	�‰Ð-Ô.Ø�	‰	ŒØ×Ñ˜Ÿ™¨Õ/r   c                 óÄ   — t        j                  «       }t        «       x}|_        |j	                  d«       | j                  t         j                  |j                  «       y )Nr£   )rG   r   r   r�   r&   rt   ru   r1   rƒ   s      r   Útest_recv_cont_fragmentationz*WebSocketTest.test_recv_cont_fragmentation3  sB   € Ü�|‰|‹~ˆÜ ›
Ð"ˆˆDŒIà	�‰ÐQÔRØ×Ñœ"×/Ñ/°·±Õ;r   c                 ó€  — t        j                  «       }t        «       x}|_        |j	                  d«       |j	                  d«       |j	                  d«       |j                  «       }| j                  |d«       | j                  t         j                  «      5  |j                  «        d d d «       y # 1 sw Y   y xY w)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à	�‰ÐEÔFØ�y‰y‹{ˆØ×Ñ˜ÐSÔTØ×Ñœr×DÑDÓEñ 	Ø�I‰IŒK÷	÷ 	ñ 	ús   ÂB4Â4B=c                 óè  — t        j                  «       }|j                  t        «       t	        «       x}|_        |j                  d«       |j                  d«       |j                  d«       |j                  «       }| j                  |d«       | j                  t         j                  «      5  |j                  «        d d d «       | j                  |j                  d   d«       y # 1 sw Y   Œ)xY w)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  sº   € Ü�|‰|‹~ˆØ×Ñœ/Ô*Ü ›
Ð"ˆˆDŒIà	�‰Ð=Ô>à	�‰ÐKÔLà	�‰ÐWÔXØ�y‰y‹{ˆØ×Ñ˜Ð9Ô:Ø×Ñœr×DÑDÓEñ 	Ø�I‰IŒK÷	à×ÑØ�F‰F�1‰IÐMõ	
÷	ð 	ús   Â/C(Ã(C1ú/Tests using local websocket server are disabledc                 ó°  — t        j                  dt        › �«      }| j                  |d «       |j	                  d«       |j                  «       }|j                  «        | j                  |d«       |j	                  d«       |j                  «       }| j                  |d«       | j                  t        |j                  dd«       |j                  «        y )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§   € ô × Ñ  ?Ô3GÐ2HÐ!IÓJˆØ×Ñ˜A˜tÔ$Ø	�‰ˆ~ÔØ—‘“ˆØ	�‰Œ
Ø×Ñ˜ Ô0à	�‰Ð/Ô0Ø—‘“ˆØ×Ñ˜Ð!AÔBØ×Ñœ* a§l¡l°B¸Ô;Ø	�‰�	r   c                 óÄ   — t        j                  dt        › �«      }| j                  |d «       |j	                  d«       |j                  d«       |j                  «        y )Nrµ   ry   ÚHi)rG   rŒ   r   r¹   ÚpingÚpongr5   ©r!   r„   s     r   Útest_ping_pongzWebSocketTest.test_ping_pongm  sL   € ô × Ñ  ?Ô3GÐ2HÐ!IÓJˆØ×Ñ˜A˜tÔ$Ø	�‰ˆwŒØ	�‰ˆtŒØ	�‰�	r   c                 ón   — t        j                  «       }| j                  t        |j                  d«       y )Nzws://google.com/)rG   r   rt   r   ÚconnectrÄ   s     r   Útest_support_redirectz#WebSocketTest.test_support_redirectw  s%   € ä�L‰L‹NˆØ×ÑÔ5°q·y±yÐBTÕUr   c                 óú  — t        j                  d«      }| j                  |d «       | j                  t	        |j
                  t        j                  «      «       | j                  |j                  «       d«       | j                  |j                  «       d «       |j                  d«       | j                  |j                  «       d«       | j                  |j                  «       d «       |j                  «        y )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¡6¬3¯=©=Ó9Ô:Ø×Ñ˜Ÿ™›¨Ô,Ø×Ñ˜AŸL™L›N¨DÔ1Ø	�‰�RÔØ×Ñ˜Ÿ™›¨Ô,Ø×Ñ˜×)Ñ)Ó+¨TÔ2Ø	�‰�	r   c                 ór  — t        j                  dt        › �ddi¬«      }| j                  |d «       | j	                  |j                  «       d «       |j                  d«       |j                  «       }| j	                  |d«       | j                  t        |j                  dd«       |j                  «        y )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œ   € ô × Ñ ØÔ2Ð3Ð4Ø!Ð#:Ð;ô
ˆð 	×Ñ˜A˜tÔ$Ø×Ñ˜×)Ñ)Ó+¨TÔ2Ø	�‰ˆ~ÔØ—‘“ˆØ×Ñ˜ Ô0Ø×Ñœ* a§g¡g¨r°2Ô6Ø	�‰�	r   c                 ó*  — t        j                  dt        › �«      }| j                  |d «       |j	                  «        | j                  t         j                  |j                  d«       | j                  t         j                  |j                  «       y )Nrµ   ry   )	rG   rŒ   r   r¹   r5   rt   r›   r3   r1   rÄ   s     r   Útest_after_closezWebSocketTest.test_after_close™  sl   € ô × Ñ  ?Ô3GÐ2HÐ!IÓJˆØ×Ñ˜A˜tÔ$Ø	�‰Œ	Ø×Ñœ"×?Ñ?ÀÇÁÈÔQØ×Ñœ"×?Ñ?ÀÇÁÕ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òZ
òAò&(ð €X×ÑÐ+Ð-TÓUñó Vðð €X×ÑÐ+Ð-TÓUñ0ó Vð0ò-ò"ò"
òò4
0ò<òò 
ð$ €X×ÑØÐ Qóñóðð €X×ÑØÐ Qóñóðð €X×ÑÐ+Ð-TÓUñVó VðVð
 €X×ÑÐ+Ð-TÓUñ	ó Vð	ð €X×ÑØÐ Qóñóðð €X×ÑØÐ QóñIóñIr   rE   c                   ó>   — e Zd Z ej                  ed«      d„ «       Zy)ÚSockOptTestr³   c                 ó4  — t         j                  t         j                  dff}t        j                  dt
        › �|¬«      }| j                  |j                  j                  t         j                  t         j                  «      d«       |j                  «        y )Nr|   rµ   )Úsockoptr   )
r–   ÚIPPROTO_TCPÚTCP_NODELAYrG   rŒ   r   r¹   r�   Ú
getsockoptr5   )r!   rÞ   r„   s      r   Útest_sockoptzSockOptTest.test_sockopt¥  sz   € ô ×&Ñ&¬×(:Ñ(:¸AÐ>Ð@ˆÜ× Ñ ØÔ2Ð3Ð4¸gô
ˆð 	×ÑØ�F‰F×Ñœf×0Ñ0´&×2DÑ2DÓEÀqô	
ð 	
�‰�	r   N)r   r   r   rØ   rÙ   rÚ   râ   r   r   r   rÜ   rÜ   ¤  s'   „ Ø€X×ÑØÐ Qóñóñr   rÜ   c                   ó   — e Zd Zd„ Zy)Ú	UtilsTestc                 ó²   — t        d«      }| j                  |d«       t        d«      }| j                  |d«       t        d«      }| j                  |d«       y )Ns   ð�€€Ts   Îºá½¹ÏƒÎ¼Îµí €editedFr   )r	   rO   )r!   Ústates     r   Útest_utf8_validatorzUtilsTest.test_utf8_validator´  sV   € ÜÐ1Ó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	y)ÚHandshakeTestrˆ   c                 ó"  — t        j                  dt        j                  «       j                  id¬«      }| j                  t        |j                  d«       t        j                  ddi¬«      }| j                  t        |j                  d«       y )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À  su   € ä—<‘<Ø ¤#×">Ñ">Ó"@×"GÑ"GÐHØ$ô
ˆð 	×Ñœ* h×&6Ñ&6Ð8UÔVÜ—<‘<¨
Ð4KÐ'LÔMˆØ×ÑÜ˜x×/Ñ/Ð1Nõ	
r   c                 ó  — t        j                  t        j                  «       j                  t        j                  «       j
                  dœ¬«      }| j                  t        |j                  dddddgdd	d
dddœ¬«	       y )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Ñ8Ó:×AÑAÜ #× <Ñ <Ó >× EÑ Eñô
ˆð 	×ÑÜ'Ø×ÑØ)ØØ+Ø>Ø%˜Ø à!&Ø%Ø%?Ø*7ñ	ð 	õ 	
r   c                 ón   — t        j                  «       }| j                  t        |j                  d«       y )Nz2001:4860:4860::8888)rG   r   rt   r»   rÇ   )r!   rõ   s     r   Ú	test_ipv6zHandshakeTest.test_ipv6å  s&   € Ü—<‘<“>ˆØ×Ñœ* h×&6Ñ&6Ð8NÕOr   c                 óò   — t        j                  «       }| j                  t        |j                  d«       | j                  t
        |j                  d«       | j                  t        |j                  d«       y )Nzws//example.comzws://examplezexample.com)rG   r   rt   r»   rÇ   r   r  s     r   Útest_bad_urlszHandshakeTest.test_bad_urlsé  sW   € Ü—<‘<“>ˆØ×Ñœ* h×&6Ñ&6Ð8IÔJØ×ÑÔ3°X×5EÑ5EÀ~ÔVØ×Ñœ* h×&6Ñ&6¸ÕFr   N)
r   r   r   rØ   rÙ   r   rö   r  r
  r  r   r   r   ré   ré   ¿  sX   „ Ø€X×ÑÐ+Ð-TÓUñ	
ó Vð	
ð €X×ÑÐ+Ð-TÓUñ
ó Vð
ò0Pó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Ý :Ý >Ý (Ý *ðð&Ûð —Z‘Z—^‘^Ð$8¸#Ó>À#ÑEÐ à—z‘z—~‘~Ð&<¸dÓCÐ Ø-°Ñ5Ð Ø€	ò÷ñ ô8&�Xô &ôFI�H×%Ñ%ô FIôR
�(×#Ñ#ô ô	&�×!Ñ!ô 	&ô.G�H×%Ñ%ô .Gðb ˆzÒØ€H‡M�M…Oð øðW ò ô�9ö ðús   ½D ÄDÄD