
     fL0                        d dl Z d dlZ d dlZd dlZd dlZd dlZ	 e j                            dd          dk    Z	e j                            dd          Z
e
dk    ZdZ G d d	ej                  Zed
k    r ej                     dS dS )    NTEST_WITH_INTERNET01LOCAL_WS_SERVER_PORTz-1Tc                      e Zd Z G d d          Zd Zd Zd Z ej        e	d          d             Z
 ej        dd	          d
             Z ej        e	d          d             Z ej        ed          d             Z ej        ed          d             Z ej        ed          d             Z ej        ed          d             Z ej        ed          d             Z ej        ed          d             Z ej        ed          d             Z ej        e	d          d             Z ej        e	d          d             Z ej        e	d          d             ZdS )WebSocketAppTestc                       e Zd ZdZdS )WebSocketAppTest.NotSetYetz?A marker class for signalling that a value hasn't been set yet.N)__name__
__module____qualname____doc__     [/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/websocket/tests/test_app.py	NotSetYetr
   '   s        MMMMr   r   c                 P   t          j        t                     t                                          t          _        t                                          t          _        t                                          t          _        t                                          t          _        d S N)	wsenableTrace	TRACEABLEr   r   keep_running_openkeep_running_closeget_mask_key_idon_error_dataselfs    r   setUpzWebSocketAppTest.setUp*   sl    
y!!!-=-G-G-I-I*.>.H.H.J.J++;+E+E+G+G()9)C)C)E)E&&&r   c                    t                                           t           _        t                                           t           _        t                                           t           _        t                                           t           _        d S r   )r   r   r   r   r   r   r   s    r   tearDownzWebSocketAppTest.tearDown2   s\    -=-G-G-I-I*.>.H.H.J.J++;+E+E+G+G()9)C)C)E)E&&&r   c                     d S r   r   r   s    r   closezWebSocketAppTest.close8   s    r   z/Tests using local websocket server are disabledc                      d } fd}d }t          j        dt           |||          }|                                 dS ){A WebSocketApp should keep running as long as its self.keep_running
        is not False (in the boolean context).
        c                 `    |                      d           | j        t          _        d| _        dS )zmSet the keep_running flag for later inspection and immediately
            close the connection.
            hello!FN)sendkeep_runningr   r   r   argskwargss      r   on_openz3WebSocketAppTest.test_keep_running.<locals>.on_openC   s0     IIh151B. %Dr   c                 N    t          |                                            d S r   printr"   _messager   s     r   
on_messagez6WebSocketAppTest.test_keep_running.<locals>.on_messageK       'NNNJJLLLLLr   c                 (    | j         t          _        dS )z.Set the keep_running flag for the test to use.N)r(   r   r   r)   s      r   on_closez4WebSocketAppTest.test_keep_running.<locals>.on_closeO   s    262C///r   ws://127.0.0.1:)r,   r6   r3   Nr   WebSocketAppr   run_forever)r   r,   r3   r6   apps   `    r   test_keep_runningz"WebSocketAppTest.test_keep_running;   s    	& 	& 	&	 	 	 	 		D 	D 	D o4244!	
 
 
 	r   Fz$Test disabled for now (requires rel)c                      d } fd}t          j        dt           ||          }|                    d           dS )r$   c                     |                      d           |                                  |                      d           dS )z*Send a message, receive, and send one morer&   zgoodbye!N)r'   recvr)   s      r   r,   z=WebSocketAppTest.test_run_forever_dispatcher.<locals>.on_openb   s9    IIhIIKKKIIj!!!!!r   c                 N    t          |                                            d S r   r.   r0   s     r   r3   z@WebSocketAppTest.test_run_forever_dispatcher.<locals>.on_messageh   r4   r   r7   )r,   r3   
