o
    M,öhþG  ã                   @   s\  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 	 zd dlZW n eyT   G dd	„ d	eƒZY nw e j d
d¡dkZe j dd¡ZedkZdZdd„ ZG dd„ dƒZ G dd„ de ƒZ!G dd„ dej"ƒZ#G dd„ dej"ƒZ$G dd„ dej"ƒZ%G dd„ dej"ƒZ&e'dkr¬e (¡  dS dS )é    N)Údecodebytes)ÚWebSocketBadStatusExceptionÚWebSocketAddressExceptionÚWebSocketException)Ú_create_sec_websocket_key)Ú	_validate)Úread_headers)Úvalidate_utf8c                   @   s   e Zd ZdS )ÚSSLErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   új/var/www/www-root/data/www/bot.pdev.uz/venv/lib/python3.10/site-packages/websocket/tests/test_websocket.pyr
   +   s    r
   ÚTEST_WITH_INTERNETÚ0Ú1ÚLOCAL_WS_SERVER_PORTz-1Tc                 C   s   dS )NÚabcdr   )Ú_r   r   r   Úcreate_mask_key7   ó   r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚSockMockc                 C   s   g | _ g | _d S ©N)ÚdataÚsent©Úselfr   r   r   Ú__init__<   s   
zSockMock.__init__c                 C   s   | j  |¡ d S r   )r   Úappend©r   r   r   r   r   Ú
add_packet@   s   zSockMock.add_packetc                 C   ó   d S r   r   r   r   r   r   Ú
gettimeoutC   r   zSockMock.gettimeoutc                 C   sR   | j r'| j  d¡}t|tƒr|‚t|ƒ|kr!| j  d||d … ¡ |d |… S d S )Nr   )r   ÚpopÚ
isinstanceÚ	ExceptionÚlenÚinsert)r   ÚbufsizeÚer   r   r   ÚrecvF   s   
úzSockMock.recvc                 C   s   | j  |¡ t|ƒS r   )r   r   r'   r    r   r   r   ÚsendO   s   zSockMock.sendc                 C   r"   r   r   r   r   r   r   ÚcloseS   r   zSockMock.closeN)	r   r   r   r   r!   r#   r+   r,   r-   r   r   r   r   r   ;   s    	r   c                   @   ó   e Zd Zdd„ ZdS )ÚHeaderSockMockc                 C   s^   t  | ¡ tj tj t¡|¡}t|dƒ}|  | 	¡ ¡ W d   ƒ d S 1 s(w   Y  d S )NÚrb)
r   r   ÚosÚpathÚjoinÚdirnameÚ__file__Úopenr!   Úread)r   Úfnamer2   Úfr   r   r   r   X   s
   
"ÿzHeaderSockMock.__init__N)r   r   r   r   r   r   r   r   r/   W   ó    r/   c                   @   s4  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze ed¡dd„ ƒZe ed¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Ze ed(¡d)d*„ ƒZe ed(¡d+d,„ ƒZe ed¡d-d.„ ƒZe ed¡d/d0„ ƒZe ed(¡d1d2„ ƒZe ed(¡d3d4„ ƒZd5S )6ÚWebSocketTestc                 C   s   t  t¡ d S r   )ÚwsÚenableTraceÚ	TRACEABLEr   r   r   r   ÚsetUp`   s   zWebSocketTest.setUpc                 C   r"   r   r   r   r   r   r   ÚtearDownc   r   zWebSocketTest.tearDownc                 C   s8   |   t ¡ d ¡ t d¡ |   t ¡ d¡ t d ¡ d S )Né
   )ÚassertEqualr<   ÚgetdefaulttimeoutÚsetdefaulttimeoutr   r   r   r   Útest_default_timeoutf   s   
