o
    +ke                     @   sJ   d dl Z ddlmZmZmZ G dd dZG dd dZG dd	 d	ZdS )
    N   )IntegrityCheckedFileDetachedIntegrityCheckedFileFileIntegrityErrorc                   @   s:   e Zd Zdd Zdd Zdd Zejddd	d
 Z	dS )TestReadIntegrityFilec                 C   s.   | d}|d tt|d u sJ d S )Nfile1234joinwriter   read_integrity_filestrselftmpdirprotected_file r   Ausr/lib/python3.10/site-packages/borg/testsuite/file_integrity.pytest_no_integrity   s   

z'TestReadIntegrityFile.test_no_integrityc                 C   sb   | d}|d | dd tt tt| W d    d S 1 s*w   Y  d S )Nr   r   file.integrity r
   r   pytestraisesr   r   r   r   r   r   r   r   test_truncated_integrity   s   

"z.TestReadIntegrityFile.test_truncated_integrityc                 C   s>   | d}|d | dd tt|d u sJ d S )Nr   r   r   z4{"algorithm": "HMAC_SERIOUSHASH", "digests": "1234"}r	   r   r   r   r   test_unknown_algorithm   s   

z,TestReadIntegrityFile.test_unknown_algorithmjson)z4{"ALGORITHM": "HMAC_SERIOUSHASH", "digests": "1234"}z[]z1234.5z
"A string"zInvalid JSONc                 C   sb   | d}|d | d| tt tt| W d    d S 1 s*w   Y  d S )Nr   r   r   r   )r   r   r   r   r   r   r   test_malformed   s   

"z$TestReadIntegrityFile.test_malformedN)
__name__
__module____qualname__r   r   r   r   markparametrizer   r   r   r   r   r      s    r   c                   @   sX   e Zd Zejdd Zdd Zdd Zdd Zej	
d	d
dd Zdd Zdd ZdS ) TestDetachedIntegrityCheckedFilec                 C   sJ   t |d}t|dd}|d W d    |S 1 sw   Y  |S )Nr   Tr      foo and bar)r   r
   r   r   r   r   pathfdr   r   r   integrity_protected_file)   s   
z9TestDetachedIntegrityCheckedFile.integrity_protected_filec                 C   sn   | djddsJ | djddsJ t|dd}| dks%J W d    d S 1 s0w   Y  d S )Nr   T)r   r   Fr$   r%   )r
   checkr   readr   r   r)   r(   r   r   r   test_simple0   s
   "z,TestDetachedIntegrityCheckedFile.test_simplec              	   C   s   t |d}|d W d    n1 sw   Y  tt/ t|dd}| dks/J W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S )Nab    extra dataFr$   s   foo and bar extra data)openr   r   r   r   r   r+   )r   r)   r(   r   r   r   test_corrupted_file6   s   "z4TestDetachedIntegrityCheckedFile.test_corrupted_filec              	   C   s   t |d}|d W d    n1 sw   Y  tt4 t|dd}d}|t||ks4J W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S )Nr.   r/   Fr$   r%   )r0   r   r   r   r   r   r+   len)r   r)   r(   datar   r   r    test_corrupted_file_partial_read=   s   "zATestDetachedIntegrityCheckedFile.test_corrupted_file_partial_readnew_name)Zdifferent_filezdifferent_file.different_extc              	   C   s   | |}| d| | d|d  tt1 tt|dd}| dks.J W d    n1 s8w   Y  W d    d S W d    d S 1 sPw   Y  d S )Nr   r   z
.integrityFr$   r%   )r
   mover   r   r   r   r   r+   )r   r   r)   r5   new_pathr(   r   r   r   test_renamed_fileE   s   
"z2TestDetachedIntegrityCheckedFile.test_renamed_filec                 C   s   | d}|d|d |d|d t|d}t|dd}| dks1J W d    d S 1 s<w   Y  d S )NZanother_directoryr   r   Fr$   r%   )mkdirr
   r6   r   r   r+   )r   r   r)   Znew_dirr7   r(   r   r   r   test_moved_fileQ   s   
"z0TestDetachedIntegrityCheckedFile.test_moved_filec                 C   sP   | d  t|dd}| dksJ W d    d S 1 s!w   Y  d S )Nr   Fr$   r%   )r
   remover   r+   r,   r   r   r   r   Y   s   "z2TestDetachedIntegrityCheckedFile.test_no_integrityN)r   r   r    r   fixturer)   r-   r1   r4   r!   r"   r8   r:   r   r   r   r   r   r#   (   s    

r#   c                   @   s@   e Zd Zejdd Zdd Zdd Zej	ddd	d
 Z
dS )%TestDetachedIntegrityCheckedFilePartsc                 C   s^   t |d}t|dd}|d |d |d W d    |S 1 s(w   Y  |S )Nr   Tr$   r%   foopart    other data)r   r
   r   r   	hash_partr&   r   r   r   r)   `   s   


z>TestDetachedIntegrityCheckedFileParts.integrity_protected_filec                 C   sf   t |dd#}d}|t||ksJ |d | dks!J W d    d S 1 s,w   Y  d S )NFr$   r%   r>   r?   )r   r+   r2   r@   r   r)   r(   data1r   r   r   r-   i   s   
"z1TestDetachedIntegrityCheckedFileParts.test_simplec              
   C   s   t tN t|dd/}d}|t||ksJ t t |d W d    n1 s/w   Y  W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S )NFr$   r%   Zbarpart)r   r   r   r   r+   r2   r@   rA   r   r   r   test_wrong_part_namep   s   "z:TestDetachedIntegrityCheckedFileParts.test_wrong_part_namepartial_read)FTc              
   C   s   t |d}|d W d    n1 sw   Y  ttM t|dd.}d}z|t||ks5J |d W n tyF   J dw |sM|  W d    n1 sWw   Y  W d    d S W d    d S 1 sow   Y  d S )Nr.   s%   some extra stuff that does not belongFr$   r%   r>   z9This part must not raise, since this part is still valid.)	r0   r   r   r   r   r   r+   r2   r@   )r   r)   rD   r(   rB   r   r   r   test_part_independence}   s&   "z<TestDetachedIntegrityCheckedFileParts.test_part_independenceN)r   r   r    r   r<   r)   r-   rC   r!   r"   rE   r   r   r   r   r=   _   s    
r=   )r   Zcrypto.file_integrityr   r   r   r   r#   r=   r   r   r   r   <module>   s
    "7