
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
yb#                 @   s   d dl Z d dlZd dlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddlmZ ejZG dd dZG dd dZdS )    N   )H)TestKey   )
Statistics)
AdHocCache)CompressionSpec)RepoKey)
ChunkIndexCacheSynchronizer)Manifest)msgpack)
Repositoryc            
   @   s2  e Zd Zejdd Zejdd Zdd Zdd Zd	d
 Z	ej
jdddidfedddgfd2d3d4d5d6fej
jddd dd dd fd d! Zej
jd"d#ed$dd%d&fgid'fd#ed$dfgid'fd#d7gidfd#ded$dfgidfd#ed$ddfgidffd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 ZdS )8TestCacheSynchronizerc             C   s   t  S )N)r
   )self r   /usr/lib64/python3.6/cache.pyindex   s    zTestCacheSynchronizer.indexc             C   s   t |S )N)r   )r   r   r   r   r   sync   s    zTestCacheSynchronizer.syncc             C   s0   t ddddg d}|j| t| s,td S )Nbari  i.  chunks)foobazr   userr   )packbfeedlenAssertionError)r   r   r   datar   r   r   test_no_chunks   s    

z$TestCacheSynchronizer.test_no_chunksc          	   C   sr   t ddddtdddftdddfgd}|j| t|dksFt|td d	ksZt|td d
ksntd S )Nr   i  i.  r   r   r      )r   r   r   r   r   )r   r   r   )r   r   r    )r   r   r   r   r   )r   r   r   r   r   r   r   test_simple(   s    
z!TestCacheSynchronizer.test_simplec          	   C   sL  t ddddtdddftdddfgd}|t dd	d
dgd7 }|t dd	d
tdddftdddfgdgd7 }|t dtdddfgi7 }|t dtdddfgi7 }|d d }|dd }|dd  }|j| |j| |j| t|dkst|td dkst|td dks2t|td dksHtd S )Nr   i  i.  r   r   r   r    )r   r   r   r   r   Z123456)zsecurity.foor   )xattrsstuff)r"   r   r#   F   x   )r   r   r    )r   r   r    )r    r   r   )r   r   r    )r   r   r   )r   r   r   r   r   )r   r   r   r   Zpart1Zpart2Zpart3r   r   r   test_multiple8   sB    