Dispatcher)
dispatcherNr8   )r   r,   r3   r;   s   `   r   test_run_forever_dispatcherz,WebSocketAppTest.test_run_forever_dispatcher\   sq    	" 	" 	"	 	 	 	 	 o4244!
 
 

 	<00000r   c                     t          j        dt                     }t          j        d|j                                                   |                                }|                     |d           dS )zaThe WebSocketApp.run_forever() method should return `False` when the application ends gracefully.r7   g?)intervalfunctionFN)	r   r9   r   	threadingTimerr"   startr:   assertEqual)r   r;   teardowns      r   $test_run_forever_teardown_clean_exitz5WebSocketAppTest.test_run_forever_teardown_clean_exitv   sk    
 oF0DFFGGsy999??AAA??$$5)))))r   z%Internet-requiring tests are disabledc                     d }t          j        d|          }|                     t          |j                  t          |                     dS )zhA WebSocketApp should forward the received mask_key function down
        to the actual socket.
        c                      dS )Nz    r   r   r   r   my_mask_key_funcz=WebSocketAppTest.test_sock_mask_key.<locals>.my_mask_key_func   s    %%r   wss://api-pub.bitfinex.com/ws/1)get_mask_keyN)r   r9   rJ   idrQ   )r   rO   r;   s      r   test_sock_mask_keyz#WebSocketAppTest.test_sock_mask_key   sa    	& 	& 	& o-<L
 
 
 	C,--r2B/C/CDDDDDr   c                     d }d }t          j        d||          }|                     t           j        |j        dddt
          j        i           d	S )
z7Test exception handling if ping_interval < ping_timeoutc                 L    t          d           |                                  d S NzGot a ping!r.   r;   r1   s     r   on_pingzIWebSocketAppTest.test_invalid_ping_interval_ping_timeout.<locals>.on_ping   !    -   IIKKKKKr   c                 L    t          d           |                                  d S NzGot a pong! No need to respondr.   rW   s     r   on_pongzIWebSocketAppTest.test_invalid_ping_interval_ping_timeout.<locals>.on_pong   "    2333IIKKKKKr   rP   rX   r\         	cert_reqsping_intervalping_timeoutssloptNr   r9   assertRaisesWebSocketExceptionr:   ssl	CERT_NONEr   rX   r\   r;   s       r   'test_invalid_ping_interval_ping_timeoutz8WebSocketAppTest.test_invalid_ping_interval_ping_timeout   s    	 	 		 	 	 o-w
 
 
 	!O/ 	 	
 	
 	
 	
 	
r   c                     d }d }t          j        d||          }|                    dddt          j        i           d	S )
z+Test WebSocketApp proper ping functionalityc                 L    t          d           |                                  d S rV   r.   rW   s     r   rX   z4WebSocketAppTest.test_ping_interval.<locals>.on_ping   rY   r   c                 L    t          d           |                                  d S r[   r.   rW   s     r   r\   z4WebSocketAppTest.test_ping_interval.<locals>.on_pong   r]   r   rP   r^   r`   r_   ra   rb   N)r   r9   r:   ri   rj   rk   s       r   test_ping_intervalz#WebSocketAppTest.test_ping_interval   st    	 	 		 	 	 o-w
 
 
 	![#-4P 	 	
 	
 	
 	
 	
r   c                 ^    t          j        d          }|                    ddd           dS )zTest WebSocketApp close opcode'wss://tsock.us1.twilio.com/v3/wsconnectr`   r_   zPing payload)rc   rd   ping_payloadN)r   r9   r:   r   r;   s     r   test_opcode_closez"WebSocketAppTest.test_opcode_close   s2     oGHHaanUUUUUr   c                     t          j        d          }|                     t           j        |j        ddt
          j        i           dS )z1A WebSocketApp handling of negative ping_intervalrP   ra   )rc   re   Nrf   rt   s     r   test_bad_ping_intervalz'WebSocketAppTest.test_bad_ping_interval   sS     o?@@!O/	 	 	
 	
 	
 	
 	
r   c                     t          j        d          }|                     t           j        |j        ddt
          j        i           dS )z0A WebSocketApp handling of negative ping_timeoutrP   ra   )rd   re   Nrf   rt   s     r   test_bad_ping_timeoutz&WebSocketAppTest.test_bad_ping_timeout   sS     o?@@!O/	 	 	
 	
 	
 	
 	
r   c                    d }t          j        d|          }t          j        t           j        j        d          }|                     ddg|                    |                     t          j        t           j        j        d          }|                     d	d	g|                    |                     t          j        d          }t          j        t           j        j        d          }|                     d	d	g|                    |                     |                     t           j        |j        d
           d	S )zKTest extraction of close frame status code and close reason in WebSocketAppc                 $    t          d           d S )Nzon_close reached)r/   )wsappclose_status_code	close_msgs      r   r6   z9WebSocketAppTest.test_close_status_code.<locals>.on_close   s    $%%%%%r   rr   )r6   s   no-init-from-client)opcodedatai  zno-init-from-clientr   Nztest if connection is closed)r   )	r   r9   ABNFOPCODE_CLOSErJ   _get_close_argsrg   "WebSocketConnectionClosedExceptionr'   )r   r6   r;   
closeframeapp2s        r   test_close_status_codez'WebSocketAppTest.test_close_status_code   sD   	& 	& 	& o5
 
 
 W7'.L
 
 

 	$ 568K8KJ8W8WXXXWBG$8sCCC
