
    i                         S SK r S SKJrJr  S SKJr  S SKJr  S SKJ	r	    " S S\ R                  5      r\S:X  a  \ R                  " 5         gg)	    N)Mockpatch)_get_resp_headers)WebSocketBadStatusException)SSLErrorc                   ,    \ rS rSrS rS rS rS rSrg)HandshakeLargeResponseTest   c           	        ^^ [        5       nSSS-  -   m/ mUU4S jn[        S5       nSS[        [        T5      5      0S4Ul        [        S	US
9   U R                  [        5       n[        U5        SSS5        U R                  S[        WR                  R                  S   [        5      (       a'  UR                  R                  S   R                  5       OUR                  R                  S   5        U R                  [        T5      S5        U R                  [        S T 5       5      5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)zHTest that large HTTP error responses during handshake are read in chunkss   Error details:    Ai N  c                 R   > TR                  U5        US:  a  [        S5      eTS U $ )N @  z[SSL: BAD_LENGTH] unknown error)appendr   )sockbufsizelarge_response
recv_callss     ZC:\des-py\RoboSAPF\venv\Lib\site-packages\websocket/tests/test_handshake_large_response.py	mock_recvWHandshakeLargeResponseTest.test_large_error_response_chunked_reading.<locals>.mock_recv)   s1    g&@AA!(7++    !websocket._handshake.read_headersi  content-lengthzBad Requestwebsocket._socket.recvside_effectNs   Error details:r      c              3   *   #    U  H	  oS :*  v   M     g7f)r   N ).0calls     r   	<genexpr>WHandshakeLargeResponseTest.test_large_error_response_chunked_reading.<locals>.<genexpr>J   s     #IjdEMjs   )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_readingDHandshakeLargeResponseTest.test_large_error_response_chunked_reading   s;    F	 ,dUl: 
	, 67;L!3s>':#;<.* /YG&&'BCr%i0 D % &bll&7&7&:C@@ ))!,335\\..q1 ""3z?A6#Ij#I IJ# H 87 DC HG 87s<   )E'E(E4C E4E'
EE
E$	 E''
E5c                   ^^ [        5       nSS-  mSmUU4S jn[        S5       nSS[        [        T5      5      0S4Ul        [        S	US
9   U R                  [        5       n[        U5        SSS5        [        WR                  5      nU R                  SU5        SSS5        SSS5        g! , (       d  f       NF= f! , (       d  f       N(= f! , (       d  f       g= f)zATest that the fix prevents SSL BAD_LENGTH errors during handshake   Xi   r   c                 l   > TS-  n[        X!-   [        T5      5      nTX# nTU(       a  S-  mU$ S-  mU$ )Nr   r   r   )minr%   )r   r   chunk_start	chunk_endresultchunks_returnedlarge_contents        r   mock_recv_chunkedbHandshakeLargeResponseTest.test_handshake_ssl_large_response_protection.<locals>.mock_recv_chunkedV   sM     *E1KK13}3EFI";9FFq1OM 121OMr   r   i  r   zInternal Server Errorr   r   NXXXXX)
r   r   r$   r%   r&   r'   r   r   r*   r(   )r0   r1   r?   r2   r3   exception_strr=   r>   s         @@r   ,test_handshake_ssl_large_response_protectionGHandshakeLargeResponseTest.test_handshake_ssl_large_response_protectionL   s     F	 u	 67;L!3s='9#:;'.* /=NO&&'BCr%i0 D !$BLL 1g}5 P 87 DC PO 87s;   )CC%B11/C C1
B?;C
C	C
C!c                   ^ [        5       nSmU4S jn[        S5       nSS[        [        T5      5      0S4Ul        [        SUS9   U R                  [        5       n[        U5        S	S	S	5        U R                  S
[        WR                  5      5        S	S	S	5        S	S	S	5        g	! , (       d  f       ND= f! , (       d  f       N(= f! , (       d  f       g	= f)z5Test that normal small responses still work correctlys   Small error messagec                    > T$ )Nr   )r   r   small_responses     r   r   RHandshakeLargeResponseTest.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*   )r0   r1   r   r2   r3   rG   s        @r   $test_handshake_normal_small_response?HandshakeLargeResponseTest.test_handshake_normal_small_responsep   s     F	/	" 67;L!3s>':#;<.* /YG&&'BCr%i0 D 3S5FG H 87 DC HG 87s;   )C
B9B(*-B9C
(
B62B99
C	C


Cc                 \   [        5       n[        S5       nS0 S4Ul        U R                  [        5       n[        U5        SSS5        [        WR                  5      nU R                  SU5        U R                  SU5        SSS5        g! , (       d  f       NP= f! , (       d  f       g= f)z;Test handshake error response without content-length headerr   i  	ForbiddenN403)	r   r   r&   r'   r   r   r$   r*   r(   )r0   r1   r2   r3   rB   s        r    test_handshake_no_content_length;HandshakeLargeResponseTest.test_handshake_no_content_length   s     F	67;L.* ""#>?2!), @  -MMM%/MM+}5 87 @? 87s#    BBAB
B	B
B+r   N)	__name__
__module____qualname____firstlineno__r4   rC   rI   rN   __static_attributes__r   r   r   r	   r	      s    -K^"6HH.6r   r	   __main__)unittestunittest.mockr   r   websocket._handshaker   websocket._exceptionsr   websocket._ssl_compatr   TestCaser	   rP   mainr   r   r   <module>r]      sF     % 2 = *&~6!2!2 ~6B zMMO r   