z"WebSocketTest.test_default_timeoutc                 C   s&   t ƒ }|  |dk¡ |  d|v¡ d S )Né   u   Â¥n)r   Ú
assertTrue)r   Úkeyr   r   r   Útest_ws_keyl   s   zWebSocketTest.test_ws_keyc                 C   s(   t ƒ }t| d¡ƒ}|  dt|ƒ¡ dS )z/WebSocket key should be a random 16-byte nonce.zutf-8é   N)r   Úbase64decodeÚencoderB   r'   )r   rH   Únoncer   r   r   Ú
test_nonceq   s   zWebSocketTest.test_noncec                 C   sj  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=)rP   Ú
connectionúsec-websocket-accept)TNÚhttp)FNÚ	somethingrQ   rR   Úsub1zsec-websocket-protocolÚsub2)TrU   Úsub3ÚsUb1ÚSub1ÚsuB2)rB   Ú_validate_headerÚcopy)r   rH   Úrequired_headerÚheaderr   r   r   Útest_ws_utilsw   sD   ýÿÿzWebSocketTest.test_ws_utilsc                 C   s|   t tdƒƒ\}}}|  |d¡ |  |d d¡ t tdƒƒ\}}}|  |d¡ |  |d d¡ tdƒ |  tjt tdƒ¡ d S )Núdata/header01.txtée   rQ   ÚUpgradezdata/header03.txtzUpgrade, Keep-Alivezdata/header02.txt)r   r/   rB   ÚassertRaisesr<   r   )r   Ústatusr^   r   r   r   r   Útest_read_header¤   s   ÿzWebSocketTest.test_read_headerc                 C   sn   t  ¡ }| t¡ tdƒ }|_| d¡ |  |jd d¡ | d¡ |  |jd d¡ |  | 	d¡d	¡ d S )
Nr`   ÚHellor   ó   …abcd)õ   ã“ã‚“ã«ã¡ã¯é   ó   abcd‚ãð‡ãñ€åÊâÅ‚ãÌs   1111111111101é   )
r<   Ú	WebSocketÚset_mask_keyr   r/   Úsockr,   rB   r   Úsend_binary©r   rn   Úsr   r   r   Ú	test_send²   s   


þzWebSocketTest.test_sendc                 C   sX   t  ¡ }tƒ  }|_d}| |¡ | ¡ }|  |d¡ | d¡ | ¡ }|  |d¡ d S )Nrj   rh   rg   rf   )r<   rl   r   rn   r!   r+   rB   )r   rn   rq   rT   r   r   r   r   Ú	test_recvÅ   s   ÿ

zWebSocketTest.test_recvú%Internet-requiring tests are disabledc                 C   s<   d}t  d¡}| d¡ |D ]}|d8 }|dkr d S qd S )Né   úwss://api.bitfinex.com/ws/2z+{"event": "subscribe", "channel": "ticker"}ri   r   )r<   Úcreate_connectionr,   )r   Úcountrq   r   r   r   r   Ú	test_iterÔ   s   

ÿþzWebSocketTest.test_iterc                 C   s"   t  d¡}|  ttt|ƒƒ¡ d S )Nrv   )r<   rw   rB   ÚstrÚtypeÚnext)r   rn   r   r   r   Ú	test_nextÞ   s   
zWebSocketTest.test_nextc                 C   sÎ   t  ¡ }tƒ  }|_| d¡ | t ¡ ¡ | d¡ | d¡ |  t j¡ |j	 
d¡ W d   ƒ n1 s7w   Y  |j	 
d¡}|  |d¡ |  t j¡ |j	 
d¡ W d   ƒ d S 1 s`w   Y  d S )Ns   foos   bars   bazé	   s	   foobarbazri   )r<   rl   r   rn   r!   ÚsocketÚtimeoutrc   ÚWebSocketTimeoutExceptionÚframe_bufferÚrecv_strictrB   Ú"WebSocketConnectionClosedException©r   rn   rq   r   r   r   r   Útest_internal_recv_strictã   s   


ÿ"ÿz'WebSocketTest.test_internal_recv_strictc                 C   s  t  ¡ }tƒ  }|_| d¡ | t ¡ ¡ | d¡ | t ¡ ¡ | d¡ |  t j¡ | 	¡  W d   ƒ n1 s<w   Y  |  t j¡ | 	¡  W d   ƒ n1 sVw   Y  | 	¡ }|  
|d¡ |  t j¡ | 	¡  W d   ƒ d S 1 s{w   Y  d S )Nó   s
   abcd)s   NC3 @zHello, World!)r<   rl   r   rn   r!   r   r€   rc   r   r+   rB   r„   r…   r   r   r   Útest_recv_timeoutô   s$   



ÿ
ÿ
"ÿzWebSocketTest.test_recv_timeoutc                 C   sv   t  ¡ }tƒ  }|_| d¡ | d¡ | ¡ }|  |d¡ |  t j¡ | ¡  W d   ƒ d S 1 s4w   Y  d S )Nó   ‹abcd#DCó   €abcd
DADzBrevity is the soul of wit©	r<   rl   r   rn   r!   r+   rB   rc   r„   r…   r   r   r   Ú#test_recv_with_simple_fragmentation  s   


