
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
ybα              	   @   s*  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZm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mZmZmZmZmZmZ dd
lmZmZ ddlmZmZm Z  ddlm!Z!m"Z"m#Z#m$Z$m%Z% ddlm&Z& ddlm'Z'm(Z( ddlm)Z)m*Z*m+Z+m,Z, ddlm-Z-m.Z.m/Z/m0Z0 ddlm1Z1m2Z2m3Z3 ddlm4Z4m5Z5 ddlm6Z6 ddlm7Z7 ddlm8Z8m9Z9m:Z: ddlm;Z; ddlm<Z< ddlm=Z= ddlm>Z>m?Z? G dd de>Z@dd ZAG dd  d ZBG d!d" d"ZCG d#d$ d$e>ZDd%d& ZEG d'd( d(e>ZFG d)d* d*ZGG d+d, d,e>ZHG d-d. d.e>ZIG d/d0 d0e>ZJG d1d2 d2e>ZKG d3d4 d4e>ZLd5d6 ZMd7d8 ZNd9d: ZOd;d< ZPd=d> ZQd?d@ ZRdAdB ZSdCdD ZTejUjVdEddQdR ZWejUjVdSddYdZ ZXd[d\ ZYG d]d^ d^ZZd_d` Z[dadb Z\dcdd Z]dedf Z^dgdh Z_didj Z`dkdl Zadmdn Zbdodp Zcdqdr Zddsdt Zedudv Zfdwdx Zgdydz Zhd{d| Zid}d~ Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd ZrejUjser  dddd ZtejUjser  dddd Zudd ZvG dd dZwdd Zxdd Zydd ZzdS )    N)ArgumentTypeError)datetimetimezone	timedelta)mktimestrptimesleep   )platform)Location)Buffer)partial_formatformat_file_sizeparse_file_sizeformat_timedeltaformat_linePlaceholderErrorreplace_placeholders)make_path_safeclean_lines)intervalprune_withinprune_split)get_base_dirget_cache_dirget_keys_dirget_security_dirget_config_dir)is_slow_msgpack)msgpackmsgpack_fallback)yesTRUISHFALSISH
DEFAULTISH)
StableDictint_to_bigintbigint_to_int
bin_to_hex)parse_timestampChunkIteratorFileWrapperChunkerParams)ProgressIndicatorPercentProgressIndicatorEndless)swidth_slice)chunkit)safe_nssafe_sSUPPORT_32BIT_PLATFORMS)popen_with_error_handling)	dash_open)safe_unlink   )BaseTestCase
FakeInputsc               @   s   e Zd Zdd ZdS )BigIntTestCasec             C   s   | j tdd | j td	d | j tdd | j tdd | j tdd | j ttdd  dd   | j ttdd dd  d S )Nr   r	   ?   r6   s	           s	          F   l            l    l            l    l            l         l l            l         l l            l            l         )assert_equalr&   r'   )self r>   /usr/lib64/python3.6/helpers.pytest_bigint&   s     zBigIntTestCase.test_bigintN)__name__
__module____qualname__r@   r>   r>   r>   r?   r9   $   s   r9   c               C   s   d S )Nr>   r>   r>   r>   r?   test_bin_to_hex0   s    rD   c               @   s   e Z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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 )&TestLocationWithoutEnvc             C   s2   t |}|jd| |jtjjs.|tjj7 }|S )NBORG_KEYS_DIR)strsetenvendswithospathsep)r=   tmpdirmonkeypatchr>   r>   r?   keys_dir6   s
    zTestLocationWithoutEnv.keys_dirc             C   s   |j ddd d S )N	BORG_REPOF)raising)delenv)r=   rN   rO   r>   r>   r?   test_ssh>   s    %zTestLocationWithoutEnv.test_sshc             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   	test_fileg   s    z TestLocationWithoutEnv.test_filec             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   test_scpo   s    zTestLocationWithoutEnv.test_scpc             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   test_smb   s    zTestLocationWithoutEnv.test_smbc             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   test_folder   s    z"TestLocationWithoutEnv.test_folderc             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   test_long_path   s    z%TestLocationWithoutEnv.test_long_pathc             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   test_abspath   s    z#TestLocationWithoutEnv.test_abspathc             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   test_relpath   s    z#TestLocationWithoutEnv.test_relpathc             C   s   |j ddd d S )NrP   F)rQ   )rR   )r=   rN   rO   r>   r>   r?   test_with_colons   s    z'TestLocationWithoutEnv.test_with_colonsc             C   s   d S )Nr>   )r=   r>   r>   r?   test_user_parsing   s    z(TestLocationWithoutEnv.test_user_parsingc             C   s   d S )Nr>   )r=   r>   r>   r?   test_with_timestamp   s    z*TestLocationWithoutEnv.test_with_timestampc             C   sj   |j ddd tjt td W d Q R X tjt td W d Q R X tjt t  W d Q R X d S )NrP   F)rQ   z	::archivez::)rR   pytestraises
