
    vKgG                     >   S SK r S SKr S SKrS SKrS SKJr  S SKrS SK	J
r
Jr  S SKJr  S SKJr  S SKJr  S SKJr    S SKr\ R0                  R3                  S
S5      S:H  r\ R0                  R3                  SS5      r\S:g  rSrS r " S S5      r " S S\5      r  " S S\RB                  5      r" " S S\RB                  5      r# " S S\RB                  5      r$ " S S\RB                  5      r%\&S:X  a  \RN                  " 5         gg! \ a     " S S	\5      r Nf = f)    N)decodebytes)WebSocketBadStatusExceptionWebSocketAddressException)_create_sec_websocket_key)	_validate)read_headers)validate_utf8c                       \ rS rSrSrg)SSLError'    N)__name__
__module____qualname____firstlineno____static_attributes__r       ^/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/websocket/tests/test_websocket.pyr   r   '   s    r   r   TEST_WITH_INTERNET01LOCAL_WS_SERVER_PORTz-1Tc                     g)Nabcdr   )_s    r   create_mask_keyr   3   s    r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
SockMock7   c                      / U l         / U l        g Ndatasentselfs    r   __init__SockMock.__init__8   s    		r   c                 :    U R                   R                  U5        g r!   )r#   appendr&   r#   s     r   
add_packetSockMock.add_packet<   s    		r   c                     g r!   r   r%   s    r   
gettimeoutSockMock.gettimeout?   s    r   c                     U R                   (       ad  U R                   R                  S5      n[        U[        5      (       a  Ue[	        U5      U:  a  U R                   R                  SX!S  5        US U $ g )Nr   )r#   pop
isinstance	Exceptionleninsert)r&   bufsizees      r   recvSockMock.recvB   sb    99		a A!Y''1v		  AhK0Xg; r   c                 N    U R                   R                  U5        [        U5      $ r!   )r$   r*   r5   r+   s     r   sendSockMock.sendK   s    		4yr   c                     g r!   r   r%   s    r   closeSockMock.closeO       r   r"   N)r   r   r   r   r'   r,   r/   r9   r<   r?   r   r   r   r   r   r   7   s     r   r   c                       \ rS rSrS rSrg)HeaderSockMockS   c                 :   [         R                  U 5        [        R                  R	                  [        R                  R                  [        5      U5      n[        US5       nU R                  UR                  5       5        S S S 5        g ! , (       d  f       g = f)Nrb)
r   r'   ospathjoindirname__file__openr,   read)r&   fnamerH   fs       r   r'   HeaderSockMock.__init__T   s[    $ww||BGGOOH5u=$OOAFFH% s   # B
Br   N)r   r   r   r   r'   r   r   r   r   rC   rC   S   s    &r   rC   c                   
   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\R                  " \S5      S 5       r\R                  " \S5      S 5       rS rS rS rS rS rS rS rS r\R                  " \S5      S 5       r\R                  " \S5      S 5       r\R                  " \S5      S 5       r\R                  " \S5      S 5       r\R                  " \S5      S 5       r\R                  " \S5      S 5       r Sr!g)WebSocketTest[   c                 8    [         R                  " [        5        g r!   )wsenableTrace	TRACEABLEr%   s    r   setUpWebSocketTest.setUp\   s    
y!r   c                     g r!   r   r%   s    r   tearDownWebSocketTest.tearDown_   rA   r   c                     U R                  [        R                  " 5       S 5        [        R                  " S5        U R                  [        R                  " 5       S5        [        R                  " S 5        g )N
   )assertEqualrU   getdefaulttimeoutsetdefaulttimeoutr%   s    r   test_default_timeout"WebSocketTest.test_default_timeoutb   sP    --/6
R --/4
T"r   c                 h    [        5       nU R                  US:g  5        U R                  SU;  5        g )N   u   ¥n)r   
assertTrue)r&   keys     r   test_ws_keyWebSocketTest.test_ws_keyh   s+    ')r	"S()r   c                     [        5       n[        UR                  S5      5      nU R                  S[	        U5      5        g)z/WebSocket key should be a random 16-byte nonce.zutf-8   N)r   base64decodeencoder_   r5   )r&   rg   nonces      r   
test_nonceWebSocketTest.test_noncem   s1    ')SZZ01SZ(r   c                    SnSSSS.nU R                  [        X!S 5      S5        UR                  5       nSUS'   U R                  [        X1S 5      S5        US	 U R                  [        X1S 5      S5        UR                  5       nS	US
'   U R                  [        X1S 5      S5        US
	 U R                  [        X1S 5      S5        UR                  5       nS	US'   U R                  [        X1S 5      S5        US	 U R                  [        X1S 5      S5        UR                  5       nSUS'   U R                  [        X1SS/5      S5        U R                  [        X1SS/5      S5        UR                  5       nSUS'   U R                  [        X1SS/5      S5        UR                  5       nU R                  [        X1SS/5      S5        g )Nzc6b8hTg4EeGb2gQMztV1/g==	websocketupgradezKxep+hNu9n51529fGidYu7a3wO0=)rs   
connectionsec-websocket-accept)TNhttp)FN	somethingrt   ru   sub1zsec-websocket-protocolsub2)Trx   sub3sUb1Sub1suB2)r_   _validate_headercopy)r&   rg   required_headerheaders       r   test_ws_utilsWebSocketTest.test_ws_utilss   s   ("#$B

 	)/E|T %%'"y)&t<mL9)&t<mL %%'*|)&t<mL< )&t<mL %%')4%&)&t<mL)*)&t<mL %%'+1'(V66*:;^	
 	)&7GH-X %%'+1'(V66*:;^	
 !%%')&7GH-Xr   c                 n   [        [        S5      5      u  pnU R                  US5        U R                  US   S5        [        [        S5      5      u  pnU R                  US5        U R                  US   S5        [        S5        U R                  [        R
                  [         [        S5      5        g )Ndata/header01.txte   rt   Upgradezdata/header03.txtzUpgrade, Keep-Alivezdata/header02.txt)r   rC   r_   assertRaisesrU   WebSocketException)r&   statusr   r   s       r   test_read_headerWebSocketTest.test_read_header   s    (8K)LM%-y9(8K)LM%-/DE*+!!<@S1T	
