o
    ¼>h'  ã                   @   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   Ú_transport_detailsÚ_connectionMadeÚ
STATE_OPENÚstateÚwebsocket_versionÚprotocol©ÚselfÚtÚfÚp© r"   ú/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/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   Ú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/   rJ   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/   €   r0   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 )Nr1   )Úreturn_valuec                   S   r2   r&   r"   r"   r"   r"   r#   r3      r4   z=WebSocketServerProtocolTests.test_auto_ping.<locals>.<lambda>r5   )r   Ú_get_secondsr   r:   r;   r<   r=   r>   ÚsucceedHandshakerH   r(   )r   Úprotor"   r"   r#   rJ   Š   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 norS   rX   r"   r"   r#   Útest_sendClose_str_reason    ó   z6WebSocketServerProtocolTests.test_sendClose_str_reasonc                 C   rZ   )z8
        sendClose with a unicode reason works.
        r[   r\   r]   r`   Nra   rS   rX   r"   r"   r#   Útest_sendClose_unicode_reasonª   rc   z:WebSocketServerProtocolTests.test_sendClose_unicode_reasonc                 C   rZ   )zD
        sendClose with a too-long reason will truncate it.
        r[   Á¸  abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcr]   r`   Ns}   èabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcrS   rX   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   rT   ÚassertInÚstrÚ	exceptionrU   r   rV   r   r   ©r   Úer"   r"   r#   Ú"test_sendClose_reason_with_no_code¿   ó   ÿz?WebSocketServerProtocolTests.test_sendClose_reason_with_no_codec                 C   rg   )zR
        Trying to sendClose with a non-int code will raise an Exception.
        Ú134©r^   Nzinvalid typeri   rj   rp   r"   r"   r#   Ú test_sendClose_invalid_code_typeÌ   rs   z=WebSocketServerProtocolTests.test_sendClose_invalid_code_typec                 C   rg   )zX
        Trying to sendClose with a non-valid int code will raise an Exception.
        é
   ru   Nzinvalid close code 10ri   rj   rp   r"   r"   r#   Ú!test_sendClose_invalid_code_valueÙ   rs   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.protocolry   ÚformatrU   Útypern   rH   Úlen)r   ry   Úsr"   r"   r#   Ú'test_interpolate_server_status_templateæ   s   zDWebSocketServerProtocolTests.test_interpolate_server_status_templateN)rK   rL   rM   Ú__doc__r$   r/   rJ   rY   rb   rd   rf   rr   rv   rx   r   r"   r"   r"   r#   rN   l   s    



rN   Ú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   )Ú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/     r0   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   Ú_connectionLostr   Úcreate_failureÚRuntimeErrorrH   r*   rX   r"   r"   r#   Útest_loseConnection  s   z(TwistedProtocolTests.test_loseConnectionc                 C   s   | j  ¡  d S r&   )r   ÚsendServerStatusrX   r"   r"   r#   Útest_send_server_status  s   z,TwistedProtocolTests.test_send_server_statusN)rK   rL   rM   r€   r$   r/   rˆ   rŠ   r"   r"   r"   r#   r‚   î   s    
r‚   )ÚosÚunittestÚhashlibr   Úbase64r   Úunittest.mockr   r   rz   r   r   r	   r
   r   Úautobahn.websocket.typesr   Úautobahn.testutilr   Úautobahn.wamp.typesr   ÚTestCaser   rN   ÚenvironÚgetr‚   r"   r"   r"   r#   Ú<module>   s(   ? ÿ