o
    èó·iÔA  ã                   @   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ÚpatchZ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   úmC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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©Z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)	Zpublisher_identificationZpattern_based_subscriptionZsession_meta_apiZsubscription_meta_apiZsubscriber_blackwhite_listingZpublisher_exclusionZsubscription_revocationZpayload_transparencyZpayload_encryption_cryptoboxi@â )ZbrokerÚrealm)r7   éd   zsome old reason)ÚbuildProtocolr   ÚmakeConnectionÚautobahn.websocket.protocolr.   Úbase64r0   Úhashlibr2   Úwebsocket_keyÚ	_WS_MAGICÚdigestÚdataÚprocessHandshakeÚautobahn.wampr6   ZRoleBrokerFeaturesr   Údictr   Ú	serializeÚ	onMessager   ÚonCloser   )ÚfactoryÚkwÚprotoÚ	transportr.   r0   r2   Úkeyr6   ÚfeaturesÚmsgÚ
serializerrA   Ú	is_binaryr   r   r   ÚconnectB   sD   

üüÿ÷z8ConnectionTests.test_successful_connect.<locals>.connect©Úreactoré   é  )r   r   r   r   ÚonrQ   r   r   ÚstartÚ
assertTrueÚlenÚadvance)r   Ú
fake_sleepr)   r#   Ú	componentrQ   rS   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+   Z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   ©rH   rI   r   r   r   rQ   Ž   s   
z>ConnectionTests.test_successful_proxy_connect.<locals>.connectc                    s.   ˆ  d| ¡ ˆ  |d¡ ˆ d ¡ ˆ  |j¡S )Nr^   r_   )ÚassertEqualÚcallbackrQ   Z_wrappedFactory)r`   ra   rH   rI   ©r)   Úgot_proxy_connectr   r   r   Ú_tcpš   s   
z;ConnectionTests.test_successful_proxy_connect.<locals>._tcprR   c                    s   ˆ j s
ˆ  | ¡ d S d S r   )Úcalledrl   )Úx)rn   r   r   Údone¤   s   ÿz;ConnectionTests.test_successful_proxy_connect.<locals>.donerU   )r   r   r   r   Zon_joinrQ   r   r   Z
connectTCPr   rW   ZaddCallbacksrZ   )	r   r[   r\   r#   rQ   rS   ro   Údrr   r   rm   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   rj   r   r   r   rQ   ½   s   z,ConnectionTests.test_cancel.<locals>.connectrR   N)	r   r   r   r   rQ   r   r   rW   Ústop)r   r[   r)   r\   rQ   rS   rs   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)   rc   Zmax_retry_delayZinitial_retry_delayr*   c                    s    t ƒ }ˆ  d| tdƒ¡¡ |S )Né
   zno connect for yo)r   Z	callLaterZerrbackÚRuntimeError)rH   rI   rs   rR   r   r   rQ   æ   s   z:ConnectionTests.test_cancel_while_waiting.<locals>.connectrR   N)r   r   r   r   r   r   rQ   rW   Z_delay_fZ_done_frp   ru   )r   r)   r\   rQ   Zd0Zd1r   rR   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   rd   re   r   )Úer   r   r   rg     rh   z=ConnectionTests.test_connect_no_auth_method.<locals>.<lambda>ri   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 )NZboomr   r-   r/   r1   r3   r4   r5   r7   )Ú
subscriberZ	anonymous)ZrolesZauthmethodszwamp.error.no_auth_method)ÚreasonFr8   )r9   r:   r   r;   r.   r<   r0   r=   r2   r>   r?   r@   rA   rB   rC   r6   ZRoleSubscriberFeaturesr	   rD   r   rE   rF   r
   rG   r   )rH   rI   rJ   r.   r0   r2   rL   r6   ZsubrolerN   rO   rA   rP   r   r   r   rQ     s.   
üüÿ
z<ConnectionTests.test_connect_no_auth_method.<locals>.connectrR   rU   zExhausted all transport)r   r   r   r   rQ   r   r   ÚassertRaisesry   rW   rZ   ÚassertInÚstrÚ	exception)r   r[   r)   r\   rQ   rS   Úctxrs   r   r   r   Útest_connect_no_auth_method÷   s2   €
ýú	

ü€ÿþz+ConnectionTests.test_connect_no_auth_method)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r]   rt   rv   rz   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   rD   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(   rO   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(   Z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%   rT   é   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%   rT   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   rg   �  rh   zDInvalidTransportConfigs.test_endpoint_bogus_object.<locals>.<lambda>r$   úws://example.com/ws)ÚnotÚarD   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   rg   ª  rh   z=InvalidTransportConfigs.test_endpoint_valid.<locals>.<lambda>r$   r¤   Ztcpz1.2.3.4Z4321)r'   r`   ra   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‡   )"ÚosZunittest.mockr   r   ÚenvironÚgetZautobahn.twisted.componentr   Zzope.interfacer   Zautobahn.wamp.messager   r   r	   r
   Zautobahn.wamp.serializerr   Zautobahn.testutilr   Ztwisted.internet.interfacesr   Ztwisted.internet.deferr   r   r   Ztwisted.internet.taskr   Ztwisted.trialr   Ztxaio.testutilr   ZTestCaser   r‡   r   r   r   r   Ú<module>   s(      � �æ