
    DQck                        d Z 	 ddlZdgej        dd<   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 ddlmZmZ ddlmZ ej        rddlmZ ndd	lmZ ej        d         d
k    rej        d         dk     rddlZnddlZ	 ddlmZ n# e$ r  G d de          ZY nw xY wej         !                    dd          dk    Z"dZ#dZ$d Z% G d de&          Z' G d de'          Z( G d dej)                  Z* G d dej)                  Z+ G d dej)                  Z, G d d ej)                  Z- G d! d"ej)                  Z.e/d#k    r ej0                     dS dS )$z

    N )_create_sec_websocket_key	_validate)read_headers)get_proxy_info	parse_url)validate_utf8)decodebytes)decodestring         )SSLErrorc                       e Zd ZdS )r   N)__name__
__module____qualname__     >lib/python3.11/site-packages/websocket/tests/test_websocket.pyr   r   ;   s        r   r   TEST_WITH_INTERNET01Tc                     dS )Nabcdr   )_s    r   create_mask_keyr   F   s    6r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )SockMockc                 "    g | _         g | _        d S N)datasentselfs    r   __init__zSockMock.__init__K   s    				r   c                 :    | j                             |           d S r!   )r"   appendr%   r"   s     r   
add_packetzSockMock.add_packetO   s    	r   c                     d S r!   r   r$   s    r   
gettimeoutzSockMock.gettimeoutR   s    tr   c                     | j         rq| j                             d          }t          |t                    r|t	          |          |k    r#| j                             d||d                     |d |         S d S )Nr   )r"   pop
isinstance	Exceptionleninsert)r%   bufsizees      r   recvzSockMock.recvU   s    9 		a  A!Y'' 1vv 1	  AghhK000XgX;	 	r   c                 T    | j                             |           t          |          S r!   )r#   r(   r1   r)   s     r   sendzSockMock.send^   s$    	4yyr   c                     d S r!   r   r$   s    r   closezSockMock.closeb       r   N)	r   r   r   r&   r*   r,   r5   r7   r9   r   r   r   r   r   J   sn                      r   r   c                       e Zd Zd ZdS )HeaderSockMockc                 ^   t                               |            t          j                            t          j                            t                    |          }t          |d          5 }|                     |	                                           d d d            d S # 1 swxY w Y   d S )Nrb)
r   r&   ospathjoindirname__file__openr*   read)r%   fnamer@   fs       r   r&   zHeaderSockMock.__init__h   s    $w||BGOOH55u==$ 	&OOAFFHH%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   -(B""B&)B&N)r   r   r   r&   r   r   r   r<   r<   f   s#        & & & & &r   r<   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ej        ed
          d             Z ej        ed
          d             Zd Zd Zd Zd Zd Zd Zd Zd Z ej        ed
          d             Z ej        ed
          d             Z ej        ed
           ej        ed          d                         Z ej        ed
          d             Z ej        ed
          d             Zd ZdS )WebSocketTestc                 8    t          j        t                     d S r!   )wsenableTrace	TRACEABLEr$   s    r   setUpzWebSocketTest.setUpp   s    
y!!!!!r   c                     d S r!   r   r$   s    r   tearDownzWebSocketTest.tearDowns   r:   r   c                     |                      t          j                    d            t          j        d           |                      t          j                    d           t          j        d            d S )N
   )assertEqualrK   getdefaulttimeoutsetdefaulttimeoutr$   s    r   testDefaultTimeoutz WebSocketTest.testDefaultTimeoutv   sh    -//666
