
    Zi4                         d dl Z d dlZd dlmZmZmZ d dlZd dlZd dlZd dl	m
Z
mZmZmZ 	  G d d          Z G d d          Z G d d	          Z G d
 dej                  Zedk    r ej                     dS dS )    N)Mockpatch	MagicMock)
DispatcherDispatcherBaseSSLDispatcherWrappedDispatcherc                       e Zd ZdZd ZdS )MockAppzMock WebSocketApp for testingc                 j    d| _         t                      | _        t                      | j        _        d S NT)keep_runningr   sockselfs    Z/root/projects/butler/venv/lib/python3.11/site-packages/websocket/tests/test_dispatcher.py__init__zMockApp.__init__&   s&     FF		    N)__name__
__module____qualname____doc__r    r   r   r   r   #   s)        ''         r   r   c                       e Zd ZdZd Zd ZdS )
MockSocketzMock socket for testingc                     d| _         d S NFpending_returnr   s    r   r   zMockSocket.__init__/   s    #r   c                     | j         S Nr   r   s    r   pendingzMockSocket.pending2   s    ""r   N)r   r   r   r   r   r"   r   r   r   r   r   ,   s8        !!$ $ $# # # # #r   r   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	MockDispatcherz6Mock external dispatcher for WrappedDispatcher testingc                 L    g | _         g | _        g | _        g | _        g | _        d S r!   )signal_callsabort_calls
read_callsbuffwrite_callstimeout_callsr   s    r   r   zMockDispatcher.__init__9   s/    !r   c                 >    | j                             ||f           d S r!   )r&   append)r   sighandlers      r   signalzMockDispatcher.signal@   s#      #w00000r   c                 :    | j                             d           d S r   )r'   r,   r   s    r   abortzMockDispatcher.abortC   s    %%%%%r   c                 >    | j                             ||f           d S r!   )r(   r,   )r   r   callbacks      r   readzMockDispatcher.readF   s#    h/00000r   c                 B    | j                             ||||f           d S r!   )r)   r,   )r   r   data	send_funcdisconnect_handlers        r   	buffwritezMockDispatcher.buffwriteI   s)    ##T4<N$OPPPPPr   c                 @    | j                             |||f           d S r!   )r*   r,   )r   secondsr3   argss       r   timeoutzMockDispatcher.timeoutL   s&    !!7Hd";<<<<<r   N)
r   r   r   r   r   r/   r1   r4   r9   r=   r   r   r   r$   r$   6   sw        @@     1 1 1& & &1 1 1Q Q Q= = = = =r   r$   c                   t    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )DispatcherTestc                 ,    t                      | _        d S r!   )r   appr   s    r   setUpzDispatcherTest.setUpQ   s    99r   c                     t          | j        d          }|                     |j        | j                   |                     |j        d           dS )z"Test DispatcherBase initialization      >@N)r   rA   assertEqualping_timeout)r   
dispatchers     r   test_dispatcher_base_initz(DispatcherTest.test_dispatcher_base_initT   sL    #DHd33
2220$77777r   c                    t          | j        d          }t                      }|                    d|           |                                 |                                 t          j                    }|                    d|           t          j                    |z
  }|                                 |                     |d           dS )z"Test DispatcherBase timeout methodrD   Ng?g?)r   rA   r   r=   assert_called_once
