
    8'h3%                     \   d dl mZmZ 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	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Zd dlmZ  G d dej,                        Z G d dej,                        Zej2                  j5                  dd      r G d dej,                        Zyy)    )absolute_importprint_functionN)sha1)	b64encodeWebSocketServerProtocolWebSocketServerFactory)WebSocketClientProtocol)WebSocketClientFactory)WebSocketProtocol)ConnectingRequest)FakeTransport)Mockc                       e Zd Zd Zd Zd Zy)WebSocketClientProtocolTestsc                     t               }t               }t               }||_        ||_        t               |_        |j                          |j                  |_	        d|_
        || _        || _        y N   )r   r   r   factory	transportr   _create_transport_details_connectionMade
STATE_OPENstatewebsocket_versionprotocolselftfps       a/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/websocket/test/test_protocol.pysetUpz"WebSocketClientProtocolTests.setUp1   s^    O"$#%	&*f#	,,     c                     | j                   j                  | j                   j                  | j                   j                  | j                   j                  fD ]  }||j                           y Nr   autoPingPendingCallautoPingTimeoutCallopenHandshakeTimeoutCallcloseHandshakeTimeoutCallcancelr   calls     r#   tearDownz%WebSocketClientProtocolTests.tearDown@   X    11116677	
 	D 	r%   c                    d| j                   _        t               g| j                   _        g | j                   _        d | j                   _        d| j                   _        t               | j                   _        t               | j                   _        t               | j                   _	        | j                   j                  t        ddd             | j                   j                  t        j                  z   }dt        t!        |      j#                               z   d	z   | j                   _        | j                   j'                          | j)                  | j                   j*                  d u       y )
N   c                       y r'    r5   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   )*&-1VH)-/* ,'!V $(6 )-& 	--"	
 mm)),=,G,GG& )2$s)2B2B2D(EF I\\ 	 	&&(99EFr%   N)__name__
__module____qualname__r$   r0   rM   r5   r%   r#   r   r   /   s    Gr%   r   c                   L    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y)WebSocketServerProtocolTestszB
    Tests for autobahn.websocket.protocol.WebSocketProtocol.
    c                     t               }t               }t               }||_        ||_        |j                          |j                  |_        d|_        || _	        || _        y r   )
r   r
   r   r   r   r   r   r   r   r   r   s       r#   r$   z"WebSocketServerProtocolTests.setUpp   sT    O"$#%		,, r%   c                     | j                   j                  | j                   j                  | j                   j                  | j                   j                  fD ]  }||j                           y r'   r(   r.   s     r#   r0   z%WebSocketServerProtocolTests.tearDown~   r1   r%   c                 l   t               }t        d      |_        d| j                  _        |g| j                  _        g | j                  _        d | j                  _        d| j                  _        | j                  j                  |       | j                  | j                  j                  d u       y )Nr3   )return_valuec                       y r'   r5   r5   r%   r#   r6   z=WebSocketServerProtocolTests.test_auto_ping.<locals>.<lambda>   r7   r%   r8   )r   _get_secondsr   r=   r>   r?   r@   rA   succeedHandshakerK   r)   )r   protos     r#   rM   z+WebSocketServerProtocolTests.test_auto_ping   s    !q1)*&-2G)-/* ,'&&u-99EFr%   c                     | j                   j                          | j                  | j                  j                  d       | j                  | j                   j
                  | j                   j                         y)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   sT     	! 	00+>,,dmm.I.IJr%   c                    | j                   j                  dd       | j                  | j                  j                  dd d       | j                  | j                   j
                  | j                   j                         y)z4
        sendClose with a str reason works.
          oh nocodereason   N   oh nor\   ra   s    r#   test_sendClose_str_reasonz6WebSocketServerProtocolTests.test_sendClose_str_reason   c     	T(; 	0046FG,,dmm.I.IJr%   c                    | j                   j                  dd       | j                  | j                  j                  dd d       | j                  | j                   j
                  | j                   j                         y)z8
        sendClose with a unicode reason works.
        rd   re   rf   ri   Nrj   r\   ra   s    r#   test_sendClose_unicode_reasonz:WebSocketServerProtocolTests.test_sendClose_unicode_reason   rl   r%   c                    | j                   j                  dd       | j                  | j                  j                  dd d       | j                  | j                   j
                  | j                   j                         y)zD
        sendClose with a too-long reason will truncate it.
        rd     abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrf   ri   Ns}   abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcr\   ra   s    r#   test_sendClose_toolongz3WebSocketServerProtocolTests.test_sendClose_toolong   se     	T-@ 	0044	6,,dmm.I.IJr%   c                    | j                  t              5 }| j                  j                  d       ddd       | j	                  dt        j                               | j                  | j                  j                  d       | j                  | j                  j                  | j                  j                         y# 1 sw Y   xY w)zX
        Trying to sendClose with a reason but no code will raise an Exception.
        abc)rh   Nzclose reason without close coder%   assertRaises	Exceptionr   r]   assertInstr	exceptionr^   r   r_   r   r   r   es     r#   "test_sendClose_reason_with_no_codez?WebSocketServerProtocolTests.test_sendClose_reason_with_no_code   s     y) 	3QMM##6#2	3 	7Q[[9IJ 	00#6,,dmm.F.FG	3 	3   CC
