o
    @»Bi3%  ã                   @   sì   d dl mZmZ 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	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Zd dlmZ G dd„ dejƒZG dd„ dejƒZej dd¡rtG dd„ dejƒZdS dS )é    )Úabsolute_importÚprint_functionN)Úsha1)Ú	b64encode©ÚWebSocketServerProtocol©ÚWebSocketServerFactory)ÚWebSocketClientProtocol)ÚWebSocketClientFactory)ÚWebSocketProtocol)ÚConnectingRequest)ÚFakeTransport)ÚMockc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚWebSocketClientProtocolTestsc                 C   sL   t ƒ }tƒ }tƒ }||_||_tƒ |_| ¡  |j|_	d|_
|| _|| _d S ©Né   )r   r   r
   ÚfactoryÚ	transportr   Ú_create_transport_detailsÚ_connectionMadeÚ
STATE_OPENÚstateÚwebsocket_versionÚprotocol©ÚselfÚtÚfÚp© r    úe/var/www/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/websocket/test/test_protocol.pyÚsetUp1   s   
z"WebSocketClientProtocolTests.setUpc                 C   ó6   | j j| j j| j j| j jfD ]
}|d ur| ¡  qd S ©N©r   ÚautoPingPendingCallÚautoPingTimeoutCallÚopenHandshakeTimeoutCallÚ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Ú_wskeyÚpeerÚ
_onConnectÚ_closeConnectionÚ_actuallyStartHandshaker   Úwebsocket_keyr   Ú	_WS_MAGICr   r   ÚdigestÚdataÚprocessHandshakeÚ
assertTruer&   )r   Úkeyr    r    r!   Útest_auto_pingJ   s0   


ýÿýýÿ
z+WebSocketClientProtocolTests.test_auto_pingN)Ú__name__Ú
__module__Ú__qualname__r"   r-   rH   r    r    r    r!   r   /   s    
r   c                   @   s`   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S )ÚWebSocketServerProtocolTestszB
    Tests for autobahn.websocket.protocol.WebSocketProtocol.
    c                 C   sD   t ƒ }tƒ }tƒ }||_||_| ¡  |j|_d|_|| _	|| _d S 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   r0   r$   r    r    r    r    r!   r1   Ž   r2   z=WebSocketServerProtocolTests.test_auto_ping.<locals>.<lambda>r3   )r   Ú_get_secondsr   r8   r9   r:   r;   r<   ÚsucceedHandshakerF   r&   )r   Úprotor    r    r!   rH   ˆ   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   Ú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 norQ   rV   r    r    r!   Útest_sendClose_str_reasonž   ó   z6WebSocketServerProtocolTests.test_sendClose_str_reasonc                 C   rX   )z8
        sendClose with a unicode reason works.
        rY   rZ   r[   r^   Nr_   rQ   rV   r    r    r!   Útest_sendClose_unicode_reason¨   ra   z:WebSocketServerProtocolTests.test_sendClose_unicode_reasonc                 C   rX   )zD
        sendClose with a too-long reason will truncate it.
        rY   Á¸  abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcr[   r^   Ns}   èabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrQ   rV   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)r]   Nzclose reason without close codeó    ©ÚassertRaisesÚ	Exceptionr   rR   ÚassertInÚstrÚ	exceptionrS   r   rT   r   r   ©r   Úer    r    r!   Ú"test_sendClose_reason_with_no_code½   ó   ÿz?WebSocketServerProtocolTests.test_sendClose_reason_with_no_codec                 C   re   )zR
        Trying to sendClose with a non-int code will raise an Exception.
        Ú134©r\   Nzinvalid typerg   rh   rn   r    r    r!   Ú test_sendClose_invalid_code_typeÊ   rq   z=WebSocketServerProtocolTests.test_sendClose_invalid_code_typec                 C   re   )zX
        Trying to sendClose with a non-valid int code will raise an Exception.
        é
   rs   Nzinvalid close code 10rg   rh   rn   r    r    r!   Ú!test_sendClose_invalid_code_value×   rq   z>WebSocketServerProtocolTests.test_sendClose_invalid_code_valueN)rI   rJ   rK   Ú__doc__r"   r-   rH   rW   r`   rb   rd   rp   rt   rv   r    r    r    r!   rL   l   s    



rL   ÚUSE_TWISTEDFc                   @   s(   e Zd Z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   )Ú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
            ÚtestingN)r   Ú_connectionLostÚtxaioÚcreate_failureÚRuntimeErrorrF   r(   rV   r    r    r!   Útest_loseConnection  s   z(TwistedProtocolTests.test_loseConnectionN)rI   rJ   rK   rw   r"   r-   r€   r    r    r    r!   ry   æ   s
    
ry   )Ú
__future__r   r   ÚosÚunittestÚhashlibr   Úbase64r   Úautobahn.websocket.protocolr   r	   r
   r   r   Úautobahn.websocket.typesr   Úautobahn.testr   r}   Úmockr   ÚTestCaser   rL   ÚenvironÚgetry   r    r    r    r!   Ú<module>   s&   =yÿ