Ë
    è×ïi‰1  ã                   ó  — 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 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 ej                  ed«      d„ «       Zy)ÚWebSocketAppTestc                   ó   — e Zd ZdZy)úWebSocketAppTest.NotSetYetzI A marker class for signalling that a value hasn't been set yet.
        N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úR/var/www/html/aiagents/fe/lib/python3.12/site-packages/websocket/tests/test_app.pyÚ	NotSetYetr
   '   s   „ ò	r   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.tearDown3   sJ   € Ü-=×-GÑ-GÓ-IÔÔ*Ü.>×.HÑ.HÓ.JÔÔ+Ü+;×+EÑ+EÓ+GÔÔ(Ü)9×)CÑ)CÓ)EÔÕ&r   z/Tests using local websocket server are disabledc                 ó|   ‡ — d„ }ˆ fd„}d„ }t        j                  dt        z   |||¬«      }|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)zn Set the keep_running flag for later inspection and immediately
            close the connection.
            úhello!FN)ÚsendÚkeep_runningr   r   ©r   ÚargsÚkwargss      r   Úon_openz1WebSocketAppTest.testKeepRunning.<locals>.on_open?   s'   € ð �I‰I�hÔØ15×1BÑ1BÔÔ.Ø %ˆDÕr   c                 ó<   •— t        |«       ‰j                  «        y r   ©ÚprintÚclose©ÚwsappÚmessager   s     €r   Ú
on_messagez4WebSocketAppTest.testKeepRunning.<locals>.on_messageG   ó   ø€ Ü�'Œ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_closez2WebSocketAppTest.testKeepRunning.<locals>.on_closeK   s   € ð 37×2CÑ2CÔÕ/r   úws://127.0.0.1:)r*   r5   r2   N©r   ÚWebSocketAppr   Úrun_forever)r   r*   r2   r5   Úapps   `    r   ÚtestKeepRunningz WebSocketAppTest.testKeepRunning9   sD   ø€ ò	&ô	ò	Dô
 �o‰oÐ/Ô2FÑFÐPWÐbjð  xBô  CˆØ�‰Õr   Fz$Test disabled for now (requires rel)c                 óx   ‡ — d„ }ˆ fd„}t        j                  dt        z   ||¬«      }|j                  d¬«       y)r"   c                 óh   — | j                  d«       | j                  «        | j                  d«       y)z8 Send a message, receive, and send one more
            r$   zgoodbye!N)r%   Úrecvr'   s      r   r*   z:WebSocketAppTest.testRunForeverDispatcher.<locals>.on_openZ   s%   € ð �I‰I�hÔØ�I‰IŒKØ�I‰I�jÕ!r   c                 ó<   •— t        |«       ‰j                  «        y r   r,   r/   s     €r   r2   z=WebSocketAppTest.testRunForeverDispatcher.<locals>.on_messagea   r3   r   r6   )r*   r2   Ú
