Current File : //usr/lib64/python3.6/site-packages/borg/testsuite/__pycache__/hashindex.cpython-36.pyc
3

y��bpP�@s ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	ddl
mZddlmZm
Z
ddl
mZdd	�Zd
d�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZdS) �N�)�NSIndex�
ChunkIndex�ChunkIndexEntry)�	hashindex)�IntegrityCheckedFile�FileIntegrityError�)�BaseTestCasecCstd|d�S)Nz%-0.32d�ascii)�bytes)�x�r�!/usr/lib64/python3.6/hashindex.py�HsrcCstjt|��j�S)N)�hashlib�sha256r�digest)r
rrr�H2src@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�HashIndexTestCasec
Cs|�}|jt|�d�x td�D]}||�|t|�<q W|jt|�d�x(td�D]}|j|t|�||��qRWx$td�D]}||d�|t|�<q|W|jt|�d�x,td�D] }|j|t|�||d��q�Wxtd�D]}|t|�=q�Wx"tdd�D]}t|�|ks�t�q�Wx$td�D]}t|�|k�s t��q Wx&td�D]}|jt|jt|���qFW|jt|�d�tj	�}|j
|j�~t|jd�� }|jt
j|j��j�|�WdQRX|j|j�}|jt|�d�x0tdd�D]"}|j|t|�||d���q�W|j�|jt|�d�|j
|j�~|jt|j|j��d�|�}|jtd�|d��td�|k�stt�|td�|d�k�s�t�|jtd�|d��td�|k�s�t�|td�|d�k�s�t�|jtd�|d��|d�k�s�t�|jtd�|d��|d�k�st�~dS)	Nr�dr�2�rb�*�r	)�assert_equal�len�ranger�AssertionError�
assert_raises�KeyError�__delitem__�tempfile�NamedTemporaryFile�write�name�openrr�readZ	hexdigest�clear�
setdefault)�self�clsZ
make_valueZsha�idxr
�idx_name�fdrrr�
_generic_testsZ $"""zHashIndexTestCase._generic_testcCs|jtdd�d�dS)NcSs||fS)Nr)r
rrr�<lambda>[sz0HashIndexTestCase.test_nsindex.<locals>.<lambda>Z@85f72b036c692c8266e4f51ccf0cff2147204282b5e316ae508d30a448d88fef)r/r)r*rrr�test_nsindexZszHashIndexTestCase.test_nsindexcCs|jtdd�d�dS)NcSs
|||fS)Nr)r
rrrr0_sz3HashIndexTestCase.test_chunkindex.<locals>.<lambda>Z@c83fdf33755fc37879285f2ecfc5d1f63b97577494902126b6fb6f3e4d852488)r/r)r*rrr�test_chunkindex^sz!HashIndexTestCase.test_chunkindexcCs�d}tj�}t�}|j|j�tjj|j�}|jt	|�d�x t
|�D]}||f|t|�<qFW|j|j�|tjj|j�ks�t�xt
|�D]}|t|�=q�W|jt	|�d�|j|j�|j|tjj|j��dS)Ni�r)
r"r#rr$r%�os�path�getsizerrrrr)r*�nr-r,Zinitial_sizer
rrr�test_resizebszHashIndexTestCase.test_resizecCs�t�}x td�D]}||f|t|�<qW|j�}t|�}|jt|�d�|jtt	|�t|j|ddd��}|jt|�d�|j||dd��dS)Nr�1r)Zmarkerr)
rrr�	iteritems�listrrr�
StopIteration�next)r*r,r
�iterator�allZsecond_halfrrr�test_iteritemsssz HashIndexTestCase.test_iteritemscCs�t�}d|td�<d
|td�<d|td�<t�}d|td�<d|td�<d|td�<|j|�|td�dksrt�|td�dks�t�|td�dks�t�|td�dks�t�dS)Nr	rr����,�����)r	rr)rr@r@)rArBrB)rCrr)rDr@r@)rErFrF)rDrr)rGr@r@)rArBrB)rErFrF)rr�merger)r*�idx1�idx2rrr�test_chunkindex_merge�s
z'HashIndexTestCase.test_chunkindex_mergecCs�t�}d
|td�<d|td�<d|td�<|j�\}}}}}}|dksJt�|dksVt�|dksbt�|dksnt�|dkszt�|dks�t�dS)Nr	��rr��r@rA��,)r	rLr)rrMr@)rArNrOi�i�i(#i�6i�i�i�ixi�ipi,iXrArE)rrZ	summarizer)r*r,�sizeZcsizeZunique_sizeZunique_csizeZ
unique_chunksZchunksrrr�test_chunkindex_summarize�sz+HashIndexTestCase.test_chunkindex_summarizeN)
�__name__�
__module__�__qualname__r/r1r2r7r?rKrQrrrrrs=
rc@seZdZdZdd�ZdS)�HashIndexExtraTestCasezRThese tests are separate because they should not become part of the selftest.
    cCs.tdtj�d}t|�}dd�t|�D�}|dd|d�|d|dd�}}x"t|�D]\}}|||f||<q`Wx"t|�D]\}}|||f||<q�Wx|D]
}||=q�Wx*t|�D]\}}|||||fks�t�q�Wx|D]}|j|�dks�t�q�Wx|D]}||=�qWt|j��gk�s*t�dS)Ni�
cSsg|]}tjt|��j��qSr)rrrr)�.0�krrr�
<listcomp>�sz=HashIndexExtraTestCase.test_chunk_indexer.<locals>.<listcomp>rrrA)	�intr�MAX_LOAD_FACTORr�	enumerater�getr:r9)r*Z	key_count�indexZall_keys�keysZto_delete_keys�i�keyrrr�test_chunk_indexer�s"*



z)HashIndexExtraTestCase.test_chunk_indexerN)rRrSrT�__doc__rbrrrrrU�srUc@seZdZdd�Zdd�ZdS)�HashIndexSizeTestCasecCst�}|j�d	kst�dS)
N�i� rArC��,i4�iF�)rrPr)r*r,rrr�test_size_on_disk�sz'HashIndexSizeTestCase.test_size_on_diskc	Cstt�}x*td�D]}||d|df|t|�<qWtj�� }|j|j�tjj	|j�}WdQRX|j
�|kspt�dS)Ni�rrA)rrrr"r#r$r%r3r4r5rPr)r*r,r`�filerPrrr�test_size_on_disk_accurate�s
z0HashIndexSizeTestCase.test_size_on_disk_accurateN)rRrSrTrirkrrrrrd�srdc@steZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�HashIndexRefcountingTestCasecCs�t�}tjdddf|td�<x0td�D]$}|jtd��^}}|tjks(t�q(Wx0td�D]$}|jtd��^}}|tjksZt�qZWdS)Nr	rrD)r�	MAX_VALUErr�increfr�decref)r*r,r`�refcount�_rrr�test_chunkindex_limit�sz2HashIndexRefcountingTestCase.test_chunkindex_limitcCs(dd�}|||�}||||�ks$t�|S)NcSsNt�}|ddf|td�<t�}|ddf|td�<|j|�|td�^}}|S)Nr	r)rrrH)Z	refcount1Z	refcount2rIrJrprqrrrrH�s
z2HashIndexRefcountingTestCase._merge.<locals>.merge)r)r*Z	refcountaZ	refcountbrH�resultrrr�_merge�s
z#HashIndexRefcountingTestCase._mergecCs(tjd}|j||�tjdks$t�dS)Nrr	)rrmrtr)r*�halfrrr�test_chunkindex_merge_limit1�s
z9HashIndexRefcountingTestCase.test_chunkindex_merge_limit1cCs|jdd�tjkst�dS)Nl^�ei�5w)rtrrmr)r*rrr�test_chunkindex_merge_limit2�sz9HashIndexRefcountingTestCase.test_chunkindex_merge_limit2cCs(tjd}|j|d|�tjks$t�dS)Nrr	)rrmrtr)r*rurrr�test_chunkindex_merge_limit3�s
z9HashIndexRefcountingTestCase.test_chunkindex_merge_limit3cCsFtjd}|j|d|�tjks$t�|j|d|d�tjksBt�dS)Nrr	)rrmrtr)r*rurrr�test_chunkindex_merge_limit4�s
z9HashIndexRefcountingTestCase.test_chunkindex_merge_limit4cCsZt�}|jtd�ddd�|td�dks.t�|jtd�ddd�|td�dksVt�dS)	Nr	rDrErGrrA)rDrErG)rErrA)r�addrr)r*rIrrr�test_chunkindex_add�s
z0HashIndexRefcountingTestCase.test_chunkindex_addcCsJt�}tjddf|td�<|jtd��|td�^}}|tjksFt�dS)NrErGr	)rrmrrnr)r*rIrprqrrr�test_incref_limits
z.HashIndexRefcountingTestCase.test_incref_limitcCsJt�}tjddf|td�<|jtd��|td�^}}|tjksFt�dS)NrErGr	)rrmrror)r*rIrprqrrr�test_decref_limit
s
z.HashIndexRefcountingTestCase.test_decref_limitc
Cs:t�}d|td�<|jt��|jtd��WdQRXdS)Nrr	)rrr)rrrrro)r*rIrrr�test_decref_zerosz-HashIndexRefcountingTestCase.test_decref_zerocCsvt�}|jtd�ddd�|td�dks.t�|jtd��|td�dksPt�|jtd��|td�dksrt�dS)Nr	rDrErG)rDrErG)rErErG)rDrErG)rrzrrrnro)r*rIrrr�test_incref_decrefsz/HashIndexRefcountingTestCase.test_incref_decrefcCs8t�}|jt��tjdddf|td�<WdQRXdS)Nr	r)rrrrmr)r*rIrrr�test_setitem_raises#sz0HashIndexRefcountingTestCase.test_setitem_raisesc!Cs�t�}|jt��|jtd��WdQRX|jt��|jtd��WdQRX|jt��|td�WdQRX|jt��|jtd�ddd�WdQRXdS)Nr	r���)rrr rnrro�
OverflowErrorrz)r*r,rrr�
test_keyerror(sz*HashIndexRefcountingTestCase.test_keyerrorN)rRrSrTrrrtrvrwrxryr{r|r}r~rr�r�rrrrrl�s
	rlc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�HashIndexDataTestCases(eJzt0L0NgmAUhtHLT0LDEI6AuAEhMVYmVnSuYefC7AB3Aj9KNedJbnfyFne6P67P27w0EdG1Eac+Cm1ZybAsy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7Isy7LsL9nhc+cqTZ3XlO2Ys++Du5fX+l1/YFmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVmWZVn2/+0O2rYccw==cCsPtj��>}tjj|d�}|j|�t|d��}|j|j��SQRXWdQRXdS)Nr,r)	r"�TemporaryDirectoryr3r4�joinr$r&�_packr')r*r,�tempdirrj�frrr�_serialize_hashindex:s


z*HashIndexDataTestCase._serialize_hashindexcCsRtj��@}tjj|d�}t|d��}|j|j|��WdQRXtj	|�SQRXdS)Nr,�wb)
r"r�r3r4r�r&r$�_unpackrr')r*�
bytestringr�rjr�rrr�_deserialize_hashindexAs

z,HashIndexDataTestCase._deserialize_hashindexcCstjtj|��S)N)�base64Z	b64encode�zlib�compress)r*r�rrrr�HszHashIndexDataTestCase._packcCstjtj|��S)N)r�Z
decompressr�Z	b64decode)r*r�rrrr�KszHashIndexDataTestCase._unpackcCsRt�}d|td�<d
|td�<d|td�<|j|�}|j|�|j|j�ksNt�dS)Nr	rrA�r�xl�)r	rrAl��)r�rr)r�rr)rrr�r��	HASHINDEXr)r*rIZ
serializedrrr�test_identical_creationNs
z-HashIndexDataTestCase.test_identical_creationcCs�|j|j�}|td�dks t�|td�dks4t�|td�dksHt�t�}d|td�<|j|�|td�tjd	d
fks�t�dS)Nr	rrAr�r�xl�rfi@�rErG)r	rrAl��)r�rr)r�rrl���)r�rErG)r�r�rrrrHrm)r*rIrJrrr�test_read_known_goodWs
z*HashIndexDataTestCase.test_read_known_goodN)
rRrSrTr�r�r�r�r�r�r�rrrrr�4s	r�c@seZdZdd�Zdd�ZdS)�HashIndexIntegrityTestCasec	Csb|j|j�}tjj|d�}t|dd��}|j|�WdQRX|j}d|ksNt�d|ksZt�||fS)Nr,T)r4r$�finalZ
HashHeader)	r�r�r3r4r�rr$�integrity_datar)r*r�r,rjr.r�rrr�write_integrity_checked_indexdsz8HashIndexIntegrityTestCase.write_integrity_checked_indexcCs�tj��n}|j|�\}}t|d��}|jd�WdQRX|jt��*t|d|d��}tj	|�WdQRXWdQRXWdQRXdS)Nzr+bsFooF)r4r$r�)
r"r�r�r&r$rrrrr')r*r�rjr�r.rrr�test_integrity_checked_filens
z6HashIndexIntegrityTestCase.test_integrity_checked_fileN)rRrSrTr�r�rrrrr�cs
r�c@steZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�HashIndexCompactTestCasecCsdtj�}|jd�|j|jdd��|j|jdd��|jdjdd��|jdjdd��||_dS)NsBORG_IDXrC�littlerfr	rArg)�io�BytesIOr$�to_bytes�
index_data)r*�num_entries�num_bucketsr�rrrr^ys
zHashIndexCompactTestCase.indexcCs|jjd�tj|j�}|S)Nr)r��seekrr')r*r^rrr�index_from_data�sz(HashIndexCompactTestCase.index_from_datacCstj�}|j|�|j�S)N)r�r�r$�getvalue)r*r^�datarrr�
index_to_data�s
z&HashIndexCompactTestCase.index_to_datacCs|j�}|j�|j|�}|S)N)r��compactr�)r*r^�
compact_indexrrr�index_from_data_compact_to_data�s
z8HashIndexCompactTestCase.index_from_data_compact_to_datacGs2|jj|�x |D]}|jj|jdd��qWdS)NrCr�)r�r$r�)r*ra�values�valuerrr�write_entry�s
z$HashIndexCompactTestCase.write_entrycCs|j|ddd�dS)Nl��r)r�)r*rarrr�write_empty�sz$HashIndexCompactTestCase.write_emptycCs|j|ddd�dS)Nl��r)r�)r*rarrr�
write_deleted�sz&HashIndexCompactTestCase.write_deletedcCs�|jddd�|jtd�ddd�|jtd��|jtd��|jtd�ddd�|jtd	�d
dd�|jtd��|j�}|jddd�|jtd�ddd�|jtd�ddd�|jtd	�d
dd�||jj�ks�t�dS)
NrArE)r�r�rr	rrDrGrC��	rV)	r^r�rr�r�r�r�r�r)r*r�rrr�test_simple�sz$HashIndexCompactTestCase.test_simplecCs�|jddd�|jtd��|jtd�ddd�|jtd��|jtd�ddd�|jtd	�d
dd�|jtd��|j�}|jddd�|jtd�ddd�|jtd�ddd�|jtd	�d
dd�||jj�ks�t�dS)
NrArE)r�r�r	rrrDrGrCr�r�rV)	r^r�rr�r�r�r�r�r)r*r�rrr�test_first_empty�sz)HashIndexCompactTestCase.test_first_emptycCs�|jddd�|jtd��|jtd�ddd�|jtd��|jtd�ddd�|jtd��|jtd	�d
dd�|j�}|jddd�|jtd�ddd�|jtd�ddd�|jtd	�d
dd�||jj�ks�t�dS)
NrArE)r�r�r	rrrDrGrCr�r�rV)	r^r�rr�r�r�r�r�r)r*r�rrr�test_last_used�sz'HashIndexCompactTestCase.test_last_usedcCs�|jddd�|jtd��|jtd�ddd�|jtd�ddd�|jtd��|jtd��|jtd	�d
dd�|j�}|jddd�|jtd�ddd�|jtd�ddd�|jtd	�d
dd�||jj�ks�t�dS)
NrArE)r�r�r	rrrDrGrCr�r�rV)	r^r�rr�r�r�r�r�r)r*r�rrr�test_too_few_empty_slots�sz1HashIndexCompactTestCase.test_too_few_empty_slotscCs�|jddd�|jtd��|jtd��|jtd��|jtd��|jtd��|jtd��|j�}|jddd�||jj�ks�t�dS)	NrrE)r�r�r	rArrDrC)r^r�rr�r�r�r�r)r*r�rrr�
test_empty�sz#HashIndexCompactTestCase.test_emptycCs�t�}t�}d
|td�<d|td�<d|td�<|j�|j�dksHt�|j|�|td�dksft�|td�dkszt�|td�dks�t�dS)Nr	rrr@rA�,rerfrC)r	rr)rr@r@)rAr�r�rgrh��)r	rr)rr@r@)rAr�r�)rrr�rPrrH)r*ZmasterrIrrr�
test_merge�s
z#HashIndexCompactTestCase.test_mergeN)rRrSrTr^r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�xsr�c@seZdZdd�ZdS)�NSIndexTestCasecCsht�}|jt��tjddf|td�<WdQRXtd�|ksBt�tjdf|td�<td�|ksdt�dS)Nr	rr)rrrrmr)r*r,rrr�test_nsindex_segment_limits z*NSIndexTestCase.test_nsindex_segment_limitN)rRrSrTr�rrrrr�sr�c@seZdZdd�ZdS)�AllIndexTestCasecCs tjdkst�tjdkst�dS)Ng�?)rr[rr)r*rrr�test_max_load_factorsz%AllIndexTestCase.test_max_load_factorN)rRrSrTr�rrrrr�
sr�c@seZdZdd�ZdS)�IndexCorruptionTestCasecs(ddlm��fdd��t��x"td�D]}d|f��d|�<q(W�j�dksRt�xtd	�D]}��d|�=q\Wx"td
�D]}d|f��d|�<qzW��fdd
�td	d�D�dd
�td	d�D�ks�t���fdd
�td	�D�dd
�td	�D�ks�t���fdd
�td
�D�dd
�td
�D�k�s$t�dS)Nr)�packcs�d||ddd�S)Nz<IIQQQrr)r
�y)r�rr�HHsz1IndexCorruptionTestCase.test_bug_4829.<locals>.HHi�i�(rei�iJiXcsg|]}�j�d|���qS)r)r])rWr�)r�r,rrrY5sz9IndexCorruptionTestCase.test_bug_4829.<locals>.<listcomp>cSsg|]}d|f�qS)rr)rWr�rrrrY5scsg|]}�d|��k�qS)rr)rWr�)r�r,rrrY7scSsg|]}d�qS)Fr)rWr�rrrrY7scsg|]}�j�d|���qS)iX)r])rWr�)r�r,rrrY:scSsg|]}d|f�qS)iXr)rWr�rrrrY:si�i*�)�structr�rrrPr)r*r�r)r�r,r�r�
test_bug_4829s2.z%IndexCorruptionTestCase.test_bug_4829N)rRrSrTr�rrrrr�sr�)r�rr�r3r"r�rrrr�Zcrypto.file_integrityrrr
rrrrUrdrlr�r�r�r�r�r�rrrr�<module>s.f/