
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
yb%                 @   s  d dl 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	Z	ddl
mZ dd	lmZ dd
lmZmZmZmZmZmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZmZ e	j dd Zdd Z dBddZ!dd Z"dd Z#G dd dZ$G dd deZ%G dd deZ&G d d! d!eZ'e	jd"d# Z(e	j)j*d$d%d&d'gd(d) dd d*d+d,i g f gd-d.d/d'd0d1id0d1gdCg D  d2d3 Z+e,e-eZ.e	j)j*d$d4d) d5d6ied7d8 e.D ed9d8 e.D gD d:d; Z/d<d= Z0d>d? Z1d@dA Z2dS )D    N)OrderedDict)datetimetimezone)StringIO)Mock   )BaseTestCase   )PlaintextKey)ArchiveCacheChunkBufferRobustUnpackervalid_msgpacked_dict	ITEM_KEYS
Statistics)BackupOSError	backup_iobackup_io_iter)Manifest)msgpack)ItemArchiveItemc              C   s   t  } | jdddd | S )N   
   T)unique)r   update)stats r   /usr/lib64/python3.6/archive.pyr      s    r   c             C   s   | j dddd d S )Nr   r   F)r   )r   )r   r   r   r   test_stats_basic   s    r   P   c             C   s   |j dt| t }| j|d d}d|t|  }t }| jdddd	 | jtd
dd|d d}d|t|  }t }| jtd
d dd|d d}d|t|  }d S )NZCOLUMNS)streamz20 B O 10 B C 10 B D 0 N  r      r   F)r   foo)path)itemfinalr!   z1.02 kB O 10 B C 10 B D 0 N foo(   zP1.02 kB O 10 B C 10 B D 0 N foofoofoofoofoofoofoofo...oofoofoofoofoofoofoofoofooi  )Zsetenvstrr   show_progresslenr   r   )r   ZmonkeypatchcolumnsoutsZbufr   r   r   tests_stats_progress"   s    r/   c             C   s   dj | }d S )Nz{0.osize_fmt})format)r   r.   r   r   r   test_stats_format7   s    
r1   c             C   sT   d| _ t }| jtdd|d tj|j }t }| j|dd tj|j }d S )NTr$   )r%   )r&   r!   )r!   r'   )Zoutput_jsonr   r*   r   jsonloadsgetvalue)r   r-   resultr   r   r   test_stats_progress_json@   s    
r6   c               @   s,   e Zd ZG dd dZdd Zd	ddZdS )
	MockCachec               @   s   e Zd ZdddZdS )zMockCache.MockRepoTc             C   s   d S )Nr   )selfwaitr   r   r   async_response_   s    z!MockCache.MockRepo.async_responseN)T)__name__
__module____qualname__r:   r   r   r   r   MockRepo^   s   r>   c             C   s   i | _ | j | _d S )N)objectsr>   
repository)r8   r   r   r   __init__b   s    zMockCache.__init__NTc             C   s   || j |< |t|t|fS )N)r?   r+   )r8   idchunkr   r9   r   r   r   	add_chunkf   s    
zMockCache.add_chunk)NT)r;   r<   r=   r>   rA   rD   r   r   r   r   r7   \   s   r7   c               @   s$   e Zd Zdd Zdd Zdd ZdS )ArchiveTimestampTestCasec             C   sH   t  }t|}t||}t|||ddd}t|d|_| j|j| d S )NtestT)Zcreate)Ztime)r   r
   r   r   r   Zmetadataassert_equalZts)r8   Z	isoformatZexpectedr@   keyZmanifestar   r   r   _test_timestamp_parsingm   s    
z0ArchiveTimestampTestCase._test_timestamp_parsingc             C   s$   | j dtdddddddtj d S )Nz1970-01-01T00:00:01.000001i  r   r   )rJ   r   r   utc)r8   r   r   r   test_with_microsecondsu   s    z/ArchiveTimestampTestCase.test_with_microsecondsc             C   s$   | j dtdddddddtj d S )Nz1970-01-01T00:00:01i  r   r   )rJ   r   r   rK   )r8   r   r   r   test_without_microsecondsz   s    z2ArchiveTimestampTestCase.test_without_microsecondsN)r;   r<   r=   rJ   rL   rM   r   r   r   r   rE   k   s   rE   c               @   s   e Zd Zdd Zdd ZdS )ChunkBufferTestCasec             C   s   t ddt ddg}t }td }t||d }x|D ]}|j| |j  q4W |jdd | jt|jd t	j
 }x|jD ]}|j|j|  q|W | j|dd |D  d S )	NZp1)r%   Zp2T)flushr	   c             S   s   g | ]}t |d qS ))internal_dict)r   ).0dr   r   r   
<listcomp>   s    z,ChunkBufferTestCase.test.<locals>.<listcomp>)r   r7   r
   r   addrO   rG   r+   chunksr   Unpackerfeedr?   )r8   datacacherH   rU   rR   unpackerrB   r   r   r   rF      s    

zChunkBufferTestCase.testc       	      C   s   dd }t d|dt d|dg}t }td }t||d }x|D ]}|j| q@W |jdd | jt|jd |jd	d | jt|jd
 t	j
 }x|jD ]}|j|j|  qW | j|dd |D  d S )NZ$0123456789abcdefghijklmnopqrstuvwxyzia  Zfull)r%   sourcepartialF)rO   r#   T   c             S   s   g | ]}t |d qS ))rP   )r   )rQ   rR   r   r   r   rS      s    z4ChunkBufferTestCase.test_partial.<locals>.<listcomp>)r   r7   r
   r   rT   rO   rG   r+   rU   r   rV   rW   r?   )	r8   ZbigrX   rY   rH   rU   rR   rZ   rB   r   r   r   test_partial   s    