Dispatcher)Ú
dispatcherNr7   )r   r*   r2   r:   s   `   r   ÚtestRunForeverDispatcherz)WebSocketAppTest.testRunForeverDispatcherT   s8   ø€ ò	"ô	ô �o‰oÐ/Ô2FÑFÐPWÐdnÔoˆØ�‰ <ˆÕ0r   c                 óÞ   — t        j                  dt        z   «      }t        j                  d|j
                  ¬«      j                  «        |j                  «       }| j                  |d«       y)zk The WebSocketApp.run_forever() method should return `False` when the application ends gracefully.
        r6   çš™™™™™É?©ÚintervalÚfunctionFN)	r   r8   r   Ú	threadingÚTimerr.   Ústartr9   ÚassertEqual)r   r:   Úteardowns      r   ÚtestRunForeverTeardownCleanExitz0WebSocketAppTest.testRunForeverTeardownCleanExitj   sP   € ô �o‰oÐ/Ô2FÑFÓGˆÜ�‰ ¨s¯y©yÔ9×?Ñ?ÔAØ—?‘?Ó$ˆØ×Ñ˜ 5Õ)r   c                 ó:  ‡— ˆfd„}d„ }t        j                  dt        z   |¬«      Št        j                  d|¬«      j                  «        ‰j                  d¬«      }| j                  |d	«       | j                  t        t        j                  «      d
kD  «       y)z· The WebSocketApp.run_forever() method should return `True` when the application ends with an exception.
        It should also invoke the `on_error` callback before exiting.
        c                  ó:   •— ‰ j                   j                  «        y r   )Úsockr.   ©r:   s   €r   Úbreak_itzHWebSocketAppTest.testRunForeverTeardownExceptionalExit.<locals>.break_ity   s   ø€ à�H‰H�N‰NÕr   c                 ó,   — t        |«      t        _        y r   )Ústrr   r   )Ú_Úerrs     r   Úon_errorzHWebSocketAppTest.testRunForeverTeardownExceptionalExit.<locals>.on_error}   s   € Ü-0°«XÔÕ*r   r6   )rW   rD   rE   gš™™™™™¹?)Úping_timeoutTr   N)r   r8   r   rH   rI   rJ   r9   rK   Ú
assertTrueÚlenr   r   )r   rR   rW   rL   r:   s       @r   Ú%testRunForeverTeardownExceptionalExitz6WebSocketAppTest.testRunForeverTeardownExceptionalExits   s{   ø€ ô	ò	6ô �o‰oÐ/Ô2FÑFÐQYÔZˆÜ�‰ ¨xÔ8×>Ñ>Ô@Ø—?‘?°�?Ó4ˆØ×Ñ˜ 4Ô(Ø�‰œÔ,×:Ñ:Ó;¸aÑ?Õ@r   z%Internet-requiring tests are disabledc                 ó”   — d„ }t        j                  d|¬«      }| j                  t        |j                  «      t        |«      «       y)zi A 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.testSockMaskKey.<locals>.my_mask_key_funcŒ   s   € Ø%r   úwss://api-pub.bitfinex.com/ws/1)Úget_mask_keyN)r   r8   rK   Úidr`   )r   r^   r:   s      r   ÚtestSockMaskKeyz WebSocketAppTest.testSockMaskKey†   s>   € ò	&ô �o‰oÐ?ÐN^Ô_ˆð 	×Ñœ˜C×,Ñ,Ó-¬rÐ2BÓ/CÕDr   c                 ó¼   — d„ }d„ }t        j                  d||¬«      }| j                  t         j                  |j                  dddt
        j                  i¬«       y	)
zA Test exception handling if ping_interval < ping_timeout
        c                 ó:   — t        d«       | j                  «        y ©NzGot a ping!r,   ©r:   Úmsgs     r   Úon_pingzDWebSocketAppTest.testInvalidPingIntervalPingTimeout.<locals>.on_pingš   ó   € Ü�-Ô Ø�I‰I�Kr   c                 ó:   — t        d«       | j                  «        y ©NzGot a pong! No need to respondr,   rf   s     r   Úon_pongzDWebSocketAppTest.testInvalidPingIntervalPingTimeout.<locals>.on_pongž   ó   € ÜÐ2Ô3Ø�I‰I�Kr   r_   ©rh   rl   é   é   Ú	cert_reqs©Úping_intervalrX   ÚssloptN©r   r8   ÚassertRaisesÚWebSocketExceptionr9   ÚsslÚ	CERT_NONE©r   rh   rl   r:   s       r   Ú"testInvalidPingIntervalPingTimeoutz3WebSocketAppTest.testInvalidPingIntervalPingTimeout•   sc   € ò
	ò	ô �o‰oÐ?ÈÐZaÔbˆØ×Ñœ"×/Ñ/°·±ÐPQÐ`aÐkvÔx{÷  yFñ  yFð  kGÐõ  	Hr   c                 óˆ   — d„ }d„ }t        j                  d||¬«      }|j                  dddt        j                  i¬«       y	)
