
­­­­­­­­­­­­­­­­­­
<!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   s"   t ddddg d}|j| d S )Nbari  i.  chunks)foobazr   userr   )packbfeed)r   r   r   datar   r   r   test_no_chunks   s    

z$TestCacheSynchronizer.test_no_chunksc          	   C   s:   t ddddtdddftdddfgd}|j| d S )	Nr   i  i.  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   s   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| 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   Zpart1Zpart2Zpart3r   r   r   test_multiple8   s<    


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   r.   |   s    c             C   s   d| ddfgiS )Nr   r   r   r   )r-   r   r   r   r.   }   s    c          
   C   sN   t ||}tjt}|j| W d Q R X t|tr<|g}dd |D }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)r   r   r,   r-   r0   packedexcinfoZpossible_errorsr   r   r   test_corruptedo   s    
z$TestCacheSynchronizer.test_corruptedz
data,errorr       r      zInvalid chunk list entry lengthc          	   C   s,   t |}tjt}|j| W d Q R X d S )N)r   r2   r3   r4   r   )r   r   r   r   r0   r7   r8   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   sT   | j tjd }t|}tdtdddfgi}tjt}|j	| W d Q R X d S )Nr   r   r   r   )
rE   r
   	MAX_VALUEr   r   r   r2   r3   r4   r   )r   r   r   r   r8   r   r   r   test_corrupted_refcount   s    z-TestCacheSynchronizer.test_corrupted_refcountc             C   s:   | j tj}t|}tdtdddfgi}|j| d S )Nr   r   r   r   )rE   r
   rF   r   r   r   r   )r   r   r   r   r   r   r   test_refcount_max_value   s    
z-TestCacheSynchronizer.test_refcount_max_valuec             C   sH   | j tjd }t|}tdtdddfgi}|j| |j| d S )Nr   r   r   r   )rE   r
   rF   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__r2   fixturer   r   r   r   r$   ZmarkZparametrizebytesr9   r<   rE   rG   rH   rI   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joinr6   Zrepository_locationr   Zputr   r   ZMANIFEST_ID)r   ZtmpdirrP   r   r   r   rP      s
    zTestAdHocCache.repositoryc             C   s,   |j dd tj|tj }tdj|_|S )NZBORG_PASSPHRASEZtestZnone)Zsetenvr	   rQ   r   ZMockArgsr   Z
compressor)r   rP   Zmonkeypatchkeyr   r   r   rU      s    zTestAdHocCache.keyc             C   s$   t ||j  t j||t jdd S )N)rU   Z
operationsr   )r   rA   loadZNO_OPERATION_CHECK)r   rP   rU   r   r   r   manifest   s    zTestAdHocCache.manifestc             C   s   t |||S )N)r   )r   rP   rU   rW   r   r   r   cache   s    zTestAdHocCache.cachec             C   s   d S )Nr   )r   rX   r   r   r   test_does_not_contain_manifest   s    z-TestAdHocCache.test_does_not_contain_manifestc             C   s   |j tdt  d S )Nr   )chunk_decrefr   r   )r   rP   rX   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)r2   r3   AssertionError	add_chunkr   r   )r   rX   r   r   r   test_does_not_overwrite   s    z&TestAdHocCache.test_does_not_overwritec             C   s   d S )Nr   )r   rX   r   r   r   test_seen_chunk_add_chunk_size   s    z-TestAdHocCache.test_seen_chunk_add_chunk_sizec          
   C   sP   |j tddt  |jtdt  tjtj |jtd W dQ R X dS )zE.g. checkpoint archives   s   1010N)	r]   r   r   rZ   r2   r3   r   ZObjectNotFoundget)r   rX   rP   r   r   r   #test_deletes_chunks_during_lifetime   s    z2TestAdHocCache.test_deletes_chunks_during_lifetimec             C   s   d S )Nr   )r   rX   r   r   r   test_files_cache  s    zTestAdHocCache.test_files_cachec             C   s   |j td |j  d S )Nr`   )Z
seen_chunkr   Zrollback)r   rX   r   r   r   test_txn  s    zTestAdHocCache.test_txnc             C   s   d S )Nr   )r   rX   r   r   r   test_incref_after_add_chunk  s    z*TestAdHocCache.test_incref_after_add_chunkc             C   s   dS )z9This case occurs with part files, see Archive.chunk_file.Nr   )r   rX   r   r   r   $test_existing_incref_after_add_chunk  s    z3TestAdHocCache.test_existing_incref_after_add_chunkN)rJ   rK   rL   r2   rM   rP   rU   rW   rX   rY   r[   r^   r_   rb   rc   rd   re   rf   r   r   r   r   rO      s   		rO   )r?   Zos.pathrR   r2   Z	hashindexr   rU   r   archiver   rX   r   compressr   Z
crypto.keyr	   r
   r   Zhelpersr   r   rP   r   r   r   rO   r   r   r   r   <module>   s     ?