U
    •uÄc'  ã                   @   sä   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dl	mZ d dl	mZ d dl	mZ d d	l	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e j dd¡ràG dd„ dejƒZdS )é    N)Úsha1)Ú	b64encode)ÚMock©ÚWebSocketServerProtocol©ÚWebSocketServerFactory)ÚWebSocketClientProtocol)ÚWebSocketClientFactory)ÚWebSocketProtocol)ÚConnectingRequest)ÚFakeTransport)ÚTransportDetailsc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚWebSocketClientProtocolTestsc                 C   s`   t ƒ }tƒ }t ¡ |_tƒ }t ¡ |_||_||_tƒ |_	| 
¡  |j|_d|_|| _|| _d S ©Né   )r   r
   ÚtxaioÚmake_loggerÚlogr	   ÚfactoryÚ	transportr   Z_transport_detailsÚ_connectionMadeÚ
STATE_OPENÚstateÚwebsocket_versionÚprotocol©ÚselfÚtÚfÚp© r!   úzc:\users\psant\downloads\hotstarbackend\school\venv38\Lib\site-packages\autobahn\websocket\test\test_websocket_protocol.pyÚsetUp/   s    

z"WebSocketClientProtocolTests.setUpc                 C   s6   | j j| j j| j j| j jfD ]}|d k	r| ¡  qd S ©N©r   ÚautoPingPendingCallZautoPingTimeoutCallÚopenHandshakeTimeoutCallZcloseHandshakeTimeoutCallÚcancel©r   Úcallr!   r!   r"   ÚtearDown@   s    üz%WebSocketClientProtocolTests.tearDownc                 C   s®   d| j _tƒ g| j _g | j _dd„ | j _d| j _tƒ | j _tƒ | j _tƒ | j _	| j  
tdddd�¡ | j jtj }d	tt|ƒ ¡ ƒ d
 | j _| j  ¡  |  | j jd k	¡ d S )Né   c                   S   s   d S r$   r!   r!   r!   r!   r"   Ú<lambda>N   ó    z=WebSocketClientProtocolTests.test_auto_ping.<locals>.<lambda>Ú000000000000000000000000zexample.coméP   z/ws)ÚhostÚportÚresourcesa   HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-Websocket-Accept: s   

)r   ÚautoPingIntervalr   Úwebsocket_protocolsÚwebsocket_extensionsÚ_onOpenÚ_wskeyZpeerZ
_onConnectZ_closeConnectionZ_actuallyStartHandshaker   Zwebsocket_keyr   Z	_WS_MAGICr   r   ÚdigestÚdataZprocessHandshakeÚ
assertTruer&   )r   Úkeyr!   r!   r"   Útest_auto_pingJ   s0    


ýÿýýÿ
z+WebSocketClientProtocolTests.test_auto_pingN)Ú__name__Ú
__module__Ú__qualname__r#   r+   r=   r!   r!   r!   r"   r   -   s   
r   c                   @   sh   e Zd 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 )ÚWebSocketServerProtocolTestszB
    Tests for autobahn.websocket.protocol.WebSocketProtocol.
    c                 C   sX   t ƒ }tƒ }t ¡ |_tƒ }t ¡ |_||_||_| ¡  |j	|_
d|_|| _|| _d S r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r"   r#   p   s    

z"WebSocketServerProtocolTests.setUpc                 C   s6   | j j| j j| j j| j jfD ]}|d k	r| ¡  qd S r$   r%   r)   r!   r!   r"   r+   €   s    üz%WebSocketServerProtocolTests.tearDownc                 C   sb   t ƒ }t dd�|_d| j_|g| j_g | j_dd„ | j_d| j_| j |¡ |  	| jj
d k	¡ d S )Nr,   )Zreturn_valuec                   S   s   d S r$   r!   r!   r!   r!   r"   r-   �   r.   z=WebSocketServerProtocolTests.test_auto_ping.<locals>.<lambda>r/   )r   Z_get_secondsr   r4   r5   r6   r7   r8   ZsucceedHandshaker;   r&   )r   Úprotor!   r!   r"   r=   Š   s    
z+WebSocketServerProtocolTests.test_auto_pingc                 C   s2   | j  ¡  |  | jjd¡ |  | j j| j j¡ dS )z9
        sendClose with no code or reason works.
        s   ˆ N©r   Ú	sendCloseÚassertEqualr   Ú_writtenr   ZSTATE_CLOSING©r   r!   r!   r"   Útest_sendClose_none–   s    