z5 Test WebSocketApp proper ping functionality
        c                 ó:   — t        d«       | j                  «        y re   r,   rf   s     r   rh   z2WebSocketAppTest.testPingInterval.<locals>.on_pingª   ri   r   c                 ó:   — t        d«       | j                  «        y rk   r,   rf   s     r   rl   z2WebSocketAppTest.testPingInterval.<locals>.on_pong®   rm   r   r_   rn   rp   ro   rq   rr   N)r   r8   r9   rx   ry   rz   s       r   ÚtestPingIntervalz!WebSocketAppTest.testPingInterval¥   s=   € ò
	ò	ô �o‰oÐ?ÈÐZaÔbˆØ�‰ a°aÀÌcÏmÉmÐ@\ˆÕ]r   c                 óV   — t        j                  d«      }|j                  ddd¬«       y)z( Test WebSocketApp close opcode
        ú'wss://tsock.us1.twilio.com/v3/wsconnectrp   ro   zPing payload)rs   rX   Úping_payloadN)r   r8   r9   ©r   r:   s     r   ÚtestOpcodeClosez WebSocketAppTest.testOpcodeCloseµ   s%   € ô
 �o‰oÐGÓHˆØ�‰ a°aÀnˆÕUr   c                 ó¨   — t        j                  d«      }| j                  t         j                  |j                  ddt
        j                  i¬«       y)z; A WebSocketApp handling of negative ping_interval
        r_   éûÿÿÿrq   )rs   rt   Nru   rƒ   s     r   ÚtestBadPingIntervalz$WebSocketAppTest.testBadPingIntervalÅ   sB   € ô �o‰oÐ?Ó@ˆØ×Ñœ"×/Ñ/°·±ÐPRÐ\gÔil×ivÑivÐ[wÐÕxr   c                 ó¨   — t        j                  d«      }| j                  t         j                  |j                  ddt
        j                  i¬«       y)z: A WebSocketApp handling of negative ping_timeout
        r_   éýÿÿÿrq   )rX   rt   Nru   rƒ   s     r   ÚtestBadPingTimeoutz#WebSocketAppTest.testBadPingTimeoutÌ   sA   € ô �o‰oÐ?Ó@ˆØ×Ñœ"×/Ñ/°·±ÈrÐ[fÔhk×huÑhuÐZvÐÕwr   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	)zU Test extraction of close frame status code and close reason in WebSocketApp
        c                 ó   — t        d«       y )Nzon_close reached)r-   )r0   Úclose_status_codeÚ	close_msgs      r   r5   z6WebSocketAppTest.testCloseStatusCode.<locals>.on_close×   s   € ÜÐ$Õ%r   r�   )r5   s   èno-init-from-client)ÚopcodeÚdataiè  zno-init-from-clientr   Nztest if connection is closed)r�   )	r   r8   ÚABNFÚOPCODE_CLOSErK   Ú_get_close_argsrv   Ú"WebSocketConnectionClosedExceptionr%   )r   r5   r:   Ú
closeframeÚapp2s        r   ÚtestCloseStatusCodez$WebSocketAppTest.testCloseStatusCodeÓ   sø   € ò	&ô �o‰oÐGÐRZÔ[ˆÜ—W‘W¤B§G¡G×$8Ñ$8Ð?]Ô^ˆ
Ø×Ñ˜$Ð 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à×Ñœ"×?Ñ?ÀÇÁÐPnÐÕor   c                 ó  ‡‡— dŠdŠd„ }ˆˆfd„}d„ }t        j                  dt        z   |||¬«      }|j                  dd¬	«       | j	                  ‰|«       | j                  ‰t        «       | j	                  t        ‰«      d
«       y)z+ Test callback function exception handling Nc                 ó   — t        d«      ‚©NúCallback failed©ÚRuntimeErrorrQ   s    r   r*   z?WebSocketAppTest.testCallbackFunctionException.<locals>.on_openî   s   € ÜÐ0Ó1Ð1r   c                 ó   •— | Š|Šy r   r   )r:   rV   ÚexcÚ
passed_apps     €€r   rW   z@WebSocketAppTest.testCallbackFunctionException.<locals>.on_errorñ   s   ø€ àˆJà‰Cr   c                 ó$   — | j                  «        y r   ©r.   rf   s     r   rl   z?WebSocketAppTest.testCallbackFunctionException.<locals>.on_pong÷   s   € Ø�I‰I�Kr   r6   ©r*   rW   rl   rp   ro   ©rs   rX   r›   )r   r8   r   r9   rK   ÚassertIsInstancer�   rT   )r   r*   rW   rl   r:   rŸ   r    s        @@r   ÚtestCallbackFunctionExceptionz.WebSocketAppTest.testCallbackFunctionExceptionç   sƒ   ù€ ð ˆØˆ
ò	2õ	ò	ô �o‰oÐ/Ô2FÑFÐPWÐbjÐt{Ô|ˆØ�‰ 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 handling c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ú?WebSocketAppTest.testCallbackMethodException.<locals>.Callbacksc                 óà   — d | _         d | _        t        j                  dt        z   | j
                  | j                  | j                  ¬«      | _        | j                  j                  dd¬«       y )Nr6   r£   rp   ro   r¤   )
