o
    +keT                     @   sh   d dl mZ ddlmZmZmZmZmZ ddlT ddl	m
Z
 dd ZG d	d
 d
e
ZG dd de
ZdS )    )BytesIO   )ChunkerFixedChunkerget_chunkerbuzhashbuzhash_update)*   )BaseTestCasec                    s   dd   fdd| D S )zchunk filterc                 S   sb   | j d tkrt| j| j d ksJ t| jS | j d ttfv r-| jd u s(J | j d S J d)NZ
allocationsizeFzunexpected allocation value)metaZCH_DATAlendatabytesZCH_HOLEZCH_ALLOC)chunk r   :usr/lib/python3.10/site-packages/borg/testsuite/chunker.py_cf   s   

zcf.<locals>._cfc                    s   g | ]} |qS r   r   ).0r   r   r   r   
<listcomp>   s    zcf.<locals>.<listcomp>r   )chunksr   r   r   cf   s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ChunkerFixedTestCasec                 C   sP   dd }t d}t|t|}| ||dd |dd |dd  g d S )N   foobar     r       r   r   chunkifyr   assert_equalselfr   chunkerpartsr   r   r   test_chunkify_just_blocks   s   .z.ChunkerFixedTestCase.test_chunkify_just_blocksc              	   C   s\   dd }t dd}t|t|}| ||dd |dd |dd |dd  g d S )Nr   r   r   {   r   {  {   r   r"   r   r   r   test_chunkify_header_and_blocks!   s   
8z4ChunkerFixedTestCase.test_chunkify_header_and_blocksc                 C   s\   dd }t d}g d}t|jt||d}| ||dd |dd |dd  g d S )Nr   r   r   ))r   r   T)r   r   T)r   iTfmapr   r   r   r#   r   r$   r,   r%   r   r   r   'test_chunkify_just_blocks_fmap_complete'   s
   .z<ChunkerFixedTestCase.test_chunkify_just_blocks_fmap_completec              	   C   sh   dd }t dd}g d}t|jt||d}| ||dd |dd |dd	 |d	d  g d S )
Nr   r   r   r'   )r   r'   T)r'   r   Tr(   r   T)r)   r   Tr+   r   r(   r)   r   r-   r   r   r   -test_chunkify_header_and_blocks_fmap_complete2   s
   
8zBChunkerFixedTestCase.test_chunkify_header_and_blocks_fmap_completec                 C   sT   d}t dd}g d}t|jt||d}| ||dd d|dd dg d S )	N{0  HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________r   r'   )r/   )r'   r   Fr0   )r)   r   Fr+   r   r(   r)   r   r-   r   r   r   *test_chunkify_header_and_blocks_fmap_zeros>   s
   
(z?ChunkerFixedTestCase.test_chunkify_header_and_blocks_fmap_zerosc                 C   sP   d}t dd}ddg}t|jt||d}| ||dd |dd	 g d S )
Nr2   r   r'   r/   r0   r+   r   r(   r)   r   r-   r   r   r   ,test_chunkify_header_and_blocks_fmap_partialK   s   
$zAChunkerFixedTestCase.test_chunkify_header_and_blocks_fmap_partialN)	__name__
__module____qualname__r&   r*   r.   r1   r3   r4   r   r   r   r   r      s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ChunkerTestCasec              	   C   s  dt ddt>   d }ttddtddt|}| t|d | d|| | ttddtddtdg  | ttddtddtdg d	 | ttddtddtdg d
 | ttddtddtdg d | ttddtddtddg | ttddtddtdg d | ttddtddtdg d | ttddtddtddg | ttddtddtdg d | ttddtddtdg d d S )N   0g      ?r
      Yr   r       s$   foobarboobazfoobarboobazfoobarboobaz)   fooba   rboobazr<   r=   r<   r=   )	s   fos   obarb   oob   azf   oobarbr>   r?   r@   s   oobaz)   foob   ar
   boobazfoobrB   rC   rB      boobaz   )r      boobazfo   obarrF   rG   rD   )rA      arboobazrA   rH   rA   rH   )s   foobarbos
   obazfoobarrF   s
   obarboobaz)   foobarboobazrI   rI   )	intZCHUNK_MAX_EXPr   r   r    r   r!   r   join)r#   r   r%   r   r   r   test_chunkify[   s   &***(**(*.zChunkerTestCase.test_chunkifyc              	   C   sf   |  tddd |  tddd |  tddttddtdtdd	d |  td
dd d S )Ns   abcdefghijklmnopr   l   HsD r
   l   67rD s   XabcdefghijklmnoXp   s4   abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzim!)r!   r   r   ord)r#   r   r   r   test_buzhashk   s   ,zChunkerTestCase.test_buzhashc                 C   sB   G dd d}t tddi}dt|| }|dksJ d S )Nc                   @   s   e Zd ZdZdd ZdS )z7ChunkerTestCase.test_small_reads.<locals>.SmallReadFiles   aaaaaaaaaaaaaaaaaaaaac                 S   s   | j d d | _ | j d d S )Nr
   )input)r#   nbytesr   r   r   readv   s   z<ChunkerTestCase.test_small_reads.<locals>.SmallReadFile.readN)r5   r6   r7   rS   rU   r   r   r   r   SmallReadFiles   s    rV   seedr   r;   s   aaaaaaaaaaaaaaaaaaaa)r   ZCHUNKER_PARAMSrK   r   r    )r#   rV   r$   Zreconstructedr   r   r   test_small_readsr   s   z ChunkerTestCase.test_small_readsN)r5   r6   r7   rL   rQ   rX   r   r   r   r   r8   Y   s    r8   N)ior   r$   r   r   r   r   r   	constants r   r   r   r8   r   r   r   r   <module>   s   @