reset_mocktimeassertGreaterEqual)r   rG   r3   
start_timeelapseds        r   test_dispatcher_base_timeoutz+DispatcherTest.test_dispatcher_base_timeout[   s    #DHd33
66 	4***##%%% 	Y[[
3))))++
*##%%%.....r   c                    t          | j        d          }t                      }|                    d|           |                    d           |                                 t          d          |_        |                     t                    5  |                    d|           ddd           dS # 1 swxY w Y   dS )z$Test DispatcherBase reconnect methodrD      T)reconnectingzUser interruptedN)	r   rA   r   	reconnectassert_called_once_withrK   KeyboardInterruptside_effectassertRaises)r   rG   reconnectors      r   test_dispatcher_base_reconnectz-DispatcherTest.test_dispatcher_base_reconnectm   s    #DHd33
ff 	Q,,,+++>>> 	   "34F"G"G011 	1 	1  K000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   B66B:=B:c                 f   t          | j        d          }t                      }d}t          d          5 }t	          |          |_        |                    ||          }|                    ||           |                     |t	          |                     ddd           dS # 1 swxY w Y   dS )zTest DispatcherBase send methodrD   	   test datawebsocket._dispatcher.sendN)	r   rA   r   r   lenreturn_valuesendrU   rE   )r   rG   	mock_sock	test_data	mock_sendresults         r   test_dispatcher_base_sendz(DispatcherTest.test_dispatcher_base_send}   s    #DHd33
FF	 	/00 	5I%(^^I"__Y	::F--iCCCVS^^444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   A$B&&B*-B*c                 ,    t           j        d          }t          d          }t                      }t                      }t          d          5 }t                      }||_        g |j        _         fd}||j        _        |                    |||           |j        	                                 |j        
                    d           |j        	                                 |	                                 ddd           dS # 1 swxY w Y   dS )zTest Dispatcher read method      @Tr_   selectors.DefaultSelectorc                       dj         _        g S r   rA   r   r<   r   s    r   rW   z8DispatcherTest.test_dispatcher_read.<locals>.side_effect       (-%	r   N)r   rA   r   r   r_   selectrW   r4   registerassert_calledassert_called_withclose)r   rG   read_callbackcheck_callbackra   mock_selector_classmock_selectorrW   s   `       r   test_dispatcher_readz#DispatcherTest.test_dispatcher_read   sY   #..
$///FF	 .// 	+3F FFM/<, 13M -     0;M ,OOI}nEEE "00222 33C888--///((***)	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   B*D		DDc                     t           j        d          }t          d          }t                      }t                      }t          d          5 }t                      }||_        d fd}||j        _        |                    |||           |                                 |                                 ddd           dS # 1 swxY w Y   dS )z2Test Dispatcher read method when data is availablerg   Trh   ri   r   c                  <    dz  dk    rdgS dj         _        g S )NrR   TFrk   )r<   
call_countr   s    r   select_side_effectzIDispatcherTest.test_dispatcher_read_with_data.<locals>.select_side_effect   s+    a
?? 6M,1DH)Ir   N)	r   rA   r   r   r_   rn   rW   r4   rp   )	r   rG   rs   rt   ra   ru   rv   r{   rz   s	   `       @r   test_dispatcher_read_with_dataz-DispatcherTest.test_dispatcher_read_with_data   s'   #..
$///FF	.// 	+3F FFM/<, J      0BM ,OOI}nEEE'')))((***+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A)C		CCc                     t           j        d          }t          d          }t                      }t                      }| j        j        _        t          d          5 }t                      }||_        g |j        _         fd}||j        _        |	                    d||           |j
                                         |                                 ddd           dS # 1 swxY w Y   dS )zTest SSLDispatcher read methodrg   Trh   ri   c                       dj         _        g S r   rk   rl   s    r   rW   z<DispatcherTest.test_ssl_dispatcher_read.<locals>.side_effect   rm   r   N)r   rA   r   r   r   r   r_   rn   rW   r4   ro   rp   )r   rG   rs   rt   mock_ssl_sockru   rv   rW   s   `       r   test_ssl_dispatcher_readz'DispatcherTest.test_ssl_dispatcher_read   s5   "48S11
$/// #*.// 	+3F FFM/<,02M -     0;M ,OOD-@@@"00222((***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   #A7C''C+.C+c                     t          | j        d          }t                      }d|_        || j        j        _        t                      }|                    d|          }|                     ||g           dS )z2Test SSLDispatcher select method with pending datarg   TN)r   rA   r   r   r   r   rn   rE   r   rG   r   rv   rd   s        r   'test_ssl_dispatcher_select_with_pendingz6DispatcherTest.test_ssl_dispatcher_select_with_pending   sn    "48S11
"'+$*""477 	-11111r   c                 B   t          | j        d          }t                      }d|_        || j        j        _        t                      }|dfg|j        _        |                    d|          }|                     ||           |j        	                    d           dS )z5Test SSLDispatcher select method without pending datarg   FN)
r   rA   r   r   r   r   rn   r_   rE   rq   r   s        r   *test_ssl_dispatcher_select_without_pendingz9DispatcherTest.test_ssl_dispatcher_select_without_pending   s    "48S11
"',$*.;T-B,C)""477 	/////44444r   c                    t          | j        d          }t                      }d|_        || j        j        _        t                      }g |j        _        |                    d|          }|                     |           dS )z0Test SSLDispatcher select method with no resultsrg   FN)	r   rA   r   r   r   r   rn   r_   assertIsNoner   s        r   %test_ssl_dispatcher_select_no_resultsz4DispatcherTest.test_ssl_dispatcher_select_no_results   su    "48S11
"',$*,.)""477 	&!!!!!r   c                     t                      }t                      }t          | j        d||          }|                     |j        | j                   |                     |j        d           |                     |j        |           |                     |j        |           |                     t          |j	                  d           |j	        d         \  }}|                     |d           |                     ||j
                   dS )z%Test WrappedDispatcher initialization      $@rR   r      N)r$   r   r	   rA   rE   rF   rG   handleDisconnectr^   r&   r1   )r   mock_dispatcherhandle_disconnectwrappedr-   r.   s         r   test_wrapped_dispatcher_initz+DispatcherTest.test_wrapped_dispatcher_init  s    (** FF#DHdOEVWWdh///-t444+_===13DEEE 	_9::A>>>&3A6Wa   /"788888r   c                 ^   t                      }t                      }t          | j        d||          }t                      }t                      }t                      }|                    |||           |                     t          |j                  d           |                     |j        d         ||f           |                     t          |j                  d           |j        d         }|                     |d         d           |                     |d         |           dS )z"Test WrappedDispatcher read methodr   rR   r   N	r$   r   r	   rA   r4   rE   r^   r(   r*   )r   r   r   r   ra   rs   rt   timeout_calls           r   test_wrapped_dispatcher_readz+DispatcherTest.test_wrapped_dispatcher_read  s   (** FF#DHdOEVWWFF	Y~>>> 	_788!<<<3A6M8RSSS 	_:;;Q???&4Q7a$///a.99999r   c                    t                      }t                      }t          | j        d||          }t                      }t                      }t                      }|                    |||           |                     t          |j                  d           |                     t          |j                  d           dS )z7Test WrappedDispatcher read method without ping timeoutNrR   r   r   )r   r   r   r   ra   rs   rt   s          r   ,test_wrapped_dispatcher_read_no_ping_timeoutz;DispatcherTest.test_wrapped_dispatcher_read_no_ping_timeout3  s    (** FF#DHdOEVWWFF	Y~>>> 	_788!<<< 	_:;;Q?????r   c                    t                      }t                      }t          | j        d||          }t                      }d}t	          d          5 }|                    ||          }|                     t          |j                  d           |j        d         }|                     |d         |           |                     |d         |           |                     |d         |           |                     |d         |           |                     |t          |                     ddd           dS # 1 swxY w Y   dS )	z"Test WrappedDispatcher send methodr   r\   r]   rR   r   r      N)	r$   r   r	   rA   r   r`   rE   r^   r)   )	r   r   r   r   ra   rb   rc   rd   calls	            r   test_wrapped_dispatcher_sendz+DispatcherTest.test_wrapped_dispatcher_sendE  su   (** FF#DHdOEVWWFF	 	/00 	5I\\)Y77F S!@AA1EEE"215DT!Wi000T!Wi000T!Wi000T!W&7888 VS^^444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   CD??EEc                    t                      }t                      }t          | j        d||          }t                      }d} |j        d|g|R   |                     t          |j                  d           |j        d         }|                     |d         d           |                     |d         |           |                     |d         |           dS )z%Test WrappedDispatcher timeout methodr   )arg1arg2rg   rR   r   r   N)r$   r   r	   rA   r=   rE   r^   r*   )r   r   r   r   r3   r<   r   s          r   test_wrapped_dispatcher_timeoutz.DispatcherTest.test_wrapped_dispatcher_timeout\  s    (** FF#DHdOEVWW66X----- 	_:;;Q???,Q/a#&&&a(+++a$'''''r   c                    t                      }t                      }t          | j        d||          }t                      }|                    d|           |                     t          |j                  d           |j        d         }|                     |d         d           |                     |d         |           |                     |d         d           dS )z'Test WrappedDispatcher reconnect methodr   r   rR   r   r   )TN)r$   r   r	   rA   rT   rE   r^   r*   )r   r   r   r   rY   r   s         r   !test_wrapped_dispatcher_reconnectz0DispatcherTest.test_wrapped_dispatcher_reconnectn  s    (** FF#DHdOEVWWff![))) 	_:;;Q???,Q/a!$$$a+...a'*****r   N)r   r   r   rB   rH   rP   rZ   re   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   r?   P   s         8 8 8/ / /$1 1 1 5 5 5+ + +<+ + +<+ + +62 2 25 5 5" " "9 9 9$: : :,@ @ @$5 5 5.( ( ($+ + + + +r   r?   __main__)socketunittestunittest.mockr   r   r   	threadingrL   	websocketwebsocket._dispatcherr   r   r   r	   r   r   r$   TestCaser?   r   mainr   r   r   <module>r      sk     0 0 0 0 0 0 0 0 0 0                    &               # # # # # # # #= = = = = = = =4m+ m+ m+ m+ m+X& m+ m+ m+`	 zHMOOOOO r   