
    <fh4                         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(                          yy)    N)Mockpatch	MagicMock)
DispatcherDispatcherBaseSSLDispatcherWrappedDispatcherc                       e Zd ZdZd Zy)MockAppzMock WebSocketApp for testingc                 b    d| _         t               | _        t               | j                  _        y NT)keep_runningr   sockselfs    R/var/www/zara/venv/lib/python3.12/site-packages/websocket/tests/test_dispatcher.py__init__zMockApp.__init__&   s      F			    N)__name__
__module____qualname____doc__r    r   r   r   r   #   s
    ' r   r   c                       e Zd ZdZd Zd Zy)
MockSocketzMock socket for testingc                     d| _         y 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   ,   s    !$#r   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	MockDispatcherz6Mock external dispatcher for WrappedDispatcher testingc                 J    g | _         g | _        g | _        g | _        g | _        y r!   )signal_callsabort_calls
read_callsbuffwrite_callstimeout_callsr   s    r   r   zMockDispatcher.__init__9   s)    !r   c                 >    | j                   j                  ||f       y r!   )r&   append)r   sighandlers      r   signalzMockDispatcher.signal@   s      #w0r   c                 :    | j                   j                  d       y r   )r'   r,   r   s    r   abortzMockDispatcher.abortC   s    %r   c                 >    | j                   j                  ||f       y r!   )r(   r,   )r   r   callbacks      r   readzMockDispatcher.readF   s    h/0r   c                 B    | j                   j                  ||||f       y r!   )r)   r,   )r   r   data	send_funcdisconnect_handlers        r   	buffwritezMockDispatcher.buffwriteI   s     ##T4<N$OPr   c                 @    | j                   j                  |||f       y 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   s$    @ 1&1Q=r   r$   c                   r    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y)DispatcherTestc                 "    t               | _        y r!   )r   appr   s    r   setUpzDispatcherTest.setUpQ   s    9r   c                     t        | j                  d      }| j                  |j                  | j                         | j                  |j                  d       y)z"Test DispatcherBase initialization      >@N)r   rA   assertEqualping_timeout)r   
dispatchers     r   test_dispatcher_base_initz(DispatcherTest.test_dispatcher_base_initT   s@    #DHHd3
200$7r   c                 f   t        | j                  d      }t               }|j                  d|       |j	                          |j                          t        j                         }|j                  d|       t        j                         |z
  }|j	                          | j                  |d       y)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    #DHHd3
6 	4*##% 	YY[
3)))+
*##%.r   c                 D   t        | j                  d      }t               }|j                  d|       |j	                  d       |j                          t        d      |_        | j                  t              5  |j                  d|       ddd       y# 1 sw Y   yxY w)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    #DHHd3
f 	Q,+++> 	 "34F"G01 	1  K0	1 	1 	1s   :BBc                 &   t        | j                  d      }t               }d}t        d      5 }t	        |      |_        |j                  ||      }|j                  ||       | j                  |t	        |             ddd       y# 1 sw Y   yxY w)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~    #DHHd3
F	 	/0 	5I%(^I"__Y	:F--iCVS^4	5 	5 	5s   ABBc                     t         j                  d      }t        d      }t               }t               }t        d      5 }t               }||_        g |j
                  _         fd}||j
                  _        |j                  |||       |j                  j                          |j
                  j                  d       |j                  j                          |j                          ddd       y# 1 sw Y   yxY w)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   s    #.
$/F	 ./ 	+3F FM/<, 13M  - 0;M  ,OOI}nE ""002  33C8--/((*)	+ 	+ 	+s   B+C77D c                 n    t         j                  d      }t        d      }t               }t               }t        d      5 }t               }||_        d fd}||j
                  _        |j                  |||       |j                          |j                          ddd       y# 1 sw Y   yxY w)z2Test Dispatcher read method when data is availablerg   Trh   ri   r   c                  D    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,1DHH)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    #.
$/F	./ 	+3F FM/<, J 0BM  ,OOI}nE'')((*+	+ 	+ 	+s   AB++B4c                     t         j                  d      }t        d      }t               }t               }| j                  j                  _        t        d      5 }t               }||_        g |j                  _         fd}||j                  _        |j                  d||       |j                  j                          |j                          ddd       y# 1 sw Y   yxY w)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   s    "488S1
$/ #*./ 	+3F FM/<,02M  - 0;M  ,OOD-@""002((*	+ 	+ 	+s   A6CC&c                     t        | j                  d      }t               }d|_        || j                  j                  _        t               }|j                  d|      }| j                  ||g       y)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   s^    "488S1
"'+$*""47 	-1r   c                 B   t        | j                  d      }t               }d|_        || j                  j                  _        t               }|dfg|j                  _        |j                  d|      }| j                  ||       |j                  j                  d       y)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    "488S1
"',$*.;T-B,C)""47 	///4r   c                    t        | j                  d      }t               }d|_        || j                  j                  _        t               }g |j                  _        |j                  d|      }| j                  |       y)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   sh    "488S1
"',$*,.)""47 	&!r   c                    t               }t               }t        | j                  d||      }| j	                  |j                  | j                         | j	                  |j
                  d       | j	                  |j                  |       | j	                  |j                  |       | j	                  t        |j                        d       |j                  d   \  }}| j	                  |d       | j	                  ||j                         y)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    (* F#DHHdOEVWdhh/--t4++_=113DE 	_99:A>&33A6Wa /"7"78r   c                    t               }t               }t        | j                  d||      }t               }t               }t               }|j	                  |||       | j                  t        |j                        d       | j                  |j                  d   ||f       | j                  t        |j                        d       |j                  d   }| j                  |d   d       | j                  |d   |       y)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    (* F#DHHdOEVWF	Y~> 	_778!<33A6M8RS 	_::;Q?&44Q7a$/a.9r   c                 R   t               }t               }t        | j                  d||      }t               }t               }t               }|j	                  |||       | j                  t        |j                        d       | j                  t        |j                        d       y)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    (* F#DHHdOEVWF	Y~> 	_778!< 	_::;Q?r   c                    t               }t               }t        | j                  d||      }t               }d}t	        d      5 }|j                  ||      }| j                  t        |j                        d       |j                  d   }| j                  |d   |       | j                  |d   |       | j                  |d   |       | j                  |d   |       | j                  |t        |             ddd       y# 1 sw Y   yxY w)	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  s    (* F#DHHdOEVWF	 	/0 	5I\\)Y7F S!@!@A1E"2215DT!Wi0T!Wi0T!Wi0T!W&78 VS^4	5 	5 	5s   B6DDc                    t               }t               }t        | j                  d||      }t               }d} |j                  d|g|  | j                  t        |j                        d       |j                  d   }| j                  |d   d       | j                  |d   |       | j                  |d   |       y)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    (* F#DHHdOEVW6X-- 	_::;Q?,,Q/a#&a(+a$'r   c                 z   t               }t               }t        | j                  d||      }t               }|j	                  d|       | j                  t        |j                        d       |j                  d   }| j                  |d   d       | j                  |d   |       | j                  |d   d       y)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    (* F#DHHdOEVWf![) 	_::;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   sX    8/$1 5+<+<+625"9$:,@$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      sv      0 0    &   # #= =4m+X&& m+`	 zHMMO r   