
    tf'                     N   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dl	mZ d dl	mZ d dl	mZ d d	l	mZ d d
lmZ d dlmZ d dlmZ  G d dej                  Z G d dej                  Ze j                            dd          r G d dej                  ZdS dS )    N)sha1)	b64encode)MockWebSocketServerProtocolWebSocketServerFactory)WebSocketClientProtocol)WebSocketClientFactory)WebSocketProtocol)ConnectingRequest)FakeTransport)TransportDetailsc                        e Zd Zd Zd Zd ZdS )WebSocketClientProtocolTestsc                 f   t                      }t                      }t          j                    |_        t                      }t          j                    |_        ||_        ||_        t                      |_	        |
                                 |j        |_        d|_        || _        || _        d S N   )r   r   txaiomake_loggerlogr
   factory	transportr   _transport_details_connectionMade
STATE_OPENstatewebsocket_versionprotocolselftfps       n/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/websocket/test/test_websocket_protocol.pysetUpz"WebSocketClientProtocolTests.setUp/   s    OO"$$!###%%!##	/11	,     c                     | j         j        | j         j        | j         j        | j         j        fD ]}||                                 d S Nr   autoPingPendingCallautoPingTimeoutCallopenHandshakeTimeoutCallcloseHandshakeTimeoutCallcancelr!   calls     r%   tearDownz%WebSocketClientProtocolTests.tearDown@   S    1167	
 	 	D 	 	r'   c                    d| j         _        t                      g| j         _        g | j         _        d | j         _        d| j         _        t                      | j         _        t                      | j         _        t                      | j         _	        | j         
                    t          ddd                     | j         j        t          j        z   }dt          t!          |                                                    z   d	z   | j         _        | j                                          |                     | j         j        d u           d S )
