
    <fhG                     >   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e j2                  j5                  d
d      dk(  Ze j2                  j5                  dd      Zedk7  ZdZd Z G d d      Z  G d de       Z! G d dejD                        Z# G d dejD                        Z$ G d dejD                        Z% G d dejD                        Z&e'dk(  r ejP                          yy# e$ r  G d d	e      ZY w xY w)    N)decodebytes)WebSocketBadStatusExceptionWebSocketAddressExceptionWebSocketException)_create_sec_websocket_key)	_validate)read_headers)validate_utf8c                       e Zd Zy)SSLErrorN)__name__
__module____qualname__     Q/var/www/zara/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   7   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__<   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.gettimeoutC   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.recvF   sa    99		a A!Y'1v		  AghK0Xg; r   c                 N    | j                   j                  |       t        |      S r   )r    r%   r.   r&   s     r   sendzSockMock.sendO   s    		4yr   c                      y r   r   r!   s    r   closezSockMock.closeS       r   N)	r   r   r   r#   r'   r)   r2   r4   r6   r   r   r   r   r   ;   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__X   sd    $ww||BGGOOH5u=$ 	&OOAFFH%	& 	& 	&s   # 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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.tearDownc   r7   r   c                     | j                  t        j                         d        t        j                  d       | j                  t        j                         d       t        j                  d        y )N
   )assertEqualrH   getdefaulttimeoutsetdefaulttimeoutr!   s    r   test_default_timeoutz"WebSocketTest.test_default_timeoutf   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_keyl   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encoderP   r.   )r"   rW   nonces      r   
test_noncezWebSocketTest.test_nonceq   s1    ')SZZ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=)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|T %%'"y)&#t<mL9)&#t<mL %%'*|)&#t<mL< )&#t<mL %%')4%&)&#t<mL)*)&#t<mL %%'+1'(VS66*:;^	
 	)&#7GH-X %%'+1'(VS66*:;^	
 !%%')&#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.txte   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M%-y9(8K)LM%-/DE*+!!<@S1T	
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 )
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    ||~/*&':;;DI		'$DE		#$FF1IW	
 	))*:;R@r   c                    t        j                         }t               x}|_        d}|j	                  |       |j                         }| j                  |d       |j	                  d       |j                         }| j                  |d       y )Nr}   r{   rz   ry   )rH   r   r   r   r'   r2   rP   )r"   r   r   re   r   s        r   	test_recvzWebSocketTest.test_recv   su    ||~ 
"DIW 	 	
Yyy{01	56yy{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   )rH   create_connectionr4   )r"   countr   r   s       r   	test_iterzWebSocketTest.test_iter   sG      !>?	<= 	AQJEz	r   c                 ~    t        j                  d      }| j                  t        t	        t        |                   y )Nr   )rH   r   rP   strtypenext)r"   r   s     r   	test_nextzWebSocketTest.test_next   s,    ##$ABd4:./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|   )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    ||~ 
"DI	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!)rH   r   r   r   r'   r   r   ru   r   r2   rP   r   r   s       r   test_recv_timeoutzWebSocketTest.test_recv_timeout   s   ||~ 
"DI	W	V^^%&	45	V^^%&	89r;;< 	IIK	r;;< 	IIK	yy{/rDDE 	IIK	 		 		 		 	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	rH   r   r   r   r'   r2   rP   ru   r   r   s       r   #test_recv_with_simple_fragmentationz1WebSocketTest.test_recv_with_simple_fragmentation  s    ||~ 
"DI	GH	QRyy{;<rDDE 	IIK	 	 	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)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 
"DI	GH	GH	QR.."4~..."4~..."412 	
GHr445 	NN	 rDDE 	IIK	 		 		 	s   :E2EEE!c                 ,   t        j                         }d|_        |j                          t        j                         }t	               x}|_        d|_        |j                  d       |j                          | j                  |j                  d       y )NTs   pF)	rH   r   	connectedr6   r   r   r'   r2   rP   r   s      r   
test_closezWebSocketTest.test_close+  sg    ||~

||~ 
"DI	-.		/r   c                     t        j                         }t               x}|_        |j	                  d       | j                  t         j                  |j                         y )Nr   )rH   r   r   r   r'   ru   r   r2   r   s      r   test_recv_cont_fragmentationz*WebSocketTest.test_recv_cont_fragmentation7  sB    ||~ 
"DI	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    ||~ 
"DI	j	
 	
QR	EFyy{STrDDE 	IIK	 	 	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

)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  s    ||~/* 
"DI	=>	KL	WXyy{9:rDDE 	IIK	FF1I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   こにゃにゃちは、世界 )rH   r   r   assertNotEqualr4   r   filenorP   r2   ru   
ValueError
send_closer6   r"   r   results      r   test_websocketzWebSocketTest.test_websocket`  s       ?3G2H!IJAt$	~	
0	/0!AB*allB;		r   c                     t        j                  dt               }| j                  |d        |j	                  d       |j                  d       |j                          y )Nr   ry   Hi)rH   r   r   r   pingpongr6   r"   r   s     r   test_ping_pongzWebSocketTest.test_ping_pongq  sL       ?3G2H!IJAt$	w	t		r   c                 n    t        j                         }| j                  t        |j                  d       y )Nzws://google.com/)rH   r   ru   r   connectr   s     r   test_support_redirectz#WebSocketTest.test_support_redirect{  s%    LLN5qyyBT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   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      !>?At$
1663==9:,ALLND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   )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       234!#:;
 	At$))+T2	~0*aggr26		r   c                 *   t        j                  dt               }| j                  |d        |j	                          | j                  t         j                  |j                  d       | j                  t         j                  |j                         y )Nr   ry   )	rH   r   r   r   r6   ru   r   r4   r2   r   s     r   test_after_closezWebSocketTest.test_after_close  sl       ?3G2H!IJAt$		"??Q"??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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   rF   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_NODELAYrH   r   r   r   r   
getsockoptr6   )r"   r   r   s      r   test_sockoptzSockOptTest.test_sockopt  sz     &&(:(:A>@  234g
 	FFf00&2D2DEq	
 	
	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
   rP   )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   )	rH   r   r   get_default_verify_pathscapathru   r   r   r   )r"   websock1websock2s      r   test_http_sslzHandshakeTest.test_http_ssl  su    << #">">"@"G"GH$
 	*h&6&68UV<<
4K'LM 0 02O	
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	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8:AA # < < > E E
 	')+>% !&%%?*7	 	 	
r   c                 n    t        j                         }| j                  t        |j                  d       y )Nz2001:4860:4860::8888)rH   r   ru   r   r   )r"   r   s     r   	test_ipv6zHandshakeTest.test_ipv6  s&    <<>*h&6&68N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)rH   r   ru   r   r   r   r  s     r   test_bad_urlszHandshakeTest.test_bad_urls  sW    <<>*h&6&68IJ3X5E5E~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   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$   
    .  
 ; > ( *& ZZ^^$8#>#E zz~~&<dC -5 	 8&X &FIH%% FIR
(## 	&!! 	&.GH%% .Gb zHMMO W  9 s   D	 	DD