o
    >hA                     @   s   d dl Z d dlmZmZ e jddrmd 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 dejZ G d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                   @   s   e Zd Zdd Zededdedd Zededddd	 Zededded
d Z	edd Z
ededdedd ZdS )ConnectionTestsc                 C      d S N selfr   r   /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/twisted/test/test_tx_component.pysetUp,   s   zConnectionTests.setUpztxaio.sleepN)return_valuec                 #   s    t  }g   fdd}t|t tdd|dd}|d| dd	 }||_t }t| |j|d
V  | 	t
 d |d W d    d S 1 sNw   Y  d S )Nc                    s     | |f |  S r   )appendleavesessiondetailsjoinsr   r   joined5   s   z7ConnectionTests.test_successful_connect.<locals>.joined	websocketws://127.0.0.1/wstypeurlendpoint
transportsjoinc                 [   s   |  d}t }|| ddlm} ddlm} ddlm} |j	|j
 }d|||  d |_|  ddlm} |jd	d	d	d	d	d	d	d	d	d
	}	tdt|	ddd}
t }||
\}}||| t }
|j||
  |d	dd t|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)rC   d   zsome old reason)buildProtocolr   makeConnectionautobahn.websocket.protocolr0   base64r2   hashlibr4   websocket_key	_WS_MAGICdigestdataprocessHandshakeautobahn.wampr8   RoleBrokerFeaturesr   dictr   	serialize	onMessager	   onCloser   )factorykwproto	transportr0   r2   r4   keyr8   featuresmsg
serializerrM   	is_binaryr   r   r   connectB   sD   

z8ConnectionTests.test_successful_connect.<locals>.connectreactor     )r   r   r   r   onr^   r   r   start
assertTruelenadvance)r   
fake_sleepr+   r%   	componentr^   r`   r   r#   r   test_successful_connect/   s(   
)
"z'ConnectionTests.test_successful_connectc           	         s   t   t t tdd ddddddd	 d
}|jdd }dd }| _t }t  fdd}||_t	|! |j
|d}fdd}||| |d W  d    S 1 s`w   Y  d S )Nr&   r'   10.0.0.0  )hostportr   )r)   r*   r+   proxymax_retriesc                 S      dS NTr   )_r   r   r   <lambda>       z?ConnectionTests.test_successful_proxy_connect.<locals>.<lambda>r-   is_fatalc                 S   s   |   S r   )r   r    r   r   r   r%      s   z=ConnectionTests.test_successful_proxy_connect.<locals>.joinedc                 [   s
   t t S r   )r   r   rU   rV   r   r   r   r^      s   
z>ConnectionTests.test_successful_proxy_connect.<locals>.connectc                    s.    d|   |d d   |jS )Nrk   rl   )assertEqualcallbackr^   _wrappedFactory)rm   rn   rU   rV   r+   got_proxy_connectr   r   r   _tcp   s   
z;ConnectionTests.test_successful_proxy_connect.<locals>._tcpr_   c                    s    j s
 |  d S d S r   )calledrz   )x)r}   r   r   done   s   z;ConnectionTests.test_successful_proxy_connect.<locals>.donerb   )r   r   r   r   on_joinr^   r   r   
connectTCPr   rd   addCallbacksrg   )	r   rh   ri   r%   r^   r`   r~   dr   r   r|   r   test_successful_proxy_connectx   s8   




$z-ConnectionTests.test_successful_proxy_connectc                 c   s    t  }t|t tdd|dd}dd }||_t }t| |j|d}|  |V  W d   dS 1 s9w   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                 [   s   t  S r   )r   rx   r   r   r   r^      s   z,ConnectionTests.test_cancel.<locals>.connectr_   N)	r   r   r   r   r^   r   r   rd   stop)r   rh   r+   ri   r^   r`   r   r   r   r   test_cancel   s"   

"zConnectionTests.test_cancelc                 #   s    t  }t|t tdd|ddddd}t  t ;  fdd}||_|j d	}|jd
us3J |j	j
r9J | }|j	d
u sDJ |j
sIJ |V  |V  W d
   d
S 1 sZw   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+   rp   max_retry_delayinitial_retry_delayr,   c                    s    t  } d|td |S )N
   zno connect for yo)r   	callLatererrbackRuntimeError)rU   rV   r   r_   r   r   r^      s   z:ConnectionTests.test_cancel_while_waiting.<locals>.connectr_   N)r   r   r   r   r   r   r^   rd   _delay_f_done_fr   r   )r   r+   ri   r^   d0d1r   r_   r   test_cancel_while_waiting   s2   


