Ë
    Bü´j|7  ã                   óî   — 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    ú]/root/workspace/ytshorts/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__0   s
   € Ø#ˆÕr   c                 ó   — | j                   S ©Nr   r   s    r   ÚpendingzMockSocket.pending3   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__:   s)   € ØˆÔØˆÔØˆŒØ!ˆÔØˆÕr   c                 ó>   — | j                   j                  ||f«       y r!   )r&   Úappend)r   ÚsigÚhandlers      r   ÚsignalzMockDispatcher.signalA   s   € Ø×Ñ× Ñ  # w Õ0r   c                 ó:   — | j                   j                  d«       y r   )r'   r,   r   s    r   ÚabortzMockDispatcher.abortD   s   € Ø×Ñ×Ñ Õ%r   c                 ó>   — | j                   j                  ||f«       y r!   )r(   r,   )r   r   Úcallbacks      r   ÚreadzMockDispatcher.readG   s   € Ø�‰×Ñ  hÐ/Õ0r   c                 óB   — | j                   j                  ||||f«       y r!   )r)   r,   )r   r   ÚdataÚ	send_funcÚdisconnect_handlers        r   Ú	buffwritezMockDispatcher.buffwriteJ   s    € Ø×Ñ×#Ñ# T¨4°Ð<NÐ$OÕPr   c                 ó@   — | j                   j                  |||f«       y r!   )r*   r,   )r   Úsecondsr3   Úargss       r   ÚtimeoutzMockDispatcher.timeoutM   s   € Ø×Ñ×!Ñ! 7¨H°dÐ";Õ<r   N)
r   r   r   r   r   r/   r1   r4   r9   r=   r   r   r   r$   r$   7   s$   „ Ù@ò ò1ò&ò1òQó=r   r$   c                   óx   — 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d„ Zy)ÚDispatcherTestc                 ó"   — t        «       | _        y r!   )r   Úappr   s    r   ÚsetUpzDispatcherTest.setUpR   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_initU   s@   € ä# D§H¡H¨dÓ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Œ   € ä# D§H¡H¨dÓ3ˆ
Ü“6ˆð 	×Ñ˜4 Ô*Ø×#Ñ#Ô%ð 	×ÑÔÜ—Y‘Y“[ˆ
Ø×Ñ˜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_reconnectn   sŒ   € ä# D§H¡H¨dÓ3ˆ
Ü“fˆð 	×Ñ˜Q Ô,Ø×+Ñ+¸Ð+Ô>ð 	×ÑÔ Ü"3Ð4FÓ"GˆÔà×ÑÔ0Ó1ñ 	1Ø× Ñ   KÔ0÷	1÷ 	1ñ 	1ús   Á: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~   € ä# D§H¡H¨dÓ3ˆ
Ü“Fˆ	Ø ˆ	äÐ/Ó0ð 	5°IÜ%(¨£^ˆIÔ"Ø—_‘_ Y°	Ó:ˆFà×-Ñ-¨i¸ÔCØ×Ñ˜V¤S¨£^Ô4÷	5÷ 	5ñ 	5ús   ®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Ü ›FˆMØ/<ÐÔ,ð 13ˆM× Ñ Ô-ôð 0;ˆM× Ñ Ô,à�O‰O˜I }°nÔEð ×"Ñ"×0Ñ0Ô2Ø× Ñ ×3Ñ3°CÔ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‘�
Ø ’?Ø ˜6�Mà,1�D—H‘HÔ)Ø�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Ü ›FˆMØ/<ÐÔ,ð ˆJõð 0BˆM× Ñ Ô,à�O‰O˜I }°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¿   ø€ ä" 4§8¡8¨SÓ1ˆ
Ü¨$Ô/ˆÜ›ˆô #›ˆØ*ˆ�‰�‰ÔäÐ.Ó/ð 	+Ð3FÜ ›FˆMØ/<ÐÔ,Ø02ˆM× Ñ Ô-ôð 0;ˆM× Ñ Ô,à�O‰O˜D -°Ô@à×"Ñ"×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^   € ä" 4§8¡8¨SÓ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†   € ä" 4§8¡8¨SÓ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   € ä" 4§8¡8¨SÓ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Ðä# D§H¡H¨d°OÐEVÓWˆà×Ñ˜Ÿ™ d§h¡hÔ/Ø×Ñ˜×-Ñ-¨tÔ4Ø×Ñ˜×+Ñ+¨_Ô=Ø×Ñ˜×1Ñ1Ð3DÔEð 	×Ñœ˜_×9Ñ9Ó:¸AÔ>Ø&×3Ñ3°AÑ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ÐÜ# D§H¡H¨d°OÐEVÓWˆä“Fˆ	Ü›ˆÜ›ˆà�‰�Y ¨~Ô>ð 	×Ñœ˜_×7Ñ7Ó8¸!Ô<Ø×Ñ˜×3Ñ3°AÑ6¸ÀMÐ8RÔSð 	×Ñœ˜_×:Ñ:Ó;¸QÔ?Ø&×4Ñ4°QÑ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_timeout4  s†   € ä(Ó*ˆÜ ›FÐÜ# D§H¡H¨d°OÐEVÓ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_sendF  s÷   € ä(Ó*ˆÜ ›FÐÜ# D§H¡H¨d°OÐEVÓWˆä“Fˆ	Ø ˆ	äÐ/Ó0ð 	5°IØ—\‘\ )¨YÓ7ˆFð ×ÑœS ×!@Ñ!@ÓAÀ1ÔEØ"×2Ñ2°1Ñ5ˆDØ×Ñ˜T !™W iÔ0Ø×Ñ˜T !™W iÔ0Ø×Ñ˜T !™W iÔ0Ø×Ñ˜T !™WÐ&7Ô8ð ×Ñ˜V¤S¨£^Ô4÷	5÷ 	5ñ 	5ús   ÁB6DÄDc                 ó`  — t        «       }t        | j                  d|d«      }| j                  |j                  «       t        «       }t        d«      5  |j                  |d«      }ddd«       |j                  d   }| j                  |d   «       | j                  d«       y# 1 sw Y   Œ?xY w)zûWrappedDispatcher tolerates handleDisconnect=None per the rel
        buffwrite contract: the disconnect callback is optional (rel's
        BuffWriter substitutes a logging default), so None must be
        forwarded as-is, never replaced by a no-op.rŠ   Nr]   s   datar   r˜   é   )
r$   r	   rA   r‡   rŒ   r   r   r`   r)   rE   )r   r�   r�   ra   rd   r™   s         r   Ú1test_wrapped_dispatcher_send_no_handle_disconnectz@DispatcherTest.test_wrapped_dispatcher_send_no_handle_disconnect]  s�   € ô
 )Ó*ˆÜ# D§H¡H¨d°OÀTÓJˆà×Ñ˜'×2Ñ2Ô3ä“Fˆ	ÜÐ/Ó0ñ 	6Ø—\‘\ )¨WÓ5ˆF÷	6ð ×.Ñ.¨qÑ1ˆØ×Ñ˜$˜q™'Ô"Ø×Ñ˜ Õ#÷	6ð 	6ús   ÁB$Â$B-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_timeouto  s±   € ä(Ó*ˆÜ ›FÐÜ# D§H¡H¨d°OÐEVÓ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_reconnect�  s§   € ä(Ó*ˆÜ ›FÐÜ# D§H¡H¨d°OÐEVÓ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?   r?   Q   s]   „ òò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Û Û ã ÷ó ð÷( ñ  ÷#ñ #÷=ñ =ô4+�X×&Ñ&ô +ðD
 ˆzÒØ€H‡M�M…Oð r   