ValueErrorr   )r=   rN   r>   r>   r?   test_underspecified   s    z*TestLocationWithoutEnv.test_underspecifiedc          	   C   s0   |j ddd tjt td W d Q R X d S )NrP   F)rQ   z8/some/path/to/repo::archive_name_with/slashes/is_invalid)rR   r^   r_   r`   r   )r=   rN   r>   r>   r?   test_no_slashes   s    z&TestLocationWithoutEnv.test_no_slashesc             C   s0   |j ddd dddddd	g}x|D ]}q$W d S )
NrP   F)rQ   zsome/path::archivezfile://some/path::archivezhost:some/path::archivezhost:~user/some/path::archivezssh://host/some/path::archivez'ssh://user@host:1234/some/path::archive)rR   )r=   rN   Z	locationslocationr>   r>   r?   test_canonical_path   s    
z*TestLocationWithoutEnv.test_canonical_pathc             C   s2   |j ddd tj }td}td td}d S )NrP   F)rQ   z/some/path::archive{now:%s}g?)rR   rJ   getpidr   r   )r=   rN   Ztest_pidZlocation_time1Zlocation_time2r>   r>   r?   test_format_path   s    z'TestLocationWithoutEnv.test_format_pathc          	   C   s"   t jt td W d Q R X d S )Nzssh://user@host:/path)r^   r_   r`   r   )r=   r>   r>   r?   test_bad_syntax   s    z&TestLocationWithoutEnv.test_bad_syntaxc             C   s    ddl m} td}|j }d S )Nr   )hostnamez.ssh://user@host:1234/repos/{hostname}::archive)borg.platformrh   r   Zomit_archive)r=   rh   locZloc_without_archiver>   r>   r?   test_omit_archive   s    z(TestLocationWithoutEnv.test_omit_archiveN)rA   rB   rC   r^   ZfixturerO   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   ra   rb   rd   rf   rg   rk   r>   r>   r>   r?   rE   5   s$   )
		
rE   c               @   sT   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d ZdS )TestLocationWithEnvc             C   s   |j dd d S )NrP   zssh://user@host:1234/some/path)rH   )r=   rN   r>   r>   r?   rS      s    zTestLocationWithEnv.test_sshc             C   s   ddl m} |jdd d S )Nr   )rh   rP   zssh://user@host:1234/{hostname})ri   rh   rH   )r=   rN   rh   r>   r>   r?   test_ssh_placeholder  s    z(TestLocationWithEnv.test_ssh_placeholderc             C   s   |j dd d S )NrP   zfile:///some/path)rH   )r=   rN   r>   r>   r?   rT     s    zTestLocationWithEnv.test_filec             C   s   |j dd d S )NrP   zuser@host:/some/path)rH   )r=   rN   r>   r>   r?   rU     s    zTestLocationWithEnv.test_scpc             C   s   |j dd d S )NrP   rK   )rH   )r=   rN   r>   r>   r?   rW   !  s    zTestLocationWithEnv.test_folderc             C   s   |j dd d S )NrP   z/some/absolute/path)rH   )r=   rN   r>   r>   r?   rY   *  s    z TestLocationWithEnv.test_abspathc             C   s   |j dd d S )NrP   zsome/relative/path)rH   )r=   rN   r>   r>   r?   rZ   3  s    z TestLocationWithEnv.test_relpathc             C   s   |j dd d S )NrP   z/abs/path:w:cols)rH   )r=   rN   r>   r>   r?   r[   <  s    z$TestLocationWithEnv.test_with_colonsc          	   C   s.   |j dd tjt td W d Q R X d S )NrP   z/some/absolute/pathz&::archive_name_with/slashes/is_invalid)rH   r^   r_   r`   r   )r=   rN   r>   r>   r?   rb   E  s    z#TestLocationWithEnv.test_no_slashesN)rA   rB   rC   rS   rm   rT   rU   rW   rY   rZ   r[   rb   r>   r>   r>   r?   rl      s   	
						rl   c               @   s   e Zd Zdd ZdS )FormatTimedeltaTestCasec             C   s@   t ddddddd}t ddddddd	}| jt|| d
 d S )Ni  r6   
         r         i z2 hours 1.10 seconds)r   r<   r   )r=   Zt0Zt1r>   r>   r?   testM  s
    
