U
    g0                     @   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X 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   =/tmp/pip-unpacked-wheel-0xk_xrpx/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   sH   t |  tjtjt|}t|d}| |	  W 5 Q R X 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.txte   
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.comP   )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   s^    
      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=  sz            	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.   $  
