
    i2                         S SK r S SKrS SKrS SKJrJrJr  S SKrS SKJ	r	J
r
JrJr  S SKJrJrJrJr  S SKJrJr    " S S\R*                  5      r\S:X  a  \R0                  " 5         gg)	    N)Mockpatch	MagicMock)recv	recv_linesendDEFAULT_SOCKET_OPTION)SSLErrorSSLEOFErrorSSLWantWriteErrorSSLWantReadError)WebSocketTimeoutException"WebSocketConnectionClosedExceptionc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rSrg)
SocketTest'   c                     U R                  [        [        5        U R                  [	        [        5      S5        [        S [         5       5      nU R                  U5        g)z4Test DEFAULT_SOCKET_OPTION contains expected optionsr   c              3   L   #    U  H  oS    [         R                  :H  v   M     g7f)   N)socketTCP_NODELAY).0opts     HC:\des-py\RoboSAPF\venv\Lib\site-packages\websocket/tests/test_socket.py	<genexpr>8SocketTest.test_default_socket_option.<locals>.<genexpr>.   s!       
4ISFf(((4Is   "$N)assertIsInstancer	   listassertGreaterlenany
assertTrue)selftcp_nodelay_founds     r   test_default_socket_option%SocketTest.test_default_socket_option(   sR    3T:345q9    
4I 
 
 	)*    c                     [        5       nSUR                  l        [        US5      nU R                  US5        UR                  R	                  S5        g)zTest normal recv operation	   test data	   N)r   r   return_valueassertEqualassert_called_once_withr#   	mock_sockresults      r   test_recv_normalSocketTest.test_recv_normal3   sC    F	&2	#i#...q1r'   c                    [        5       n[        S5      UR                  l        U R	                  [
        5       n[        US5        SSS5        U R                  [        WR                  5      S5        g! , (       d  f       N4= f)zTest recv with TimeoutErrorConnection timed outr*   N)	r   TimeoutErrorr   side_effectassertRaisesr   r,   str	exceptionr#   r/   cms      r   test_recv_timeout_error"SocketTest.test_recv_timeout_error=   s`    F	%12H%I	"89RA : 	R\\*,BC :9s   A55
Bc                    [        5       n[        R                  " S5      nSUl        X!R                  l        SUR                  l        U R                  [        5       n[	        US5        SSS5        SSK
nUR                  S:  a&  U R                  [        WR                  5      S5        gU R                  [        WR                  5      S5        g! , (       d  f       Nn= f)	zTest recv with socket.timeoutSocket timed out)r?         >@r*   Nr   )   
   r4   )r   r   timeoutargsr   r6   
gettimeoutr+   r7   r   sysversion_infor,   r8   r9   )r#   r/   timeout_excr;   rF   s        r   test_recv_socket_timeout#SocketTest.test_recv_socket_timeoutG   s    F	nn%780%0",0	)89RA : 	w&S.0FGS.0BC :9s   C
C!c                    [        5       n[        S5      nSUl        X!R                  l        U R                  [        5       n[        US5        SSS5        U R                  [        WR                  5      S5        g! , (       d  f       N4= f)z Test recv with SSL timeout errorThe operation timed out)rL   r*   N)
r   r
   rD   r   r6   r7   r   r,   r8   r9   )r#   r/   ssl_excr;   s       r   test_recv_ssl_timeout SocketTest.test_recv_ssl_timeout]   sj    F	453%,"89RA : 	R\\*,EF :9s   A==
Bc                     [        5       n[        S5      nSUl        X!R                  l        U R                  [        5         [        US5        SSS5        g! , (       d  f       g= f)z$Test recv with SSL non-timeout errorSSL certificate error)rQ   r*   N)r   r
   rD   r   r6   r7   )r#   r/   rM   s      r   test_recv_ssl_non_timeout_error*SocketTest.test_recv_ssl_non_timeout_errori   sK    F	231%," x(A )((s   A
A&c                     [        5       nSUR                  l        U R                  [        5       n[        US5        SSS5        U R                  [        WR                  5      S5        g! , (       d  f       N4= f)z1Test recv with empty response (connection closed)r'   r*   Nz#Connection to remote host was lost.)r   r   r+   r7   r   r,   r8   r9   r:   s      r   test_recv_empty_response#SocketTest.test_recv_empty_responset   s\    F	&)	#ABbA C 	R\\*,QR CBs   A,,
A:c                    [        5       n[        5       S/UR                  l        [	        S5       n[        5       nX2l        S/UR                  l        [        US5      nU R                  US5        UR                  R                  5         UR                  R                  5         SSS5        g! , (       d  f       g= f)z.Test recv with SSLWantReadError (should retry)s   data after retryselectors.DefaultSelectorTd   N)r   r   r   r6   r   r+   selectr,   registerassert_calledcloser#   r/   mock_selector_classmock_selectorr0   s        r   test_recv_ssl_want_read_error(SocketTest.test_recv_ssl_want_read_error~   s    F	 '7&8:M%N	"./3F FM/<,15M  -)S)FV%89""002--/ 0//s   A5B//
B=c                 n   [        5       n[        5       UR                  l        SUR                  l        [        S5       n[        5       nX2l        / UR                  l        U R                  [        5         [        US5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z.Test recv with SSLWantReadError that times outg      ?rX   rY   N)
r   r   r   r6   rE   r+   r   rZ   r7   r   )r#   r/   r_   r`   s       r   test_recv_ssl_want_read_timeout*SocketTest.test_recv_ssl_want_read_timeout   s    F	%5%7	",/	)./3F FM/<,02M  -""#<=Y$ > 0/
 >= 0/s$    7B&7BB&
B#	B&&
B4c                     [        5       n/ SQn[        SUS9 n[        U5      nU R                  US5        U R                  UR                  S5        SSS5        g! , (       d  f       g= f)zTest recv_line functionality)   H   e   lri      o   
zwebsocket._socket.recv)r6   s   Hello
   N)r   r   r   r,   
call_count)r#   r/   
recv_calls	mock_recvr0   s        r   test_recv_lineSocketTest.test_recv_line   sZ    F	 ;
+D	y)FVZ0Y1115	 EDDs   :A
A*c                     [        5       nSUR                  l        SUR                  l        [        US5      nU R	                  US5        UR                  R                  S5        g)zTest normal send operationr*   r@   r)   Nr   r   r+   rE   r,   assert_called_withr.   s      r   test_send_normalSocketTest.test_send_normal   sQ    F	&'	#,0	)i.#)),7r'   c                     [        5       nSUR                  l        SUR                  l        [        US5      nU R	                  US5        UR                  R                  S5        g)z*Test send with zero timeout (non-blocking)r*   r   r)   N)r   r   r+   rE   r,   r-   r.   s      r   test_send_zero_timeout!SocketTest.test_send_zero_timeout   sQ    F	&'	#,-	)i.#..|<r'   c                 .   [        5       nSUR                  l        [        S5      UR                  l        U R                  [        5       n[	        US5        SSS5        U R                  [        WR                  5      S5        g! , (       d  f       N4= f)zTest send with SSLEOFErrorr@   zConnection closedr)   Nzsocket is already closed.)r   rE   r+   r   r   r6   r7   r   r,   r8   r9   r:   s      r   test_send_ssl_eof_error"SocketTest.test_send_ssl_eof_error   sp    F	,0	)%01D%E	"ABbL) C 	R\\*,GH CBs   B
Bc                    [        5       nSUR                  l        [        5       S/UR                  l        [        S5       n[        5       nX2l        S/UR                  l        [	        US5      nU R                  US5        UR                  R                  5         UR                  R                  5         SSS5        g! , (       d  f       g= f)z/Test send with SSLWantWriteError (should retry)r@   r*   rX   Tr)   N)r   rE   r+   r   r   r6   r   rZ   r,   r[   r\   r]   r^   s        r   test_send_ssl_want_write_error)SocketTest.test_send_ssl_want_write_error   s    F	,0	) '8&91%=	"./3F FM/<,15M  -)\2FVQ'""002--/ 0//s   A5C  
Cc                    [        5       nSUR                  l        [        R                  " S5      n[
        R                  Ul        [
        R                  S4Ul        US/UR                  l	        [        S5       n[        5       nXCl        S/UR                  l        [        US5      nU R                  US5        SSS5        g! , (       d  f       g= f)z*Test send with EAGAIN error (should retry)r@    Resource temporarily unavailabler*   rX   Tr)   Nr   rE   r+   r   errorerrnoEAGAINrD   r   r6   r   rZ   r,   r#   r/   eagain_errorr_   r`   r0   s         r   test_send_socket_eagain_error(SocketTest.test_send_socket_eagain_error   s    F	,0	) ||$FG"\\"\\+MN '3A%6	"./3F FM/<,15M  -)\2FVQ' 0//   <AC
Cc                    [        5       nSUR                  l        [        R                  " S5      n[
        R                  Ul        [
        R                  S4Ul        US/UR                  l	        [        S5       n[        5       nXCl        S/UR                  l        [        US5      nU R                  US5        SSS5        g! , (       d  f       g= f)z/Test send with EWOULDBLOCK error (should retry)r@   zOperation would blockr*   rX   Tr)   N)r   rE   r+   r   r   r   EWOULDBLOCKrD   r   r6   r   rZ   r,   )r#   r/   ewouldblock_errorr_   r`   r0   s         r   "test_send_socket_ewouldblock_error-SocketTest.test_send_socket_ewouldblock_error   s    F	,0	) #LL)@A"'"3"3"'"3"35L!M '8%;	"./3F FM/<,15M  -)\2FVQ' 0//r   c                 h   [        5       nSUR                  l        [        R                  " S5      n[
        R                  Ul        [
        R                  S4Ul        X!R                  l	        U R                  [        R                  5         [        US5        SSS5        g! , (       d  f       g= f)z0Test send with other socket error (should raise)r@   zConnection reset by peerr)   N)r   rE   r+   r   r   r   
ECONNRESETrD   r   r6   r7   )r#   r/   other_errors      r   test_send_socket_other_error'SocketTest.test_send_socket_other_error  s|    F	,0	) ll#=>!,,!,,.HI%0"v||,L) -,,s   B##
B1c                    [        5       nSUR                  l        [        R                  " S5      nSUl        X!R                  l        U R                  [        R                  5         [        US5        SSS5        g! , (       d  f       g= f)z-Test send with socket error that has no errnor@   Generic socket error)r   r)   N)	r   rE   r+   r   r   rD   r   r6   r7   )r#   r/   no_errno_errors      r   test_send_socket_error_no_errno*SocketTest.test_send_socket_error_no_errno  sb    F	,0	)  &<=7%3"v||,L) -,,s   (A>>
Bc                    [        5       nSUR                  l        [        R                  " S5      n[
        R                  Ul        [
        R                  S4Ul        X!R                  l	        [        S5       n[        5       nXCl        / UR                  l        [        US5      nU R                  US5        SSS5        g! , (       d  f       g= f)z!Test send write operation timeoutr@   r   rX   r)   r   Nr   r   s         r   test_send_write_timeout"SocketTest.test_send_write_timeout(  s    F	,0	) ||$FG"\\"\\+MN%1"./3F FM/<,02M  -)\2F VQ' 0//s   9A C
Cc                     [        5       nSUR                  l        SUR                  l        [        US5      nU R	                  US5        UR                  R                  S5        g)z.Test send with string data (should be encoded)r*   r@   z	test datar)   Nrs   r.   s      r   test_send_string_data SocketTest.test_send_string_data>  sQ    F	&'	#,0	)i-#)),7r'   c                 J   [        5       nSUR                  l        [        R                  " S5      n[
        R                  Ul        [
        R                  S4Ul        US/UR                  l	        [        S5       n[        5       nXCl        S/UR                  l        [        US5      nU R                  US5        UR                  R                  5         UR                  R                  5         UR                  R                  5         SSS5        g! , (       d  f       g= f)zTest send retry mechanismr@   r   r*   rX   Tr)   N)r   rE   r+   r   r   r   r   rD   r   r6   r   rZ   r,   r[   r\   r]   r   s         r   test_send_partial_send_retry'SocketTest.test_send_partial_send_retryI  s    F	,0	) ||$FG"\\"\\+MN '3A%6	"./3F FM/<,15M  -)\2FVQ'""002  ..0--/ 0//s   <BD
D" N)__name__
__module____qualname____firstlineno__r%   r1   r<   rI   rN   rR   rU   ra   rd   rp   ru   rx   r{   r~   r   r   r   r   r   r   r   __static_attributes__r   r'   r   r   r   '   sp    	+2DD,
G	S0$%6	8	=	I0&(,(,**(,	80r'   r   __main__)r   r   unittestunittest.mockr   r   r   timewebsocket._socketr   r   r   r	   websocket._ssl_compatr
   r   r   r   websocket._exceptionsr   r   TestCaser   r   mainr   r'   r   <module>r      s^       0 0  J J 
&z0"" z0z	 zMMO r'   