Ë
    _§1hL0  ã                   ó  — 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__© ó    úV/var/www/skyplay_api_hub/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'   € ð �I‰I�hÔØ15×1BÑ1BÔÔ.Ø %ˆDÕr   c                 ó<   •— t        |«       ‰j                  «        y r   ©Úprintr"   ©Ú_Úmessager   s     €r   Ú
on_messagez6WebSocketAppTest.test_keep_running.<locals>.on_messageK   ó   ø€ Ü�'ŒNØ�J‰J�Lr   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   € à26×2CÑ2CÔÕ/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ô �o‰oØÔ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#   € à�I‰I�hÔØ�I‰IŒKØ�I‰I�jÕ!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?   ø€ ò	"ô	ô �o‰oØÔ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   € ô
 �o‰o Ô0DÐ/EÐFÓGˆÜ�‰ ¨s¯y©yÔ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@   € ò	&ô �o‰oØ-Ð<Lô
ˆð 	×Ñœ˜C×,Ñ,Ó-¬rÐ2BÓ/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•   ó   € Ü�-Ô Ø�I‰I�Kr   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Ø�I‰I�Kr   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   € ò	ò	ô �o‰oØ-°wÈô
ˆð 	×ÑÜ×!Ñ!Ø�O‰OØØØ¤§¡Ð/ð 	õ 	
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   € ò	ò	ô �o‰oØ-°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%   € ô �o‰oÐGÓHˆØ�‰ a°aÀnˆÕ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   € ô �o‰oÐ?Ó@ˆØ×ÑÜ×!Ñ!Ø�O‰OØØ¤§¡Ð/ð	 	õ 	
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   € ô �o‰oÐ?Ó@ˆØ×ÑÜ×!Ñ!Ø�O‰OØØ¤§¡Ð/ð	 	õ 	
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  € ò	&ô �o‰oØ5Àô
ˆô —W‘WÜ—7‘7×'Ñ'Ð.Lô
ˆ
ð 	×Ñ˜$Ð 5Ð6¸×8KÑ8KÈJÓ8WÔXä—W‘W¤B§G¡G×$8Ñ$8¸sÔCˆ
Ø×Ñ˜$ ˜ s×':Ñ':¸:Ó'FÔGä�‰ÐHÓIˆÜ—W‘W¤B§G¡G×$8Ñ$8¸sÔCˆ
Ø×Ñ˜$ ˜ t×';Ñ';¸JÓ'GÔHà×ÑÜ×1Ñ1Ø�H‰HØ/ð 	õ 	
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   € Ø�I‰I�Kr   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õ	ò	ô �o‰oØÔ2Ð3Ð4ØØØô	
ˆð 	�‰ a°aˆÔ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   € Ø�”Ø"&�”ÜŸ?™?Ø%Ô&:Ð%;Ð<Ø ŸL™LØ!Ÿ]™]Ø ŸL™Lô	�”ð —‘×$Ñ$°1À1Ð$Õ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¯}©}Ô=Ø×Ñ˜iŸm™m¬\Ô:Ø×Ñœ˜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   ø€ à˜!‰OˆJØ˜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‰oØÔ2Ð3Ð4¸gÐPXô
ˆð 	�‰ a°aÀ1ˆÔEà×Ñ˜ QÔ'Ø×Ñ˜c¤2×#?Ñ#?Ô@Ø×Ñœ˜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ð1ð2 €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�   ðó 
Û Û 
Û Û ã ðð( —Z‘Z—^‘^Ð$8¸#Ó>À#ÑEÐ à—z‘z—~‘~Ð&<¸dÓCÐ Ø-°Ñ5Ð Ø€	ôv:�x×(Ñ(ô v:ðr	 ˆzÒØ€H‡M�M…Oð r   