rŸ   r    r   r8   r   r*   rW   rl   r:   r9   r   s    r   Ú__init__zHWebSocketAppTest.testCallbackMethodException.<locals>.Callbacks.__init__  sW   € Ø�”Ø"&�”ÜŸ?™?Ø%Ô(<Ñ<Ø ŸL™LØ!Ÿ]™]Ø ŸL™Lô	�”ð —‘×$Ñ$°1À1Ð$ÕEr   c                 ó   — t        d«      ‚rš   rœ   rƒ   s     r   r*   zGWebSocketAppTest.testCallbackMethodException.<locals>.Callbacks.on_open  s   € Ü"Ð#4Ó5Ð5r   c                 ó    — || _         || _        y r   )r    rŸ   )r   r:   rV   s      r   rW   zHWebSocketAppTest.testCallbackMethodException.<locals>.Callbacks.on_error  s   € Ø"%�”Ø�•r   c                 ó$   — |j                  «        y r   r¢   )r   r:   rg   s      r   rl   zGWebSocketAppTest.testCallbackMethodException.<locals>.Callbacks.on_pong  s   € Ø—	‘	•r   N)r   r   r   r«   r*   rW   rl   r   r   r   Ú	Callbacksr©     s   „ ò	Fò6òór   r¯   r›   N)rK   r    r:   r¥   rŸ   r�   rT   )r   r¯   Ú	callbackss      r   ÚtestCallbackMethodExceptionz,WebSocketAppTest.testCallbackMethodException  s]   € ÷	ñ 	ñ, “Kˆ	à×Ñ˜×-Ñ-¨y¯}©}Ô=Ø×Ñ˜iŸm™m¬\Ô:Ø×Ñœ˜YŸ]™]Ó+Ð->Õ?r   c                 ó$  ‡‡— dŠdŠˆfd„}ˆfd„}t        j                  dt        z   ||¬«      }|j                  ddd	¬
«       | j	                  ‰d«       | j                  ‰t         j                  «       | j	                  t        ‰«      d«       y)z Test reconnect r   Nc                 ó
   •— |Šy r   r   )r:   rV   rŸ   s     €r   rW   z0WebSocketAppTest.testReconnect.<locals>.on_error'  s   ø€ à‰Cr   c                 óz   •— ‰dz  Š‰dk(  r| j                   j                  «        ‰dk\  r| j                  «        y y )Nro   rp   )rP   Úshutdownr.   )r:   rg   Ú
pong_counts     €r   rl   z/WebSocketAppTest.testReconnect.<locals>.on_pong+  s8   ø€ à˜!‰OˆJØ˜QŠà—‘×!Ñ!Ô#Ø˜QŠà—	‘	•ð r   r6   )rl   rW   rp   ro   é   )rs   rX   Ú	reconnectzping/pong timed out)r   r8   r   r9   rK   r¥   ÚWebSocketTimeoutExceptionrT   )r   rW   rl   r:   rŸ   r¶   s       @@r   ÚtestReconnectzWebSocketAppTest.testReconnect!  sƒ   ù€ ð ˆ
Øˆô	ô	ô �o‰oÐ/Ô2FÑFÐPWÐbjÔkˆØ�‰ a°aÀ1ˆÔEà×Ñ˜ QÔ'Ø×Ñ˜c¤2×#?Ñ#?Ô@Ø×Ñœ˜S›Ð#8Õ9r   N)r   r   r   r   r   r    ÚunittestÚ
skipUnlessÚTEST_WITH_LOCAL_SERVERr;   rB   rM   r[   r   rb   r{   r   r„   r‡   rŠ   r—   r¦   r±   rº   r   r   r   r   r   %   s=  „ ÷ñ òFòFð €X×ÑÐ/Ð1bÓcñó dðð4 €X×Ñ˜Ð FÓGñ1ó Hð1ð* €X×ÑÐ/Ð1bÓcñ*ó dð*ð €X×ÑÐ/Ð1bÓcñAó dðAð$ €X×ÑÐ+Ð-TÓUñEó VðEð €X×ÑÐ+Ð-TÓUñHó VðHð €X×ÑÐ+Ð-TÓUñ^ó Vð^ð €X×ÑÐ+Ð-TÓUñVó VðVð €X×ÑÐ+Ð-TÓUñyó Vðyð €X×ÑÐ+Ð-TÓUñxó Vðxð €X×ÑÐ+Ð-TÓUñpó Vðpð& €X×ÑÐ/Ð1bÓcñ6ó dð6ð2 €X×ÑÐ/Ð1bÓcñ@ó dð@ð> €X×ÑÐ/Ð1bÓcñ:ó dñ:r   r   Ú__main__)ÚosÚos.pathrH   Ú	websocketr   rx   r»   ÚenvironÚgetr   r   r½   r   ÚTestCaser   r   Úmainr   r   r   ú<module>rÆ      s�   ðó 
Û Û Û Û 
Û ðð( —Z‘Z—^‘^Ð$8¸#Ó>À#ÑEÐ à—z‘z—~‘~Ð&<¸dÓCÐ Ø-°Ñ5Ð Ø€	ôU:�x×(Ñ(ô U:ðp ˆzÒØ€H‡M�M…Oð r   