a
    ñ»j­0  ã                   @   s,  d dl Z d dlZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZmZmZmZmZmZ zd dlmZmZmZ W n    d dl	mZmZmZ Y n0 e j dd¡dkZe j dd¡dkZe j d	d
¡Zed
kZG dd„ dƒZG dd„ deƒZG dd„ dƒZG dd„ dejƒZe dk�r(e !¡  dS )é    N)ÚWebSocketProxyExceptionÚWebSocketException)Ú_get_addrinfo_listÚ_start_proxied_socketÚ_tunnelÚconnectÚ
proxy_infoÚread_headersÚHAVE_PYTHON_SOCKS)ÚProxyConnectionErrorÚ
ProxyErrorÚProxyTimeoutErrorÚTEST_WITH_INTERNETÚ0Ú1ÚTEST_WITH_PROXYÚLOCAL_WS_SERVER_PORTz-1c                   @   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©Úself© r   ú?E:\soccer\ml_env\Lib\site-packages\websocket/tests/test_http.pyÚ__init__6   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   s   d S r   r   r   r   r   r   Ú
gettimeout=   s    zSockMock.gettimeoutc                 C   sR   | j rN| j  d¡}t|tƒr |‚t|ƒ|krB| j  d||d … ¡ |d |… S d S )Nr   )r   ÚpopÚ
isinstanceÚ	ExceptionÚlenÚinsert)r   ÚbufsizeÚer   r   r   Úrecv@   s    
zSockMock.recvc                 C   s   | j  |¡ t|ƒS r   )r   r   r#   r   r   r   r   ÚsendI   s    zSockMock.sendc                 C   s   d S r   r   r   r   r   r   ÚcloseM   s    zSockMock.closeN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r'   r(   r)   r   r   r   r   r   5   s   	r   c                   @   s   e Zd Zdd„ ZdS )ÚHeaderSockMockc                 C   s\   t  | ¡ tj tj t¡|¡}t|dƒ�}|  | 	¡ ¡ W d   ƒ n1 sN0    Y  d S )NÚrb)
r   r   ÚosÚpathÚjoinÚdirnameÚ__file__Úopenr   Úread)r   Úfnamer0   Úfr   r   r   r   R   s    
zHeaderSockMock.__init__N©r*   r+   r,   r   r   r   r   r   r-   Q   s   r-   c                   @   s   e Zd Zdd„ ZdS )ÚOptsListc                 C   s   d| _ g | _dtji| _d S )Né   Ú	cert_reqs)ÚtimeoutZsockoptÚsslÚ	CERT_NONEÚssloptr   r   r   r   r   Z   s    zOptsList.__init__Nr8   r   r   r   r   r9   Y   s   r9   c                   @   sx   e Zd Zdd„ Zdd„ Ze ed¡dd„ ƒZe ed¡e e	d¡e e
d	¡d
d„ ƒƒƒZe ed¡dd„ ƒZdd„ ZdS )ÚHttpTestc                 C   sD   t tdƒƒ\}}}|  |d¡ |  |d d¡ |  tt tdƒ¡ d S )Núdata/header01.txtée   Ú
connectionZUpgradeúdata/header02.txt)r	   r-   ÚassertEqualÚassertRaisesr   )r   ÚstatusÚheaderÚ_r   r   r   Útest_read_headera   s    
ÿzHttpTest.test_read_headerc                 C   s4   |   tttdƒddd¡ |   tttdƒddd¡ d S )NrA   úexample.coméP   )ÚusernameÚpasswordrD   )rF   r   r   r-   r   r   r   r   Útest_tunnelj   s     úúzHttpTest.test_tunnelz%Internet-requiring tests are disabledc                 C   s<  t r¶|  ttftdtƒ tddddd�¡ |  ttftdtƒ tddddd�¡ |  ttftdtƒ tddddd�¡ |  ttftdtƒ tddd	dd�¡ |  ttdtƒ td
dddd�d ¡ |  t	t
d ddtd
ddd�¡ |  t	t
d ddtd
ddd�¡ |  tjtdtƒ tddddd�d ¡ |  tdtƒ tdddd�dƒd¡ d S )Nzwss://example.comrK   Ú8080Zsocks4r:   )Úhttp_proxy_hostÚhttp_proxy_portÚ
proxy_typeZhttp_proxy_timeoutZsocks4aZsocks5Zsocks5hú	127.0.0.1i'  rL   TZ9999Úhttp©rQ   rR   rS   zwss://google.comz8.8.8.8i�  )T)z
google.comé»  ú/)r
   rF   r   ÚOSErrorr   r9   r   r   r   Ú	TypeErrorr   Úsocketr<   rE   r   r   r   r   Útest_connect|   sÔ    üûüûüûüûüõÿú
