
    afA                     0   d dl Z d dlmZmZ e j                            dd          rnd 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!dS dS )    N)MockpatchUSE_TWISTEDF	Component)directlyProvides)WelcomeGoodbyeHelloAbort)JsonSerializer)FakeTransport)IStreamClientEndpoint)inlineCallbackssucceedDeferred)Clock)unittest)replace_loopc                   R   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dS )
ConnectionTestsc                     d S N selfs    Y/var/www/html/env/lib/python3.11/site-packages/autobahn/twisted/test/test_tx_component.pysetUpzConnectionTests.setUp,   s    D    ztxaio.sleepN)return_valuec              #     K   t                      }g fd}t          |t                     t          dd|d          }|                    d|           d }||_        t                      }t          |          5  |                    |          V  | 	                    t                    d	           |                    d
           d d d            d S # 1 swxY w Y   d S )Nc                 Z                         | |f           |                                 S r   )appendleave)sessiondetailsjoinss     r   joinedz7ConnectionTests.test_successful_connect.<locals>.joined5   s(    gw/000}}&r   	websocketws://127.0.0.1/wstypeurlendpoint
transportsjoinc                    |                      d          }t                      }|                    |           ddlm} ddlm} ddlm} |j	        |j
        z   }d | ||                                                    z   dz   |_        |                                 ddlm} |                    d	d	d	d	d	d	d	d	d	
	  	        }	t#          dt%          |	          d          }
t'                      }|                    |
          \  }}|                    ||           t-                      }
 |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   s   --.?@@)OO	$$Y///IIIIII,,,,,,((((((),=,GG. 1:	$$s)):J:J:L:L0M0M	N Qd	d 
 &&(((......22-1/3%)*.26(,,0)-15 3 
 
 fd(&;&;&;7KKK+--
","6"6s";";ii000ii!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]      vvHE' ' ' ' ' X'<===!'. (   I LL((((& (& (&R  'H ggGg&& & &oogo66666E

A...%%%	& & & & & & & & & & & & & & & & & &s   ?ACC!$C!c                    	
 t                      	t          	t                     t          dd	dddddd 	          }|j        d
             }d }|	_        t                      }t                      
	
 fd}||_        t          |          5  |
                    |          }
fd}|                    ||           |                    d           
cd d d            S # 1 swxY w Y   d S )Nr)   r*   10.0.0.0  )hostportr   )r,   r-   r.   proxymax_retriesc                     dS NTr   )_s    r   <lambda>z?ConnectionTests.test_successful_proxy_connect.<locals>.<lambda>       4 r   r0   is_fatalc                 *    |                                  S r   )r$   )r%   r&   s     r   r(   z=ConnectionTests.test_successful_proxy_connect.<locals>.joined   s    }}&r   c                 8    t          t                                S r   )r   r   rY   rZ   s     r   rb   z>ConnectionTests.test_successful_proxy_connect.<locals>.connect   s    tvv&r   c                                          d|                                 |d                               d                                |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   sZ      T222  u---!**4000''(?@@@r   rc   c                 D    j         s                    |            d S d S r   )calledr   )xr   s    r   donez;ConnectionTests.test_successful_proxy_connect.<locals>.done   s2    ,3 6)221555556 6r   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   vvHX'<===!'. ( * %  $%	 	 (  I ' ' '' ' '&H ggG (

A A A A A A A
 "&Gg&& 	) 	)OOGO446 6 6 6 6 tT***%%%(	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AC**C.1C.c              #   T  K   t                      }t          |t                     t          dd|d          }d }||_        t                      }t          |          5  |                    |          }|                                 |V  ddd           dS # 1 swxY w Y   dS )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    zz!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	      vvHX'<===!'. (   I" " "&H ggGg&&  OOGO44                    s   !/BB!$B!c           	   #     K   t                      }t          |t                     t          dd|dddd          }t	                      t                    5  fd}||_        |                              }|j        J |j	        j
        rJ |                                }|j	        J |j
        sJ |V  |V  d	d	d	           d	S # 1 swxY w Y   d	S )
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                     t                      }                    d|                    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!))LAT4U4U*V*VWW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   sd      vvHX'<===!'. (#$'(+, 	 	 	I ggGg&&       $+ __W_55 )555$,3333^^%% (000y  y#                 s   A(CCCc              #     K   t                      }t          |t                     t          dd|dd           }d }||_        t                      }t          |          5  |                     t                    5 }|	                    |          }|
                    d           |V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     d	t          |j                             d S )