$s':'::'F'FGGGHIIWBG$8sCCC
$t';';J'G'GHHH1H/ 	 	
 	
 	
 	
 	
r   c                 @   ddd }fd}d }t          j        dt           |||          }|                    dd	           |                     |           |                     t                     |                     t                    d
           dS )z)Test callback function exception handlingNc                      t          d          NCallback failedRuntimeError)r;   s    r   r,   zBWebSocketAppTest.test_callback_function_exception.<locals>.on_open  s    0111r   c                     | |d S r   r   )r;   errexc
passed_apps     r   on_errorzCWebSocketAppTest.test_callback_function_exception.<locals>.on_error  s    JCCCr   c                 .    |                                   d S r   r"   rW   s     r   r\   zBWebSocketAppTest.test_callback_function_exception.<locals>.on_pong  s    IIKKKKKr   r7   r,   r   r\   r`   r_   rc   rd   r   )r   r9   r   r:   rJ   assertIsInstancer   str)r   r,   r   r\   r;   r   r   s        @@r    test_callback_function_exceptionz1WebSocketAppTest.test_callback_function_exception   s     
	2 	2 	2	 	 	 	 	 		 	 	 o4244	
 
 
 	aa888S)))c<000S#455555r   c                     G d d          } |            }|                      |j        |j                   |                     |j        t
                     |                      t          |j                  d           dS )z'Test callback method exception handlingc                   &    e Zd Zd Zd Zd Zd ZdS )BWebSocketAppTest.test_callback_method_exception.<locals>.Callbacksc                     d | _         d | _        t          j        dt           | j        | j        | j                  | _        | j        	                    dd           d S )Nr7   r   r`   r_   r   )
r   r   r   r9   r   r,   r   r\   r;   r:   r   s    r   __init__zKWebSocketAppTest.test_callback_method_exception.<locals>.Callbacks.__init__$  sf    "&?<&:<< L!] L	   $$11$EEEEEr   c                      t          d          r   r   )r   r1   s     r   r,   zJWebSocketAppTest.test_callback_method_exception.<locals>.Callbacks.on_open/  s    "#4555r   c                 "    || _         || _        d S r   )r   r   )r   r;   r   s      r   r   zKWebSocketAppTest.test_callback_method_exception.<locals>.Callbacks.on_error2  s    "%r   c                 .    |                                  d S r   r   )r   r;   r1   s      r   r\   zJWebSocketAppTest.test_callback_method_exception.<locals>.Callbacks.on_pong6  s    		r   N)r   r   r   r   r,   r   r\   r   r   r   	Callbacksr   #  sS        	F 	F 	F6 6 6      r   r   r   N)rJ   r   r;   r   r   r   r   )r   r   	callbackss      r   test_callback_method_exceptionz/WebSocketAppTest.test_callback_method_exception  s    	 	 	 	 	 	 	 	, IKK	-y}===im\:::Y]++->?????r   c                 F   ddfd}fd}t          j        dt           ||          }|                    ddd	
           |                     d           |                     t           j                   |                     t                    d           dS )zTest reconnectr   Nc                     |d S r   r   )r1   r   r   s     r   r   z1WebSocketAppTest.test_reconnect.<locals>.on_errorG  s    CCCr   c                     dz  dk    r| j                                          dk    r|                                  d S d S )Nr_   r`   )sockshutdownr"   )r;   r1   
pong_counts     r   r\   z0WebSocketAppTest.test_reconnect.<locals>.on_pongK  sJ    !OJQ!!###Q		 r   r7   )r\   r   r`   r_      )rc   rd   	reconnectzping/pong timed out)r   r9   r   r:   rJ   r   WebSocketTimeoutExceptionr   )r   r   r\   r;   r   r   s       @@r   test_reconnectzWebSocketAppTest.test_reconnect?  s    
 
	 	 	 	 		 	 	 	 	 o4244gPX
 
 
 	aa1EEEQ'''c2#?@@@S#899999r   N)r   r   r   r   r   r    r"   unittest
skipUnlessTEST_WITH_LOCAL_SERVERr<   rC   rL   r   rS   rl   rp   ru   rx   r{   r   r   r   r   r   r   r   r   r   &   s       N N N N N N N NF F FF F F   X Q   < X FGG1 1 HG12 X Q * * * X+-TUUE E VUE  X+-TUU
 
 VU
, X+-TUU
 
 VU
$ X+-TUUV V VUV X+-TUU
 
 VU
 X+-TUU
 
 VU
 X+-TUU
 
 VU
6 X Q 6 6 6< X Q @ @ @> X Q : : : : :r   r   __main__)osos.pathri   rG   r   	websocketr   environgetr   r   r   r   TestCaser   r   mainr   r   r   <module>r      s    
			  



         ( Z^^$8#>>#E z~~&<dCC -5 	v: v: v: v: v:x( v: v: v:r	 zHMOOOOO r   