o
    ʷ6iG                     @   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re(  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   c/var/www/hoanhtaovolam_webdjango/env/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.txte   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   pF)	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