o
    @Bi7                     @   s$  d dl mZmZ d dlZd dlZejddrd 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mZ d dlmZmZ d dlmZ d dlmZ eddd ZdZ dZ!G dd dej"Z#G dd dej"Z$G dd dej"Z%dS dS )    )absolute_importprint_functionNUSE_TWISTEDF)unittest)IPv4Address)Clock)PY3)WebSocketServerProtocol)WebSocketServerFactory)WebSocketClientProtocol)WebSocketClientFactory)PerMessageDeflate)FakeTransport)	MagicMockpatch)replace_loop)	b64decodezbase64.b64encodec                    s   d| _ tdgd}t|_|  |tddd}t |_|	  t
|_|  g   fdd}||_|jdi | d	 S )a[  
        Kind-of hack-y; maybe better to re-factor the Protocol to have a
        frame-encoder method-call? Anyway, makes a throwaway protocol
        encode a frame for us, collects the .sendData call and returns
        the data that would have gone out. Accepts all the kwargs that
        WebSocketClientProtocol.sendFrame() accepts.
        s   QIatSt9QkZPyS4QQfdufO8TgkL0=wamp.2.json	protocolsTCPz	127.0.0.9  c                    s     |  d S N)append)dargsdata f/var/www/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/websocket/test/test_websocket.pycollectK   s   z$create_client_frame.<locals>.collect    Nr   )return_valuer   r   protocoldoStartbuildProtocolr   r   	transportconnectionMademock_handshake_serverr   processHandshakesendData	sendFramejoin)b64patchkwargsfactoryprotor    r   r   r   create_client_frame2   s   
r1   s
  GET / HTTP/1.1
User-Agent: AutobahnPython/0.10.2
Host: localhost:80
Upgrade: WebSocket
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: 6Jid6RgXpH0RVegaNSs/4g==
Sec-WebSocket-Protocol: wamp.2.json
Sec-WebSocket-Version: 13

s  HTTP/1.1 101 Switching Protocols
Server: AutobahnPython/0.10.2
X-Powered-By: AutobahnPython/0.10.2
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Protocol: wamp.2.json
Sec-WebSocket-Accept: QIatSt9QkZPyS4QQfdufO8TgkL0=

~[1,"crossbar",{"roles":{"subscriber":{"features":{"publisher_identification":true,"pattern_based_subscription":true,"subscription_revocation":true}},"publisher":{"features":{"publisher_identification":true,"publisher_exclusion":true,"subscriber_blackwhite_listing":true}},"caller":{"features":{"caller_identification":true,"progressive_call_results":true}},"callee":{"features":{"progressive_call_results":true,"pattern_based_registration":true,"registration_revocation":true,"shared_registration":true,"caller_identification":true}}}}]c                   @   s   e Zd Zdd Zdd ZdS )TestDeflatec              	   C   s<   t dddddddd}d}|  ||}| |d d S )NF      
   )	is_serverserver_no_context_takeoverclient_no_context_takeoverserver_max_window_bitsclient_max_window_bits	mem_levelmax_message_size   `Q0
FP @s
   xxxxxxxxxxr   start_decompress_messagedecompress_message_dataassertEqualselfdecodercompressed_datar   r   r   r   test_max_sizeY   s   
zTestDeflate.test_max_sizec                 C   s:   t dddddd d}d}|  ||}| |d d S )NFr3   )r6   r7   r8   r9   r:   r;   r=   s  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr>   rB   r   r   r   test_no_max_sizen   s   

zTestDeflate.test_no_max_sizeN)__name__
__module____qualname__rF   rG   r   r   r   r   r2   W   s    r2   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TestClientc                 C   V   t dgd| _t| j_| j  | jtddd| _t | _	| j	| j_	| j
  d S Nr   r   r   z	127.0.0.1r   )r   r/   r   r#   r$   r%   r   r0   r   r&   r'   rC   r   r   r   setUp      

zTestClient.setUpc                 C   *   | j jr
| j j  | j  | `| ` d S r   r0   openHandshakeTimeoutCallcancelr/   doStoprN   r   r   r   tearDown   
   
zTestClient.tearDownc                 C   s8   d| j _| j j| j _d| j _t | j _| j dd  d S )NT     )r0   echoCloseCodeReason
STATE_OPENstatewebsocket_versionr   sendCloseFrameonCloseFramerN   r   r   r   test_missing_reason_raw   s
   
z"TestClient.test_missing_reason_rawc                 C   s  	 td| j_t| j_| j  | 	| jj
tj | | jjdk tt R}| j  | jdd | 	t|jd | 	|jd j| jj | 	|jd  | jj || jjd  | | jj  | 	| jj
tj W d   dS 1 s|w   Y  dS )zR
            make a delayed call to drop the connection (client-side)
            Fz6Jid6RgXpH0RVegaNSs/4g==r   rY   s
   raw reasonrX   N)printr0   r/   _logr   websocket_keyr(   r   r)   rA   r\   r	   r[   
assertTrueserverConnectionDropTimeoutr   r   r^   r_   lencallsfunconServerConnectionDropTimeoutgetTimeadvancecloseHandshakeTimeoutr&   abort_calledSTATE_CLOSEDrC   reactorr   r   r   test_unclean_timeout_client   s    

"z&TestClient.test_unclean_timeout_clientN)rH   rI   rJ   rO   rV   r`   rq   r   r   r   r   rK      s
    