z0WebSocketServerProtocolTests.test_sendClose_nonec                 C   s@   | j jddd� |  | jjdd… d¡ |  | j j| j j¡ dS )z4
        sendClose with a str reason works.
        éè  úoh no©ÚcodeÚreasoné   Nó   èoh norC   rG   r!   r!   r"   Útest_sendClose_str_reason    s    z6WebSocketServerProtocolTests.test_sendClose_str_reasonc                 C   s@   | j jddd� |  | jjdd… d¡ |  | j j| j j¡ dS )z8
        sendClose with a unicode reason works.
        rI   rJ   rK   rN   NrO   rC   rG   r!   r!   r"   Útest_sendClose_unicode_reasonª   s    z:WebSocketServerProtocolTests.test_sendClose_unicode_reasonc                 C   s@   | j jddd� |  | jjdd… d¡ |  | j j| j j¡ dS )zD
        sendClose with a too-long reason will truncate it.
        rI   A¸  abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrK   rN   Ns}   èabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrC   rG   r!   r!   r"   Útest_sendClose_toolong´   s
    ÿz3WebSocketServerProtocolTests.test_sendClose_toolongc              	   C   s^   |   t¡�}| jjdd� W 5 Q R X |  dt|jƒ¡ |  | jj	d¡ |  | jj
| jj¡ dS )zX
        Trying to sendClose with a reason but no code will raise an Exception.
        Úabc)rM   zclose reason without close coder.   N©ÚassertRaisesÚ	Exceptionr   rD   ÚassertInÚstrÚ	exceptionrE   r   rF   r   r   ©r   Úer!   r!   r"   Ú"test_sendClose_reason_with_no_code¿   s
    z?WebSocketServerProtocolTests.test_sendClose_reason_with_no_codec              	   C   s^   |   t¡�}| jjdd� W 5 Q R X |  dt|jƒ¡ |  | jj	d¡ |  | jj
| jj¡ dS )zR
        Trying to sendClose with a non-int code will raise an Exception.
        Z134©rL   zinvalid typer.   NrT   rZ   r!   r!   r"   Ú test_sendClose_invalid_code_typeÌ   s
    z=WebSocketServerProtocolTests.test_sendClose_invalid_code_typec              	   C   s^   |   t¡�}| jjdd� W 5 Q R X |  dt|jƒ¡ |  | jj	d¡ |  | jj
| jj¡ dS )zX
        Trying to sendClose with a non-valid int code will raise an Exception.
        é
   r]   zinvalid close code 10r.   NrT   rZ   r!   r!   r"   Ú!test_sendClose_invalid_code_valueÙ   s
    z>WebSocketServerProtocolTests.test_sendClose_invalid_code_valuec                 C   s>   ddl m} | d d¡}|  t|ƒt¡ |  t|ƒdk¡ d S )Nr   )Ú_SERVER_STATUS_TEMPLATEz0.0.0)Úautobahn.websocket.protocolra   ÚformatrE   ÚtyperX   r;   Úlen)r   ra   Úsr!   r!   r"   Ú'test_interpolate_server_status_templateæ   s    zDWebSocketServerProtocolTests.test_interpolate_server_status_templateN)r>   r?   r@   Ú__doc__r#   r+   r=   rH   rP   rQ   rR   r\   r^   r`   rg   r!   r!   r!   r"   rA   l   s   



rA   ZUSE_TWISTEDFc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTwistedProtocolTestszy
        Tests which require a specific framework's protocol class to work
        (in this case, using Twisted)
        c                 C   s\   ddl m} ddl m} tƒ }|ƒ }|ƒ }||_||_| ¡  |j|_d|_	|| _
|| _d S )Nr   r   r   r   )Zautobahn.twisted.websocketr   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r    r!   r!   r"   r#   ó   s    zTwistedProtocolTests.setUpc                 C   s6   | j j| j j| j j| j jfD ]}|d k	r| ¡  qd S r$   r%   r)   r!   r!   r"   r+     s    üzTwistedProtocolTests.tearDownc                 C   s,   | j  t tdƒ¡¡ |  | j jdk¡ dS )zs
            If we lose our connection before openHandshakeTimeout fires, it is
            cleaned up
            ZtestingN)r   Z_connectionLostr   Zcreate_failureÚRuntimeErrorr;   r'   rG   r!   r!   r"   Útest_loseConnection  s    z(TwistedProtocolTests.test_loseConnectionc                 C   s   | j  ¡  d S r$   )r   ZsendServerStatusrG   r!   r!   r"   Útest_send_server_status  s    z,TwistedProtocolTests.test_send_server_statusN)r>   r?   r@   rh   r#   r+   rk   rl   r!   r!   r!   r"   ri   î   s
   
ri   )ÚosÚunittestZhashlibr   Úbase64r   Zunittest.mockr   r   rb   r   r   r	   r
   r   Zautobahn.websocket.typesr   Zautobahn.testutilr   Zautobahn.wamp.typesr   ÚTestCaser   rA   ÚenvironÚgetri   r!   r!   r!   r"   Ú<module>   s$   ? 