N   c                      d S r)    r7   r'   r%   <lambda>z=WebSocketClientProtocolTests.test_auto_ping.<locals>.<lambda>N        r'   000000000000000000000000zexample.comP   z/ws)hostportresourcesa   HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-Websocket-Accept: s   

)r   autoPingIntervalr   websocket_protocolswebsocket_extensions_onOpen_wskeypeer
_onConnect_closeConnection_actuallyStartHandshaker   websocket_keyr   	_WS_MAGICr   r   digestdataprocessHandshake
assertTruer+   )r!   keys     r%   test_auto_pingz+WebSocketClientProtocolTests.test_auto_pingJ   s-   )*&-1VVH)-/* ,'!VV $(66 )-& 	--"  	
 	
 	
 m),=,GG& )2$s))2B2B2D2D(E(EF I\\ 	 	&&(((9EFFFFFr'   N)__name__
__module____qualname__r&   r2   rO   r7   r'   r%   r   r   -   sF          "  G G G G Gr'   r   c                   T    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )WebSocketServerProtocolTestszB
    Tests for autobahn.websocket.protocol.WebSocketProtocol.
    c                 @   t                      }t                      }t          j                    |_        t                      }t          j                    |_        ||_        ||_        |                                 |j	        |_
        d|_        || _        || _        d S r   )r   r	   r   r   r   r   r   r   r   r   r   r   r   r    s       r%   r&   z"WebSocketServerProtocolTests.setUpp   s    OO"$$!###%%!##		, r'   c                     | j         j        | j         j        | j         j        | j         j        fD ]}||                                 d S r)   r*   r0   s     r%   r2   z%WebSocketServerProtocolTests.tearDown   r3   r'   c                 >   t                      }t          d          |_        d| j        _        |g| j        _        g | j        _        d | j        _        d| j        _        | j                            |           | 	                    | j        j
        d u           d S )Nr5   )return_valuec                      d S r)   r7   r7   r'   r%   r8   z=WebSocketServerProtocolTests.test_auto_ping.<locals>.<lambda>   r9   r'   r:   )r   _get_secondsr   r?   r@   rA   rB   rC   succeedHandshakerM   r+   )r!   protos     r%   rO   z+WebSocketServerProtocolTests.test_auto_ping   s    !q111)*&-2G)-/* ,'&&u---9EFFFFFr'   c                     | j                                          |                     | j        j        d           |                     | j         j        | j         j                   dS )z9
        sendClose with no code or reason works.
        s    Nr   	sendCloseassertEqualr   _writtenr   STATE_CLOSINGr!   s    r%   test_sendClose_nonez0WebSocketServerProtocolTests.test_sendClose_none   s[     	!!! 	0+>>>,dm.IJJJJJr'   c                     | j                             dd           |                     | j        j        dd         d           |                     | j         j        | j         j                   dS )z4
        sendClose with a str reason works.
          oh nocodereason   N   oh nor^   rc   s    r%   test_sendClose_str_reasonz6WebSocketServerProtocolTests.test_sendClose_str_reason   l     	T'::: 	046FGGG,dm.IJJJJJr'   c                     | j                             dd           |                     | j        j        dd         d           |                     | j         j        | j         j                   dS )z8
        sendClose with a unicode reason works.
        rf   rg   rh   rk   Nrl   r^   rc   s    r%   test_sendClose_unicode_reasonz:WebSocketServerProtocolTests.test_sendClose_unicode_reason   rn   r'   c                     | j                             dd           |                     | j        j        dd         d           |                     | j         j        | j         j                   dS )zD
        sendClose with a too-long reason will truncate it.
        rf     abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrh   rk   Ns}   abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcr^   rc   s    r%   test_sendClose_toolongz3WebSocketServerProtocolTests.test_sendClose_toolong   sr     	T,??? 	044	6 	6 	6,dm.IJJJJJr'   c                    |                      t                    5 }| j                            d           ddd           n# 1 swxY w Y   |                     dt          |j                             |                     | j        j	        d           |                     | j        j
        | j        j                   dS )zX
        Trying to sendClose with a reason but no code will raise an Exception.
        abc)rj   Nzclose reason without close coder'   assertRaises	Exceptionr   r_   assertInstr	exceptionr`   r   ra   r   r   r!   es     r%   "test_sendClose_reason_with_no_codez?WebSocketServerProtocolTests.test_sendClose_reason_with_no_code   s     y)) 	2QM##5#111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	7Q[9I9IJJJ 	0#666,dm.FGGGGG   AA
Ac                    |                      t                    5 }| j                            d           ddd           n# 1 swxY w Y   |                     dt          |j                             |                     | j        j	        d           |                     | j        j
        | j        j                   dS )zR
        Trying to sendClose with a non-int code will raise an Exception.
        134ri   Nzinvalid typer'   rv   r|   s     r%    test_sendClose_invalid_code_typez=WebSocketServerProtocolTests.test_sendClose_invalid_code_type   s     y)) 	0QM###///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	nc!+&6&6777 	0#666,dm.FGGGGGr   c                    |                      t                    5 }| j                            d           ddd           n# 1 swxY w Y   |                     dt          |j                             |                     | j        j	        d           |                     | j        j
        | j        j                   dS )zX
        Trying to sendClose with a non-valid int code will raise an Exception.
        
   r   Nzinvalid close code 10r'   rv   r|   s     r%   !test_sendClose_invalid_code_valuez>WebSocketServerProtocolTests.test_sendClose_invalid_code_value   s     y)) 	-QM###,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s1;/?/?@@@ 	0#666,dm.FGGGGGr   c                     ddl m} |                    d d          }|                     t	          |          t
                     |                     t          |          dk               d S )Nr   )_SERVER_STATUS_TEMPLATEz0.0.0)autobahn.websocket.protocolr   formatr`   typerz   rM   len)r!   r   ss      r%   'test_interpolate_server_status_templatezDWebSocketServerProtocolTests.test_interpolate_server_status_template   sg    GGGGGG#**499a#&&&A
#####r'   N)rP   rQ   rR   __doc__r&   r2   rO   rd   rm   rp   rs   r~   r   r   r   r7   r'   r%   rT   rT   l   s              
G 
G 
GK K KK K KK K K	K 	K 	KH H HH H HH H H$ $ $ $ $r'   rT   USE_TWISTEDFc                   *    e Zd ZdZd Zd Zd Zd ZdS )TwistedProtocolTestszy
        Tests which require a specific framework's protocol class to work
        (in this case, using Twisted)
        c                     ddl m} ddl m} t                      } |            } |            }||_        ||_        |                                 |j        |_        d|_	        || _
        || _        d S )Nr   r   r   r   )autobahn.twisted.websocketr   r	   r   r   r   r   r   r   r   r   )r!   r   r	   r"   r#   r$   s         r%   r&   zTwistedProtocolTests.setUp   s    JJJJJJIIIIIIA&&((A''))AAIAKlAG"$ADMDNNNr'   c                     | j         j        | j         j        | j         j        | j         j        fD ]}||                                 d S r)   r*   r0   s     r%   r2   zTwistedProtocolTests.tearDown  sS    M5M5M:M;	 " " #KKMMM" "r'   c                     | j                             t          j        t	          d                               |                     | j         j        du            dS )zs
            If we lose our connection before openHandshakeTimeout fires, it is
            cleaned up
            testingN)r   _connectionLostr   create_failureRuntimeErrorrM   r-   rc   s    r%   test_loseConnectionz(TwistedProtocolTests.test_loseConnection  sO     M))%*>|I?V?V*W*WXXXOODMBdJKKKKKr'   c                 8    | j                                          d S r)   )r   sendServerStatusrc   s    r%   test_send_server_statusz,TwistedProtocolTests.test_send_server_status  s    M**,,,,,r'   N)rP   rQ   rR   r   r&   r2   r   r   r7   r'   r%   r   r      s]        	 		 	 	 	" 	" 	"		L 		L 		L	- 	- 	- 	- 	-r'   r   )osunittesthashlibr   base64r   unittest.mockr   r   r   r   r	   r
   r   r   autobahn.websocket.typesr   autobahn.testutilr   autobahn.wamp.typesr   TestCaser   rT   environgetr   r7   r'   r%   <module>r      s  6 
			                     ? ? ? ? ? ? > > > > > > ? ? ? ? ? ? > > > > > > 9 9 9 9 9 9 6 6 6 6 6 6 + + + + + + 0 0 0 0 0 0<G <G <G <G <G8#4 <G <G <G~~$ ~$ ~$ ~$ ~$8#4 ~$ ~$ ~$B :>>-'' ,-+- +- +- +- +-x0 +- +- +- +- +-,- ,-r'   