§
    JŠtjP'  ã                   ó´   — d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ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Ú	MagicMock)ÚABNF)Ú	WebSocket)ÚWebSocketProtocolExceptionÚWebSocketPayloadException)ÚSSLErrorc                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚLargePayloadTestc                 ó¾  — g d¢}|D ]Õ\  }}|                       ||¬¦  «        5  d|z  }t          j        |t          j        ¦  «        }|                     ¦   «         }|                      |t          ¦  «         |                      t          |¦  «        |k    ¦  «         |  	                    t          |j
        ¦  «        |¦  «         ddd¦  «         n# 1 swxY w Y   ŒÖdS )z:Test WebSocket frame length encoding at various boundaries)	)é}   zSingle byte length)é~   zTwo byte length start)é   zTwo byte length)éÿÿ  zTwo byte length max)é   zEight byte length start)é @  z16KB boundary)é@  zJust over 16KB)é €  Ú32KB)i   Ú128KB)ÚlengthÚdescriptionó   AN)ÚsubTestr   Úcreate_frameÚOPCODE_BINARYÚformatÚassertIsInstanceÚbytesÚ
assertTrueÚlenÚassertEqualÚdata)ÚselfÚ
test_casesr   r   ÚpayloadÚframeÚ	formatteds          úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websocket/tests/test_large_payloads.pyÚ%test_frame_length_encoding_boundariesz6LargePayloadTest.test_frame_length_encoding_boundaries   s#  € ð

ð 

ð 

ˆ
ð $.ð 	:ð 	:ÑˆF�KØ—’ V¸�ÑEÔEð :ð :à ™-�õ Ô)¨'µ4Ô3EÑFÔF�ð "ŸLšL™NœN�	ð ×%Ò% iµÑ7Ô7Ð7Ø—’¥ I¡¤°&Ò 8Ñ9Ô9Ð9ð × Ò ¥ U¤Z¡¤°&Ñ9Ô9Ð9ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :øð	:ð 	:s   £B"CÃC	ÃC	c                 óp  ‡‡	— ddz  }g Š	d}t          dt          |¦  «        |¦  «        D ]"}‰	                     ||||z   …         ¦  «         Œ#dŠˆˆ	fd„}ddlm}  ||d¬¦  «        }|                     t          |¦  «        ¦  «        }|                      ||¦  «         |                      ‰d	¦  «         d
S )zHTest receiving large payloads in chunks (simulating the 16KB recv issue)ó   Br   r   r   c                 óL   •— ‰t          ‰¦  «        k    rdS ‰‰         }‰dz  Š|S ©Nó    é   ©r"   ©ÚbufsizeÚresultÚ
call_countÚchunkss     €€r*   Ú	mock_recvzCLargePayloadTest.test_recv_large_payload_chunked.<locals>.mock_recvO   ó1   ø€ à�S ™[œ[Ò(Ð(Ø�sØ˜JÔ'ˆFØ˜!‰OˆJØˆMr0   ©Úframe_bufferT©Úskip_utf8_validationr1   N)Úranger"   ÚappendÚwebsocket._abnfr;   Úrecv_strictr#   ÚassertGreater)
r%   Úlarge_payloadÚ
chunk_sizeÚir8   r;   Úfbr5   r6   r7   s
           @@r*   Útest_recv_large_payload_chunkedz0LargePayloadTest.test_recv_large_payload_chunkedA   sù   øø€ ð ˜u™ˆð ˆØˆ
Ý�q�#˜mÑ,Ô,¨jÑ9Ô9ð 	=ð 	=ˆAØ�MŠM˜-¨¨A°
©NÐ(:Ô;Ñ<Ô<Ð<Ð<àˆ
ð	ð 	ð 	ð 	ð 	ð 	ð 	1Ð0Ð0Ð0Ð0Ð0àˆ\˜)¸$Ð?Ñ?Ô?ˆð —’¥ MÑ 2Ô 2Ñ3Ô3ˆà×Ò˜ Ñ/Ô/Ð/à×Ò˜: qÑ)Ô)Ð)Ð)Ð)r0   c                 óN  ‡— d}g Šˆfd„}ddl m}  ||d¬¦  «        }|                     |¦  «        }|                      t	          |¦  «        |¦  «         |                      t          d„ ‰D ¦   «         ¦  «        ¦  «         |                      t	          ‰¦  «        d¦  «         d	S )
z&Simulate SSL BAD_LENGTH error scenarior   c                 ó~   •— ‰                      | ¦  «         | dk    rt          d¦  «        ‚dt          | d¦  «        z  S )Nr   z[SSL: BAD_LENGTH] unknown erroró   C)r?   r
   Úmin)r4   Ú
