
    hj6                        d dl Z d dlZe j                  j                  dd      rd 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mZmZ d dlmZ d dlmZ  ed      d        ZdZdZ G d dej:                        Z G d dej:                        Z G d dej:                        Z yy)    NUSE_TWISTEDF)unittest)IPv4Address)Clock)WebSocketServerProtocol)WebSocketServerFactory)WebSocketClientProtocol)WebSocketClientFactory)PerMessageDeflate)FakeTransport)	MagicMockpatch)replace_loop)	b64decodezbase64.b64encodec                 p   d| _         t        dg      }t        |_        |j	                          |j                  t        ddd            }t               |_        |j                          t        |_        |j                          g fd}||_         |j                  d	i | dj                        S )
a[  
        Kind-of hack-y; maybe better to re-factor the Protocol to have a
        frame-encoder method-call? Anyway, makes a throwaway protocol
        encode a frame for us, collects the .sendData call and returns
        the data that would have gone out. Accepts all the kwargs that
        WebSocketClientProtocol.sendFrame() accepts.
        s   QIatSt9QkZPyS4QQfdufO8TgkL0=wamp.2.json	protocolsTCPz	127.0.0.9  c                 (    j                  |        y N)append)dargsdatas     h/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/websocket/test/test_websocket_frame.pycollectz$create_client_frame.<locals>.collectI   s    KKN    r    )return_valuer
   r	   protocoldoStartbuildProtocolr   r   	transportconnectionMademock_handshake_serverr   processHandshakesendData	sendFramejoin)b64patchkwargsfactoryprotor   r   s        @r   create_client_framer0   0   s     !@(M?C2%%k%e&LM'/*
 	 !&!xx~r   s
  GET / HTTP/1.1
User-Agent: AutobahnPython/0.10.2
Host: localhost:80
Upgrade: WebSocket
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: 6Jid6RgXpH0RVegaNSs/4g==
Sec-WebSocket-Protocol: wamp.2.json
Sec-WebSocket-Version: 13

s  HTTP/1.1 101 Switching Protocols
Server: AutobahnPython/0.10.2
X-Powered-By: AutobahnPython/0.10.2
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Protocol: wamp.2.json
Sec-WebSocket-Accept: QIatSt9QkZPyS4QQfdufO8TgkL0=

~[1,"crossbar",{"roles":{"subscriber":{"features":{"publisher_identification":true,"pattern_based_subscription":true,"subscription_revocation":true}},"publisher":{"features":{"publisher_identification":true,"publisher_exclusion":true,"subscriber_blackwhite_listing":true}},"caller":{"features":{"caller_identification":true,"progressive_call_results":true}},"callee":{"features":{"progressive_call_results":true,"pattern_based_registration":true,"registration_revocation":true,"shared_registration":true,"caller_identification":true}}}}]c                       e Zd Zd Zd Zy)TestDeflatec           	          t        ddddddd      }d}|j                          |j                  |      }| j                  |d       y )NF      
   )	is_serverserver_no_context_takeoverclient_no_context_takeoverserver_max_window_bitsclient_max_window_bits	mem_levelmax_message_size   `Q0
FP @s
   xxxxxxxxxxr   start_decompress_messagedecompress_message_dataassertEqualselfdecodercompressed_datar   s       r   test_max_sizezTestDeflate.test_max_sizeW   sW    '+0+0')')!#G bO,,.22?CD T9-r   c                     t        dddddd       }d}|j                          |j                  |      }| j                  |d       y )NFr4   )r7   r8   r9   r:   r;   r<   r>   s  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr?   rC   s       r   test_no_max_sizezTestDeflate.test_no_max_sizel   sR    '+0+0')')G bO,,.22?CDT;/r   N)__name__
__module____qualname__rG   rI   r    r   r   r2   r2   U   s    	.*	0r   r2   c                   $    e Zd Zd Zd Zd Zd Zy)
TestClientc                 d   t        dg      | _        t        | j                  _        | j                  j	                          | j                  j                  t        ddd            | _        t               | _	        | j                  | j                  _	        | j                  j                          y Nr   r   r   z	127.0.0.1r   )r
   r.   r	   r"   r#   r$   r   r/   r   r%   r&   rD   s    r   setUpzTestClient.setUp   su    1]OLDL$;DLL!LL  "33K{TY4Z[DJ*_DN#'>>DJJ JJ%%'r   c                     | j                   j                  r$| j                   j                  j                          | j                  j	                          | `| ` y r   r/   openHandshakeTimeoutCallcancelr.   doStoprQ   s    r   tearDownzTestClient.tearDown   ?    zz22

33::<LL!
r   c                     d| j                   _        | j                   j                  | j                   _        d| j                   _        t               | j                   _        | j                   j                  dd        y )NT     )r/   echoCloseCodeReason
STATE_OPENstatewebsocket_versionr   sendCloseFrameonCloseFramerQ   s    r   test_missing_reason_rawz"TestClient.test_missing_reason_raw   sR    -1DJJ*#zz44DJJ+,DJJ((1DJJ%JJ##D$/r   c                 p   	 t	        d      | j                  _        t        | j                  _        | j                  j                          | j                  | j                  j                  t        j                         | j                  | j                  j                  dkD         t        t!                     5 }| j                  j#                          | j                  j%                  dd       | j                  t'        |j(                        d       | j                  |j(                  d   j*                  | j                  j,                         | j                  |j(                  d   j/                         | j                  j                         |j1                  | j                  j2                  dz          | j                  | j                  j4                  j7                                | j                  | j                  j                  t        j8                         ddd       y# 1 sw Y   yxY w)zR
            make a delayed call to drop the connection (client-side)
            z6Jid6RgXpH0RVegaNSs/4g==r   r\   s
   raw reasonr[   N)printr/   r.   _logr   websocket_keyr'   r   r(   rB   r_   r   r^   
assertTrueserverConnectionDropTimeoutr   r   ra   rb   lencallsfunconServerConnectionDropTimeoutgetTimeadvancecloseHandshakeTimeoutr%   abort_calledSTATE_CLOSEDrD   reactors     r   test_unclean_timeout_clientz&TestClient.test_unclean_timeout_client   s   
  (11K'LDJJ$3DJJOJJ'')TZZ--/F/Q/QROODJJBBQFGeg& Y'

))+

''m<   W]]!3Q7  q!1!6!6

8`8`a  q!1!9!9!;TZZ=c=cd 

 @ @1 DE 

 4 4 A A CD  !1!13J3W3WX#Y Y Ys   :E)H,,H5N)rJ   rK   rL   rR   rX   rc   ru   r    r   r   rN   rN   ~   s    	(		0 	Yr   rN   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestPingc                 d   t        dg      | _        t        | j                  _        | j                  j	                          | j                  j                  t        ddd            | _        t               | _	        | j                  | j                  _	        | j                  j                          y rP   )r   r.   r   r"   r#   r$   r   r/   r   r%   r&   rQ   s    r   rR   zTestPing.setUp   su    1]OLDL$;DLL!LL  "33K{TY4Z[DJ&[DN#'>>DJJ JJ%%'r   c                     | j                   j                  r$| j                   j                  j                          | j                  j	                          | `| ` y r   rT   rQ   s    r   rX   zTestPing.tearDown   rY   r   c                 >   t         | j                  _        | j                  j                          | j	                  | j                  j
                  t        j                  k(         t        t                     5 }| j                  j                          | j                  t        |j                        d       |j                  | j                  j                  dz          | j                  dt!        | j                  j"                  j$                  d                | j	                  | j                  j"                  j&                  j(                         | j                  | j                  j
                  t        j*                         ddd       y# 1 sw Y   yxY w)zD
            make a delayed call to drop the connection
            r[   zcall.abortConnection()N)mock_handshake_clientr/   r   r(   rh   r_   r   r^   r   r   ra   rB   rj   rk   ro   rp   strr%   method_callsabortConnectioncalledrr   rs   s     r   test_unclean_timeoutzTestPing.test_unclean_timeout   s    4DJJOJJ'')OODJJ,,0G0R0RRSeg& Y'

))+   W]]!3Q7 

 @ @1 DE   !93tzz?S?S?`?`ac?d;ef

 4 4 D D K KL  !1!13J3W3WXY Y Ys   9DFFc                 H   d| j                   _        d| j                   _        t        t	                     5 }t
        | j                   _        | j                   j                          | j                  | j                   j                  t        j                  k(         | j                  dt        |j                               |j                  d       | j                  | j                   j"                  j$                         | j                   j"                  j&                  d   d   }t)        |d   g      }t+        j,                  d|      \  }|dz  }| j                  d|       | j                  dt        |j                               | j/                  | j                   j                  | j                   j0                         |j                  d       | j                  | j                   j                  | j                   j0                         d	d	d	       y	# 1 sw Y   y	xY w)
z>
            autoping and autoping-timeout timing
                  r[   r   Bi	      N)r/   autoPingIntervalautoPingTimeoutr   r   r|   r   r(   rh   r_   r   r^   rB   rj   rk   ro   r%   writer   	call_argsbytesstructunpackassertNotEqualrr   )rD   rt   r   _dataopcodes        r   test_auto_pingpong_timeoutz#TestPing.test_auto_pingpong_timeout   s   
 +,DJJ')*DJJ&eg& !L'"7



++-

 0 04K4V4V VW   C$67 "  4 4 ; ;<~~++55a8;tAwi( #MM#u5	5)   F+   C$67##DJJ$4$4djj6M6MN "  !1!14::3J3JKC!L !L !Ls   GHH!c                 8   d| j                   _        d| j                   _        t        t	                     5 }t
        | j                   _        | j                   j                          | j                  | j                   j                  t        j                  k(         | j                  dt        |j                               |j                  d       | j                  dt        |j                               |j                  d   }t!        d| j                   j"                        }|| j                   _        | j                   j%                          | j                   j%                          | j                  |j&                         ddd       y# 1 sw Y   yxY w)zF
            auto-ping with correct reply cancels timeout
            r   r   r[   r   r6   )r   payloadN)r/   r   r   r   r   r|   r   r(   rh   r_   r   r^   rB   rj   rk   ro   r0   autoPingPendingprocessData	cancelled)rD   rt   timeout_callframes       r   test_auto_ping_got_pongz TestPing.test_auto_ping_got_pong  s#   
 +,DJJ')*DJJ&eg& 8'"7



++-

 0 04K4V4V VW   C$67 "   C$67&}}Q/ ,2tzz?Y?YZ"'



&&(

&&(  6 6798 8 8s   EFFN)rJ   rK   rL   rR   rX   r   r   r   r    r   r   rw   rw      s    	(		Y@)	LV$	8r   rw   )!osr   environgettwisted.trialr   twisted.internet.addressr   twisted.internet.taskr   autobahn.twisted.websocketr   r   r	   r
   #autobahn.websocket.compress_deflater   autobahn.testutilr   unittest.mockr   r   txaio.testutilr   base64r   r0   r|   r'   TestCaser2   rN   rw   r    r   r   <module>r      s   6 
  ::>>-'&4+BABAE/.+ 
 @ @ C'0h'' '0R=YX&& =Y~B88$$ B8} (r   