o
    èó·i'  ã                   @   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¡rrG dd„ dejƒZdS 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!   úuC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\autobahn/websocket/test/test_websocket_protocol.pyÚsetUp/   s   


z"WebSocketClientProtocolTests.setUpc                 C   ó6   | j j| j j| j j| j jfD ]
}|d ur| ¡  qd S ©N©r   ÚautoPingPendingCallZautoPingTimeoutCallÚopenHandshakeTimeoutCallZcloseHandshakeTimeoutCallÚcancel©r   Úcallr!   r!   r"   ÚtearDown@   ó   ü€ù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 u¡ d S )Né   c                   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   r$   r%   r&   r*   r!   r!   r"   r,   €   r-   z%WebSocketServerProtocolTests.tearDownc                 C   sb   t ƒ }t dd�|_d| j_|g| j_g | j_dd„ | j_d| j_| j |¡ |  	| jj
d u¡ d S )Nr.   )Úreturn_valuec                   S   r/   r%   r!   r!   r!   r!   r"   r0   �   r1   z=WebSocketServerProtocolTests.test_auto_ping.<locals>.<lambda>r2   )r   Z_get_secondsr   r7   r8   r9   r:   r;   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   ó@   | 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 norG   rK   r!   r!   r"   Útest_sendClose_str_reason    ó   z6WebSocketServerProtocolTests.test_sendClose_str_reasonc                 C   rM   )z8
        sendClose with a unicode reason works.
        rN   rO   rP   rS   NrT   rG   rK   r!   r!   r"   Útest_sendClose_unicode_reasonª   rV   z:WebSocketServerProtocolTests.test_sendClose_unicode_reasonc                 C   rM   )zD
        sendClose with a too-long reason will truncate it.
        rN   A¸  abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrP   rS   Ns}   èabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrG   rK   r!   r!   r"   Útest_sendClose_toolong´   s
   ÿz3WebSocketServerProtocolTests.test_sendClose_toolongc                 C   ór   |   t¡�}| jjdd� W d  ƒ n1 sw   Y  |  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)rR   Nzclose reason without close codeó    ©ÚassertRaisesÚ	Exceptionr   rH   ZassertInÚstrÚ	exceptionrI   r   rJ   r   r   ©r   Úer!   r!   r"   Ú"test_sendClose_reason_with_no_code¿   ó   ÿz?WebSocketServerProtocolTests.test_sendClose_reason_with_no_codec                 C   rY   )zR
        Trying to sendClose with a non-int code will raise an Exception.
        Z134©rQ   Nzinvalid typer[   r\   ra   r!   r!   r"   Ú test_sendClose_invalid_code_typeÌ   rd   z=WebSocketServerProtocolTests.test_sendClose_invalid_code_typec                 C   rY   )zX
        Trying to sendClose with a non-valid int code will raise an Exception.
        é
   re   Nzinvalid close code 10r[   r\   ra   r!   r!   r"   Ú!test_sendClose_invalid_code_valueÙ   rd   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.protocolri   ÚformatrI   Útyper_   r>   Úlen)r   ri   Úsr!   r!   r"   Ú'test_interpolate_server_status_templateæ   s   zDWebSocketServerProtocolTests.test_interpolate_server_status_templateN)rA   rB   rC   Ú__doc__r#   r,   r@   rL   rU   rW   rX   rc   rf   rh   ro   r!   r!   r!   r"   rD   l   s    



rD   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   r$   r%   r&   r*   r!   r!   r"   r,     r-   zTwistedProtocolTests.tearDownc                 C   s,   | j  t tdƒ¡¡ |  | j jdu ¡ 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(   rK   r!   r!   r"   Útest_loseConnection  s   z(TwistedProtocolTests.test_loseConnectionc                 C   s   | j  ¡  d S r%   )r   ZsendServerStatusrK   r!   r!   r"   Útest_send_server_status  s   z,TwistedProtocolTests.test_send_server_statusN)rA   rB   rC   rp   r#   r,   rs   rt   r!   r!   r!   r"   rq   î   s    
rq   )ÚosZunittestÚhashlibr   Úbase64r   Zunittest.mockr   r   rj   r   r   r	   r
   r   Zautobahn.websocket.typesr   Zautobahn.testutilr   Zautobahn.wamp.typesr   ZTestCaser   rD   ÚenvironÚgetrq   r!   r!   r!   r"   Ú<module>   s(   ? ÿ