
     ke0                        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Zd dlmZm	Z	m
Z
mZmZmZ 	 	 d dlmZmZmZ e j$                  j'                  dd      dk(  Ze j$                  j'                  dd      dk(  Ze j$                  j'                  dd	      Zed	k7  Z G d
 d      Z G d de      Z G d d      Z G d dej6                        Zedk(  r ej<                          yy#  d dlmZmZmZ Y xY w)    N)_get_addrinfo_list_start_proxied_socket_tunnelconnect
proxy_inforead_headers)ProxyConnectionError
ProxyErrorProxyTimeoutErrorTEST_WITH_INTERNET01TEST_WITH_PROXYLOCAL_WS_SERVER_PORTz-1c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)SockMockc                      g | _         g | _        y N)datasentselfs    ;/usr/lib/python3/dist-packages/websocket/tests/test_http.py__init__zSockMock.__init__5   s    		    c                 :    | j                   j                  |       y r   )r   appendr   r   s     r   
add_packetzSockMock.add_packet9   s    		r   c                      y r    r   s    r   
gettimeoutzSockMock.gettimeout<   s    r   c                     | j                   r_| j                   j                  d      }t        |t              r|t	        |      |kD  r| j                   j                  d||d         |d | S y )Nr   )r   pop
isinstance	Exceptionleninsert)r   bufsizees      r   recvzSockMock.recv?   sa    99		a A!Y'1v		  AghK0Xg; r   c                 N    | j                   j                  |       t        |      S r   )r   r   r'   r   s     r   sendzSockMock.sendH   s    		4yr   c                      y r   r!   r   s    r   closezSockMock.closeL   s    r   N)	__name__
__module____qualname__r   r   r"   r+   r-   r/   r!   r   r   r   r   4   s     r   r   c                       e Zd Zd Zy)HeaderSockMockc                 0   t         j                  |        t        j                  j	                  t        j                  j                  t              |      }t        |d      5 }| j                  |j                                d d d        y # 1 sw Y   y xY w)Nrb)
r   r   ospathjoindirname__file__openr   read)r   fnamer8   fs       r   r   zHeaderSockMock.__init__Q   sd    $ww||BGGOOH5u=$ 	&OOAFFH%	& 	& 	&s   # BBNr0   r1   r2   r   r!   r   r   r4   r4   P   s    &r   r4   c                       e Zd Zd Zy)OptsListc                 N    d| _         g | _        dt        j                  i| _        y )N   	cert_reqs)timeoutsockoptssl	CERT_NONEssloptr   s    r   r   zOptsList.__init__Y   s     "CMM2r   Nr@   r!   r   r   rB   rB   X   s    3r   rB   c                      e Zd Zd Zd Z ej                  ed      d        Z ej                  ed       ej                  e	d       ej                  e
d      d                      Z ej                  ed      d        Zd	 Zy
)HttpTestc                     t        t        d            \  }}}| j                  |d       | j                  |d   d       | j                  t        j
                  t         t        d             y )Ndata/header01.txte   
