
    gL0                        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                  j                  dd      dk(  Z	e j                  j                  dd      Z
e
dk7  ZdZ G d d	ej                        Zed
k(  r ej                           yy)    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y)WebSocketAppTestc                       e Zd ZdZy)WebSocketAppTest.NotSetYetz?A marker class for signalling that a value hasn't been set yet.N)__name__
__module____qualname____doc__     K/var/www/html/venv/lib/python3.12/site-packages/websocket/tests/test_app.py	NotSetYetr
   '   s    Mr   r   c                    t        j                  t               t        j	                         t        _        t        j	                         t        _        t        j	                         t        _        t        j	                         t        _        y N)	wsenableTrace	TRACEABLEr   r   keep_running_openkeep_running_closeget_mask_key_idon_error_dataselfs    r   setUpzWebSocketAppTest.setUp*   sV    
y!-=-G-G-I*.>.H.H.J++;+E+E+G()9)C)C)E&r   c                     t         j                         t         _        t         j                         t         _        t         j                         t         _        t         j                         t         _        y r   )r   r   r   r   r   r   r   s    r   tearDownzWebSocketAppTest.tearDown2   sJ    -=-G-G-I*.>.H.H.J++;+E+E+G()9)C)C)E&r   c                      y 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         |||      }|j                          y){A WebSocketApp should keep running as long as its self.keep_running
        is not False (in the boolean context).
        c                 ^    | j                  d       | j                  t        _        d| _        y)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   s'     IIh151B1B. %Dr   c                 <    t        |       j                          y r   printr"   _messager   s     r   
on_messagez6WebSocketAppTest.test_keep_running.<locals>.on_messageK       'NJJLr   c                 .    | j                   t        _        y)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    262C2C/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;   sD    	&		D oo234!	
 	r   Fz$Test disabled for now (requires rel)c                 x     d } fd}t        j                  dt         ||      }|j                  d       y)r$   c                 h    | j                  d       | j                          | j                  d       y)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   s#    IIhIIKIIj!r   c                 <    t        |       j                          y 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\   s?    	"	 oo234!

 	<0r   c                     t        j                  dt               }t        j                  d|j
                        j                          |j                         }| j                  |d       y)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   sR    
 oo0D/EFGsyy9??A??$5)r   z%Internet-requiring tests are disabledc                     d }t        j                  d|      }| j                  t        |j                        t        |             y)zhA WebSocketApp should forward the received mask_key function down
        to the actual socket.
        c                       y)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   s@    	& oo-<L
 	C,,-r2B/CDr   c                     d }d }t        j                  d||      }| j                  t         j                  |j                  dddt
        j                  i       y	)
z7Test exception handling if ping_interval < ping_timeoutc                 :    t        d       | j                          y NzGot a ping!r.   r;   r1   s     r   on_pingzIWebSocketAppTest.test_invalid_ping_interval_ping_timeout.<locals>.on_ping       - IIKr   c                 :    t        d       | j                          y NzGot a pong! No need to respondr.   rW   s     r   on_pongzIWebSocketAppTest.test_invalid_ping_interval_ping_timeout.<locals>.on_pong       23IIKr   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   sZ    		 oo-w
 	!!OO/ 	 	
r   c                     d }d }t        j                  d||      }|j                  dddt        j                  i       y	)
z+Test WebSocketApp proper ping functionalityc                 :    t        d       | j                          y rV   r.   rW   s     r   rX   z4WebSocketAppTest.test_ping_interval.<locals>.on_ping   rY   r   c                 :    t        d       | j                          y 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   sF    		 oo-w
 	![#--4P 	 	
r   c                 V    t        j                  d      }|j                  ddd       y)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   s%     ooGHaanUr   c                     t        j                  d      }| j                  t         j                  |j                  ddt
        j                  i       y)z1A WebSocketApp handling of negative ping_intervalrP   ra   )rc   re   Nrf   rt   s     r   test_bad_ping_intervalz'WebSocketAppTest.test_bad_ping_interval   sE     oo?@!!OO/	 	 	
r   c                     t        j                  d      }| j                  t         j                  |j                  ddt
        j                  i       y)z0A WebSocketApp handling of negative ping_timeoutrP   ra   )rd   re   Nrf   rt   s     r   test_bad_ping_timeoutz&WebSocketAppTest.test_bad_ping_timeout   sE     oo?@!!OO/	 	 	
r   c                    d }t        j                  d|      }t        j                  t         j                  j                  d      }| j	                  ddg|j                  |             t        j                  t         j                  j                  d      }| j	                  d	d	g|j                  |             t        j                  d      }t        j                  t         j                  j                  d      }| j	                  d	d	g|j                  |             | j                  t         j                  |j                  d
       y	)zKTest extraction of close frame status code and close reason in WebSocketAppc                     t        d       y )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   s   	& oo5
 WW77''.L

 	$ 568K8KJ8WXWWBGG$8$8sC
$s':'::'FGHIWWBGG$8$8sC
$t';';J'GH11HH/ 	 	
r   c                    ddd }fd}d }t        j                  dt         |||      }|j                  dd	       | j	                  |       | j                  t               | j	                  t              d
       y)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1r   c                     | |y r   r   )r;   errexc
passed_apps     r   on_errorzCWebSocketAppTest.test_callback_function_exception.<locals>.on_error  s    JCr   c                 $    | j                          y r   r"   rW   s     r   r\   zBWebSocketAppTest.test_callback_function_exception.<locals>.on_pong  s    IIKr   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		 oo234	
 	aa8S)c<0S#45r   c                      G d d      } |       }| j                  |j                  |j                         | j                  |j                  t
               | j                  t        |j                        d       y)z'Test callback method exception handlingc                   $    e Zd Zd Zd Zd Zd Zy)BWebSocketAppTest.test_callback_method_exception.<locals>.Callbacksc                     d | _         d | _        t        j                  dt         | j
                  | j                  | j                        | _        | j                  j                  dd       y )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__$  sZ    "&??%&:%;< LL!]] LL	 $$11$Er   c                     t        d      r   r   )r   r1   s     r   r,   zJWebSocketAppTest.test_callback_method_exception.<locals>.Callbacks.on_open/  s    "#455r   c                      || _         || _        y r   )r   r   )r   r;   r   s      r   r   zKWebSocketAppTest.test_callback_method_exception.<locals>.Callbacks.on_error2  s    "%r   c                 $    |j                          y 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   #  s    	F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]    	 	, K	--y}}=imm\:Y]]+->?r   c                 $   ddfd}fd}t        j                  dt         ||      }|j                  ddd	
       | j	                  d       | j                  t         j                         | j	                  t              d       y)zTest reconnectr   Nc                 
    |y r   r   )r1   r   r   s     r   r   z1WebSocketAppTest.test_reconnect.<locals>.on_errorG  s    Cr   c                 z    dz  dk(  r| j                   j                          dk\  r| j                          y y )Nr_   r`   )sockshutdownr"   )r;   r1   
pong_counts     r   r\   z0WebSocketAppTest.test_reconnect.<locals>.on_pongK  s8    !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    
 
		 oo234gPX
 	aa1EQ'c2#?#?@S#8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FF X Q< X FG1 H12 X Q** X+-TUE VE  X+-TU
 V
, X+-TU
 V
$ X+-TUV VV X+-TU
 V
 X+-TU
 V
 X+-TU
 V
6 X Q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    
  
   ( ZZ^^$8#>#E zz~~&<dC -5 	v:x(( v:r	 zHMMO r   