
    h'                     X   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 j0                  j3                  dd      r G d dej*                        Zyy)    N)sha1)	b64encode)MockWebSocketServerProtocolWebSocketServerFactory)WebSocketClientProtocol)WebSocketClientFactory)WebSocketProtocol)ConnectingRequest)FakeTransport)TransportDetailsc                       e Zd Zd Zd Zd Zy)WebSocketClientProtocolTestsc                 J   t               }t               }t        j                         |_        t               }t        j                         |_        ||_        ||_        t               |_	        |j                          |j                  |_        d|_        || _        || _        y N   )r   r   txaiomake_loggerlogr
   factory	transportr   _transport_details_connectionMade
STATE_OPENstatewebsocket_versionprotocolselftfps       k/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/websocket/test/test_websocket_protocol.pysetUpz"WebSocketClientProtocolTests.setUp/   s    O"$!!##%!!#	/1	,,     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@   S    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)    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   )*&-1VH)-/* ,'!V $(6 )-& 	--"	
 mm)),=,G,GG& )2$s)2B2B2D(EF I\\ 	 	&&(99EFr'   N)__name__
__module____qualname__r&   r2   rO   r7   r'   r%   r   r   -   s    "Gr'   r   c                   R    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y)WebSocketServerProtocolTestszB
    Tests for autobahn.websocket.protocol.WebSocketProtocol.
    c                 ,   t               }t               }t        j                         |_        t               }t        j                         |_        ||_        ||_        |j                          |j                  |_
        d|_        || _        || _        y r   )r   r	   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*   r0   s     r%   r2   z%WebSocketServerProtocolTests.tearDown   r3   r'   c                 l   t               }t        d      |_        d| j                  _        |g| j                  _        g | j                  _        d | j                  _        d| j                  _        | j                  j                  |       | j                  | j                  j                  d u       y )Nr5   )return_valuec                       y 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)*&-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^   rc   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.
        rf   rg   rh   rk   Nrl   r^   rc   s    r%   test_sendClose_unicode_reasonz:WebSocketServerProtocolTests.test_sendClose_unicode_reason   rn   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.
        rf     abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrh   rk   Ns}   abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcr^   rc   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)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MM##5#1	2 	7Q[[9IJ 	00#6,,dmm.F.FG	2 	2   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ri   Nzinvalid typer'   rv   r|   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'   rv   r|   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   c                     ddl m} |j                  d d      }| j                  t	        |      t
               | j                  t        |      dkD         y )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   s?    G#**4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   sF     
GKKK	KHHH$r'   rT   USE_TWISTEDFc                   (    e Zd 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*   r0   s     r%   r2   zTwistedProtocolTests.tearDown  sS    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   _connectionLostr   create_failureRuntimeErrorrM   r-   rc   s    r%   test_loseConnectionz(TwistedProtocolTests.test_loseConnection  sA     MM))%*>*>|I?V*WXOODMMBBdJKr'   c                 8    | j                   j                          y r)   )r   sendServerStatusrc   s    r%   test_send_server_statusz,TwistedProtocolTests.test_send_server_status  s    MM**,r'   N)rP   rQ   rR   r   r&   r2   r   r   r7   r'   r%   r   r      s    		 	"		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 6 + 0<G8#4#4 <G~~$8#4#4 ~$B ::>>-'+-x00 +- (r'   