r   c                 |   [         R                  " 5       nUR                  [        5        [	        S5      =o!l        UR                  S5        U R                  UR                  S   S5        UR                  S5        U R                  UR                  S   S5        U R                  UR                  S5      S	5        g )
Nr   Hellor      abcd)   こんにちは      abcdʁłs   1111111111101   )
rU   	WebSocketset_mask_keyr   rC   sockr<   r_   r$   send_binaryr&   r   ss      r   	test_sendWebSocketTest.test_send   s    ||~/*&':;;I		'$DE		#$FF1IW	
 	))*:;R@r   c                    [         R                  " 5       n[        5       =o!l        SnUR	                  U5        UR                  5       nU R                  US5        UR	                  S5        UR                  5       nU R                  US5        g )Nr   r   r   r   )rU   r   r   r   r,   r9   r_   )r&   r   r   rw   r#   s        r   	test_recvWebSocketTest.test_recv   ss    ||~ 
"IW 	 	
Yyy{01	56yy{w'r   %Internet-requiring tests are disabledc                     Sn[         R                  " S5      nUR                  S5        U H  nUS-  nUS:X  d  M    g    g )N   wss://api.bitfinex.com/ws/2z+{"event": "subscribe", "channel": "ticker"}r   r   )rU   create_connectionr<   )r&   countr   r   s       r   	test_iterWebSocketTest.test_iter   sB      !>?	<=AQJEz r   c                     [         R                  " S5      nU R                  [        [	        [        U5      5      5        g )Nr   )rU   r   r_   strtypenext)r&   r   s     r   	test_nextWebSocketTest.test_next   s,    ##$ABd4:./r   c                    [         R                  " 5       n[        5       =o!l        UR	                  S5        UR	                  [
        R                  " 5       5        UR	                  S5        UR	                  S5        U R                  [         R                  5         UR                  R                  S5        S S S 5        UR                  R                  S5      nU R                  US5        U R                  [         R                  5         UR                  R                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Ns   foos   bars   baz	   s	   foobarbazr   )rU   r   r   r   r,   sockettimeoutr   WebSocketTimeoutExceptionframe_bufferrecv_strictr_   "WebSocketConnectionClosedExceptionr&   r   r   r#   s       r   test_internal_recv_strict'WebSocketTest.test_internal_recv_strict   s    ||~ 
"I	V	V^^%&	V	Vr;;<))!, =   ,,Q/|,rDDE))!, FE =< FEs   D1E1
D?
Ec                 >   [         R                  " 5       n[        5       =o!l        UR	                  S5        UR	                  [
        R                  " 5       5        UR	                  S5        UR	                  [
        R                  " 5       5        UR	                  S5        U R                  [         R                  5         UR                  5         S S S 5        U R                  [         R                  5         UR                  5         S S S 5        UR                  5       nU R                  US5        U R                  [         R                  5         UR                  5         S S S 5        g ! , (       d  f       N= f! , (       d  f       Nz= f! , (       d  f       g = f)N   s
   abcd)s   NC3 @zHello, World!)rU   r   r   r   r,   r   r   r   r   r9   r_   r   r   s       r   test_recv_timeoutWebSocketTest.test_recv_timeout   s   ||~ 
"I	W	V^^%&	45	V^^%&	89r;;<IIK =r;;<IIK =yy{/rDDEIIK FE =<<< FEs$    E,8E=F,
E:=
F
Fc                 h   [         R                  " 5       n[        5       =o!l        UR	                  S5        UR	                  S5        UR                  5       nU R                  US5        U R                  [         R                  5         UR                  5         S S S 5        g ! , (       d  f       g = f)N   abcd#DC   abcd
DADzBrevity is the soul of wit	rU   r   r   r   r,   r9   r_   r   r   r   s       r   #test_recv_with_simple_fragmentation1WebSocketTest.test_recv_with_simple_fragmentation  sy    ||~ 
"I	GH	QRyy{;<rDDEIIK FEEs   	B##
B1c                    [         R                  " SS9n[        5       =o!l        UR	                  S5        UR	                  S5        UR	                  S5        UR                  5       u  p4U R                  US5        UR                  5       u  p4U R                  US5        UR                  5       u  p4U R                  US5        UR	                  S5        U R                  [         R                  5         UR                  5         S S S 5        U R                  [         R                  5         UR                  5         S S S 5        g ! , (       d  f       NG= f! , (       d  f       g = f)	NT)fire_cont_framer   s    abcd#DCr   s   Brevity is s   the soul of wits   abcd#DC)rU   r   r   r   r,   	recv_datar_   r   r   r   r9   )r&   r   r   r   r#   s        r   *test_recv_with_fire_event_of_fragmentation8WebSocketTest.test_recv_with_fire_event_of_fragmentation  s   ||D1 
"I	GH	GH	QR.."~..."~..."12 	
GHr445NN 6 rDDEIIK FE 65 FEs   4E,E
E
E%c                 &   [         R                  " 5       nSUl        UR                    [         R                  " 5       n[	        5       =o!l        SUl        UR                  S5        UR                  5         U R                  UR                  S5        g )NTs   pF)	rU   r   	connectedr?   r   r   r,   r9   r_   r   s      r   
test_closeWebSocketTest.test_close'  sc    ||~

||~ 
"I	-.		/r   c                     [         R                  " 5       n[        5       =o!l        UR	                  S5        U R                  [         R                  UR                  5        g )Nr   )rU   r   r   r   r,   r   r   r9   r   s      r   test_recv_cont_fragmentation*WebSocketTest.test_recv_cont_fragmentation3  s@    ||~ 
"I	QR"//;r   c                    [         R                  " 5       n[        5       =o!l        UR	                  S5        UR	                  S5        UR	                  S5        UR                  5       nU R                  US5        U R                  [         R                  5         UR                  5         S S S 5        g ! , (       d  f       g = f)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_fragmentation4WebSocketTest.test_recv_with_prolonged_fragmentation:  s    ||~ 
"I	j	
 	
QR	EFyy{STrDDEIIK FEEs   B44
Cc                    [         R                  " 5       nUR                  [        5        [	        5       =o!l        UR                  S5        UR                  S5        UR                  S5        UR                  5       nU R                  US5        U R                  [         R                  5         UR                  5         S S S 5        U R                  UR                  S   S5        g ! , (       d  f       N.= f)Ns   abcd5D As   abcd1C4.,$D

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

)rU   r   r   r   r   r   r,   r9   r_   r   r   r$   r   s       r   .test_recv_with_fragmentation_and_control_frame<WebSocketTest.test_recv_with_fragmentation_and_control_frameJ  s    ||~/* 
"I	=>	KL	WXyy{9:rDDEIIK FFF1IM	
 FEs   /C((
C6/Tests using local websocket server are disabledc                    [         R                  " S[         35      nU R                  US 5        UR	                  S5        UR                  5       nUR                  5         U R                  US5        UR	                  S5        UR                  5       nU R                  US5        U R                  [        UR                  SS5        UR                  5         g )Nws://127.0.0.1:Hello, Worldu   こにゃにゃちは、世界 )rU   r   r   assertNotEqualr<   r   filenor_   r9   r   
ValueError
send_closer?   r&   r   results      r   test_websocketWebSocketTest.test_websocket\  s       ?3G2H!IJAt$	~	
0	/0!AB*allB;		r   c                     [         R                  " S[         35      nU R                  US 5        UR	                  S5        UR                  S5        UR                  5         g )Nr   r   Hi)rU   r   r   r   pingpongr?   r&   r   s     r   test_ping_pongWebSocketTest.test_ping_pongm  sL       ?3G2H!IJAt$	w	t		r   c                 p    [         R                  " 5       nU R                  [        UR                  S5        g )Nzws://google.com/)rU   r   r   r   connectr   s     r   test_support_redirect#WebSocketTest.test_support_redirectw  s%    LLN5qyyBTUr   c                    [         R                  " S5      nU R                  US 5        U R                  [	        UR
                  [        R                  5      5        U R                  UR                  5       S5        U R                  UR                  5       S 5        UR                  S5        U R                  UR                  5       S5        U R                  UR                  5       S 5        UR                  5         g )Nr   r   r^   )rU   r   r   rf   r3   r   ssl	SSLSocketr_   	getstatus
getheaders
settimeoutr/   getsubprotocolabortr   s     r   test_secure_websocket#WebSocketTest.test_secure_websocket}  s      !>?At$
1663==9:,ALLND1	R,))+T2		r   c                 n   [         R                  " S[         3SS0S9nU R                  US 5        U R	                  UR                  5       S 5        UR                  S5        UR                  5       nU R	                  US5        U R                  [        UR                  SS5        UR                  5         g )Nr   z
User-AgentPythonWebsocketClient)headersr   r   r   )rU   r   r   r   r_   r   r<   r9   r   r   r?   r   s      r   !test_websocket_with_custom_header/WebSocketTest.test_websocket_with_custom_header  s       234!#:;
 	At$))+T2	~0*aggr26		r   c                 ,   [         R                  " S[         35      nU R                  US 5        UR	                  5         U R                  [         R                  UR                  S5        U R                  [         R                  UR                  5        g )Nr   r   )	rU   r   r   r   r?   r   r   r<   r9   r   s     r   test_after_closeWebSocketTest.test_after_close  sl       ?3G2H!IJAt$		"??Q"??Hr   r   N)"r   r   r   r   rX   r[   rb   rh   ro   r   r   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   r   rR   rR   [   s   "#*
)+YZ
A&( +-TU V +-TU0 V0-""
4
0< 
$  Q  Q +-TUV VV
 +-TU	 V	  Q  QIIr   rR   c                   F    \ rS rSr\R
                  " \S5      S 5       rSrg)SockOptTesti  r   c                 0   [         R                  [         R                  S44n[        R                  " S[
         3US9nU R                  UR                  R                  [         R                  [         R                  5      S5        UR                  5         g )Nr   r   )sockoptr   )
r   IPPROTO_TCPTCP_NODELAYrU   r   r   r   r   
getsockoptr?   )r&   r  r   s      r   test_sockoptSockOptTest.test_sockopt  sz     &&(:(:A>@  234g
 	FFf00&2D2DEq	
 	
	r   r   N)	r   r   r   r   r   r   r  r	  r   r   r   r   r  r    s%     Qr   r  c                       \ rS rSrS rSrg)	UtilsTesti  c                     [        S5      nU R                  US5        [        S5      nU R                  US5        [        S5      nU R                  US5        g )Ns   𐀀Ts   κόσμεeditedFr   )r	   r_   )r&   states     r   test_utf8_validatorUtilsTest.test_utf8_validator  sV    12%M
 	&c"%r   r   N)r   r   r   r   r  r   r   r   r   r  r    s    &r   r  c                       \ rS rSr\R
                  " \S5      S 5       r\R
                  " \S5      S 5       rS r	S r
Srg)	HandshakeTesti  r   c                    [         R                  " S[        R                  " 5       R                  0SS9nU R                  [        UR                  S5        [         R                  " SS0S9nU R                  [        UR                  S5        g )N
cert_chainF)ssloptenable_multithreadr   certfilemyNonexistentCertFiler  )	rU   r   r   get_default_verify_pathscapathr   r   r   FileNotFoundError)r&   websock1websock2s      r   test_http_sslHandshakeTest.test_http_ssl  su    << #">">"@"G"GH$
 	*h&6&68UV<<
4K'LMx//1N	
r   c                     [         R                  " [        R                  " 5       R                  [        R                  " 5       R
                  S.S9nU R                  [        UR                  SSSSS/SS	S
SSS.S9	  g )N)ca_certsca_cert_pathr  r   	chocolateztesting_websockets.comz+echo.websocket.events/websocket-client-test	testprotor   123	TestValuezk9kFAUWNAMmf5OEMfTlOEA==newprotocol)CustomHeader1CookiezSec-WebSocket-KeyzSec-WebSocket-Protocol)cookieoriginhostsubprotocolsrt   r   )	rU   r   r   r  cafiler  r   r   r   r&   websock3s     r   test_manual_headers!HandshakeTest.test_manual_headers  s    <<88:AA # < < > E E
 	')+>% !&%%?*7	 	 	
r   c                 p    [         R                  " 5       nU R                  [        UR                  S5        g )Nz2001:4860:4860::8888)rU   r   r   r   r   )r&   r  s     r   	test_ipv6HandshakeTest.test_ipv6  s&    <<>*h&6&68NOr   c                     [         R                  " 5       nU R                  [        UR                  S5        U R                  [
        UR                  S5        U R                  [        UR                  S5        g )Nzws//example.comzws://examplezexample.com)rU   r   r   r   r   r   r0  s     r   test_bad_urlsHandshakeTest.test_bad_urls  sW    <<>*h&6&68IJ3X5E5E~V*h&6&6Fr   r   N)r   r   r   r   r   r   r   r  r2  r5  r8  r   r   r   r   r  r    sT    +-TU	
 V	
 +-TU
 V
0PGr   r  __main__)(rG   os.pathr   r   base64r   rl   rr   rU   websocket._exceptionsr   r   websocket._handshaker   r   r~   websocket._httpr   websocket._utilsr	   r   ImportErrorr4   r   environgetr   r   r  rW   r   r   rC   TestCaserR   r  r  r  r   mainr   r   r   <module>rF     s   
    .  X : > ( *& ZZ^^$8#>#E zz~~&<dC -5 	 8&X &FIH%% FIR
(## 	&!! 	&.GH%% .Gb zMMO W  9 s   D DD