
    hA                     6   d dl Z d dlmZmZ e j                  j                  dd      rqd dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ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!yy)    N)MockpatchUSE_TWISTEDF	Component)directlyProvides)WelcomeGoodbyeHelloAbort)JsonSerializer)FakeTransport)IStreamClientEndpoint)inlineCallbackssucceedDeferred)Clock)unittest)replace_loopc                       e Zd Zd Z ed ed            ed               Z ed ed            d        Z ed ed            ed               Z	ed        Z
 ed ed            ed	               Zy)
ConnectionTestsc                      y N selfs    c/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/twisted/test/test_tx_component.pysetUpzConnectionTests.setUp,   s        ztxaio.sleepN)return_valuec              #   |  K   t               }g fd}t        |t               t        dd|d      }|j	                  d|       d }||_        t               }t        |      5  |j                  |       | j                  t              d	       |j                  d
       d d d        y # 1 sw Y   y xY ww)Nc                 J    j                  | |f       | j                         S r   )appendleave)sessiondetailsjoinss     r   joinedz7ConnectionTests.test_successful_connect.<locals>.joined5   s     gw/0}}&r   	websocketws://127.0.0.1/wstypeurlendpoint
transportsjoinc                 z   | j                  d      }t               }|j                  |       ddlm} ddlm} ddlm} |j                  |j                  z   }d | ||      j                               z   dz   |_        |j                          ddlm} |j!                  d	d	d	d	d	d	d	d	d	
	      }	t#        dt%        |	      d      }
t'               }|j)                  |
      \  }}|j+                  ||       t-               }
 |j*                  |j)                  |
        |j/                  d	dd       t1        |      S )Nzws://localhost/r   WebSocketProtocol	b64encodesha1   HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-Websocket-Protocol: wamp.2.json
Sec-Websocket-Accept:    

roleT)	publisher_identificationpattern_based_subscriptionsession_meta_apisubscription_meta_apisubscriber_blackwhite_listingpublisher_exclusionsubscription_revocationpayload_transparencypayload_encryption_cryptoboxi@ )brokerrealm)rG   d   zsome old reason)buildProtocolr   makeConnectionautobahn.websocket.protocolr4   base64r6   hashlibr8   websocket_key	_WS_MAGICdigestdataprocessHandshakeautobahn.wampr<   RoleBrokerFeaturesr	   dictr   	serialize	onMessager
   onCloser   )factorykwproto	transportr4   r6   r8   keyr<   featuresmsg
serializerrQ   	is_binarys                 r   connectz8ConnectionTests.test_successful_connect.<locals>.connectB   s9   --.?@)O	$$Y/I,()),=,G,GG. 1:$s):J:J:L0M	N Qd	d 
 &&(.22-1/3%)*.26(,,0)-15 3 
 fd(&;7K+-
","6"6s";ii0i!5!5c!:;dC):;u~%r   reactor     )r   r   r   r   onrb   r   r   start
assertTruelenadvance)r   
fake_sleepr.   r(   	componentrb   rd   r'   s          @r   test_successful_connectz'ConnectionTests.test_successful_connect/   s      vHE' X'<=!'. (I LL((&R  'H gGg& &oogo66E
A.%	& & &s   A#B<&AB0'	B<0B95B<c                    	
 t               	t        	t               t        dd	dddddd 	      }|j                  d
        }d }|	_        t               }t               
	
 fd}||_        t        |      5  |j                  |      }