z#TestCacheSynchronizer.test_multiplez
elem,errorr   r   zUnexpected object: map   z$Unexpected bytes in chunks structurezIncorrect key lengthUnexpected object: integer      ?Unexpected object: doubleTUnexpected object: trueFUnexpected object: falseNUnexpected object: nil	structurec             C   s   d| iS )Nr   r   )elemr   r   r   <lambda>{   s    zTestCacheSynchronizer.<lambda>c             C   s
   d| giS )Nr   r   )r/   r   r   r   r0   |   s    c             C   s   d| ddfgiS )Nr   r   r   r   )r/   r   r   r   r0   }   s    c          
   C   s`   t ||}tjt}|j| W d Q R X t|tr<|g}dd |D }t|j|ks\td S )Nc             S   s   g | ]}d | qS )zcache_sync_feed failed: r   ).0errorr   r   r   
<listcomp>   s    z8TestCacheSynchronizer.test_corrupted.<locals>.<listcomp>)	r   pytestraises
ValueErrorr   
isinstancestrvaluer   )r   r   r.   r/   r2   packedexcinfoZpossible_errorsr   r   r   test_corruptedo   s    
z$TestCacheSynchronizer.test_corruptedz
data,errorr       r       zInvalid chunk list entry lengthc          
   C   sB   t |}tjt}|j| W d Q R X t|jd| ks>td S )Nzcache_sync_feed failed: )r   r4   r5   r6   r   r8   r9   r   )r   r   r   r   r2   r:   r;   r   r   r   test_corrupted_ancillary   s    
z.TestCacheSynchronizer.test_corrupted_ancillaryc             C   s   t j }|jd |jdjdd |jdjdd |jdjdd |jd
jdd |jtd |j|jdd |jdjdd |jd	jdd |jd tj|}|S )Ns   BORG_IDXr   r>   littler=   r    r   i  i.     )ioBytesIOwriteto_bytesr   seekr
   read)r   ZrefcountZ
index_datar   r   r   r   make_index_with_refcount   s    


z.TestCacheSynchronizer.make_index_with_refcountc          	   C   sf   | j tjd }t|}tdtdddfgi}tjt}|j	| W d Q R X t
|jdksbtd S )Nr   r   r   r   z/cache_sync_feed failed: invalid reference count)rH   r
   	MAX_VALUEr   r   r   r4   r5   r6   r   r8   r9   r   )r   r   r   r   r;   r   r   r   test_corrupted_refcount   s    z-TestCacheSynchronizer.test_corrupted_refcountc             C   sV   | j tj}t|}tdtdddfgi}|j| |td tjddfksRtd S )Nr   r   r   r   i  i.  )rH   r
   rI   r   r   r   r   r   )r   r   r   r   r   r   r   test_refcount_max_value   s    
z-TestCacheSynchronizer.test_refcount_max_valuec             C   s   | j tjd }t|}tdtdddfgi}|j| |td tjddfksVt|j| |td tjddfks|td S )Nr   r   r   r   i  i.  )rH   r
   rI   r   r   r   r   r   )r   r   r   r   r   r   r   !test_refcount_one_below_max_value   s    

z7TestCacheSynchronizer.test_refcount_one_below_max_value)r   r(   )r)   r*   )Tr+   )Fr,   )Nr-   )r   r   r    )__name__
__module____qualname__r4   fixturer   r   r   r!   r&   ZmarkZparametrizebytesr<   r?   rH   rJ   rK   rL   r   r   r   r   r      s:   7
$r   c               @   s   e Zd Zejdd Zejdd Zejdd Zejdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestAdHocCachec          
   c   sX   t jjt|d| _t| jddd*}|jtdd |jtj	d |V  W d Q R X d S )N
repositoryT)Z	exclusivecreater   s   1234s   5678)
ospathjoinr8   Zrepository_locationr   Zputr   r   MANIFEST_ID)r   ZtmpdirrS   r   r   r   rS      s
    zTestAdHocCache.repositoryc             C   s,   |j dd tj|tj }tdj|_|S )NZBORG_PASSPHRASEZtestZnone)Zsetenvr	   rT   r   ZMockArgsr   Z
compressor)r   rS   Zmonkeypatchkeyr   r   r   rY      s    zTestAdHocCache.keyc             C   s$   t ||j  t j||t jdd S )N)rY   Z
operationsr   )r   rD   loadZNO_OPERATION_CHECK)r   rS   rY   r   r   r   manifest   s    zTestAdHocCache.manifestc             C   s   t |||S )N)r   )r   rS   rY   r[   r   r   r   cache   s    zTestAdHocCache.cachec             C   s   |j tj std S )N)
seen_chunkr   rX   r   )r   r\   r   r   r   test_does_not_contain_manifest   s    z-TestAdHocCache.test_does_not_contain_manifestc             C   sD   |j tdtjkst|jtdt  |jtddks@td S )Nr   s   1234)r]   r   r
   rI   r   chunk_decrefr   get)r   rS   r\   r   r   r   $test_does_not_delete_existing_chunks   s    z3TestAdHocCache.test_does_not_delete_existing_chunksc             C   s2   t jt |jtddt dd W d Q R X d S )Nr   s   5678T)Z	overwrite)r4   r5   r   	add_chunkr   r   )r   r\   r   r   r   test_does_not_overwrite   s    z&TestAdHocCache.test_does_not_overwritec             C   s*   |j tddt tdddfks&td S )Nr   s   5678r>   r   )rb   r   r   r   )r   r\   r   r   r   test_seen_chunk_add_chunk_size   s    z-TestAdHocCache.test_seen_chunk_add_chunk_sizec          
   C   sz   |j tddt  |jtddks*t|jtdt  |jtd sPttjtj	 |j
td W dQ R X dS )zE.g. checkpoint archives   s   1010r   N)rb   r   r   r]   r   r_   r4   r5   r   ZObjectNotFoundr`   )r   r\   rS   r   r   r   #test_deletes_chunks_during_lifetime   s    z2TestAdHocCache.test_deletes_chunks_during_lifetimec             C   s:   |j dtdd dkst|jdks(t|jd ks6td S )Ns   foor=   Fd)FN)Zfile_known_and_unchangedrQ   r   Z
cache_modefiles)r   r\   r   r   r   test_files_cache  s    zTestAdHocCache.test_files_cachec             C   sV   |j  st|jtd |j s$t|js.t|j  |j  sBtt|d sRtd S )Nre   r   )Z_txn_activer   r]   r   r   Zrollbackhasattr)r   r\   r   r   r   test_txn  s    

zTestAdHocCache.test_txnc             C   sN   |j tddt tdddfks&t|jtdt tdddfksJtd S )Nr    s   5678r>   /   )rb   r   r   r   chunk_incref)r   r\   r   r   r   test_incref_after_add_chunk  s    &z*TestAdHocCache.test_incref_after_add_chunkc             C   sN   |j tddt tdddfks&t|jtdt tdddfksJtdS )z9This case occurs with part files, see Archive.chunk_file.r   s   5678r>   r   N)rb   r   r   r   rm   )r   r\   r   r   r   $test_existing_incref_after_add_chunk  s    &z3TestAdHocCache.test_existing_incref_after_add_chunkN)rM   rN   rO   r4   rP   rS   rY   r[   r\   r^   ra   rc   rd   rf   ri   rk   rn   ro   r   r   r   r   rR      s   		rR   )rB   Zos.pathrU   r4   Z	hashindexr   rY   r   archiver   r\   r   compressr   Z
crypto.keyr	   r
   r   Zhelpersr   r   rS   r   r   r   rR   r   r   r   r   <module>   s     ?