U
    •uÄcÔA  ã                   @   sÚ   d dl Z d dlmZmZ e j dd¡rÖd 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 )é    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   s   d S ©N© ©Úselfr   r   úpc:\users\psant\downloads\hotstarbackend\school\venv\Lib\site-packages\autobahn\twisted\test\test_tx_component.pyÚsetUp,   s    zConnectionTests.setUpztxaio.sleepN)Z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 5 Q R X 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)r5   éd   zsome old reason)ÚbuildProtocolr   ÚmakeConnectionÚautobahn.websocket.protocolr,   Úbase64r.   Úhashlibr0   Úwebsocket_keyÚ	_WS_MAGICÚdigestÚdataÚprocessHandshakeÚautobahn.wampr4   ZRoleBrokerFeaturesr   Údictr   Ú	serializeÚ	onMessager   ÚonCloser   )ÚfactoryÚkwÚprotoÚ	transportr,   r.   r0   Úkeyr4   ÚfeaturesÚmsgÚ
serializerr?   Ú	is_binaryr   r   r   ÚconnectB   sD    

üüÿ÷z8ConnectionTests.test_successful_connect.<locals>.connect©Úreactoré   é  )r   r   r   r   ÚonrO   r   r   ÚstartÚ
assertTrueÚlenÚadvance)r   Ú
fake_sleepr'   r!   Ú	componentrO   rQ   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  5 Q R £ S Q R X d S )Nr"   r#   ú10.0.0.0éèý  )ÚhostÚportr   )r%   r&   r'   ÚproxyÚmax_retriesc                 S   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   ©rF   rG   r   r   r   rO   Ž   s    z>ConnectionTests.test_successful_proxy_connect.<locals>.connectc                    s.   ˆ  d| ¡ ˆ  |d¡ ˆ d ¡ ˆ  |j¡S )Nr\   r]   )ÚassertEqualÚcallbackrO   Z_wrappedFactory)r^   r_   rF   rG   ©r'   Úgot_proxy_connectr   r   r   Ú_tcpš   s    
z;ConnectionTests.test_successful_proxy_connect.<locals>._tcprP   c                    s   ˆ j sˆ  | ¡ d S r   )Úcalledri   )Úx)rk   r   r   Údone¤   s    z;ConnectionTests.test_successful_proxy_connect.<locals>.donerS   )r   r   r   r   Zon_joinrO   r   r   Z
connectTCPr   rU   ZaddCallbacksrX   )	r   rY   rZ   r!   rO   rQ   rl   Údro   r   rj   r   Útest_successful_proxy_connectx   s6    
þø
õ


z-ConnectionTests.test_successful_proxy_connectc              	   c   sh   t ƒ }t|tƒ tdd|dœd�}dd„ }||_tƒ }t|ƒ�  |j|d�}| ¡  |V  W 5 Q R X 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   rg   r   r   r   rO   ½   s    z,ConnectionTests.test_cancel.<locals>.connectrP   N)	r   r   r   r   rO   r   r   rU   Ústop)r   rY   r'   rZ   rO   rQ   rp   r   r   r   Útest_cancel¬   s    
ýÿ
zConnectionTests.test_cancelc              	   #   sª   t ƒ }t|tƒ tdd|ddddœd�}tƒ ‰ tˆ ƒ�j ‡ fdd„}||_|jˆ d	�}|jd
k	sdt	‚|j
jrpt	‚| ¡ }|j
d
ks†t	‚|js�t	‚|V  |V  W 5 Q R X 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'   ra   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)rF   rG   rp   rP   r   r   rO   æ   s    z:ConnectionTests.test_cancel_while_waiting.<locals>.connectrP   N)r   r   r   r   r   r   rO   rU   Z_delay_fÚAssertionErrorZ_done_frm   rr   )r   r'   rZ   rO   Zd0Úd1r   rP   r   Útest_cancel_while_waitingË   s.    
úÿ

z)ConnectionTests.test_cancel_while_waitingc              
   c   s˜   t ƒ }t|tƒ tdd|dœdd„ d�}dd„ }||_tƒ }t|ƒ�8 |  t¡�"}|j	|d	�}| 