recv_callss    €r*   Úmock_recv_with_ssl_limitzTLargePayloadTest.test_ssl_large_payload_simulation.<locals>.mock_recv_with_ssl_limitk   sD   ø€ Ø×Ò˜gÑ&Ô&Ð&à˜ŠˆÝÐ@ÑAÔAÐAØ�#˜g uÑ-Ô-Ñ-Ð-r0   r   r:   Tr<   c              3   ó"   K  — | ]
}|d k    V — ŒdS )r   N© )Ú.0Úcalls     r*   ú	<genexpr>zELargePayloadTest.test_ssl_large_payload_simulation.<locals>.<genexpr>|   s&   è è € ÐAÐA¨d˜D EšMÐAÐAÐAÐAÐAÐAr0   r1   N)r@   r;   rA   r#   r"   r!   ÚallrB   )r%   Úpayload_sizerM   r;   rF   r5   rL   s         @r*   Ú!test_ssl_large_payload_simulationz2LargePayloadTest.test_ssl_large_payload_simulationc   sÍ   ø€ ð ˆàˆ
ð	.ð 	.ð 	.ð 	.ð 	.ð 	1Ð0Ð0Ð0Ð0Ð0àˆ\Ð2ÈÐNÑNÔNˆð —’ Ñ-Ô-ˆð 	×Ò�˜V™œ lÑ3Ô3Ð3à�Š�ÐAÐA°jÐAÑAÔAÑAÔAÑBÔBÐBà×Ò�3˜z™?œ?¨AÑ.Ô.Ð.Ð.Ð.r0   c                 ó   — g d¢}|D �]}|                       |¬¦  «        5  d|z  }t          j        |t          j        ¦  «        }|                     ¦   «         }|                      |t          ¦  «         |                      t          |j	        ¦  «        |¦  «         d}|t          j
        k     rd|z   }n|t          j        k     rd|z   }nd|z   }|                      t          |¦  «        ||z   ¦  «         ddd¦  «         n# 1 swxY w Y   �ŒdS )z6Test frame formatting with various large payload sizes)iÿ?  r   r   r   r   r   )Úsizeó   Dé   é   é
   N)r   r   r   r   r   r   r    r#   r"   r$   ÚLENGTH_7Ú	LENGTH_16)r%   Ú
test_sizesrW   r'   r(   r)   Ú	mask_sizeÚexpected_header_sizes           r*   Ú test_frame_format_large_payloadsz1LargePayloadTest.test_frame_format_large_payloads€   s‚  € ð @Ð?Ð?ˆ
àð 	Nñ 	NˆDØ—’ 4�Ñ(Ô(ð Nð NØ ™+�ÝÔ)¨'µ4Ô3EÑFÔF�ð "ŸLšL™NœN�	ð ×%Ò% iµÑ7Ô7Ð7Ø× Ò ¥ U¤Z¡¤°$Ñ7Ô7Ð7ð �	Ø�$œ-Ò'Ð'ð ˜I™ð )Ð(ð �DœNÒ*Ð*ð ˜I™ð )Ð(ð ˜Y™ð )ð × Ò ¥ Y¡¤Ð1EÈÑ1LÑMÔMÐMð=Nð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nùð	Nð 	Ns    CDÄD	ÄD	c                 óP  ‡— t          ¦   «         }g Šˆfd„}||_        d|j        _        t	          ¦   «         }||_        d|_        ddz  }t          d¦  «        5 }d„ |_        | 	                    |¦  «        }|  
                    |d¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
z?Test that large payloads are sent in chunks to avoid SSL issuesc                 óf   •— ‰                      t          | ¦  «        ¦  «         t          | ¦  «        S ©N)r?   r"   )r$   Úsent_chunkss    €r*   Ú	mock_sendzDLargePayloadTest.test_send_large_payload_chunking.<locals>.mock_send¯   s)   ø€ Ø×Ò�s 4™yœyÑ)Ô)Ð)Ý�t‘9”9Ðr0   g      >@Tó   Er   zwebsocket._core.sendc                 ó    — t          |¦  «        S rd   r2   )Úsockr$   s     r*   ú<lambda>zCLargePayloadTest.test_send_large_payload_chunking.<locals>.<lambda>À   s   € ½CÀ¹I¼I€ r0   r   N)r   ÚsendÚ
gettimeoutÚreturn_valuer   ri   Ú	connectedr   Úside_effectÚsend_binaryrB   )r%   Ú	mock_sockrf   ÚwsrC   Úmock_send_funcr5   re   s          @r*   Ú test_send_large_payload_chunkingz1LargePayloadTest.test_send_large_payload_chunking§   s  ø€ õ ‘F”Fˆ	ð ˆð	ð 	ð 	ð 	ð 	ð #ˆ	ŒØ,0ˆ	ÔÔ)õ ‰[Œ[ˆØˆŒØˆŒð ˜u™ˆõ Ð)Ñ*Ô*ð 	*¨nØ)EÐ)EˆNÔ&ð —^’^ MÑ2Ô2ˆFð ×Ò˜v qÑ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   Á4BÂBÂ"Bc           	      ó¬  — ddz  }t          j        |t           j        ¦  «        }|                     ¦   «         }|                      |t
          ¦  «         t          j        dd¦  «        dz   }t          ddddt           j        d|¦  «        }|  	                    t          ¦  «        5  |                     d¬	¦  «         d