z ChunkBufferTestCase.test_partialN)r;   r<   r=   rF   r^   r   r   r   r   rN      s   rN   c               @   sL   e Z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 )RobustUnpackerTestCasec             C   s   dj dd |D S )N    c             s   s   | ]}t jd |iV  qdS )r%   N)r   packb)rQ   r&   r   r   r   	<genexpr>   s    z5RobustUnpackerTestCase.make_chunks.<locals>.<genexpr>)join)r8   itemsr   r   r   make_chunks   s    z"RobustUnpackerTestCase.make_chunksc             C   s   t |to|jddkS )Ns   path   foo   bar   boo   baz)rf   rg   rh   ri   )
isinstancedictget)r8   valuer   r   r   
_validator   s    z!RobustUnpackerTestCase._validatorc             C   sd   t | jtd}g }xL|D ]D\}}|r,|j  x.|D ]&}|j| x|D ]}|j| qFW q2W qW |S )N)Z	validatorZ	item_keys)r   rn   r   ZresyncrW   append)r8   inputrZ   r5   Zshould_syncrU   rX   r&   r   r   r   process   s    


zRobustUnpackerTestCase.processc             C   sn   d| j ddggfddg| j ddgg fg}| j|}| j|ddiddidd	d
dd	ddddiddig d S )NFs   foos   bars   garbages   boos   bazs   pathg   a   r   b   e   )re   rq   rG   )r8   rU   r5   r   r   r   test_extra_garbage_no_sync   s    
z1RobustUnpackerTestCase.test_extra_garbage_no_syncc             C   s0   g }x&|r*|j |d |  ||d  }qW |S )N)ro   )r8   leftZlengthpartsr   r   r   split   s
    zRobustUnpackerTestCase.splitc             C   sV   | j | jddddgd}d|fg}| j|}| j|ddiddiddiddig d S )Ns   foos   bars   boos   bazr	   Fs   path)rz   re   rq   rG   )r8   rU   rp   r5   r   r   r   test_correct_stream   s    

z*RobustUnpackerTestCase.test_correct_streamc             C   sf   | j | jddddgd}d|d d fd|dd  fg}| j|}| j|d	did	did	dig d S )
Ns   foos   bars   boos   bazr]   Fr#   Ts   path)rz   re   rq   rG   )r8   rU   rp   r5   r   r   r   test_missing_chunk   s     
z)RobustUnpackerTestCase.test_missing_chunkc             C   sn   | j | jddddgd}d|d d fdd	d
g|dd   fg}| j|}| j|ddiddiddig d S )Ns   foos   bars   boos   bazr]   Fr#   Ts   gars   bages   path)rz   re   rq   rG   )r8   rU   rp   r5   r   r   r   test_corrupt_chunk   s    (
z)RobustUnpackerTestCase.test_corrupt_chunkN)r;   r<   r=   re   rn   rq   rw   rz   r{   r|   r}   r   r   r   r   r_      s   
r_   c               C   s   dd t D S )Nc             S   s   g | ]}t j|qS r   )r   ra   )rQ   namer   r   r   rS      s    z(item_keys_serialized.<locals>.<listcomp>)r   r   r   r   r   item_keys_serialized   s    r   packedr`      xs   foobarc             C   s   g | ]}t j|qS r   )r   ra   )rQ   or   r   r   rS      s    rS   g        F *   gQk7@T   foo   barc             C   s   d S )Nr   )r   r   r   r   r   test_invalid_msgpacked_item   s    r   c             C   s   g | ]}t j|qS r   )r   ra   )rQ   r   r   r   r   rS      s    s   paths   /a/b/cc             c   s   | ]}|d fV  qdS )r`   Nr   )rQ   kr   r   r   rb      s    rb   c             c   s   | ]}|d d fV  qdS )r   i  Nr   )rQ   r   r   r   r   rb      s    c             C   s   d S )Nr   )r   r   r   r   r   test_valid_msgpacked_items   s    r   c              C   s    dd } | di}t j| g}d S )Nr       r`   )r   ra   )rH   rX   r   r   r   r   test_key_length_msgpacked_items   s    r   c               C   s2   t jt t tdW d Q R X W d Q R X d S )N{   )pytestraisesr   r   OSErrorr   r   r   r   test_backup_io  s    r   c           	   C   s\   G dd d} | t }tjt xt|D ]}q,W W d Q R X | t}xt|D ]}qPW d S )Nc               @   s   e Zd Zdd Zdd ZdS )z%test_backup_io_iter.<locals>.Iteratorc             S   s
   || _ d S )N)exc)r8   r   r   r   r   rA     s    z.test_backup_io_iter.<locals>.Iterator.__init__c             S   s   | j  d S )N)r   )r8   r   r   r   __next__  s    z.test_backup_io_iter.<locals>.Iterator.__next__N)r;   r<   r=   rA   r   r   r   r   r   Iterator
  s   r   )r   r   r   r   r   StopIteration)r   Zoserror_iterator_Znormal_iteratorr   r   r   test_backup_io_iter	  s    r   )r    )r   r   )3r2   collectionsr   r   r   ior   Zunittest.mockr   r   r   r   Z
crypto.keyr
   archiver   r   r   r   r   r   r   r   r   Zhelpersr   r   r&   r   r   Zfixturer   r   r/   r1   r6   r7   rE   rN   r_   r   ZmarkZparametrizer   sortedlistZIKr   r   r   r   r   r   r   r   <module>   sH    	
	'8,"