R   -//444
T"""""r   c                    t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d
          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d           |                     t          t           d           t          j        d         dk    rt          j        d         dk     rd S t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d           t          d          }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d           d S )Nzws://www.example.com/rr   zwww.example.comr   P   r   z/r   Fzws://www.example.com/r/z/r/zws://www.example.com//zws://www.example.comzws://www.example.com:8080/ri  zws://www.example.com:8080/zws://www.example.com:8080zwss://www.example.com:8080/rTz&wss://www.example.com:8080/r?key=valuez/r?key=valuezhttp://www.example.com/rr   zws://[2a03:4000:123:83::3]/rz2a03:4000:123:83::3z!ws://[2a03:4000:123:83::3]:8080/rzwss://[2a03:4000:123:83::3]/ri  z"wss://[2a03:4000:123:83::3]:8080/r)r   rS   assertRaises
ValueErrorsysversion_info)r%   ps     r   testParseUrlzWebSocketTest.testParseUrl|   sZ   .//101111r"""1t$$$1u%%%/00101111r"""1u%%%1u%%%-..101111r"""1s###1u%%%,--101111r"""1s###1u%%%344101111t$$$1t$$$1u%%%233101111t$$$1s###1u%%%122101111t$$$1s###1u%%%455101111t$$$1t$$$1t$$$>??101111t$$$1~...1t$$$*i1KLLLA!# 	(8(;a(? 	F455145551r"""1t$$$1u%%%9::145551t$$$1t$$$1u%%%566145551s###1t$$$1t$$$:;;145551t$$$1t$$$1t$$$$$r   c                     t                      }|                     |dk               |                     t          j        d          |v           d S )N   u   ¥n)r   
assertTruesixu)r%   keys     r   	testWSKeyzWebSocketTest.testWSKey   sH    '))r	"""eC/00000r   c                    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=)rj   
connectionsec-websocket-accept)TNhttp)FN	somethingrk   rl   sub1zsec-websocket-protocolsub2)Tro   sub3sUb1Sub1suB2)rS   _validate_headercopy)r%   rf   required_headerheaders       r   testWsUtilszWebSocketTest.testWsUtils   sm   ("#$B 
 	)/3EE|TTT %%''"y)&#t<<mLLL9)&#t<<mLLL %%''*|)&#t<<mLLL< )&#t<<mLLL %%'')4%&)&#t<<mLLL)*)&#t<<mLLL %%''+1'()&#7GHH.YYY)&#7GHH-XXX %%''+1'()&#7GHH.YYY %%'')&#7GHH-XXXXXr   c                 .   t          t          d                    \  }}}|                     |d           |                     |d         d           t          d           |                     t          j        t           t          d                     d S )Ndata/header01.txte   rk   Upgradezdata/header02.txt)r   r<   rS   r[   rK   WebSocketException)r%   statusrx   status_messages       r   testReadHeaderzWebSocketTest.testReadHeader   s    )5nEX6Y6Y)Z)Z&%%%-y999*+++"/~Na?b?bcccccr   c                 f   t          j                    }|                    t                     t	          d          x}|_        |                    d           |                     |j        d         t          j
        d                     |                    d           |                     |j        d         t          j
        d                     |                    d           |                     |j        d         t          j
        d                     |                    d           d S )	Nr{   Hellor      abcd)   こんにちはr   &   abcdãðãñåÊâÅãÌxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rK   	WebSocketset_mask_keyr   r<   sockr7   rS   r#   rd   br%   r   ss      r   testSendzWebSocketTest.testSend  s    |~~/***&':;;;DI		'CE*I$J$JKKK		#$$$CE*t$u$uvvv		$%%%CE*t$u$uvvv		)r   c                    t          j                    }t                      x}|_        t	          j        d          }|                    |           |                                }|                     |d           |                    t	          j        d                     |                                }|                     |d           d S )Nr   r   r   r   )	rK   r   r   r   rd   r   r*   r5   rS   )r%   r   r   rn   r"   s        r   testRecvzWebSocketTest.testRecv  s    |~~ 

"DIEdee		Yyy{{0111	SU:;;<<<yy{{w'''''r   %Internet-requiring tests are disabledc                 T    d}t          j        d          D ]}|dz  }|dk    r d S d S )Nr   wss://stream.meetup.com/2/rsvpsr   r   )rK   create_connection)r%   countr   s      r   testIterzWebSocketTest.testIter!  sM    %&GHH 	 	AQJEz 	 	r   c                     t          j        d          }|                     t          t	          t          |                               d S )Nr   )rK   r   rS   strtypenext)r%   r   s     r   testNextzWebSocketTest.testNext)  s=    #$EFFd4::../////r   c                 V   t          j                    }t                      x}|_        |                    t          j        d                     |                    t          j                               |                    t          j        d                     |                    t          j        d                     | 	                    t           j
                  5  |j                            d           d d d            n# 1 swxY w Y   |j                            d          }|                     |t          j        d                     | 	                    t           j                  5  |j                            d           d d d            d S # 1 swxY w Y   d S )Nfoobarbaz	   	foobarbazr   )rK   r   r   r   r*   rd   r   sockettimeoutr[   WebSocketTimeoutExceptionframe_bufferrecv_strictrS   "WebSocketConnectionClosedExceptionr%   r   r   r"   s       r   testInternalRecvStrictz$WebSocketTest.testInternalRecvStrict.  s   |~~ 