d
d
¦  «         d
S # 1 swxY w Y   d
S )z.Test UTF-8 validation with large text payloadsu   Hello ä¸–ç•Œ! iÐ  z!Hiè  s   ÿþ invalid utf8r1   r   Fr<   N)r   r   ÚOPCODE_TEXTr   r   r    ÚstructÚpackÚOPCODE_CLOSEÚassertRaisesr   Úvalidate)r%   Ú
large_textr(   r)   Úinvalid_utf8_close_datas        r*   Útest_utf8_validation_large_textz0LargePayloadTest.test_utf8_validation_large_textÈ   s  € ð &¨Ñ,ˆ
õ Ô! *­dÔ.>Ñ?Ô?ˆð —L’L‘N”Nˆ	Ø×Ò˜i­Ñ/Ô/Ð/õ #)¤+¨d°DÑ"9Ô"9Ð<TÑ"TÐõ �Q˜˜1˜a¥Ô!2°AÐ7NÑOÔOˆð ×ÒÕ9Ñ:Ô:ð 	7ð 	7Ø�NŠN°ˆNÑ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7s   Â%C	Ã	CÃCc                 ó"  ‡‡‡— ddz  Šˆfd„t          dt          ‰¦  «        d¦  «        D ¦   «         ŠdŠˆˆfd„}ddlm}  ||d¬	¦  «        }|                     d¦  «        }|                      |‰¦  «         |                      ‰d
¦  «         dS )z9Test frame buffer with edge cases that could trigger bugsó   Fr   c                 ó*   •— g | ]}‰||d z   …         ‘ŒS )é   rO   )rP   rE   Úpayload_16ks     €r*   ú
<listcomp>zALargePayloadTest.test_frame_buffer_edge_cases.<locals>.<listcomp>æ   s&   ø€ ÐVÐVÐV°�+˜a ! d¡(˜lÔ+ÐVÐVÐVr0   r   r‚   c                 óL   •— ‰t          ‰¦  «        k    rdS ‰‰         }‰dz  Š|S r/   r2   r3   s     €€r*   r8   z@LargePayloadTest.test_frame_buffer_edge_cases.<locals>.mock_recvê   r9   r0   r:   Tr<   rY   N)r>   r"   r@   r;   rA   r#   )r%   r8   r;   rF   r5   r6   r7   rƒ   s        @@@r*   Útest_frame_buffer_edge_casesz-LargePayloadTest.test_frame_buffer_edge_casesß   sÏ   øøø€ ð ˜U‘lˆð WÐVÐVÐVµU¸1½cÀ+Ñ>NÔ>NÐPTÑ5UÔ5UÐVÑVÔVˆàˆ
ð	ð 	ð 	ð 	ð 	ð 	ð 	1Ð0Ð0Ð0Ð0Ð0àˆ\˜)¸$Ð?Ñ?Ô?ˆØ—’ Ñ&Ô&ˆà×Ò˜ Ñ-Ô-Ð-à×Ò˜ QÑ'Ô'Ð'Ð'Ð'r0   c                 ó   — d}d|z  }t          j        |t           j        ¦  «        }|                     ¦   «         }|                      |t
          ¦  «         |                      t          |j        ¦  «        |¦  «         dS )z4Test behavior at WebSocket maximum frame size limitsi   ó   GN)	r   r   r   r   r   r    r#   r"   r$   )r%   Ú
large_sizer'   r(   r)   s        r*   Útest_max_frame_size_limitsz+LargePayloadTest.test_max_frame_size_limitsû   su   € ð !ˆ
Ø˜Ñ#ˆõ Ô! '­4Ô+=Ñ>Ô>ˆð —L’L‘N”Nˆ	Ø×Ò˜i­Ñ/Ô/Ð/ð 	×Ò�˜UœZ™œ¨*Ñ5Ô5Ð5Ð5Ð5r0   N)Ú__name__Ú
__module__Ú__qualname__r+   rG   rU   ra   rt   r~   r†   rŠ   rO   r0   r*   r   r      s“   € € € € € ð :ð  :ð  :ðD *ð  *ð  *ðD/ð /ð /ð:%Nð %Nð %NðN*ð *ð *ðB7ð 7ð 7ð.(ð (ð (ð86ð 6ð 6ð 6ð 6r0   r   Ú__main__)Úunittestrw   Úunittest.mockr   r   r   r@   r   Úwebsocket._corer   Úwebsocket._exceptionsr   r	   Úwebsocket._ssl_compatr
   ÚTestCaser   r‹   ÚmainrO   r0   r*   ú<module>r–      sä   ðà €€€Ø €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à  Ð  Ð  Ð  Ð  Ð  Ø %Ð %Ð %Ð %Ð %Ð %Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ *Ð *Ð *Ð *Ð *Ð *ðð&o6ð o6ð o6ð o6ð o6�xÔ(ñ o6ô o6ð o6ðd ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr0   