
     fG                     @   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n# e$ r  G d d	e          ZY nw xY we j                            d
d          dk    Ze j                            dd          Zedk    ZdZd Z G d d          Z G d de          Z  G d dej!                  Z" G d dej!                  Z# G d dej!                  Z$ G d dej!                  Z%e&dk    r ej'                     dS dS )    N)decodebytes)WebSocketBadStatusExceptionWebSocketAddressException)_create_sec_websocket_key)	_validate)read_headers)validate_utf8c                       e Zd ZdS )SSLErrorN)__name__
__module____qualname__     a/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/websocket/tests/test_websocket.pyr   r   '   s        r   r   TEST_WITH_INTERNET01LOCAL_WS_SERVER_PORTz-1Tc                     dS )Nabcdr   )_s    r   create_mask_keyr   3   s    6r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )SockMockc                 "    g | _         g | _        d S N)datasentselfs    r   __init__zSockMock.__init__8   s    				r   c                 :    | j                             |           d S r   )r   appendr!   r   s     r   
add_packetzSockMock.add_packet<   s    	r   c                     d S r   r   r    s    r   
gettimeoutzSockMock.gettimeout?   s    tr   c                     | j         rq| j                             d          }t          |t                    r|t	          |          |k    r#| j                             d||d                     |d |         S d S )Nr   )r   pop
isinstance	Exceptionleninsert)r!   bufsizees      r   recvzSockMock.recvB   s    9 		a  A!Y'' 1vv	  AghhK000XgX;	 	r   c                 T    | j                             |           t          |          S r   )r   r$   r-   r%   s     r   sendzSockMock.sendK   s$    	4yyr   c                     d S 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   sn                      r   r   c                       e Zd Zd ZdS )HeaderSockMockc                 ^   t                               |            t          j                            t          j                            t                    |          }t          |d          5 }|                     |	                                           d d d            d S # 1 swxY w Y   d S )Nrb)
r   r"   ospathjoindirname__file__openr&   read)r!   fnamer<   fs       r   r"   zHeaderSockMock.__init__T   s    $w||BGOOH55u==$ 	&OOAFFHH%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   -(B""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dS )WebSocketTestc                 8    t          j        t                     d S r   )wsenableTrace	TRACEABLEr    s    r   setUpzWebSocketTest.setUp\   s    
y!!!!!r   c                     d S r   r   r    s    r   tearDownzWebSocketTest.tearDown_   r6   r   c                     |                      t          j                    d            t          j        d           |                      t          j                    d           t          j        d            d S )N
   )assertEqualrG   getdefaulttimeoutsetdefaulttimeoutr    s    r   test_default_timeoutz"WebSocketTest.test_default_timeoutb   sh    -//666
R   -//444
T"""""r   c                     t                      }|                     |dk               |                     d|v           d S )N   u   ¥n)r   
assertTrue)r!   keys     r   test_ws_keyzWebSocketTest.test_ws_keyh   s@    '))r	"""S()))))r   c                     t                      }t          |                    d                    }|                     dt	          |                     dS )z/WebSocket key should be a random 16-byte nonce.zutf-8   N)r   base64decodeencoderO   r-   )r!   rV   nonces      r   
test_noncezWebSocketTest.test_noncem   sH    '))SZZ0011SZZ(((((r   c                    d}dddd}|                      t          ||d           d           |                                }d|d<   |                      t          ||d           d           |d= |                      t          ||d           d           |                                }d	|d
<   |                      t          ||d           d           |d
= |                      t          ||d           d           |                                }d	|d<   |                      t          ||d           d           |d= |                      t          ||d           d           |                                }d|d<   |                      t          ||ddg          d           |                      t          ||ddg          d           |                                }d|d<   |                      t          ||ddg          d           |                                }|                      t          ||ddg          d           d S )Nzc6b8hTg4EeGb2gQMztV1/g==	websocketupgradezKxep+hNu9n51529fGidYu7a3wO0=)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E|TTT %%''"y)&#t<<mLLL9)&#t<<mLLL %%''*|)&#t<<mLLL< )&#t<<mLLL %%'')4%&)&#t<<mLLL)*)&#t<<mLLL %%''+1'(VS66*:;;^	
 	
 	
 	)&#7GHH-XXX %%''+1'(VS66*:;;^	
 	
 	
 !%%'')&#7GHH-XXXXXr   c                    t          t          d                    \  }}}|                     |d           |                     |d         d           t          t          d                    \  }}}|                     |d           |                     |d         d           t          d           |                     t          j        t           t          d                     d S )Ndata/header01.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)LMM%%%-y999(8K)L)LMM%%%-/DEEE*+++!<@S1T1T	
 	
 	
 	
 	
r   c                    t          j                    }|                    t                     t	          d          x}|_        |                    d           |                     |j        d         d           |                    d           |                     |j        d         d           |                     |	                    d          d	           d S )
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EE		#$$$F1IW	
 	
 	
 	))*:;;R@@@@@r   c                 V   t          j                    }t                      x}|_        d}|                    |           |                                }|                     |d           |                    d           |                                }|                     |d           d S )Nr}   r{   rz   ry   )rG   r   r   r   r&   r1   rO   )r!   r   r   rd   r   s        r   	test_recvzWebSocketTest.test_recv   s    |~~ 