Nr)   r*   r+   c                     dS rw   r   )es    r   ry   z=ConnectionTests.test_connect_no_auth_method.<locals>.<lambda>  rz   r   r{   c                    |                      d          }|                    t                                 ddlm} ddlm} ddlm} |j	        |j
        z   }d | ||                                                    z   dz   |_        |                                 ddlm} |                                }t#          d	t%          |
          dg          }	t'                      }
|
                    |	          \  }}|                    ||           t-          d          }	 |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5$$TVV,,,IIIIII,,,,,,((((((),=,GG. 1:	$$s)):J:J:L:L0M0M	N Qd	d 
 &&(((......5577G47+C+C+CR]Q^___+--
","6"6s";";ii000#>???!5!5c!:!:;;eS*EFF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      vvHX'<===!'. ( 
 (  I& & &<  'H ggGg&&  &&|44 !88AOOD)))GGG	                             MM)CM""    s6   #C>0B:.C:B>	>CB>	CCC)__name__
__module____qualname__r   r   r   r   rn   r   r   r   r   r   r   r   r   r   *   s.       	 	 	 
}774==	9	9	9	E	& E	& 
 
:	9E	&N 
}774==	9	9	91	) 1	) 
:	91	)f 
}774==	9	9	9		 	 
 
:	9	: 
)	 )	 
)	V 
}774==	9	9	9	;	 ;	 
 
:	9;	 ;	 ;	r   r   c                   P    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S )InvalidTransportConfigsc                     |                      t                    5 }t          t          d                     d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nbarfoor/   z'foo' is notr   
ValueErrorr   rU   r   r   r   r   r   s     r   test_invalid_keyz(InvalidTransportConfigs.test_invalid_key8  s    "":.. ##!                       MM.#cm*<*<=====s   AA
A
c                    |                      t                    5 }t          t          dd          t          d          g           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )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GG                   MMCSEWEWXXXXXs   0AAAc                     |                      t                    5 }t          ddgdg           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )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.CM0B0BCCCCC   =AAc                     |                      t                    5 }t          ddgdg           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Nr*   r   r-   serializersr/   zInvalid serializerr   r   s     r   test_invalid_serializerz/InvalidTransportConfigs.test_invalid_serializerW  s    "":.. # $7,28                    MM.CM0B0BCCCCCr   c                     |                      t                    5 }t          dddgdg           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )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                     |                      t                    5 }t          dddg           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )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                     |                      t                    5 }t          ddig           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Nr,   badr/   zInvalid transport typer   r   s     r   test_invalid_type_keyz-InvalidTransportConfigs.test_invalid_type_key{  s    "":.. # #E                   MM2C4F4FGGGGG   ;??c                     |                      t                    5 }t          dg           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Nr   r/   zinvalid WebSocket URLr   r   s     r   test_invalid_typez)InvalidTransportConfigs.test_invalid_type  s    "":.. #                   MM13s}3E3EFFFFFs   9= =c                     |                      t                    5 }t          ddig           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Nr,   r)   r/   zTransport requires 'url'r   r   s     r   test_no_urlz#InvalidTransportConfigs.test_no_url  s    "":.. # #K                   MM4c#-6H6HIIIIIr   c                     |                      t                    5 }t          d ddddg           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Nc                     d S r   r   rss     r   ry   zDInvalidTransportConfigs.test_endpoint_bogus_object.<locals>.<lambda>  s    d r   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  s    "":.. 
#** %0#8(<  	 	 	 	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 MM<c#->P>PQQQQQs   ?AAc           	      <    t          d dddddddg	           d S )
Nc                     d S 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  sS    && !,4$)$-$*% % 
     r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   6  s        	> 	> 	>	Y 	Y 	Y
	D 
	D 
	D
	D 
	D 
	D
	@ 
	@ 
	@
	@ 
	@ 
	@		H 		H 		H	G 	G 	G		J 		J 		J	R 	R 	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      s  6 
			 % % % % % % % %:>>-'' X444444//////DDDDDDDDDDDD777777//////AAAAAAIIIIIIIIII++++++&&&&&&++++++J J J J J(+ J J JX@ @ @ @ @("3 @ @ @ @ @qX Xr   