
    Rj                         d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 	  G d de j
                  Zedk    r e j                     dS dS )	    N)Mockpatch)_get_resp_headers)WebSocketBadStatusException)SSLErrorc                   &    e Zd Zd Zd Zd Zd ZdS )HandshakeLargeResponseTestc           	      2   t                      }dddz  z   g fd}t          d          5 }ddt          t                              idf|_        t          d	|
          5  |                     t                    5 }t          |           ddd           n# 1 swxY w Y   |                     dt          |j
        j        d         t                    r$|j
        j        d                                         n|j
        j        d                    |                     t                    d           |                     t          d D                                  ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zHTest that large HTTP error responses during handshake are read in chunkss   Error details:    Ai N  c                 l                         |           |dk    rt          d          d |         S )N @  z[SSL: BAD_LENGTH] unknown error)appendr   )sockbufsizelarge_response
recv_callss     n/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/websocket/tests/test_handshake_large_response.py	mock_recvzWHandshakeLargeResponseTest.test_large_error_response_chunked_reading.<locals>.mock_recv)   s>    g&&&@AAA!(7(++    !websocket._handshake.read_headersi  content-lengthzBad Requestwebsocket._socket.recvside_effectNs   Error details:r      c              3   "   K   | ]
}|d k    V  dS )r   N ).0calls     r   	<genexpr>zWHandshakeLargeResponseTest.test_large_error_response_chunked_reading.<locals>.<genexpr>J   s&      #I#IdDEM#I#I#I#I#I#Ir   )r   r   strlenreturn_valueassertRaisesr   r   assertIn
isinstance	exceptionargsencodeassertGreater
assertTrueall)self	mock_sockr   mock_read_headerscmr   r   s        @@r   )test_large_error_response_chunked_readingzDHandshakeLargeResponseTest.test_large_error_response_chunked_reading   s    FF	 ,dUl: 
	, 	, 	, 	, 	, 	, 677 	K;L!3s>':':#;#;<.* /YGGG K K&&'BCC 1r%i0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 % &bl&7&:C@@2)!,33555\.q1   ""3z??A666#I#Ij#I#I#I I IJJJ#K K K K K K K K K K K K K K K	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	KsZ   8F(E4BE4B##E4&B#'CE4(F4E8	8F;E8	<FFFc                    t                      }ddz  dfd}t          d          5 }ddt          t                              idf|_        t          d	|
          5  |                     t                    5 }t          |           ddd           n# 1 swxY w Y   t          |j                  }| 	                    d|           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zATest that the fix prevents SSL BAD_LENGTH errors during handshake   Xi   r   c                 x    dz  }t          ||z   t                              }||         }|rdndz  |S )Nr   r   r   )minr"   )r   r   chunk_start	chunk_endresultchunks_returnedlarge_contents        r   mock_recv_chunkedzbHandshakeLargeResponseTest.test_handshake_ssl_large_response_protection.<locals>.mock_recv_chunkedV   sR     *E1KK'13}3E3EFFI";y#89FF1qq1OMr   r   i  r   zInternal Server Errorr   r   NXXXXX)
r   r   r!   r"   r#   r$   r   r   r'   r%   )r-   r.   r;   r/   r0   exception_strr9   r:   s         @@r   ,test_handshake_ssl_large_response_protectionzGHandshakeLargeResponseTest.test_handshake_ssl_large_response_protectionL   s    FF	 u	 	 	 	 	 	 677 	6;L!3s='9'9#:#:;'.* /=NOOO 6 6&&'BCC 1r%i0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 !$BL 1 1g}5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6sY   8C5%C BCB  C#B $-CC5C!	!C5$C!	%C55C9<C9c                    t                      }dfd}t          d          5 }ddt          t                              idf|_        t          d|          5  |                     t                    5 }t          |           d	d	d	           n# 1 swxY w Y   |                     d
t          |j	                             d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )z5Test that normal small responses still work correctlys   Small error messagec                     S )Nr   )r   r   small_responses     r   r   zRHandshakeLargeResponseTest.test_handshake_normal_small_response.<locals>.mock_recvv   s	    !!r   r   i  r   z	Not Foundr   r   NzSmall error message)
r   r   r!   r"   r#   r$   r   r   r%   r'   )r-   r.   r   r/   r0   rA   s        @r   $test_handshake_normal_small_responsez?HandshakeLargeResponseTest.test_handshake_normal_small_responsep   s    FF	/	" 	" 	" 	" 	" 677 	H;L!3s>':':#;#;<.* /YGGG H H&&'BCC 1r%i0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3S5F5FGGGH H H H H H H H H H H H H H H	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	HsY   8C,C9B	CBCB+CC,C	C,C	C,,C03C0c                    t                      }t          d          5 }di df|_        |                     t                    5 }t          |           ddd           n# 1 swxY w Y   t          |j                  }|                     d|           |                     d|           ddd           dS # 1 swxY w Y   dS )z;Test handshake error response without content-length headerr   i  	ForbiddenN403)	r   r   r#   r$   r   r   r!   r'   r%   )r-   r.   r/   r0   r=   s        r    test_handshake_no_content_lengthz;HandshakeLargeResponseTest.test_handshake_no_content_length   sB    FF	677 	6;L.* ""#>?? -2!),,,- - - - - - - - - - - - - - -  --MMM%///MM+}555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s6   %B7AB7A#	#B7&A#	'AB77B;>B;N)__name__
__module____qualname__r1   r>   rB   rF   r   r   r   r	   r	      sX        -K -K -K^"6 "6 "6HH H H.6 6 6 6 6r   r	   __main__)unittestunittest.mockr   r   websocket._handshaker   websocket._exceptionsr   websocket._ssl_compatr   TestCaser	   rG   mainr   r   r   <module>rR      s     % % % % % % % % 2 2 2 2 2 2 = = = = = = * * * * * *&~6 ~6 ~6 ~6 ~6!2 ~6 ~6 ~6B zHMOOOOO r   