d
¡ |V  W 5 Q R X W 5 Q R X |  dt|jƒ¡ d S )Nr"   r#   r$   c                 S   s   dS rb   r   )Úer   r   r   rd     re   z=ConnectionTests.test_connect_no_auth_method.<locals>.<lambda>rf   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-   r/   r1   r2   r3   r5   )Z
subscriberÚ	anonymous)ZrolesZauthmethodszwamp.error.no_auth_method)ÚreasonFr6   )r7   r8   r   r9   r,   r:   r.   r;   r0   r<   r=   r>   r?   r@   rA   r4   ZRoleSubscriberFeaturesr	   rB   r   rC   rD   r
   rE   r   )rF   rG   rH   r,   r.   r0   rJ   r4   ZsubrolerL   rM   r?   rN   r   r   r   rO     s.    
üüÿ
z<ConnectionTests.test_connect_no_auth_method.<locals>.connectrP   rS   zExhausted all transport)r   r   r   r   rO   r   r   ÚassertRaisesrv   rU   rX   ÚassertInÚstrÚ	exception)r   rY   r'   rZ   rO   rQ   Úctxrp   r   r   r   Útest_connect_no_auth_method÷   s*    
ýú	

þz+ConnectionTests.test_connect_no_auth_method)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r[   rq   rs   ry   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   s<   |   t¡�}ttdd�d� W 5 Q R X |  dt|jƒ¡ d S )NÚbar©Úfoor(   z'foo' is not©r}   Ú
ValueErrorr   rB   r~   r   r€   ©r   r�   r   r   r   Útest_invalid_key8  s    ÿÿz(InvalidTransportConfigs.test_invalid_keyc              	   C   sH   |   t¡�"}ttddd�tdd�gd� W 5 Q R X |  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   s@   |   t¡�}tddgdœgd� W 5 Q R X |  dt|jƒ¡ d S )Nr#   Úquux)r&   rM   r(   zonly for rawsocket©r}   r‹   r   r~   r   r€   rŒ   r   r   r   Útest_invalid_serializer_keyK  s    þÿÿz3InvalidTransportConfigs.test_invalid_serializer_keyc              	   C   s@   |   t¡�}tddgdœgd� W 5 Q R X |  dt|jƒ¡ d S )Nr#   r�   ©r&   Zserializersr(   zInvalid serializerr�   rŒ   r   r   r   Útest_invalid_serializerW  s    þÿÿz/InvalidTransportConfigs.test_invalid_serializerc              	   C   sB   |   t¡�}tdddgdœgd� W 5 Q R X |  dt|jƒ¡ d S )Nr#   rR   é   r’   r(   úmust be a listr�   rŒ   r   r   r   Útest_invalid_serializer_type_0c  s    þÿÿz6InvalidTransportConfigs.test_invalid_serializer_type_0c              	   C   s>   |   t¡�}tdddœgd� W 5 Q R X |  dt|jƒ¡ d S )Nr#   rR   r’   r(   r•   r�   rŒ   r   r   r   Útest_invalid_serializer_type_1o  s    þÿÿz6InvalidTransportConfigs.test_invalid_serializer_type_1c              	   C   s<   |   t¡�}tddigd� W 5 Q R X |  dt|jƒ¡ d S )Nr%   Úbadr(   zInvalid transport typer�   rŒ   r   r   r   Útest_invalid_type_key{  s     ÿÿÿz-InvalidTransportConfigs.test_invalid_type_keyc              	   C   s8   |   t¡�}tdgd� W 5 Q R X |  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   s<   |   t¡�}tddigd� W 5 Q R X |  dt|jƒ¡ d S )Nr%   r"   r(   zTransport requires 'url'r�   rŒ   r   r   r   Útest_no_url�  s     ÿÿÿz#InvalidTransportConfigs.test_no_urlc              	   C   sF   |   t¡� }tdd„ ddddœgd� W 5 Q R X |  dt|jƒ¡ d S )	Nc                 S   s   d S r   r   ©ÚrÚsr   r   r   rd   �  re   zDInvalidTransportConfigs.test_endpoint_bogus_object.<locals>.<lambda>r"   úws://example.com/ws)ÚnotÚarB   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   s   d S r   r   rœ   r   r   r   rd   ª  re   z=InvalidTransportConfigs.test_endpoint_valid.<locals>.<lambda>r"   rŸ   Ztcpz1.2.3.4Z4321)r%   r^   r_   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   ÚTestCaser   r†   r   r   r   r   Ú<module>   s      