"z)ConnectionTests.test_cancel_while_waitingc              	   c   s    t  }t|t tdd|ddd d}dd }||_t }t|+ | t}|j	|d	}|
d
 |V  W d    n1 sBw   Y  W d    n1 sQw   Y  | dt|j d S )Nr&   r'   r(   c                 S   rq   rr   r   )er   r   r   rt     ru   z=ConnectionTests.test_connect_no_auth_method.<locals>.<lambda>rv   c                 [   s   |  d}|t  ddlm} ddlm} ddlm} |j	|j
 }d|||  d |_|  ddlm} | }td	t|d
dgd}	t }
|
|	\}}||| tdd}	|j|
|	  |ddd t|S )Nboomr   r/   r1   r3   r5   r6   r7   rC   )
subscriber	anonymous)rolesauthmethodszwamp.error.no_auth_method)reasonFrD   )rE   rF   r   rG   r0   rH   r2   rI   r4   rJ   rK   rL   rM   rN   rO   r8   RoleSubscriberFeaturesr
   rQ   r   rR   rS   r   rT   r   )rU   rV   rW   r0   r2   r4   rY   r8   subroler[   r\   rM   r]   r   r   r   r^     s.   

z<ConnectionTests.test_connect_no_auth_method.<locals>.connectr_   rb   zExhausted all transport)r   r   r   r   r^   r   r   assertRaisesr   rd   rg   assertInstr	exception)r   rh   r+   ri   r^   r`   ctxr   r   r   r   test_connect_no_auth_method   s2   
	

z+ConnectionTests.test_connect_no_auth_method)__name__
__module____qualname__r   r   r   r   rj   r   r   r   r   r   r   r   r   r   *   s    G
3
+r   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )InvalidTransportConfigsc                 C   sP   |  t}ttddd W d    n1 sw   Y  | dt|j d S )Nbarfoor,   z'foo' is notr   
ValueErrorr   rQ   r   r   r   r   r   r   r   r   test_invalid_key8  s   z(InvalidTransportConfigs.test_invalid_keyc                 C   s\   |  t}ttdddtddgd W d    n1 sw   Y  | dt|j d S )Nr&   r'   )r)   r*   r   r   r,   z''foo' is not a valid configuration itemr   r   r   r   r   test_invalid_key_transport_listA  s   
z7InvalidTransportConfigs.test_invalid_key_transport_listc                 C   T   |  t}tddgdgd W d    n1 sw   Y  | dt|j d S )Nr'   quux)r*   r\   r,   zonly for rawsocketr   r   r   r   r   r   r   r   r   r   test_invalid_serializer_keyK     	z3InvalidTransportConfigs.test_invalid_serializer_keyc                 C   r   )Nr'   r   r*   serializersr,   zInvalid serializerr   r   r   r   r   test_invalid_serializerW  r   z/InvalidTransportConfigs.test_invalid_serializerc                 C   sV   |  t}tdddgdgd W d    n1 sw   Y  | dt|j d S )Nr'   ra      r   r,   must be a listr   r   r   r   r   test_invalid_serializer_type_0c  s   	z6InvalidTransportConfigs.test_invalid_serializer_type_0c                 C   sR   |  t}tdddgd W d    n1 sw   Y  | dt|j d S )Nr'   ra   r   r,   r   r   r   r   r   r   test_invalid_serializer_type_1o  s   	z6InvalidTransportConfigs.test_invalid_serializer_type_1c                 C   P   |  t}tddigd W d    n1 sw   Y  | dt|j d S )Nr)   badr,   zInvalid transport typer   r   r   r   r   test_invalid_type_key{     z-InvalidTransportConfigs.test_invalid_type_keyc                 C   sL   |  t}tdgd W d    n1 sw   Y  | dt|j d S )Nr   r,   zinvalid WebSocket URLr   r   r   r   r   test_invalid_type  s   z)InvalidTransportConfigs.test_invalid_typec                 C   r   )Nr)   r&   r,   zTransport requires 'url'r   r   r   r   r   test_no_url  r   z#InvalidTransportConfigs.test_no_urlc                 C   sZ   |  t}tdd ddddgd W d    n1 sw   Y  | dt|j d S )	Nc                 S   r   r   r   rsr   r   r   rt     ru   zDInvalidTransportConfigs.test_endpoint_bogus_object.<locals>.<lambda>r&   ws://example.com/ws)notarQ   r(   mainr-   z 'endpoint' configuration must ber   r   r   r   r   test_endpoint_bogus_object  s   z2InvalidTransportConfigs.test_endpoint_bogus_objectc                 C   s&   t dd ddddddd	gd
 d S )Nc                 S   r   r   r   r   r   r   r   rt     ru   z=InvalidTransportConfigs.test_endpoint_valid.<locals>.<lambda>r&   r   tcpz1.2.3.44321)r)   rm   rn   r(   r   r   r   r   r   r   test_endpoint_valid  s   
z+InvalidTransportConfigs.test_endpoint_validN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   6  s    	
	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   r   <module>   s(       