"ÿz1WebSocketTest.test_recv_with_simple_fragmentationc                 C   sö   t jdd}tƒ  }|_| d¡ | d¡ | d¡ | ¡ \}}|  |d¡ | ¡ \}}|  |d¡ | ¡ \}}|  |d¡ | d¡ |  t j¡ | ¡  W d   ƒ n1 sYw   Y  |  t j	¡ | 
¡  W d   ƒ d S 1 stw   Y  d S )	NT)Úfire_cont_framer‰   s    ‹abcd#DCrŠ   s   Brevity is s   the soul of wits   €‹abcd#DC)r<   rl   r   rn   r!   Ú	recv_datarB   rc   r   r„   r+   )r   rn   rq   r   r   r   r   r   Ú*test_recv_with_fire_event_of_fragmentation  s$   




ÿ
"ÿz8WebSocketTest.test_recv_with_fire_event_of_fragmentationc                 C   sT   t  ¡ }d|_| ¡  t  ¡ }tƒ  }|_d|_| d¡ | ¡  |  |jd¡ d S )NTs   ˆ€˜p„F)	r<   rl   Ú	connectedr-   r   rn   r!   r+   rB   rp   r   r   r   Ú
test_close+  s   
zWebSocketTest.test_closec                 C   s2   t  ¡ }tƒ  }|_| d¡ |  t j|j¡ d S )NrŠ   )r<   rl   r   rn   r!   rc   r   r+   rp   r   r   r   Útest_recv_cont_fragmentation7  s   
z*WebSocketTest.test_recv_cont_fragmentationc                 C   s€   t  ¡ }tƒ  }|_| d¡ | d¡ | d¡ | ¡ }|  |d¡ |  t j¡ | ¡  W d   ƒ d S 1 s9w   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…   r   r   r   Ú&test_recv_with_prolonged_fragmentation>  s   ÿ


"ÿz4WebSocketTest.test_recv_with_prolonged_fragmentationc                 C   sš   t  ¡ }| t¡ tƒ  }|_| d¡ | d¡ | d¡ | ¡ }|  |d¡ |  	t j
¡ | ¡  W d   ƒ n1 s=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

)r<   rl   rm   r   r   rn   r!   r+   rB   rc   r„   r   r…   r   r   r   Ú.test_recv_with_fragmentation_and_control_frameN  s   