rK   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestPingc                 C   rL   rM   )r
   r/   r	   r#   r$   r%   r   r0   r   r&   r'   rN   r   r   r   rO      rP   zTestPing.setUpc                 C   rQ   r   rR   rN   r   r   r   rV      rW   zTestPing.tearDownc                 C   s   t | j_| j  | | jjtjk tt	 ?}| j
  | t|jd || jjd  | dt| jjjd  | | jjjj | | jjtj W d   dS 1 sZw   Y  dS )zD
            make a delayed call to drop the connection
            rX   zcall.abortConnection()N)mock_handshake_clientr0   r   r)   rd   r\   r	   r[   r   r   r^   rA   rf   rg   rk   rl   strr&   method_callsabortConnectioncalledrn   ro   r   r   r   test_unclean_timeout   s   

"zTestPing.test_unclean_timeoutc                 C   s&  d| j _d| j _tt |}t| j _| j   | | j j	t
jk | dt|j |d | | jjj | jjjd d }trJt|d g}n|d }td|\}|d@ }| d| | dt|j | | j j	| j j |d | | j j	| j j W d	   d	S 1 sw   Y  d	S )
z>
            autoping and autoping-timeout timing
                  rX   r   Bi	      N)r0   autoPingIntervalautoPingTimeoutr   r   rt   r   r)   rd   r\   r	   r[   rA   rf   rg   rk   r&   writerx   	call_argsr   bytesstructunpackassertNotEqualrn   )rC   rp   r   _dataopcoder   r   r   test_auto_pingpong_timeout   s*   


"z#TestPing.test_auto_pingpong_timeoutc                 C   s   d| j _d| j _tt T}t| j _| j   | | j j	t
jk | dt|j |d | dt|j |jd }td| j jd}|| j _| j   | j   | |j W d   dS 1 sdw   Y  dS )zF
            auto-ping with correct reply cancels timeout
            rz   r{   rX   r   r5   )r   payloadN)r0   r   r   r   r   rt   r   r)   rd   r\   r	   r[   rA   rf   rg   rk   r1   autoPingPendingprocessData	cancelled)rC   rp   timeout_callframer   r   r   test_auto_ping_got_pong   s    




"z TestPing.test_auto_ping_got_pongN)rH   rI   rJ   rO   rV   ry   r   r   r   r   r   r   rr      s    
 .rr   )&
__future__r   r   osr   environgettwisted.trialr   twisted.internet.addressr   twisted.internet.taskr   sixr   autobahn.twisted.websocketr	   r
   r   r   #autobahn.websocket.compress_deflater   autobahn.testr   mockr   r   txaio.testutilr   base64r   r1   rt   r(   TestCaser2   rK   rr   r   r   r   r   <module>   s4   
 )? 