fd}|j                  ||       |j                  d       
cd d d        S # 1 sw Y   y xY w)Nr)   r*   10.0.0.0  )hostportr   )r,   r-   r.   proxymax_retriesc                      yNTr   )_s    r   <lambda>z?ConnectionTests.test_successful_proxy_connect.<locals>.<lambda>       4r   r0   is_fatalc                 "    | j                         S r   )r$   )r%   r&   s     r   r(   z=ConnectionTests.test_successful_proxy_connect.<locals>.joined   s    }}&r   c                 (    t        t                     S r   )r   r   rY   rZ   s     r   rb   z>ConnectionTests.test_successful_proxy_connect.<locals>.connect   s    tv&r   c                     j                  d|        j                  |d       j                  d        j                  |j                        S )Nrp   rq   )assertEqualcallbackrb   _wrappedFactory)rr   rs   rY   rZ   r.   got_proxy_connectr   s       r   _tcpz;ConnectionTests.test_successful_proxy_connect.<locals>._tcp   sH      T2  u-!**40''(?(?@@r   rc   c                 B    j                   sj                  |        y y r   )calledr   )xr   s    r   donez;ConnectionTests.test_successful_proxy_connect.<locals>.done   s    ,33)2215 4r   rf   )r   r   r   r   on_joinrb   r   r   
connectTCPr   rh   addCallbacksrk   )r   rl   rm   r(   rb   rd   r   dr   r.   r   s   `        @@r   test_successful_proxy_connectz-ConnectionTests.test_successful_proxy_connectx   s    vHX'<=!'. ( * % $%	 (I ' ''&H gG (
A
 "&Gg& 	)OOGO46 tT*%(	) 	) 	)s   ><CCc              #     K   t               }t        |t               t        dd|d      }d }||_        t               }t        |      5  |j                  |      }|j                          | ddd       y# 1 sw Y   yxY ww)z
            if we start a component but call .stop before it connects, ever,
            it should still exit properly
            r)   r*   r+   r/   c                     t               S r   )r   r   s     r   rb   z,ConnectionTests.test_cancel.<locals>.connect   s
    z!r   rc   N)	r   r   r   r   rb   r   r   rh   stop)r   rl   r.   rm   rb   rd   r   s          r   test_cancelzConnectionTests.test_cancel   s      vHX'<=!'. (I"&H gGg& OOGO4   s   A
B'A<3	B<BBc           	   #     K   t               }t        |t               t        dd|dddd      }t	               t              5  fd}||_        |j                        }|j                  J |j                  j                  rJ |j                         }|j                  J |j                  sJ | | d	d	d	       y	# 1 sw Y   y	xY ww)
z
            if we start a component but call .stop before it connects, ever,
            it should still exit properly -- even if we're 'between'
            connection attempts
            r)   r*   r      )r,   r-   r.   ru   max_retry_delayinitial_retry_delayr/   c                 p    t               }j                  d|j                  t        d                   |S )N
   zno connect for yo)r   	callLatererrbackRuntimeError)rY   rZ   r   rd   s      r   rb   z:ConnectionTests.test_cancel_while_waiting.<locals>.connect   s.     
A%%b!))LAT4U*VWHr   rc   N)r   r   r   r   r   r   rb   rh   _delay_f_done_fr   r   )r   r.   rm   rb   d0d1rd   s         @r   test_cancel_while_waitingz)ConnectionTests.test_cancel_while_waiting   s      vHX'<=!'. (#$'(+,	I gGg&  $+ __W_5 ))555$,,3333^^% ((000yy y#  s   ACA9C?	CCCc              #     K   t               }t        |t               t        dd|dd       }d }||_        t               }t        |      5  | j                  t              5 }|j                  |      }|j                  d       | d d d        d d d        | j                  d	t        j                               y # 1 sw Y   7xY w# 1 sw Y   ;xY ww)
Nr)   r*   r+   c                      yrw   r   )es    r   ry   z=ConnectionTests.test_connect_no_auth_method.<locals>.<lambda>  rz   r   r{   c                 h   | j                  d      }|j                  t                      ddlm} ddlm} ddlm} |j                  |j                  z   }d | ||      j                               z   dz   |_        |j                          ddlm} |j!                         }t#        d	t%        |
      dg      }	t'               }
|
j)                  |	      \  }}|j+                  ||       t-        d      }	 |j*                  |
j)                  |	        |j/                  ddd       t1        |      S )Nboomr   r3   r5   r7   r9   r:   r;   rG   )
subscriber	anonymous)rolesauthmethodszwamp.error.no_auth_method)reasonFrH   )rI   rJ   r   rK   r4   rL   r6   rM   r8   rN   rO   rP   rQ   rR   rS   r<   RoleSubscriberFeaturesr   rU   r   rV   rW   r   rX   r   )rY   rZ   r[   r4   r6   r8   r]   r<   subroler_   r`   rQ   ra   s                r   rb   z<ConnectionTests.test_connect_no_auth_method.<locals>.connect  s   --f5$$TV,I,()),=,G,GG. 1:$s):J:J:L0M	N Qd	d 
 &&(.557G47+CR]Q^_+-
","6"6s";ii0#>?!5!5c!:;eS*EFu~%r   rc   rf   zExhausted all transport)r   r   r   r   rb   r   r   assertRaisesr   rh   rk   assertInstr	exception)r   rl   r.   rm   rb   rd   ctxr   s           r   test_connect_no_auth_methodz+ConnectionTests.test_connect_no_auth_method   s      vHX'<=!'. (
 (I&<  'H gGg& &&|4 !8AOOD)G	 MM)CMM"  s6   ACC$(CC.CC	CCC)__name__
__module____qualname__r   r   r   r   rn   r   r   r   r   r   r   r   r   r   *   s    	 
}74=	9	E	& 
 