zFormatTimedeltaTestCase.testN)rA   rB   rC   rt   r>   r>   r>   r?   rn   K  s   rn   c            	   C   s"   t jt td W d Q R X d S )Nz19,24,21,4095)r^   r_   r`   r+   r>   r>   r>   r?   test_chunkerparamsV  s    ru   c               @   s   e Zd Zdd ZdS )MakePathSafeTestCasec             C   s   | j tdd | j tdd | j tdd | j tdd | j tdd | j tdd | j tdd	 | j tdd	 d S )
Nz/foo/barzfoo/barz/f/barzf/barzfo/barz
../foo/barz../../foo/bar/.)r<   r   )r=   r>   r>   r?   rt   _  s    zMakePathSafeTestCase.testN)rA   rB   rC   rt   r>   r>   r>   r?   rv   ]  s   rv   c               @   s   e Zd Zdd Zdd ZdS )MockArchivec             C   s
   || _ d S )N)ts)r=   rz   r>   r>   r?   __init__l  s    zMockArchive.__init__c             C   s
   t | jS )N)reprrz   )r=   r>   r>   r?   __repr__o  s    zMockArchive.__repr__N)rA   rB   rC   r{   r}   r>   r>   r>   r?   ry   j  s   ry   c               @   s   e Zd Zdd ZdS )PruneSplitTestCasec                s   dd  dd fdd}dddddddg} fdd|D }dd |D }||d
g dddg ||dg ddddg ||d
|d gdddg ||d
|d gdddg ||d
|d gdddg ||dg g  d S )Nc             S   s&   t td| |f d}tj|tjdS )z1Convert noon on the month and day in 2013 to UTC.z2013-%02d-%02d 12:00z%Y-%m-%d %H:%M)Ztz)r   r   r   Zfromtimestampr   utc)monthdaysecondsr>   r>   r?   local_to_UTCw  s    z-PruneSplitTestCase.test.<locals>.local_to_UTCc                s    fdd|D S )Nc                s   h | ]} | qS r>   r>   ).0i)lstr>   r?   	<setcomp>}  s    z:PruneSplitTestCase.test.<locals>.subset.<locals>.<setcomp>r>   )r   indicesr>   )r   r?   subset|  s    z'PruneSplitTestCase.test.<locals>.subsetc                s:   x4| t | fD ]$} jtt|d||| | qW d S )Nz%Y-%m)reversedr<   setr   )test_archivesnskipr   ta)r=   r   r>   r?   dotest  s    z'PruneSplitTestCase.test.<locals>.dotestr6   r	      rq         c                s   g | ]\}} ||qS r>   r>   )r   r   r   )r   r>   r?   
<listcomp>  s    z+PruneSplitTestCase.test.<locals>.<listcomp>c             S   s   g | ]}t |qS r>   )ry   )r   dater>   r>   r?   r     s       r   rs   )r6   r6   )r	   r6   )r	   r   )rq   r6   )rq   r	   )rq   r   )r   r6   r>   )r=   r   Z
test_pairs
test_datesr   r>   )r   r=   r   r?   rt   u  s    zPruneSplitTestCase.testN)rA   rB   rC   rt   r>   r>   r>   r?   r~   s  s   r~   c               @   s$   e Zd Zdd Zdd Zdd ZdS )IntervalTestCasec             C   sT   | j tdd | j tdd | j tdd | j tdd | j td	d
 d S )N1Hr6   Z1d   1w   1mi  1yi8"  )r<   r   )r=   r>   r>   r?   test_interval  s
    zIntervalTestCase.test_intervalc             C   s   t jt}td W d Q R X | j|jjd t jt}td W d Q R X | j|jjd t jt}td W d Q R X | j|jjd	 d S )
