
    ,hG                     :   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/html/Resume-Scraper/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    99		a A!Y'1v		  AghK0Xg; r   c                 N    | j                   j                  |       t        |      S r   )r   r$   r-   r%   s     r   sendzSockMock.sendK   s    		4y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    $ww||BGGOOH5u=$ 	&OOAFFH%	& 	& 	&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    ')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=)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'(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   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*+!!<@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 )
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    ||~/*&':;;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   )rG   r   r   r   r&   r1   rO   )r!   r   r   rd   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   )rG   create_connectionr3   )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   )rG   r   rO   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|   )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    ||~ 
"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!)rG   r   r   r   r&   r   r   rt   r   r1   rO   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	rG   r   r   r   r&   r1   rO   rt   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)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 
"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)	rG   r   	connectedr5   r   r   r&   r1   rO   r   s      r   
test_closezWebSocketTest.test_close'  se    ||~

||~ 
"DI	-.		/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    ||~ 
"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

)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    ||~/* 
"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   こにゃにゃちは、世界 )rG   r   r   assertNotEqualr3   r   filenorO   r1   rt   
ValueError
send_closer5   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)rG   r   r   r   pingpongr5   r!   r   s     r   test_ping_pongzWebSocketTest.test_ping_pongm  sL       ?3G2H!IJAt$	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%    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   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      !>?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   )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!#:;
 	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   )	rG   r   r   r   r5   rt   r   r3   r1   r   s     r   test_after_closezWebSocketTest.test_after_close  sl       ?3G2H!IJAt$		"??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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	   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&68U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&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)rG   r   rt   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   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 : > ( *& 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