c                    | j                  t              5 }| j                  j                  d       ddd       | j	                  dt        j                               | j                  | j                  j                  d       | j                  | j                  j                  | j                  j                         y# 1 sw Y   xY w)zR
        Trying to sendClose with a non-int code will raise an Exception.
        134rg   Nzinvalid typer%   rt   rz   s     r#    test_sendClose_invalid_code_typez=WebSocketServerProtocolTests.test_sendClose_invalid_code_type   s     y) 	0QMM###/	0 	nc!++&67 	00#6,,dmm.F.FG	0 	0r}   c                    | j                  t              5 }| j                  j                  d       ddd       | j	                  dt        j                               | j                  | j                  j                  d       | j                  | j                  j                  | j                  j                         y# 1 sw Y   xY w)zX
        Trying to sendClose with a non-valid int code will raise an Exception.
        
   r   Nzinvalid close code 10r%   rt   rz   s     r#   !test_sendClose_invalid_code_valuez>WebSocketServerProtocolTests.test_sendClose_invalid_code_value   s     y) 	-QMM###,	- 	-s1;;/?@ 	00#6,,dmm.F.FG	- 	-r}   N)rN   rO   rP   __doc__r$   r0   rM   rb   rk   rn   rq   r|   r   r   r5   r%   r#   rR   rR   l   sA    
GKKK	KHHHr%   rR   USE_TWISTEDFc                   "    e Zd ZdZd Zd Zd Zy)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                          |j                  |_        d|_	        || _
        || _        y )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   sZ    JIA&(A')AAIAKllAG"$ADMDNr%   c                     | j                   j                  | j                   j                  | j                   j                  | j                   j                  fD ]  }||j                           y r'   r(   r.   s     r#   r0   zTwistedProtocolTests.tearDown   sX    MM55MM55MM::MM;;	 " #KKM"r%   c                     | j                   j                  t        j                  t	        d                   | j                  | j                   j                  du        y)zs
            If we lose our connection before openHandshakeTimeout fires, it is
            cleaned up
            testingN)r   _connectionLosttxaiocreate_failureRuntimeErrorrK   r+   ra   s    r#   test_loseConnectionz(TwistedProtocolTests.test_loseConnection  sA     MM))%*>*>|I?V*WXOODMMBBdJKr%   N)rN   rO   rP   r   r$   r0   r   r5   r%   r#   r   r      s    		 	"		Lr%   r   )
__future__r   r   osunittesthashlibr   base64r   autobahn.websocket.protocolr   r
   r   r   r   autobahn.websocket.typesr   autobahn.testr   r   mockr   TestCaser   rR   environgetr   r5   r%   r#   <module>r      s   6 7 	    ? > ? > 9 6 '  :G8#4#4 :GzvH8#4#4 vHr ::>>-'(Lx00 (L (r%   