ÿ
ÿz<WebSocketTest.test_recv_with_fragmentation_and_control_frameú/Tests using local websocket server are disabledc                 C   s~   t  dt› ¡}|  |d ¡ | d¡ | ¡ }| ¡  |  |d¡ | d¡ | ¡ }|  |d¡ |  	t
|jdd¡ | ¡  d S )Núws://127.0.0.1:úHello, Worldu   ã“ã«ã‚ƒã«ã‚ƒã¡ã¯ã€ä¸–ç•ŒéÿÿÿÿÚ )r<   rw   r   ÚassertNotEqualr,   r|   ÚfilenorB   r+   rc   Ú
ValueErrorÚ
send_closer-   ©r   rq   Úresultr   r   r   Útest_websocket`  s   

zWebSocketTest.test_websocketc                 C   s<   t  dt› ¡}|  |d ¡ | d¡ | d¡ | ¡  d S )Nr–   rf   ÚHi)r<   rw   r   rš   ÚpingÚpongr-   ©r   rq   r   r   r   Útest_ping_pongq  s
   

zWebSocketTest.test_ping_pongc                 C   ó   t  ¡ }|  t|jd¡ d S )Nzws://google.com/)r<   rl   rc   r   Úconnectr¤   r   r   r   Útest_support_redirect{  s   z#WebSocketTest.test_support_redirectc                 C   s€   t  d¡}|  |d ¡ |  t|jtjƒ¡ |  | 	¡ d¡ |  | 
¡ d ¡ | d¡ |  | ¡ d¡ |  | ¡ d ¡ | ¡  d S )Nrv   ra   rA   )r<   rw   rš   rG   r%   rn   ÚsslÚ	SSLSocketrB   Ú	getstatusÚ
getheadersÚ
settimeoutr#   ÚgetsubprotocolÚabortr¤   r   r   r   Útest_secure_websocket  s   

z#WebSocketTest.test_secure_websocketc                 C   sp   t jdt› ddid}|  |d ¡ |  | ¡ d ¡ | d¡ | ¡ }|  |d¡ |  t	|j
dd¡ | 
¡  d S )Nr–   z
User-AgentÚPythonWebsocketClient)Úheadersr—   r˜   r™   )r<   rw   r   rš   rB   r®   r,   r+   rc   rœ   r-   rž   r   r   r   Ú!test_websocket_with_custom_header  s   þ
z/WebSocketTest.test_websocket_with_custom_headerc                 C   sJ   t  dt› ¡}|  |d ¡ | ¡  |  t j|jd¡ |  t j|j¡ d S )Nr–   rf   )	r<   rw   r   rš   r-   rc   r„   r,   r+   r¤   r   r   r   Útest_after_close  s
   zWebSocketTest.test_after_closeN) r   r   r   r?   r@   rE   rI   rN   r_   re   rr   rs   ÚunittestÚ
skipUnlessr   ry   r}   r†   rˆ   rŒ   r   r‘   r’   r“   r”   ÚTEST_WITH_LOCAL_SERVERr    r¥   r¨   r°   r³   r´   r   r   r   r   r;   _   sT    -


	
ÿ
ÿ




ÿ
ÿr;   c                   @   s    e Zd Ze ed¡dd„ ƒZdS )ÚSockOptTestr•   c                 C   sJ   t jt jdff}tjdt› |d}|  |j t jt j¡d¡ | 	¡  d S )Nri   r–   )Úsockoptr   )
r   ÚIPPROTO_TCPÚTCP_NODELAYr<   rw   r   rš   rn   Ú
getsockoptr-   )r   r¹   rq   r   r   r   Útest_sockopt©  s   
ÿÿzSockOptTest.test_sockoptN)r   r   r   rµ   r¶   r·   r½   r   r   r   r   r¸   ¨  s
    ÿr¸   c                   @   r.   )Ú	UtilsTestc                 C   s@   t dƒ}|  |d¡ t dƒ}|  |d¡ t dƒ}|  |d¡ d S )Ns   ð€€Ts   Îºá½¹ÏƒÎ¼Îµí €editedFó    )r	   rB   )r   Ústater   r   r   Útest_utf8_validator¸  s   ÿzUtilsTest.test_utf8_validatorN)r   r   r   rÁ   r   r   r   r   r¾   ·  r:   r¾   c                   @   sD   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZdd„ Zdd	„ Z	d
S )ÚHandshakeTestrt   c                 C   sL   t jdt ¡ jidd}|  t|jd¡ t jddid}|  t|jd¡ d S )NÚ
cert_chainF)ÚssloptÚenable_multithreadrv   ÚcertfileÚmyNonexistentCertFile©rÄ   )	r<   rl   r©   Úget_default_verify_pathsÚcapathrc   rœ   r§   r   )r   Úwebsock1Úwebsock2r   r   r   Útest_http_sslÄ  s   þÿzHandshakeTest.test_http_sslc                 C   sL   t jt ¡ jt ¡ jdœd}| jt|jdddddgdd	d
dddœd	 d S )N)Úca_certsÚca_cert_pathrÈ   rv   Ú	chocolateztesting_websockets.comz+echo.websocket.events/websocket-client-testÚ	testprotorb   Ú123Ú	TestValuezk9kFAUWNAMmf5OEMfTlOEA==Únewprotocol)ÚCustomHeader1ÚCookiezSec-WebSocket-KeyzSec-WebSocket-Protocol)ÚcookieÚoriginÚhostÚsubprotocolsrQ   r^   )	r<   rl   r©   rÉ   ÚcafilerÊ   rc   r   r§   ©r   Úwebsock3r   r   r   Útest_manual_headersÐ  s(   þÿü
÷z!HandshakeTest.test_manual_headersc                 C   r¦   )Nz2001:4860:4860::8888)r<   rl   rc   rœ   r§   )r   rÌ   r   r   r   Ú	test_ipv6é  s   zHandshakeTest.test_ipv6c                 C   s<   t  ¡ }|  t|jd¡ |  t|jd¡ |  t|jd¡ d S )Nzws//example.comzws://examplezexample.com)r<   rl   rc   rœ   r§   r   rÜ   r   r   r   Útest_bad_urlsí  s   zHandshakeTest.test_bad_urlsN)
r   r   r   rµ   r¶   r   rÍ   rÞ   rß   rà   r   r   r   r   rÂ   Ã  s    



rÂ   Ú__main__))r1   Úos.pathr   rµ   Úbase64r   rK   rO   r<   Úwebsocket._exceptionsr   r   r   Úwebsocket._handshaker   r   r[   Úwebsocket._httpr   Úwebsocket._utilsr	   r©   ÚImportErrorr&   r
   ÚenvironÚgetr   r   r·   r>   r   r   r/   ÚTestCaser;   r¸   r¾   rÂ   r   Úmainr   r   r   r   Ú<module>   sB   þ  K1ÿ