connectionUpgradedata/header02.txt)r   r4   assertEqualassertRaiseswsWebSocketException)r   statusheaderstatus_messages       r   testReadHeaderzHttpTest.testReadHeader`   sd    )5./*
& 	%-y9!!<@S1T	
r   c                     | j                  t        j                  t        t	        d      ddd       | j                  t        j                  t        t	        d      ddd       y )NrN   example.comP   )usernamepasswordrR   )rT   rU   WebSocketProxyExceptionr   r4   r   s    r   
testTunnelzHttpTest.testTunnelk   s\    &&./$	
 	&&./$	
r   z%Internet-requiring tests are disabledc                    t         j                  j                  r| j                  t        t
        ft        dt               t        dddd             | j                  t        t
        ft        dt               t        dddd             | j                  t        t
        ft        dt               t        dddd             | j                  t        t
        ft        dt               t        ddd	d             | j                  t        t        dt               t        d
ddd      d        | j                  t        t        d ddt        d
dd             | j                  t        t        d ddt        d
dd             | j                  t        j                  t        dt               t        dddd      d        | j                  t        dt               t        ddd      d      d       y )Nzwss://example.comr\   8080socks4rD   )http_proxy_hosthttp_proxy_port
proxy_typehttp_proxy_timeoutsocks4asocks5socks5h	127.0.0.1i'  r]   T9999httpre   rf   rg   zwss://google.comz8.8.8.8i  )T)z
google.com  /)rU   _httpHAVE_PYTHON_SOCKSrT   r   OSErrorr   rB   r   r	   r   	TypeErrorr   socketrF   rS   r   s    r   testConnectzHttpTest.testConnect}   s    88%% "G,%#
$1$*''(	 "G,%#
$1$*('(	 "G,%#
$1$*''(	 "G,%#
$1$*('(	 $#
$/$(''(	  	 +VPV		
 	 +VPV		
 	NNJ ) $!#$	 	
 	"
$-tPV  -
	
r   z:This test requires a HTTP proxy to be running on port 8899z/Tests using local websocket server are disabledc                    t        j                         } |j                  dt         ddd        |j                  d        |j
                         }| j                  |d       | j                  t        ddd	t        ddd            t        j                  dd
dt        j                  t        j                        d	d f       | j                  t        dt               t        dd
d      d       d   d       y )Nzws://127.0.0.1:rl   8899rn   ro   zHello, Serverapi.bitfinex.comrp   Ti"  r   wss://api.bitfinex.com/ws/2rD   )rz   rp   z/ws/2)	websocket	WebSocketr   r   r-   r+   rS   r   r   rv   getaddrinfoSOCK_STREAMSOL_TCPrB   )r   rU   server_responses      r   testProxyConnectzHttpTest.testProxyConnect   s      "

234'"		
 	 !"'')/:"$/$*%		 ""q&*<*<fnn 	
& 	-
$/RX   /
	
r   c                 *   ddt         j                  ddd}t        j                  |      }|j	                  d       |j                  d       |j                          t        j                  d	d
i      }|j	                  d       |j                   y )NF
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-SHA
prime256v1)check_hostnameserver_hostnamessl_versionciphers
ecdh_curve)rJ   r{   Hellor   T)rH   PROTOCOL_TLS_CLIENTr|   r}   r   r-   r/   )r   
ssloptionsws_ssl1ws_ssl2s       r   
testSSLoptzHttpTest.testSSLopt#  s     $+22	E '

  %%Z856W%%.>-EF56r   c                 0   | j                  t        ddd      j                  d       | j                  t        t        ddd       | j                  t        ddd      j
                  d       | j                  t        ddd      j                  d       | j                  t        ddd      j                  d        | j                  t        dddd      j                  d	   d
       | j                  t        dddd      j                  d   d       y )Nrl   rc   rn   ro   badvalr\   )my_username123
my_pass321)re   rf   rg   http_proxy_authr   r   rD   r   )rS   r   proxy_protocolrT   r
   
proxy_host
proxy_portauthr   s    r   testProxyInfozHttpTest.testProxyInfo>  s2    +VPVn		
 	'" 	 	
 	 -vRXj		
 	 +VPVj		
 	 +VPVd		
 	 + &! @	
 d1 	
 	 + &! @	
 d1 	
r   N)r0   r1   r2   rZ   ra   unittest
skipUnlessr   rw   r   TEST_WITH_LOCAL_SERVERr   r   r   r!   r   r   rL   rL   _   s    	

$ X+-TUn
 Vn
d X+-TUXU X Q)
 V)
X X+-TU V41
r   rL   __main__)r7   os.pathrv   rH   r   r|   rU   websocket._httpr   r   r   r   r   r   python_socks._errorsr	   r
   r   environgetr   r   r   r   r   r4   rB   TestCaserL   r0   mainr!   r   r   <module>r      s    
   
    &TXX
 ZZ^^$8#>#E **..!2C8C?zz~~&<dC -5  8&X &3 3P
x   P
f zHMMO S
TSSs   
C$ $C2