"DI	SU5\\"""	V^%%&&&	SU5\\"""	SU5\\"""r;<< 	- 	-))!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-  ,,Q//su[11222rDEE 	- 	-))!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s$   #D

DD6FF"%F"c                    t          j                    }t                      x}|_        |                    t          j        d                     |                    t          j                               |                    t          j        d                     |                    t          j                               |                    t          j        d                     | 	                    t           j
                  5  |                                 d d d            n# 1 swxY w Y   | 	                    t           j
                  5  |                                 d d d            n# 1 swxY w Y   |                                }|                     |d           | 	                    t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S )N   u   abcd)zNC3 @zHello, World!)rK   r   r   r   r*   rd   r   r   r   r[   r   r5   rS   r   r   s       r   testRecvTimeoutzWebSocketTest.testRecvTimeoutC  sB   |~~ 

"DI	SU6]]###	V^%%&&&	SU9::;;;	V^%%&&&	SU=>>???r;<< 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r;<< 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	yy{{///rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   	D**D.1D.E55E9<E9	G++G/2G/c                    t          j                    }t                      x}|_        |                    t          j        d                     |                    t          j        d                     |                                }|                     |d           | 	                    t           j
                  5  |                                 d d d            d S # 1 swxY w Y   d S )N   abcd#DC   abcd
DADzBrevity is the soul of witrK   r   r   r   r*   rd   r   r5   rS   r[   r   r   s       r   testRecvWithSimpleFragmentationz-WebSocketTest.testRecvWithSimpleFragmentationT  s   |~~ 

"DI	SULMMNNN	SUVWWXXXyy{{;<<<rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    C""C&)C&c                 :   t          j        d          }t                      x}|_        |                    t          j        d                     |                    t          j        d                     |                    t          j        d                     |                                \  }}|                     |t          j        d                     |                                \  }}|                     |t          j        d                     |                                \  }}|                     |t          j        d                     |                    t          j        d                     | 	                    t           j
                  5  |                                 d d d            n# 1 swxY w Y   | 	                    t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S )	NT)fire_cont_framer   u    abcd#DCr   zBrevity is zthe soul of witu   abcd#DC)rK   r   r   r   r*   rd   r   	recv_datarS   r[   r~   r   r5   )r%   r   r   r   r"   s        r   $testRecvWithFireEventOfFragmentationz2WebSocketTest.testRecvWithFireEventOfFragmentation`  s:   |D111 

"DI	SULMMNNN	SULMMNNN	SUVWWXXX..""4su]33444..""4su]33444..""4su%677888 	
SULMMNNNr455 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   #GGG.HHHc                    t          j                    }t                      |_        d|_        |                                 |                     |j        d           t          j                    }t                      x}|_        d|_        |                    t          j	        d                     |
                                 |                     |j        d           d S )NTFu
   p)rK   r   r   r   	connectedr9   rS   r*   rd   r   r5   r   s      r   	testClosezWebSocketTest.testClosez  s    |~~JJ	

///|~~ 

"DI	SU233444		/////r   c                     t          j                    }t                      x}|_        |                    t          j        d                     |                     t           j        |j	                   d S )Nr   )
rK   r   r   r   r*   rd   r   r[   r~   r5   r   s      r   testRecvContFragmentationz'WebSocketTest.testRecvContFragmentation  s[    |~~ 

"DI	SUVWWXXX"/;;;;;r   c                 ,   t          j                    }t                      x}|_        |                    t          j        d                     |                    t          j        d                     |                    t          j        d                     |                                }|                     |d           | 	                    t           j
                  5  |                                 d d d            d S # 1 swxY w Y   d S )Nu"   abcd. AB
C	C	NCu    abcdAMBu   abcd Az2Once more unto the breach, dear friends, once morer   r   s       r   "testRecvWithProlongedFragmentationz0WebSocketTest.testRecvWithProlongedFragmentation  sN   |~~ 