NHAUnexpected interval number "": expected an integer greater than 0z-1dCUnexpected interval number "-1": expected an integer greater than 0ZfoodDUnexpected interval number "foo": expected an integer greater than 0)r   )r   )r   )r^   r_   r   r   r<   valueargs)r=   excr>   r>   r?   test_interval_time_unit  s    z(IntervalTestCase.test_interval_time_unitc          
   C   s2   t jt}td W d Q R X | j|jjd d S )N5LUnexpected interval time unit "5": expected one of ['H', 'd', 'w', 'm', 'y'])r   )r^   r_   r   r   r<   r   r   )r=   r   r>   r>   r?   test_interval_number  s
    z%IntervalTestCase.test_interval_numberN)rA   rB   rC   r   r   r   r>   r>   r>   r?   r     s   r   c               @   s   e Zd Zdd ZdS )PruneWithinTestCasec          	      s>  dd fdd}ddd d!d#d%g}t jtj  fdd|D }dd |D }||ddg ||dddg ||ddddg ||dddddg ||ddddddg ||ddddddg ||dddddddg ||dddddddg ||dddddddg ||dddddddg ||dddddddg d S )&Nc                s    fdd|D S )Nc                s   h | ]} | qS r>   r>   )r   r   )r   r>   r?   r     s    zHPruneWithinTestCase.test_prune_within.<locals>.subset.<locals>.<setcomp>r>   )r   r   r>   )r   r?   r     s    z5PruneWithinTestCase.test_prune_within.<locals>.subsetc                s:   x4| t | fD ]$} jtt|t|| | qW d S )N)r   r<   r   r   r   )r   Zwithinr   r   )r=   r   r>   r?   r     s    z5PruneWithinTestCase.test_prune_within.<locals>.dotest<   Z            1   c                s   g | ]} t |d  qS ))r   )r   )r   s)nowr>   r?   r     s    z9PruneWithinTestCase.test_prune_within.<locals>.<listcomp>c             S   s   g | ]}t |qS r>   )ry   )r   r   r>   r>   r?   r     s    r   r   Z2Hr6   Z3Hr	   Z24Hrq   Z26Hrs   Z2dZ50Hr   Z3dr   r   r   i  i(#  i81  i  i_ i|  i )r   r   r   r   )r=   r   Ztest_offsetsr   r   r>   )r   r=   r   r?   test_prune_within  s"    z%PruneWithinTestCase.test_prune_withinN)rA   rB   rC   r   r>   r>   r>   r?   r     s   r   c               @   s   e Zd Zdd ZdS )StableDictTestCasec             C   sL   t ddddd}| jt|j ddddg | jtjtj|j d
 d S )Nr6   r	   rq   rs   )foobarboobazr   r   r   r   Z fc78df42cd60691b3ac3dd2a2b39903f)r   r	   )r   rs   )r   rq   )r   r6   )	r%   r<   listitemshashlibZmd5r   ZpackbZ	hexdigest)r=   dr>   r>   r?   rt     s    zStableDictTestCase.testN)rA   rB   rC   rt   r>   r>   r>   r?   r     s   r   c               @   s   e Zd Zdd ZdS )TestParseTimestampc             C   sL   | j tdtdddddddtj | j td	tdddddddtj d S )