:E	&N 
}74=	91	) 
:1	)f 
}74=	9		 
 
:	: 
)	 
)	V 
}74=	9	;	 
 
:;	r   r   c                   N    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)InvalidTransportConfigsc                     | j                  t              5 }t        t        d             d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nbarfoor/   z'foo' is notr   
ValueErrorr   rU   r   r   r   r   r   s     r   test_invalid_keyz(InvalidTransportConfigs.test_invalid_key8  sS    "":. ##!  MM.#cmm*<= s   AA$c                     | j                  t              5 }t        t        dd      t        d      g       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr)   r*   )r,   r-   r   r   r/   z''foo' is not a valid configuration itemr   r   s     r   test_invalid_key_transport_listz7InvalidTransportConfigs.test_invalid_key_transport_listA  s`    "":. #+3FG  MMCSEWX s   $A((A1c                     | j                  t              5 }t        ddgdg       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr*   quux)r-   r`   r/   zonly for rawsocketr   r   r   r   r   r   r   s     r   test_invalid_serializer_keyz3InvalidTransportConfigs.test_invalid_serializer_keyK  s]    "":. # $7+1(  MM.CMM0BC    AAc                     | j                  t              5 }t        ddgdg       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr*   r   r-   serializersr/   zInvalid serializerr   r   s     r   test_invalid_serializerz/InvalidTransportConfigs.test_invalid_serializerW  s]    "":. # $7,28  MM.CMM0BC r   c                     | j                  t              5 }t        dddgdg       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr*   re      r   r/   must be a listr   r   s     r   test_invalid_serializer_type_0z6InvalidTransportConfigs.test_invalid_serializer_type_0c  s_    "":. # $7,-q6  MM*C,>? s   AA c                     | j                  t              5 }t        dddg       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr*   re   r   r/   r   r   r   s     r   test_invalid_serializer_type_1z6InvalidTransportConfigs.test_invalid_serializer_type_1o  s[    "":. # $7+,  MM*C,>? s   AAc                     | j                  t              5 }t        ddig       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr,   badr/   zInvalid transport typer   r   s     r   test_invalid_type_keyz-InvalidTransportConfigs.test_invalid_type_key{  sZ    "":. # #E  MM2C4FG    AAc                     | j                  t              5 }t        dg       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr   r/   zinvalid WebSocket URLr   r   s     r   test_invalid_typez)InvalidTransportConfigs.test_invalid_type  sQ    "":. #  MM13s}}3EF s   AAc                     | j                  t              5 }t        ddig       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nr,   r)   r/   zTransport requires 'url'r   r   s     r   test_no_urlz#InvalidTransportConfigs.test_no_url  sZ    "":. # #K  MM4c#--6HI r   c                     | j                  t              5 }t        d ddddg       d d d        | j                  dt	        j
                               y # 1 sw Y   /xY w)Nc                      y r   r   rss     r   ry   zDInvalidTransportConfigs.test_endpoint_bogus_object.<locals>.<lambda>  s    dr   r)   ws://example.com/ws)notarU   r+   mainr0   z 'endpoint' configuration must ber   r   s     r   test_endpoint_bogus_objectz2InvalidTransportConfigs.test_endpoint_bogus_object  sa    "":. 
#* %0#8(< 	
 MM<c#-->PQ
 
s   AA!c           	      2    t        d dddddddg	       y )
Nc                      y r   r   r   s     r   ry   z=InvalidTransportConfigs.test_endpoint_valid.<locals>.<lambda>  s    $r   r)   r   tcpz1.2.3.44321)r,   rr   rs   r+   r   r   r   s    r   test_endpoint_validz+InvalidTransportConfigs.test_endpoint_valid  s-    & !,4$)$-$*%
r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   6  sB    	>	Y
	D
	D
	@
	@		H	G		J	R	r   r   )"osunittest.mockr   r   environgetautobahn.twisted.componentr   zope.interfacer   autobahn.wamp.messager	   r
   r   r   autobahn.wamp.serializerr   autobahn.testutilr   twisted.internet.interfacesr   twisted.internet.deferr   r   r   twisted.internet.taskr   twisted.trialr   txaio.testutilr   TestCaser   r   r   r   r   <module>r      sr   6 
 %::>>-'4/DD7/AII+&+J(++ JX@("3"3 @q (r   