"DI	SU D E E 	F 	F 	F 	
SU $ % % 	& 	& 	& 	
SUJKKLLLyy{{@	B 	B 	B rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   'D		DDc                    t          j                    }|                    t                     t	                      x}|_        |                    t          j        d                     |                    t          j        d                     |                    t          j        d                     |	                                }| 
                    |d           |                     t           j                  5  |	                                 d d d            n# 1 swxY w Y   | 
                    |j        d         t          j        d                     d S )Nu   abcd5D Au   abcd1C4.,$D

u   abcdCABzToo much of a good thingr   u   abcd1C4.,$D

)rK   r   r   r   r   r   r*   rd   r   r5   rS   r[   r   r#   r   s       r   (testRecvWithFragmentationAndControlFramez6WebSocketTest.testRecvWithFragmentationAndControlFrame  so   |~~/*** 

"DI	SUBCCDDD	SUPQQRRR	SU * + + 	, 	, 	,yy{{9:::rDEE 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	F1IEGHH	J 	J 	J 	J 	Js   D""D&)D&c                 ~   t          j        d          }|                     |d            |                    d           |                                }|                     |d           |                    d           |                                }|                     |d           |                                 d S )Nws://echo.websocket.org/Hello, World   こにゃにゃちは、世界rK   r   assertNotEqualr7   r5   rS   r9   r%   r   results      r   testWebSocketzWebSocketTest.testWebSocket  s     !;<<At$$$	~000	0111!ABBB						r   c                     t          j        d          }|                     |d            |                    d           |                    d           |                                 d S )Nr   r   Hi)rK   r   r   pingpongr9   r%   r   s     r   testPingPongzWebSocketTest.testPingPong  sX     !;<<At$$$	w	t						r   z+wss://echo.websocket.org doesn't work well.c                    	 dd l }t          j        d          }|                     |d            |                     t          |j        |j                             |                    d           |	                                }| 
                    |d           |                    d           |	                                }| 
                    |d           |                                 d S )Nr   r   zwss://echo.websocket.org/r   r   )sslrK   r   r   rc   r/   r   	SSLSocketr7   r5   rS   r9   )r%   r   r   r   s       r   testSecureWebSocketz!WebSocketTest.testSecureWebSocket  s    	JJJ$%@AAA4(((OOJqvs}==>>>FF>"""VVXXFV^444FF4555VVXXFV%EFFFGGIIIIIr   c                    t          j        dddi          }|                     |d            |                    d           |                                }|                     |d           |                                 d S )Nr   z