Nz2015-04-19T20:25:00.226410i  rs      rp   r   r   ijt z2015-04-19T20:25:00)r<   r)   r   r   r   )r=   r>   r>   r?   rt     s    $zTestParseTimestamp.testN)rA   rB   rC   rt   r>   r>   r>   r?   r     s   r   c             C   sR   | j ddd | j ddd | j ddd | jdd | jdd | jdd d	S )
z+test that get_base_dir respects environmentZBORG_BASE_DIRF)rQ   HOMEZUSERrootz/var/tmp/homez/var/tmp/baseN)rR   rH   )rN   r>   r>   r?   test_get_base_dir  s    r   c             C   s8   | j ddd | j ddd | jdd | jdd dS )z-test that get_config_dir respects environmentZBORG_CONFIG_DIRF)rQ   XDG_CONFIG_HOMEz/var/tmp/.configz/var/tmpN)rR   rH   )rN   r>   r>   r?   test_get_config_dir  s
    r   c             C   s8   | j ddd | j ddd | jdd | jdd dS )z,test that get_cache_dir respects environmentZBORG_CACHE_DIRF)rQ   ZXDG_CACHE_HOMEz/var/tmp/.cachez/var/tmpN)rR   rH   )rN   r>   r>   r?   test_get_cache_dir  s
    r   c             C   s8   | j ddd | j ddd | jdd | jdd dS )z+test that get_keys_dir respects environmentrF   F)rQ   r   z/var/tmp/.configz/var/tmpN)rR   rH   )rN   r>   r>   r?   test_get_keys_dir  s
    r   c             C   s8   | j ddd | j ddd | jdd | jdd dS )z/test that get_security_dir respects environmentZBORG_SECURITY_DIRF)rQ   r   z/var/tmp/.configz/var/tmpN)rR   rH   )rN   r>   r>   r?   test_get_security_dir  s
    r   c           *   C   sr   ddddddddd	d
dd
ddddddddddddd(dd)dd*dd+dd,d d-d"d.d$d/d%d0d&i} x| j  D ]\}}qbW d'S )1z!test the size formatting routinesr   z0 Br6   z1 B   z142 Bi  z999 Bi  z1.00 kBi  i  z1.23 kBi  z1.24 kBi  z1.01 kBi;z	999.99 MBi;ix;z1.00 GBro   r   z1.00 MB	   rr   z1.00 TB   z1.00 PB   z1.00 EB   z1.00 ZBr   z1.00 YBz-1 Bz-1.01 kBNi@B i ʚ;l    J)l     I5 l     NZol     @=7M.cl      B3v^!< r   i)r   )si_size_mapsizefmtr>   r>   r?   test_file_size  s.    r   c               C   s   d S )Nr>   r>   r>   r>   r?   test_file_size_precision6  s    r   c           
   C   s2   ddddddd	dd
di} x| j  D ]\}}q"W d S )Nr   z0 Br6   z+1 Bi  z+1.23 kBz-1 Bz-1.23 kBr   i.)r   )r   r   r   r>   r>   r?   test_file_size_sign<  s    r   zstring,value120rp   5K  1.75M 1e+9    eA-1Tg   mBc             C   s   d S )Nr>   )stringr   r>   r>   r?   test_parse_file_sizeH  s    	r   r       5 Äpfel4E2229 bit1Bc          	   C   s"   t jt t|  W d Q R X d S )N)r^   r_   r`   r   )r   r>   r>   r?   test_parse_file_size_invalidT  s    r   c              C   s    t j} ztjt _W d | t _X d S )N)r   ZPackerr    )Zsaved_packerr>   r>   r?   test_is_slow_msgpack\  s    r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
TestBufferc             C   s   t t}t t}d S )N)r   	bytearraybytes)r=   bufferr>   r>   r?   	test_typeh  s    zTestBuffer.test_typec             C   s,   t tdd}|j }t tdd}|j }d S )Nr   )r   i  )r   r   get)r=   r   br>   r>   r?   test_lenn  s
    zTestBuffer.test_lenc             C   sR   t tdd}|j }|jd |j }|jd |j }|jddd |j }d S )Nd   )r      T)Zinit)r   r   r   resize)r=   r   b1b2b3Zb4r>   r>   r?   test_resizev  s    

zTestBuffer.test_resizec          	   C   s>   t tddd}|jd tjt j |jd W d Q R X d S )Nr   r   )r   limit   )r   r   r   r^   r_   MemoryLimitExceeded)r=   r   r>   r>   r?   
test_limit  s
    
zTestBuffer.test_limitc          	   C   sR   t tddd}|jd}|jd}|jd}tjt j |jd W d Q R X d S )Nr   r   )r   r   2   r   )r   r   r   r^   r_   r   )r=   r   r   r   r   r>   r>   r?   test_get  s    


zTestBuffer.test_getN)rA   rB   rC   r   r   r   r   r   r>   r>   r>   r?   r   g  s
   r   c              C   s@   t t} t| }x| D ]}qW t t} t| }x| D ]}q4W d S )N)r   r"   r8   r#   )inputsinputr   r>   r>   r?   test_yes_input  s    

r   c              C   s8   t t} t| }x| D ]}qW t| }x| D ]}q,W d S )N)r   r$   r8   )r   r   r   r>   r>   r?   test_yes_input_defaults  s    

r   c              C   s   t dddg} d S )NZYESZSUREZNOPE)r8   )r   r>   r>   r?   test_yes_input_custom  s    r   c             C   s8   xt D ]}| jd| qW xtD ]}| jd| q W d S )NOVERRIDE_THIS)r"   rH   r#   )rN   r   r>   r>   r?   test_yes_env  s    

r  c             C   s   xt D ]}| jd| qW d S )Nr   )r$   rH   )rN   r   r>   r>   r?   test_yes_env_default  s    
r  c           
   C   sH   t dddg} t dddg} t g } tjt td d W d Q R X d S )Ninvalidr    )default)r8   r^   r_   r`   r!   )r   r>   r>   r?   test_yes_defaults  s
    r  c              C   s(   t ddtd g} t ddtd g} d S )Nr   r   r   )r8   r"   r#   )r   r>   r>   r?   test_yes_retry  s    r  c              C   s(   t ddtd g} t ddtd g} d S )Nr   r   r   )r8   r"   r#   )r   r>   r>   r?   test_yes_no_retry  s    r  c             C   s*   t dddg}| j \}}| j \}}d S )Nr  yr   )r8   