ÿú
üõÿú÷zHttpTest.test_connectz:This test requires a HTTP proxy to be running on port 8899z/Tests using local websocket server are disabledc                 C   s    t  ¡ }|jdt› �dddd� | d¡ | ¡ }|  |d¡ |  tddd	tdddd�ƒt	 
dd
dt	jt	j¡d	d f¡ |  tdtƒ tdd
dd�d ƒd d¡ d S )Nzws://127.0.0.1:rT   Z8899rU   rV   zHello, Serverúapi.bitfinex.comrW   TiÃ"  r   úwss://api.bitfinex.com/ws/2r:   )r]   rW   z/ws/2)Ú	websocketÚ	WebSocketr   r   r(   r'   rE   r   r   r[   ÚgetaddrinfoÚSOCK_STREAMÚSOL_TCPr9   )r   ÚwsZserver_responser   r   r   Útest_proxy_connectï   sR    ü
ýüÿûõÿúù÷zHttpTest.test_proxy_connectc                 C   s^   ddt jdddœ}tj|d�}| d¡ | d¡ | ¡  tjd	d
id�}| d¡ |j d S )NFZ
ServerNameaÚ  TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:                        TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:                        ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:                        ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:                        DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:                        ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:                        ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:                        DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:                        ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:                        ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHAZ
prime256v1)Úcheck_hostnameÚserver_hostnameÚssl_versionÚciphersZ
ecdh_curve)r?   r^   ZHellorf   T)r=   ÚPROTOCOL_TLS_CLIENTr_   r`   r   r(   r)   )r   Z
ssloptionsZws_ssl1Zws_ssl2r   r   r   Útest_sslopt"  s    
ò


zHttpTest.test_ssloptc                 C   s´   |   tdddd�jd¡ | jttdddd� |   tdddd�jd¡ |   tdddd�jd¡ |   tdddd�jd ¡ |   tddddd�jd	 d
¡ |   tddddd�jd d¡ d S )NrT   rP   rU   rV   ZbadvalrK   )Úmy_username123Ú
my_pass321)rQ   rR   rS   Zhttp_proxy_authr   rl   r:   rm   )rE   r   Zproxy_protocolrF   r   Z
proxy_hostZ
proxy_portÚauthr   r   r   r   Útest_proxy_info=  sj    ÿüûÿüÿüÿüüûù	üûùzHttpTest.test_proxy_infoN)r*   r+   r,   rJ   rO   ÚunittestZ
skipUnlessr   r\   r   ÚTEST_WITH_LOCAL_SERVERre   rk   ro   r   r   r   r   r@   `   s   	

r
ÿÿ,

r@   Ú__main__)"r/   Úos.pathr[   r=   rp   r_   Zwebsocket._exceptionsr   r   Zwebsocket._httpr   r   r   r   r   r	   r
   Zpython_socks._errorsr   r   r   ÚenvironÚgetr   r   r   rq   r   r-   r9   ZTestCaser@   r*   Úmainr   r   r   r   Ú<module>   s.   $  