User-AgentPythonWebsocketClient)headersr   r   r   s      r   testWebSocketWithCustomHeaderz+WebSocketTest.testWebSocketWithCustomHeader  s     !;*68O)PR R RAt$$$	~000						r   c                    t          j        d          }|                     |d            |                                 |                     t           j        |j        d           |                     t           j        |j                   d S )Nr   r   )rK   r   r   r9   r[   r   r7   r5   r   s     r   testAfterClosezWebSocketTest.testAfterClose  st     !;<<At$$$				"?QQQ"?HHHHHr   c                     t                      }t          |                    d                    }|                     dt	          |                     dS )z9 WebSocket key should be a random 16-byte nonce.
        zutf-8   N)r   base64decodeencoderS   r1   )r%   rf   nonces      r   	testNoncezWebSocketTest.testNonce  sJ     ())SZZ0011SZZ(((((r   N) r   r   r   rN   rP   rV   r`   rg   ry   r   r   r   unittest
skipUnlessr   r   r   r   r   r   r   r   r   r   r   r   r   TEST_SECURE_WSr   r   r   r   r   r   r   rI   rI   o   s       " " "  # # #R% R% R%h1 1 1
%Y %Y %YNd d d   ( ( ( X+-TUU  VU X+-TUU0 0 VU0- - -*  "
 
 
  40 0 0< < <  $J J J& X+-TUU
 
 VU
 X+-TUU  VU X+-TUUX)VWW  XW VU  X+-TUU  VU X+-TUUI I VUI) ) ) ) )r   rI   c                       e Zd Z G d de          Zd Zd Z ej        e	d          d             Z
 ej        e	d          d             ZdS )	WebSocketAppTestc                       e Zd ZdZdS )WebSocketAppTest.NotSetYetzI A marker class for signalling that a value hasn't been set yet.
        N)r   r   r   __doc__r   r   r   	NotSetYetr     s        	 	 	 	r   r   c                 
   t          j        t                     t                                          t          _        t                                          t          _        t                                          t          _        d S r!   )rK   rL   rM   r   r   keep_running_openkeep_running_closeget_mask_key_idr$   s    r   rN   zWebSocketAppTest.setUp  sW    
y!!!-=-G-G-I-I*.>.H.H.J.J++;+E+E+G+G(((r   c                     t                                           t           _        t                                           t           _        t                                           t           _        d S r!   )r   r   r   r   r   r$   s    r   rP   zWebSocketAppTest.tearDown  sG    -=-G-G-I-I*.>.H.H.J.J++;+E+E+G+G(((r   r   c                 h    d }d }t          j        d||          }|                                 dS )z| A WebSocketApp should keep running as long as its self.keep_running
        is not False (in the boolean context).
        c                 P    | j         t          _        |                                  dS )zn Set the keep_running flag for later inspection and immediately
            close the connection.
            N)keep_runningr   r   r9   r%   argskwargss      r   on_openz1WebSocketAppTest.testKeepRunning.<locals>.on_open  s!     261B.JJLLLLLr   c                 (    | j         t          _        dS )z< Set the keep_running flag for the test to use.
            N)r   r   r   r   s      r   on_closez2WebSocketAppTest.testKeepRunning.<locals>.on_close  s     372C///r   r   )r   r   NrK   WebSocketApprun_forever)r%   r   r   apps       r   testKeepRunningz WebSocketAppTest.testKeepRunning  sS    	 	 		D 	D 	D
 o8'T\]]]r   c                 h    d }d }t          j        d||          }|                                 dS )zi A WebSocketApp should forward the received mask_key function down
        to the actual socket.
        c                      d S r!   r   r   r   r   my_mask_key_funcz:WebSocketAppTest.testSockMaskKey.<locals>.my_mask_key_func-  s    Dr   c                 j    t          | j                  t          _        |                                  dS )zm Set the value so the test can use it later on and immediately
            close the connection.
            N)idget_mask_keyr   r   r9   r   s      r   r   z1WebSocketAppTest.testSockMaskKey.<locals>.on_open0  s)     02$2C/D/D,JJLLLLLr   r   )r   r   Nr   )r%   r   r   r   s       r   testSockMaskKeyz WebSocketAppTest.testSockMaskKey'  sP    	 	 		 	 	 o8'Xhiiir   N)r   r   r   objectr   rN   rP   r   r   r   r   r   r   r   r   r   r     s            F   H H HH H H
 X+-TUU  VU> X+-TUU  VU  r   r   c                   B    e Zd Z ej        ed          d             ZdS )SockOptTestr   c                    t           j        t           j        dff}t          j        d|          }|                     |j                            t           j        t           j                  d           |                                 d S )Nr   zws://echo.websocket.org)sockoptr   )	r   IPPROTO_TCPTCP_NODELAYrK   r   r   r   
getsockoptr9   )r%   r  r   s      r   testSockOptzSockOptTest.testSockOpt@  sm    &(:A>@ !:GLLLAF--f.@&BTUUWXYYY						r   N)r   r   r   r   r   r   r	  r   r   r   r  r  ?  s@        X+-TUU  VU  r   r  c                       e Zd Zd ZdS )	UtilsTestc                 P   t          t          j        d                    }|                     |d           t          t          j        d                    }|                     |d           t          t          j        d                    }|                     |d           d S )Nu   ðTu"   Îºá½¹ÏÎ¼Îµí editedFr   )r	   rd   r   rS   )r%   states     r   testUtf8ValidatorzUtilsTest.testUtf8ValidatorI  s    ce$67788%%%ce$deeff&&&ceBii((%%%%%r   N)r   r   r   r  r   r   r   r  r  H  s#        & & & & &r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )ProxyInfoTestc                 
   t           j                            dd           | _        t           j                            dd           | _        dt           j        v rt           j        d= dt           j        v rt           j        d= d S d S N
http_proxyhttps_proxy)r?   environgetr  r  r$   s    r   rN   zProxyInfoTest.setUpS  ss    *..t<<:>>->>2:% 	)
<(BJ& 	*
=)))	* 	*r   c                     | j         r| j         t          j        d<   ndt          j        v rt          j        d= | j        r| j        t          j        d<   d S dt          j        v rt          j        d= d S d S r  )r  r?   r  r  r$   s    r   rP   zProxyInfoTest.tearDown[  s    ? 	)'+BJ|$$RZ' 	)
<( 	*(,(8BJ}%%%bj( 	*
=)))	* 	*r   c           
         |                      t          ddd          d           |                      t          dddd          d           |                      t          dd	d          d           |                      t          dd	dd          d           |                      t          dddd
          d           |                      t          ddddd
          d           |                      t          dd	dd
          d           |                      t          dd	ddd
          d           |                      t          dd	dddgd
          d           |                      t          dd	dddgd
          d           d S )Necho.websocket.orgF	localhost)
proxy_host)r  r   N8  )r  
proxy_portr  r  NTar   )r  
proxy_auth)r  r   r  )r  r  r!  r  r  r  zexample.com)r  r  no_proxyr!  Nr   N)rS   r   r$   s    r   testProxyFromArgszProxyInfoTest.testProxyFromArgsf  sJ   (<eP[\\\^tuuu(<eP[hlmmm  pI  	J  	J  	J(<d{[[[]sttt(<d{gklll  oH  	I  	I  	I(<eP[hrsss(	* 	* 	*(<eP[hl  zD  E  E  E+	- 	- 	-(<d{gqrrr(	* 	* 	*(<d{gk  yC  D  D  D+	- 	- 	- 	(<d{gk  xE  wF  S]  ^  ^  ^+	- 	- 	-(<d{gk  xL  wM  Zd  e  e  e	 	 	 	 	r   c                    dt           j        d<   |                     t          dd          d           dt           j        d<   |                     t          dd          d           dt           j        d<   dt           j        d	<   |                     t          dd          d           dt           j        d<   d
t           j        d	<   |                     t          dd          d           dt           j        d<   dt           j        d	<   |                     t          dd          d           dt           j        d<   d
t           j        d	<   |                     t          dd          d           dt           j        d<   |                     t          dd          d           dt           j        d<   |                     t          dd          d           dt           j        d<   dt           j        d	<   |                     t          dd          d           dt           j        d<   dt           j        d	<   |                     t          dd          d           dt           j        d<   dt           j        d	<   |                     t          dd          d           dt           j        d<   dt           j        d	<   |                     t          dd          d           dt           j        d<   dt           j        d	<   dt           j        d<   |                     t          dd          d           dt           j        d<   dt           j        d	<   dt           j        d<   |                     t          dd          d           dt           j        d<   dt           j        d	<   dt           j        d<   |                     t          dd          d           |                     t          dd          d           d S )Nzhttp://localhost/r  r  F)r  NNzhttp://localhost:3128/r  zhttp://localhost2/r  zhttp://localhost2:3128/T)
localhost2NN)r'  r  Nzhttp://a:b@localhost/)r  Nr  zhttp://a:b@localhost:3128/r"  zhttp://a:b@localhost2/zhttp://a:b@localhost2:3128/)r'  Nr  )r'  r  r  zexample1.com,example2.comr#  zexample.1.comz-example1.com,example2.com, echo.websocket.orgr$  z127.0.0.0/8, 192.168.0.0/16z	127.0.0.1z192.168.1.1)r?   r  rS   r   r$   s    r   testProxyFromEnvzProxyInfoTest.testProxyFromEnvz  s   #6
< (<eDDF_```#;
< (<eDDF_```#6
< $8
=!(<eDDF_```#;
< $=
=!(<eDDF_```#6
< $8
=!(<dCCE_```#;
< $=
=!(<dCCE_``` $;
< (<eDDFefff#?
< (<eDDFefff#:
< $<
=!(<eDDFefff#?
< $A
=!(<eDDFefff#:
< $<
=!(<dCCEefff#?
< $A
=!(<dCCEefff#:
< $<
=!!<
:>>@`aaa#?
< $A
=!!P
:(<dCC_UUU#?
< $A
=!!>
:U;;_MMMu==OOOOOr   N)r   r   r   rN   rP   r%  r(  r   r   r   r  r  R  sU        * * *	* 	* 	*  (5P 5P 5P 5P 5Pr   r  __main__)1r   r]   r@   r?   os.pathr   rd   ri   rK   websocket._handshaker   r   ru   websocket._httpr   websocket._urlr   r   websocket._utilsr	   PY3base64r
   r   r   r^   	unittest2r   r   r   ImportErrorr0   r  r  r   r   rM   r   r  r   r<   TestCaserI   r   r  r  r  r   mainr   r   r   <module>r5     s\   * 


1 				   



    " " " " " " " " ( ( ( ( ( ( 4 4 4 4 4 4 4 4 * * * * * *7 42222222333333A!  0 3a 7      OOO       9      Z^^$8#>>#E  	      v   8& & & & &X & & &C) C) C) C) C)H% C) C) C)LC C C C Cx( C C CT    (#   & & & & &! & & &]P ]P ]P ]P ]PH% ]P ]P ]P@ z HMOOOOO s   B B"!B"