readouterr)capfdr   outerrr>   r>   r?   test_yes_output  s    r  c             C   s    d}|j |d | j \}}d S )NZOVERRIDE_SOMETHINGr!   )rH   r
  )r  rN   Zenv_varr  r  r>   r>   r?   test_yes_env_output  s    r  c             C   s   |j dd |j dd tddddd	}|jjd
 |jd | j \}}|jd |jd | j \}}|jd | j \}}|j  | j \}}d S )NCOLUMNS4LINESr   i  r   r   z%3.0f%%)stepstartmsgINFOi  i  )rH   r,   loggersetLevelshowr
  finish)r  rN   pir  r  r>   r>   r?   !test_progress_percentage_sameline  s    



r  c             C   st   |j dd |j dd tddddd	}|jjd
 |j  | j \}}|j  | j \}}|j  | j \}}d S )Nr  r  r  r   r   r	   r   z%3.0f%%)r  r  r  r  )rH   r,   r  r  r  r
  )r  rN   r  r  r  r>   r>   r?   test_progress_percentage_step  s    r  c             C   s`   t ddddd}|jjd |jd | j \}}|jd | j \}}|j  | j \}}d S )Ni  r   r   z%3.0f%%)r  r  r  ZWARN)r,   r  r  r  r
  r  )r  r  r  r  r>   r>   r?   test_progress_percentage_quiet(  s    

r  c             C   sN   t dtjd}|j  | j \}}|j  | j \}}|j  | j \}}d S )Nr6   )r  file)r-   sysstderrr  r
  r  )r  r  r  r  r>   r>   r?   test_progress_endless6  s    r"  c             C   sb   t dtjd}|j  | j \}}|j  | j \}}|j  | j \}}|j  | j \}}d S )Nr	   )r  r  )r-   r   r!  r  r
  )r  r  r  r  r>   r>   r?   test_progress_endless_stepC  s    r#  c               C   s   d S )Nr>   r>   r>   r>   r?   test_partial_formatS  s    r$  c              C   s    t tddg} t tg } d S )Ns   abcs   def)r*   iter)Zcfwr>   r>   r?   test_chunk_file_wrapper[  s    r&  c              C   s^   t dd} tjt t|  W d Q R X tjt t|  W d Q R X t dd} t dd} d S )NZabcdefgrq   Zabr   )r/   r^   r_   StopIterationnext)itr>   r>   r?   test_chunkitf  s    


r*  c              C   s   dj dd} d S )Nz$#comment
data1 #data1
data2

 data3
T)keepends)
splitlines)Zconfr>   r>   r?   test_clean_linesw  s    r-  c              C   s   t dd} d S )Nzbar baz)r   )dict)datar>   r>   r?   test_format_line  s    
r0  c              C   sb   t  } tjt W d Q R X tjt W d Q R X tjt W d Q R X tjt W d Q R X d S )N)r.  r^   r_   r   )r/  r>   r>   r?   test_format_line_erroneous  s    


r1  c              C   s   t j } d S )N)r   r   )r   r>   r>   r?   test_replace_placeholders  s    r2  c               C   s   d S )Nr>   r>   r>   r>   r?   test_override_placeholders  s    r3  c               C   s   t jddkS )Nu   선r	   )r
   Zswidthr>   r>   r>   r?   working_swidth  s    r4  z"swidth() is not supported / active)reasonc              C   s   d} d S )Nu-   나윤선나윤선나윤선나윤선나윤선r>   )r   r>   r>   r?   test_swidth_slice  s    r6  c              C   s   d} d S )Nu.   나윤a선나윤선나윤선나윤선나윤선r>   )r   r>   r>   r?   "test_swidth_slice_mixed_characters  s    r7  c           	   C   sZ   t r.dd } tjt tj|  W d Q R X n(dd } tjt tj|  W d Q R X d S )Nr	   r   )r2   r^   r_   OverflowErrorr   Zutcfromtimestamp)Zbeyond_y10kr>   r>   r?   test_safe_timestamps  s    	r9  c               @   sh   e Zd Zejjejd dddd Zejjejddddd	 Z	ejj
d
ddd Zdd ZdS )TestPopenWithErrorHandlingrt   z"test" binary is needed)r5  c             C   s   t d}d S )Nztest 1)r3   )r=   procr>   r>   r?   test_simple  s    z&TestPopenWithErrorHandling.test_simplezborg-foobar-test-notexistz4"borg-foobar-test-notexist" binary exists (somehow?)c             C   s   t d}d S )Nzborg-foobar-test-notexist 1234)r3   )r=   r;  r>   r>   r?   test_not_found  s    z)TestPopenWithErrorHandling.test_not_foundcmdmismatched "quotefoo --bar="bazr   c             C   s   t |}d S )N)r3   )r=   r>  r;  r>   r>   r?   rg     s    z*TestPopenWithErrorHandling.test_bad_syntaxc             C   s&   t jt tddd W d Q R X d S )Nr   T)shell)r^   r_   AssertionErrorr3   )r=   r>   r>   r?   
test_shell  s    z%TestPopenWithErrorHandling.test_shellN)r?  r@  r   )rA   rB   rC   r^   markskipifshutilZwhichr<  r=  parametrizerg   rC  r>   r>   r>   r?   r:    s      r:  c               C   s   d S )Nr>   r>   r>   r>   r?   test_dash_open  s    rH  c             C   s8   d}| d }|j | | d }|j| tt| d S )Ns   Hello, world
victimhardlink)write_binarymklinktor5   rG   )rM   contentsrI  	hard_linkr>   r>   r?   test_safe_unlink_is_safe  s    

rO  c          
   C   sd   d}| d }|j | | d }|j| dd }|jtd| tjt tt| W d Q R X d S )Ns   Hello, world
rI  rJ  c             S   s   t tjdd S )Nz Pretend that we ran out of space)OSErrorerrnoZENOSPC)_r>   r>   r?   	os_unlink  s    z2test_safe_unlink_is_safe_ENOSPC.<locals>.os_unlinkunlink)	rK  rL  setattrrJ   r^   r_   rP  r5   rG   )rM   rN   rM  rI  rN  rS  r>   r>   r?   test_safe_unlink_is_safe_ENOSPC   s    

rV  r   r6   r   rp   r   r   r   r   r   r      m©r   r\  )rW  rX  rY  rZ  r[  r]  )r   r   r   r   r   ){rQ  r   iorJ   rF  r   argparser   r   r   r   Ztimer   r   r   r^   r   r
   Zhelpersr   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%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r7   r8   r9   rD   rE   rl   rn   ru   rv   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   rD  rG  r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r"  r#  r$  r&  r*  r-  r0  r1  r2  r3  r4  rE  r6  r7  r9  r:  rH  rO  rV  r>   r>   r>   r?   <module>   s   $ GP	!     7
	
	