"DIW 	 	
Yyy{{0111	5666yy{{w'''''r   %Internet-requiring tests are disabledc                     d}t          j        d          }|                    d           |D ]}|dz  }|dk    r d S d S )N   wss://api.bitfinex.com/ws/2z+{"event": "subscribe", "channel": "ticker"}r|   r   )rG   create_connectionr3   )r!   countr   r   s       r   	test_iterzWebSocketTest.test_iter   sb     !>??	<=== 	 	AQJEzz 	 	r   c                     t          j        d          }|                     t          t	          t          |                               d S )Nr   )rG   r   rO   strtypenext)r!   r   s     r   	test_nextzWebSocketTest.test_next   s=    #$ABBd4::../////r   c                    t          j                    }t                      x}|_        |                    d           |                    t          j                               |                    d           |                    d           |                     t           j                  5  |j	        
                    d           d d d            n# 1 swxY w Y   |j	        
                    d          }|                     |d           |                     t           j                  5  |j	        
                    d           d d d            d S # 1 swxY w Y   d S )Ns   foos   bars   baz	   s	   foobarbazr|   )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EE 	- 	-))!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s$   -CCC.EEEc                    t          j                    }t                      x}|_        |                    d           |                    t          j                               |                    d           |                    t          j                               |                    d           |                     t           j                  5  |	                                 d d d            n# 1 swxY w Y   |                     t           j                  5  |	                                 d d d            n# 1 swxY w Y   |	                                }| 
                    |d           |                     t           j                  5  |	                                 d d d            d S # 1 swxY w Y   d S )N   s
   abcd)s   NC3 @zHello, World!)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55	V^%%&&&	8999r;<< 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r;<< 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	yy{{///rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   C44C8;C8D??EEF55F9<F9c                    t          j                    }t                      x}|_        |                    d           |                    d           |                                }|                     |d           |                     t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S )N   abcd#DC   abcd
DADzBrevity is the soul of wit	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HH	QRRRyy{{;<<<rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B>>CCc                 >   t          j        d          }t                      x}|_        |                    d           |                    d           |                    d           |                                \  }}|                     |d           |                                \  }}|                     |d           |                                \  }}|                     |d           |                    d           |                     t           j                  5  |                                 d d d            n# 1 swxY w Y   |                     t           j	                  5  |
                                 d d d            d S # 1 swxY w Y   d S )	NT)fire_cont_framer   s    abcd#DCr   s   Brevity is s   the soul of wits   abcd#DC)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11 

"DI	GHHH	GHHH	QRRR..""4~.....""4~.....""41222 	
GHHHr455 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   %EE
E
0FFFc                 .   t          j                    }d|_        |j         t          j                    }t	                      x}|_        d|_        |                    d           |                                 |                     |j        d           d S )NTs   pF)	rG   r   	connectedr5   r   r   r&   r1   rO   r   s      r   
test_closezWebSocketTest.test_close'  s{    |~~

|~~ 

"DI	-...		/////r   c                     t          j                    }t                      x}|_        |                    d           |                     t           j        |j                   d S )Nr   )rG   r   r   r   r&   rt   ru   r1   r   s      r   test_recv_cont_fragmentationz*WebSocketTest.test_recv_cont_fragmentation3  sQ    |~~ 

"DI	QRRR"/;;;;;r   c                    t          j                    }t                      x}|_        |                    d           |                    d           |                    d           |                                }|                     |d           |                     t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S )Ns!   abcd. AB
C	C	NCs    abcdAMBs   abcd Az2Once more unto the breach, dear friends, once morer   r   s       r   &test_recv_with_prolonged_fragmentationz4WebSocketTest.test_recv_with_prolonged_fragmentation:  s
   |~~ 

"DI	j	
 	
 	
 	
QRRR	EFFFyy{{STTTrDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   1CCCc                 4   t          j                    }|                    t                     t	                      x}|_        |                    d           |                    d           |                    d           |                                }|                     |d           | 	                    t           j
                  5  |                                 d d d            n# 1 swxY w Y   |                     |j        d         d           d S )Ns   abcd5D As   abcd1C4.,$D

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

)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  s5   |~~/*** 

"DI	=>>>	KLLL	WXXXyy{{9:::rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	F1IM	
 	
 	
 	
 	
s   C,,C03C0/Tests using local websocket server are disabledc                    t          j        dt                     }|                     |d            |                    d           |                                }|                                 |                     |d           |                    d           |                                }|                     |d           | 	                    t          |j        dd           |                                 d S )Nws://127.0.0.1:Hello, Worldu   こにゃにゃちは、世界 )rG   r   r   assertNotEqualr3   r   filenorO   r1   rt   
ValueError
send_closer5   r!   r   results      r   test_websocketzWebSocketTest.test_websocket\  s      !I3G!I!IJJAt$$$	~	


000	/000!ABBB*alB;;;						r   c                     t          j        dt                     }|                     |d            |                    d           |                    d           |                                 d S )Nr   ry   Hi)rG   r   r   r   pingpongr5   r!   r   s     r   test_ping_pongzWebSocketTest.test_ping_pongm  sc      !I3G!I!IJJAt$$$	w	t						r   c                 n    t          j                    }|                     t          |j        d           d S )Nzws://google.com/)rG   r   rt   r   connectr   s     r   test_support_redirectz#WebSocketTest.test_support_redirectw  s/    LNN5qyBTUUUUUr   c                 P   t          j        d          }|                     |d            |                     t	          |j        t          j                             |                     |	                                d           |                     |
                                d            |                    d           |                     |                                d           |                     |                                d            |                                 d S )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$$$
163=99:::,,,ALLNND111	R,,,))++T222						r   c                    t          j        dt           ddi          }|                     |d            |                     |                                d            |                    d           |                                }|                     |d           |                     t          |j
        dd           |
                                 d S )Nr   z
User-AgentPythonWebsocketClient)headersr   r   r   )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      4244!#:;
 
 
 	At$$$))++T222	~000*agr2666						r   c                 (   t          j        dt                     }|                     |d            |                                 |                     t           j        |j        d           |                     t           j        |j                   d S )Nr   ry   )	rG   r   r   r   r5   rt   r   r3   r1   r   s     r   test_after_closezWebSocketTest.test_after_close  s      !I3G!I!IJJAt$$$				"?QQQ"?HHHH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 +Y +YZ
 
 
A A A&( ( ( X+-TUU  VU X+-TUU0 0 VU0- - -"  "
 
 
  4
0 
0 
0< < <   
 
 
$ X Q    X Q    X+-TUUV V VUV
 X+-TUU	 	 VU	 X Q    X Q I I I I Ir   rE   c                   B    e Zd Z ej        ed          d             ZdS )SockOptTestr   c                 $   t           j        t           j        dff}t          j        dt
           |          }|                     |j                            t           j        t           j                  d           |	                                 d S )Nr|   r   )sockoptr   )
r   IPPROTO_TCPTCP_NODELAYrG   r   r   r   r   
getsockoptr5   )r!   r   r   s      r   test_sockoptzSockOptTest.test_sockopt  s     &(:A>@ 4244g
 
 
 	Ff0&2DEEq	
 	
 	
 	
					r   N)r   r   r   r   r   r   r   r   r   r   r   r     sE        X Q     r   r   c                       e Zd Zd ZdS )	UtilsTestc                     t          d          }|                     |d           t          d          }|                     |d           t          d          }|                     |d           d S )Ns   𐀀Ts   κόσμεeditedFr   )r	   rO   )r!   states     r   test_utf8_validatorzUtilsTest.test_utf8_validator  sy    122%%%M
 
 	&&&c""%%%%%r   N)r   r   r   r   r   r   r   r   r     s#        & & & & &r   r   c                       e Zd Z ej        ed          d             Z ej        ed          d             Zd Zd Z	dS )HandshakeTestr   c                    t          j        dt          j                    j        id          }|                     t          |j        d           t          j        ddi          }|                     t          |j        d           d S )N
cert_chainF)ssloptenable_multithreadr   certfilemyNonexistentCertFiler   )	rG   r   r   get_default_verify_pathscapathrt   r   r   FileNotFoundError)r!   websock1websock2s      r   test_http_sslzHandshakeTest.test_http_ssl  s    < #">"@"@"GH$
 
 
 	*h&68UVVV<
4K'LMMMx/1N	
 	
 	
 	
 	
r   c                     t          j        t          j                    j        t          j                    j        d          }|                     t          |j        dddddgdd	d
ddd	  	         d S )N)ca_certsca_cert_pathr   r   	chocolateztesting_websockets.comz+echo.websocket.events/websocket-client-test	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::A # < > > E 
 
 
 	')+>% !&%%?*7	  	 	
 	
 	
 	
 	
r   c                 n    t          j                    }|                     t          |j        d           d S )Nz2001:4860:4860::8888)rG   r   rt   r   r   )r!   r   s     r   	test_ipv6zHandshakeTest.test_ipv6  s/    <>>*h&68NOOOOOr   c                     t          j                    }|                     t          |j        d           |                     t
          |j        d           |                     t          |j        d           d S )Nzws//example.comzws://examplezexample.com)rG   r   rt   r   r   r   r  s     r   test_bad_urlszHandshakeTest.test_bad_urls  sf    <>>*h&68IJJJ3X5E~VVV*h&6FFFFFr   N)
r   r   r   r   r   r   r   r  r
  r  r   r   r   r   r     s        X+-TUU	
 	
 VU	
 X+-TUU
 
 VU
0P P PG G G G Gr   r   __main__)(r;   os.pathr   r   base64r   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 X X X X X X X : : : : : : > > > > > > ( ( ( ( ( ( * * * * * *&JJJJ       9      Z^^$8#>>#E z~~&<dCC -5 	         8& & & & &X & & &FI FI FI FI FIH% FI FI FIR
    (#   	& 	& 	& 	& 	&! 	& 	& 	&.G .G .G .G .GH% .G .G .Gb zHMOOOOO s   A AA