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

y��bα�	@s*ddlZddlZddlZddlZddlZddlZddlmZddlmZm	Z	m
Z
ddlmZm
Z
mZddlZddlmZddlmZddlmZdd	lmZmZmZmZmZmZmZdd
lmZmZddlmZmZm Z ddlm!Z!m"Z"m#Z#m$Z$m%Z%dd
lm&Z&ddlm'Z'm(Z(ddlm)Z)m*Z*m+Z+m,Z,ddlm-Z-m.Z.m/Z/m0Z0ddlm1Z1m2Z2m3Z3ddlm4Z4m5Z5ddlm6Z6ddlm7Z7ddlm8Z8m9Z9m:Z:ddlm;Z;ddlm<Z<ddlm=Z=ddlm>Z>m?Z?Gdd�de>�Z@dd�ZAGdd �d �ZBGd!d"�d"�ZCGd#d$�d$e>�ZDd%d&�ZEGd'd(�d(e>�ZFGd)d*�d*�ZGGd+d,�d,e>�ZHGd-d.�d.e>�ZIGd/d0�d0e>�ZJGd1d2�d2e>�ZKGd3d4�d4e>�ZLd5d6�ZMd7d8�ZNd9d:�ZOd;d<�ZPd=d>�ZQd?d@�ZRdAdB�ZSdCdD�ZTejUjVdEd��dQdR��ZWejUjVdSd��dYdZ��ZXd[d\�ZYGd]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~�Zjdd��Zkd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpd�d��Zqd�d��ZrejUjser�d�d��d�d���ZtejUjser�d�d��d�d���Zud�d��ZvGd�d��d��Zwd�d��Zxd�d��Zyd�d��ZzdS)��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@seZdZdd�ZdS)�BigIntTestCasecCs�|jtd�d�|jtd	�d�|jtd�d�|jtd�d�|jtd�d�|jttdd��dd�|jttdd��dd�dS)Nrr	�?r6s	�s	���Fll����ll����ll����l��������ll����l��������lll����)�assert_equalr&r')�self�r>�/usr/lib64/python3.6/helpers.py�test_bigint&s zBigIntTestCase.test_bigintN)�__name__�
__module__�__qualname__r@r>r>r>r?r9$sr9cCs$td�dkst�td�dks t�dS)N��s�Z0001ff)r(�AssertionErrorr>r>r>r?�test_bin_to_hex0srGc@s�eZdZejdd��Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%S)&�TestLocationWithoutEnvcCs2t|�}|jd|�|jtjj�s.|tjj7}|S)N�
BORG_KEYS_DIR)�str�setenv�endswith�os�path�sep)r=�tmpdir�monkeypatchr>r>r?�keys_dir6s
zTestLocationWithoutEnv.keys_dircCs�|jddd�ttd��dks"t�td�j�|dks:t�ttd��dksNt�ttd	��d
ksbt�ttd��dksvt�ttd
��dks�t�td
�j�|dks�t�ttd��dks�t�ttd��dks�t�ttd��dks�t�td�j�|dks�t�ttd��dk�st�ttd��dk�s"t�ttd��dk�s8t�ttd��dk�sNt�ttd��d k�sdt�ttd!��d"k�szt�ttd#��d$k�s�t�td#�j�|d%k�s�t�ttd&��d'k�s�t�ttd(��d)k�s�t�dS)*N�	BORG_REPOF)�raisingz'ssh://user@host:1234/some/path::archivez`Location(proto='ssh', user='user', host='host', port=1234, path='/some/path', archive='archive')�host__some_pathzssh://user@host:1234/some/pathz[Location(proto='ssh', user='user', host='host', port=1234, path='/some/path', archive=None)zssh://user@host/some/pathz[Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive=None)z'ssh://user@[::]:1234/some/path::archivez^Location(proto='ssh', user='user', host='::', port=1234, path='/some/path', archive='archive')zssh://user@[::]:1234/some/pathzYLocation(proto='ssh', user='user', host='::', port=1234, path='/some/path', archive=None)Z
____some_pathzssh://user@[::]/some/pathzYLocation(proto='ssh', user='user', host='::', port=None, path='/some/path', archive=None)z/ssh://user@[2001:db8::]:1234/some/path::archivezfLocation(proto='ssh', user='user', host='2001:db8::', port=1234, path='/some/path', archive='archive')z&ssh://user@[2001:db8::]:1234/some/pathzaLocation(proto='ssh', user='user', host='2001:db8::', port=1234, path='/some/path', archive=None)Z2001_db8____some_pathz!ssh://user@[2001:db8::]/some/pathzaLocation(proto='ssh', user='user', host='2001:db8::', port=None, path='/some/path', archive=None)z6ssh://user@[2001:db8::c0:ffee]:1234/some/path::archivezmLocation(proto='ssh', user='user', host='2001:db8::c0:ffee', port=1234, path='/some/path', archive='archive')z-ssh://user@[2001:db8::c0:ffee]:1234/some/pathzhLocation(proto='ssh', user='user', host='2001:db8::c0:ffee', port=1234, path='/some/path', archive=None)z(ssh://user@[2001:db8::c0:ffee]/some/pathzhLocation(proto='ssh', user='user', host='2001:db8::c0:ffee', port=None, path='/some/path', archive=None)z8ssh://user@[2001:db8::192.0.2.1]:1234/some/path::archivezoLocation(proto='ssh', user='user', host='2001:db8::192.0.2.1', port=1234, path='/some/path', archive='archive')z/ssh://user@[2001:db8::192.0.2.1]:1234/some/pathzjLocation(proto='ssh', user='user', host='2001:db8::192.0.2.1', port=1234, path='/some/path', archive=None)z*ssh://user@[2001:db8::192.0.2.1]/some/pathzjLocation(proto='ssh', user='user', host='2001:db8::192.0.2.1', port=None, path='/some/path', archive=None)�2001_db8__192_0_2_1__some_pathz>ssh://user@[2a02:0001:0002:0003:0004:0005:0006:0007]/some/pathz~Location(proto='ssh', user='user', host='2a02:0001:0002:0003:0004:0005:0006:0007', port=None, path='/some/path', archive=None)zCssh://user@[2a02:0001:0002:0003:0004:0005:0006:0007]:1234/some/pathz~Location(proto='ssh', user='user', host='2a02:0001:0002:0003:0004:0005:0006:0007', port=1234, path='/some/path', archive=None))�delenv�reprrrF�to_key_filename)r=rQrRr>r>r?�test_ssh>sN
























zTestLocationWithoutEnv.test_sshcCsR|jddd�ttd��dks"t�ttd��dks6t�td�j�|dksNt�dS)	NrSF)rTzfile:///some/path::archivez]Location(proto='file', user=None, host=None, port=None, path='/some/path', archive='archive')zfile:///some/pathzXLocation(proto='file', user=None, host=None, port=None, path='/some/path', archive=None)Z	some_path)rWrXrrFrY)r=rQrRr>r>r?�	test_filegs



z TestLocationWithoutEnv.test_filecCs|jddd�ttd��dks"t�ttd��dks6t�ttd��d	ksJt�ttd
��dks^t�ttd��d
ksrt�ttd��dks�t�ttd��dks�t�ttd��dks�t�ttd��dks�t�ttd��dks�t�td�j�|dks�t�ttd��dk�st�dS)NrSF)rTzuser@host:/some/path::archivez`Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive='archive')zuser@host:/some/pathz[Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive=None)zuser@[::]:/some/path::archivez^Location(proto='ssh', user='user', host='::', port=None, path='/some/path', archive='archive')zuser@[::]:/some/pathzYLocation(proto='ssh', user='user', host='::', port=None, path='/some/path', archive=None)z%user@[2001:db8::]:/some/path::archivezfLocation(proto='ssh', user='user', host='2001:db8::', port=None, path='/some/path', archive='archive')zuser@[2001:db8::]:/some/pathzaLocation(proto='ssh', user='user', host='2001:db8::', port=None, path='/some/path', archive=None)z,user@[2001:db8::c0:ffee]:/some/path::archivezmLocation(proto='ssh', user='user', host='2001:db8::c0:ffee', port=None, path='/some/path', archive='archive')z#user@[2001:db8::c0:ffee]:/some/pathzhLocation(proto='ssh', user='user', host='2001:db8::c0:ffee', port=None, path='/some/path', archive=None)z.user@[2001:db8::192.0.2.1]:/some/path::archivezoLocation(proto='ssh', user='user', host='2001:db8::192.0.2.1', port=None, path='/some/path', archive='archive')z%user@[2001:db8::192.0.2.1]:/some/pathzjLocation(proto='ssh', user='user', host='2001:db8::192.0.2.1', port=None, path='/some/path', archive=None)rVz9user@[2a02:0001:0002:0003:0004:0005:0006:0007]:/some/pathz~Location(proto='ssh', user='user', host='2a02:0001:0002:0003:0004:0005:0006:0007', port=None, path='/some/path', archive=None))rWrXrrFrY)r=rQrRr>r>r?�test_scpos0




















zTestLocationWithoutEnv.test_scpcCs>|jddd�ttd��dks"t�td�j�|dks:t�dS)NrSF)rTz#file:////server/share/path::archivezfLocation(proto='file', user=None, host=None, port=None, path='//server/share/path', archive='archive')Zserver_share_path)rWrXrrFrY)r=rQrRr>r>r?�test_smb�s

zTestLocationWithoutEnv.test_smbcCsR|jddd�ttd��dks"t�ttd��dks6t�td�j�|dksNt�dS)NrSF)rTz
path::archivezWLocation(proto='file', user=None, host=None, port=None, path='path', archive='archive')rNzRLocation(proto='file', user=None, host=None, port=None, path='path', archive=None))rWrXrrFrY)r=rQrRr>r>r?�test_folder�s



z"TestLocationWithoutEnv.test_foldercCsH|jddd�ttjjddg��j�|djddg�dksDt�dS)NrSF)rT�(rN�_�)rWrrMrN�joinrYrF)r=rQrRr>r>r?�test_long_path�sz%TestLocationWithoutEnv.test_long_pathcCs~|jddd�ttd��dks"t�ttd��dks6t�td�j�|dksNt�ttd	��d
ksbt�td	�j�|dkszt�dS)NrSF)rTz/some/absolute/path::archivezfLocation(proto='file', user=None, host=None, port=None, path='/some/absolute/path', archive='archive')z/some/absolute/pathzaLocation(proto='file', user=None, host=None, port=None, path='/some/absolute/path', archive=None)Zsome_absolute_pathzssh://user@host/some/pathz[Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive=None)rU)rWrXrrFrY)r=rQrRr>r>r?�test_abspath�s





z#TestLocationWithoutEnv.test_abspathcCs�|jddd�ttd��dks"t�ttd��dks6t�td�j�|dksNt�ttd	��d
ksbt�td	�j�|dkszt�ttd��d
ks�t�td�j�|dks�t�ttd��dks�t�td�j�|dks�t�dS)NrSF)rTzsome/relative/path::archivezeLocation(proto='file', user=None, host=None, port=None, path='some/relative/path', archive='archive')zsome/relative/pathz`Location(proto='file', user=None, host=None, port=None, path='some/relative/path', archive=None)Zsome_relative_pathzssh://user@host/./some/pathz]Location(proto='ssh', user='user', host='host', port=None, path='/./some/path', archive=None)rUzssh://user@host/~/some/pathz]Location(proto='ssh', user='user', host='host', port=None, path='/~/some/path', archive=None)zssh://user@host/~user/some/pathzaLocation(proto='ssh', user='user', host='host', port=None, path='/~user/some/path', archive=None)Zhost__user_some_path)rWrXrrFrY)r=rQrRr>r>r?�test_relpath�s









z#TestLocationWithoutEnv.test_relpathcCsf|jddd�ttd��dks"t�ttd��dks6t�ttd��d	ksJt�td�j�|d
ksbt�dS)NrSF)rTz/abs/path:w:cols::arch:colzdLocation(proto='file', user=None, host=None, port=None, path='/abs/path:w:cols', archive='arch:col')z/abs/path:with:colons::archivezhLocation(proto='file', user=None, host=None, port=None, path='/abs/path:with:colons', archive='archive')z/abs/path:with:colonszcLocation(proto='file', user=None, host=None, port=None, path='/abs/path:with:colons', archive=None)Zabs_path_with_colons)rWrXrrFrY)r=rQrRr>r>r?�test_with_colons�s





z'TestLocationWithoutEnv.test_with_colonscCs,ttd��dkst�ttd��dks(t�dS)Nzhost:path::2016-12-31@23:59:59zdLocation(proto='ssh', user=None, host='host', port=None, path='path', archive='2016-12-31@23:59:59')z$ssh://host/path::2016-12-31@23:59:59zeLocation(proto='ssh', user=None, host='host', port=None, path='/path', archive='2016-12-31@23:59:59'))rXrrF)r=r>r>r?�test_user_parsing�s


z(TestLocationWithoutEnv.test_user_parsingcCs,ttd�jtdddtjd���dks(t�dS)Nzpath::archive-{utcnow}i��	�)ZtzinfozkLocation(proto='file', user=None, host=None, port=None, path='path', archive='archive-2002-09-19T00:00:00'))rXrZwith_timestamprr�utcrF)r=r>r>r?�test_with_timestamp�sz*TestLocationWithoutEnv.test_with_timestampcCsj|jddd�tjt��td�WdQRXtjt��td�WdQRXtjt��t�WdQRXdS)NrSF)rTz	::archivez::)rW�pytest�raises�
ValueErrorr)r=rQr>r>r?�test_underspecified�sz*TestLocationWithoutEnv.test_underspecifiedc	Cs0|jddd�tjt��td�WdQRXdS)NrSF)rTz8/some/path/to/repo::archive_name_with/slashes/is_invalid)rWrlrmrnr)r=rQr>r>r?�test_no_slashes�sz&TestLocationWithoutEnv.test_no_slashescCs\|jddd�dddddd	g}x8|D]0}t|�j�tt|�j��j�ks$td
|��q$WdS)NrSF)rTzsome/path::archivezfile://some/path::archivezhost:some/path::archivezhost:~user/some/path::archivezssh://host/some/path::archivez'ssh://user@host:1234/some/path::archivez
failed: %s)rWrZcanonical_pathrF)r=rQZ	locations�locationr>r>r?�test_canonical_path�s

z*TestLocationWithoutEnv.test_canonical_pathcCs\|jddd�tj�}ttd��dj|�ks0t�td�}td�td�}|j|jksXt�dS)NrSF)rTz/some/path::archive{pid}z_Location(proto='file', user=None, host=None, port=None, path='/some/path', archive='archive{}')z/some/path::archive{now:%s}g�������?)	rWrM�getpidrXr�formatrFr�archive)r=rQZtest_pidZlocation_time1Zlocation_time2r>r>r?�test_format_path�s
z'TestLocationWithoutEnv.test_format_pathc	Cs"tjt��td�WdQRXdS)Nzssh://user@host:/path)rlrmrnr)r=r>r>r?�test_bad_syntax�sz&TestLocationWithoutEnv.test_bad_syntaxcCsNddlm}td�}|j�}|jdks*t�|jdks8t�|jd|ksJt�dS)Nr)�hostnamez.ssh://user@host:1234/repos/{hostname}::archivez%ssh://user@host:1234/repos/{hostname}zssh://user@host:1234/repos/%s)�
borg.platformrxrZomit_archiverurF�rawZ	processed)r=rx�locZloc_without_archiver>r>r?�test_omit_archive�sz(TestLocationWithoutEnv.test_omit_archiveN)rArBrCrlZfixturerRrZr[r\r]r^rcrdrerfrgrkrorprrrvrwr|r>r>r>r?rH5s$)
		
rHc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestLocationWithEnvcCsJ|jdd�ttd��dks t�ttd��dks4t�tt��dksFt�dS)NrSzssh://user@host:1234/some/pathz	::archivez`Location(proto='ssh', user='user', host='host', port=1234, path='/some/path', archive='archive')z::z[Location(proto='ssh', user='user', host='host', port=1234, path='/some/path', archive=None))rKrXrrF)r=rQr>r>r?rZ�s



zTestLocationWithEnv.test_sshcCshddlm}|jdd�ttd��dj|�ks2t�ttd��dj|�ksLt�tt��dj|�ksdt�dS)	Nr)rxrSzssh://user@host:1234/{hostname}z	::archivezYLocation(proto='ssh', user='user', host='host', port=1234, path='/{}', archive='archive')z::zTLocation(proto='ssh', user='user', host='host', port=1234, path='/{}', archive=None))ryrxrKrXrrtrF)r=rQrxr>r>r?�test_ssh_placeholders

z(TestLocationWithEnv.test_ssh_placeholdercCsJ|jdd�ttd��dks t�ttd��dks4t�tt��dksFt�dS)NrSzfile:///some/pathz	::archivez]Location(proto='file', user=None, host=None, port=None, path='/some/path', archive='archive')z::zXLocation(proto='file', user=None, host=None, port=None, path='/some/path', archive=None))rKrXrrF)r=rQr>r>r?r[s



zTestLocationWithEnv.test_filecCsJ|jdd�ttd��dks t�ttd��dks4t�tt��dksFt�dS)NrSzuser@host:/some/pathz	::archivez`Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive='archive')z::z[Location(proto='ssh', user='user', host='host', port=None, path='/some/path', archive=None))rKrXrrF)r=rQr>r>r?r\s



zTestLocationWithEnv.test_scpcCsJ|jdd�ttd��dks t�ttd��dks4t�tt��dksFt�dS)NrSrNz	::archivezWLocation(proto='file', user=None, host=None, port=None, path='path', archive='archive')z::zRLocation(proto='file', user=None, host=None, port=None, path='path', archive=None))rKrXrrF)r=rQr>r>r?r^!s



zTestLocationWithEnv.test_foldercCsJ|jdd�ttd��dks t�ttd��dks4t�tt��dksFt�dS)NrSz/some/absolute/pathz	::archivezfLocation(proto='file', user=None, host=None, port=None, path='/some/absolute/path', archive='archive')z::zaLocation(proto='file', user=None, host=None, port=None, path='/some/absolute/path', archive=None))rKrXrrF)r=rQr>r>r?rd*s



z TestLocationWithEnv.test_abspathcCsJ|jdd�ttd��dks t�ttd��dks4t�tt��dksFt�dS)NrSzsome/relative/pathz	::archivezeLocation(proto='file', user=None, host=None, port=None, path='some/relative/path', archive='archive')z::z`Location(proto='file', user=None, host=None, port=None, path='some/relative/path', archive=None))rKrXrrF)r=rQr>r>r?re3s



z TestLocationWithEnv.test_relpathcCsJ|jdd�ttd��dks t�ttd��dks4t�tt��dksFt�dS)NrSz/abs/path:w:colsz
::arch:colzdLocation(proto='file', user=None, host=None, port=None, path='/abs/path:w:cols', archive='arch:col')z::z^Location(proto='file', user=None, host=None, port=None, path='/abs/path:w:cols', archive=None))rKrXrrF)r=rQr>r>r?rf<s



z$TestLocationWithEnv.test_with_colonsc	Cs.|jdd�tjt��td�WdQRXdS)NrSz/some/absolute/pathz&::archive_name_with/slashes/is_invalid)rKrlrmrnr)r=rQr>r>r?rpEsz#TestLocationWithEnv.test_no_slashesN)rArBrCrZr~r[r\r^rdrerfrpr>r>r>r?r}�s	
						r}c@seZdZdd�ZdS)�FormatTimedeltaTestCasecCs@tddddddd�}tddddddd	�}|jt||�d
�dS)Ni�r6�
ra�r��i��z2 hours 1.10 seconds)rr<r)r=Zt0Zt1r>r>r?�testMs

zFormatTimedeltaTestCase.testN)rArBrCr�r>r>r>r?rKsrc	CsBtd�d
kst�td�dks t�tjt��td	�WdQRXdS)Nz
19,23,21,4095ri���z
10,23,16,4095r��z
19,24,21,4095)rir�r�r�)r�r�r�r�)r+rFrlrmrnr>r>r>r?�test_chunkerparamsVsr�c@seZdZdd�ZdS)�MakePathSafeTestCasecCs�|jtd�d�|jtd�d�|jtd�d�|jtd�d�|jtd�d�|jtd�d�|jtd�d	�|jtd�d	�dS)
Nz/foo/barzfoo/barz/f/barzf/barzfo/barz
../foo/barz
../../foo/bar�/�.)r<r)r=r>r>r?r�_szMakePathSafeTestCase.testN)rArBrCr�r>r>r>r?r�]sr�c@seZdZdd�Zdd�ZdS)�MockArchivecCs
||_dS)N)�ts)r=r�r>r>r?�__init__lszMockArchive.__init__cCs
t|j�S)N)rXr�)r=r>r>r?�__repr__oszMockArchive.__repr__N)rArBrCr�r�r>r>r>r?r�jsr�c@seZdZdd�ZdS)�PruneSplitTestCasecs�dd��dd����fdd�}dddddddg}�fd
d�|D�}dd�|D�}||d
gdddg�||dgddddg�||d
|dgdddg�||d
|dgdddg�||d
|dgdddg�||dgg�dS)NcSs&ttd||fd��}tj|tjd�S)z1Convert noon on the month and day in 2013 to UTC.z2013-%02d-%02d 12:00z%Y-%m-%d %H:%M)Ztz)rrrZ
fromtimestamprrj)�month�day�secondsr>r>r?�local_to_UTCwsz-PruneSplitTestCase.test.<locals>.local_to_UTCcs�fdd�|D�S)Ncsh|]}�|�qSr>r>)�.0�i)�lstr>r?�	<setcomp>}sz:PruneSplitTestCase.test.<locals>.subset.<locals>.<setcomp>r>)r��indicesr>)r�r?�subset|sz'PruneSplitTestCase.test.<locals>.subsetcs:x4|t|�fD]$}�jtt|d||���||��qWdS)Nz%Y-%m)�reversedr<�setr)�
test_archives�n�skipr��ta)r=r�r>r?�dotestsz'PruneSplitTestCase.test.<locals>.dotestr6r	�r���csg|]\}}�||��qSr>r>)r�r�r�)r�r>r?�
<listcomp>�sz+PruneSplitTestCase.test.<locals>.<listcomp>cSsg|]}t|��qSr>)r�)r��dater>r>r?r��s�rr�)r6r6)r	r6)r	r�)r�r6)r�r	)r�r�)r�r6���r>)r=r�Z
test_pairs�
test_datesr�r>)r�r=r�r?r�uszPruneSplitTestCase.testN)rArBrCr�r>r>r>r?r�ssr�c@s$eZdZdd�Zdd�Zdd�ZdS)�IntervalTestCasecCsT|jtd�d�|jtd�d�|jtd�d�|jtd�d�|jtd	�d
�dS)N�1Hr6Z1d��1w��1mi��1yi8")r<r)r=r>r>r?�
test_interval�s
zIntervalTestCase.test_intervalcCs�tjt��}td�WdQRX|j|jjd�tjt��}td�WdQRX|j|jjd�tjt��}td�WdQRX|j|jjd	�dS)
N�H�AUnexpected interval number "": expected an integer greater than 0z-1d�CUnexpected interval number "-1": expected an integer greater than 0Zfood�DUnexpected interval number "foo": expected an integer greater than 0)r�)r�)r�)rlrmrrr<�value�args)r=�excr>r>r?�test_interval_time_unit�sz(IntervalTestCase.test_interval_time_unitc
Cs2tjt��}td�WdQRX|j|jjd�dS)N�5�LUnexpected interval time unit "5": expected one of ['H', 'd', 'w', 'm', 'y'])r�)rlrmrrr<r�r�)r=r�r>r>r?�test_interval_number�s
z%IntervalTestCase.test_interval_numberN)rArBrCr�r�r�r>r>r>r?r��sr�c@seZdZdd�ZdS)�PruneWithinTestCasec	s>dd����fdd�}ddd d!d#d%g}tjtj���fdd�|D�}d
d�|D�}||ddg�||dddg�||ddddg�||dddddg�||ddddddg�||ddddddg�||dddddddg�||dddddddg�||dddddddg�||dddddddg�||dddddddg�dS)&Ncs�fdd�|D�S)Ncsh|]}�|�qSr>r>)r�r�)r�r>r?r��szHPruneWithinTestCase.test_prune_within.<locals>.subset.<locals>.<setcomp>r>)r�r�r>)r�r?r��sz5PruneWithinTestCase.test_prune_within.<locals>.subsetcs:x4|t|�fD]$}�jtt|t|����||��qWdS)N)r�r<r�rr)r�Zwithinr�r�)r=r�r>r?r��sz5PruneWithinTestCase.test_prune_within.<locals>.dotest�<�Z�����1csg|]}�t|d��qS))r�)r)r��s)�nowr>r?r��sz9PruneWithinTestCase.test_prune_within.<locals>.<listcomp>cSsg|]}t|��qSr>)r�)r�r�r>r>r?r��sr�rZ2Hr6Z3Hr	Z24Hr�Z26Hr�Z2dZ50Hr�Z3dr�r�r�ii(#i81i�i�_i|i�)rr�rrj)r=r�Ztest_offsetsr�r�r>)r�r=r�r?�test_prune_within�s"z%PruneWithinTestCase.test_prune_withinN)rArBrCr�r>r>r>r?r��sr�c@seZdZdd�ZdS)�StableDictTestCasecCsLtddddd�}|jt|j��ddd
dg�|jtjtj|��j�d
�dS)Nr6r	r�r�)�foo�bar�boo�bazr�r�r�r�Z fc78df42cd60691b3ac3dd2a2b39903f)r�r	)r�r�)r�r�)r�r6)	r%r<�list�items�hashlibZmd5rZpackbZ	hexdigest)r=�dr>r>r?r��szStableDictTestCase.testN)rArBrCr�r>r>r>r?r��sr�c@seZdZdd�ZdS)�TestParseTimestampcCsL|jtd�tdddddddtj��|jtd	�tdddddddtj��dS)
Nz2015-04-19T20:25:00.226410i�r�rirar�rijtz2015-04-19T20:25:00)r<r)rrrj)r=r>r>r?r��s$zTestParseTimestamp.testN)rArBrCr�r>r>r>r?r��sr�cCs�|jddd�|jddd�|jddd�t�tjjd�ks@t�|jdd�t�tjjd�ksbt�|jdd	�t�d	ks|t�|jdd
�t�d
ks�t�dS)z+test that get_base_dir respects environmentZ
BORG_BASE_DIRF)rT�HOMEZUSER�~�rootz~rootz
/var/tmp/homez
/var/tmp/baseN)rWrrMrN�
expanduserrFrK)rQr>r>r?�test_get_base_dir�sr�cCs�|jddd�|jddd�t�tjjtjjd�dd�ks>t�|jdd�t�tjjdd�ksbt�|jdd	�t�d	ks|t�d
S)z-test that get_config_dir respects environmentZBORG_CONFIG_DIRF)rT�XDG_CONFIG_HOMEr�z.config�borgz/var/tmp/.configz/var/tmpN)rWrrMrNrbr�rFrK)rQr>r>r?�test_get_config_dir�s"r�cCs�|jddd�|jddd�t�tjjtjjd�dd�ks>t�|jdd�t�tjjdd�ksbt�|jdd	�t�d	ks|t�d
S)z,test that get_cache_dir respects environmentZBORG_CACHE_DIRF)rTZXDG_CACHE_HOMEr�z.cacher�z/var/tmp/.cachez/var/tmpN)rWrrMrNrbr�rFrK)rQr>r>r?�test_get_cache_dir�s"r�cCs�|jddd�|jddd�t�tjjtjjd�ddd�ks@t�|jdd	�t�tjjd	dd�ksft�|jdd
�t�d
ks�t�dS)z+test that get_keys_dir respects environmentrIF)rTr�r�z.configr��keysz/var/tmp/.configz/var/tmpN)rWrrMrNrbr�rFrK)rQr>r>r?�test_get_keys_dirs$r�cCs�|jddd�|jddd�t�tjjtjjd�ddd�ks@t�td	d
�tjjtjjd�dddd	�ksjt�|jdd�t�tjjddd�ks�t�|jdd�t�dks�t�d
S)z/test that get_security_dir respects environmentZBORG_SECURITY_DIRF)rTr�r�z.configr�ZsecurityZ1234)Z
repository_idz/var/tmp/.configz/var/tmpN)rWrrMrNrbr�rFrK)rQr>r>r?�test_get_security_dir
s$*r�c*Cs�ddddddddd	d
dd
dd
ddddddddddd(dd)dd*dd+dd,d d-d"d.d$d/d%d0d&i}x$|j�D]\}}t|�|ksbt�qbWd'S)1z!test the size formatting routinesrz0 Br6z1 B�z142 Bi�z999 Bi�z1.00 kBi�i�z1.23 kBi�z1.24 kBi�z1.01 kBi�;z	999.99 MBi�;ix��;z1.00 GBr�r�z1.00 MBrhr�z1.00 TB�z1.00 PB�z1.00 EBr�z1.00 ZBr�z1.00 YBz-1 Bz-1.01 kBNi@Biʚ;lJ)�l�I�5l�N�Zol@=7M.clB�3v^!<r�i���)r�rrF)�si_size_map�size�fmtr>r>r?�test_file_sizes.r�cCs@tddd�dkst�tddd�dks(t�tddd�dks<t�dS)	Ni�r6)Z	precisionz1.2 kBi�z1.3 kBi�;z1.0 GB)rrFr>r>r>r?�test_file_size_precision6sr�c
CsFddddddddddi}x(|j�D]\}}t|d	d
�|ks"t�q"WdS)
Nrz0 Br6z+1 Bi�z+1.23 kBz-1 Bz-1.23 kBT)Zsignr�i.���)r�rrF)r�r�r�r>r>r?�test_file_size_sign<sr�zstring,value�1�20ra�5K��1.75M���1e+9�e��A�-1Tg��mBcCst|�t|�kst�dS)N)r�intrF)�stringr�r>r>r?�test_parse_file_sizeHs	r�r�rE�5 Äpfel�4E�2229 bit�1Bc	Cs"tjt��t|�WdQRXdS)N)rlrmrnr)r�r>r>r?�test_parse_file_size_invalidTsr�cCs6tj}ztjt_t�st�Wd|t_Xt�s2t�dS)N)rZPackerr rrF)Zsaved_packerr>r>r?�test_is_slow_msgpack\sr�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
TestBuffercCs8tt�}t|j�t�st�tt�}t|j�t�s4t�dS)N)r�	bytearray�
isinstance�getrF�bytes)r=�bufferr>r>r?�	test_typehszTestBuffer.test_typecCstttdd�}|j�}t|�t|�ko.dkns8t�ttdd�}|j�}t|�t|�kofdknspt�dS)Nr)r�i�)rr�r��lenrF)r=r��br>r>r?�test_lenns$zTestBuffer.test_lencCs�ttdd�}t|�dkst�|j�}|jd�t|�dks>t�|j�}||k	sRt�|jd�t|�dkslt�|j�}||ks�t�|jddd�t|�dks�t�|j�}||k	s�t�dS)N�d)r���T)Zinit)rr�rrFr��resize)r=r��b1�b2�b3Zb4r>r>r?�test_resizevs

zTestBuffer.test_resizec	Cs^ttddd�}|jd�t|�dks(t�tjtj��|jd�WdQRXt|�dksZt�dS)Nrr)r��limit��)rr�rrrFrlrm�MemoryLimitExceeded)r=r�r>r>r?�
test_limit�s
zTestBuffer.test_limitc	Cs�ttddd�}|jd�}t|�dks(t�|jd�}t|�dksBt�||ksNt�|jd�}t|�dksht�||k	stt�tjtj��|jd�WdQRXt|�dks�t�dS)Nrr)r�r
�2r)rr�r�rrFrlrmr)r=r�rrrr>r>r?�test_get�s


zTestBuffer.test_getN)rArBrCr�rr	r
rr>r>r>r?r�gs
r�cCs^tt�}t|�}x|D]}t|d�st�qWtt�}t|�}x|D]}t|d�sBt�qBWdS)N)�input)r�r"r8r!rFr#)�inputsrr�r>r>r?�test_yes_input�s

rcCsZtt�}t|�}x|D]}td|d�st�qWt|�}x|D]}td|d�s<t�q<WdS)NT)�defaultrF)r�r$r8r!rF)rrr�r>r>r?�test_yes_input_defaults�s

rcCsDtdddg�}td|d�st�td|d�s.t�td|d�s@t�dS)	N�YES�SURE�NOPE)Ztruishr)Zfalsishr)r)r)r)r8r!rF)rr>r>r?�test_yes_input_custom�srcCsVx&tD]}|jd|�tdd�st�qWx(tD] }|jd|�tdd�s.t�q.WdS)N�
OVERRIDE_THIS)�env_var_override)r"rKr!rFr#)rQr�r>r>r?�test_yes_env�s

rcCs@x:tD]2}|jd|�tddd�s&t�tddd�st�qWdS)NrT)rrF)r$rKr!rF)rQr�r>r>r?�test_yes_env_default�s
rc
Cs�tdddg�}t|d�st�t|d�s.t�t|d�s>t�tdddg�}td|d�s\t�td|d�slt�td|d�s|t�tg�}td|d�s�t�td|d�s�t�tjt��tdd�WdQRXdS)	N�invalidrE� )rT)rrF)r)r8r!rFrlrmrn)rr>r>r?�test_yes_defaults�srcCsJtddtdg�}td|d�s"t�tddtdg�}td|d�sFt�dS)Nr�r�rzRetry: )�	retry_msgr)r8r"r!rFr#)rr>r>r?�test_yes_retry�sr!cCsNtddtdg�}tdd|d�s&t�tddtdg�}tdd|d�sJt�dS)Nr�r�rF)ZretryrrT)r8r"r!rFr#)rr>r>r?�test_yes_no_retry�sr"cCs�tdddg�}tdddd|d�s$t�|j�\}}|d	ks<t�d|ksHt�d|ksTt�d|ks`t�tdddd|d�sxt�|j�\}}|d	ks�t�d|ks�t�d|ks�t�d|ks�t�dS)
Nr�yr�z	intro-msgz	false-msgztrue-msgz	retry-msg)�msgZ	false_msgZtrue_msgr rrE)r8r!rF�
readouterr)�capfdr�out�errr>r>r?�test_yes_output�sr)cCsRd}|j|d�t|d�st�|j�\}}|dks6t�||ksBt�d|ksNt�dS)NZOVERRIDE_SOMETHINGr!)rrE)rKr!rFr%)r&rQZenv_varr'r(r>r>r?�test_yes_env_output�sr*cCs�|jdd�|jdd�tddddd	�}|jjd
�|jd�|j�\}}|dksVt�|jd�|jd
�|j�\}}|dks�t�|jd�|j�\}}|dks�t�|j�|j�\}}|dks�t�dS)N�COLUMNS�4�LINESr�i�r�rz%3.0f%%)�step�startr$�INFOz  0%
i�i�z
 42%
 68%
z100%
rr��
z    z    
)rKr,�logger�setLevel�showr%rF�finish)r&rQ�pir'r(r>r>r?�!test_progress_percentage_samelines"



r7cCs�|jdd�|jdd�tddddd	�}|jjd
�|j�|j�\}}|dksTt�|j�|j�\}}|dkstt�|j�|j�\}}|d
ks�t�dS)Nr+r,r-r�rr	rz%3.0f%%)r.r/r$r0z  0%
rEz  2%
)rKr,r2r3r4r%rF)r&rQr6r'r(r>r>r?�test_progress_percentage_stepsr8cCs�tddddd�}|jjd�|jd�|j�\}}|dks>t�|jd�|j�\}}|dks`t�|j�|j�\}}|dks�t�dS)Ni�r�rz%3.0f%%)r.r/r$ZWARNrE)r,r2r3r4r%rFr5)r&r6r'r(r>r>r?�test_progress_percentage_quiet(s

r9cCsrtdtjd�}|j�|j�\}}|dks.t�|j�|j�\}}|dksNt�|j�|j�\}}|dksnt�dS)Nr6)r.�filer��
)r-�sys�stderrr4r%rFr5)r&r6r'r(r>r>r?�test_progress_endless6sr>cCs�tdtjd�}|j�|j�\}}|dks.t�|j�|j�\}}|dksNt�|j�|j�\}}|dksnt�|j�|j�\}}|dks�t�dS)Nr	)r.r:rEr�)r-r<r=r4r%rF)r&r6r'r(r>r>r?�test_progress_endless_stepCsr?cCsltdddi�dkst�tdddd��dks.t�td	i�d	ks@t�td
i�d
ksRt�tddd
i�dksht�dS)Nz
{space:10}Zspacerr�z{foobar}ZwrongZcorrect)r�Zfoobarz
{unknown_key}z{key}{{escaped_key}}z{{escaped_key}}Zescaped_keyi�z
          )r
rFr>r>r>r?�test_partial_formatSs
r@cCsjttddg��}|jd�dks"t�|jd�dks4t�|js>t�ttg��}|jd�dks\t�|jsft�dS)Nsabcsdefr	sabrscdefrD)r*�iter�readrFZ	exhausted)Zcfwr>r>r?�test_chunk_file_wrapper[s
rCcCs�tdd�}t|�dddgks t�t|�dddgks6t�t|�d	gksHt�tjt��t|�WdQRXtjt��t|�WdQRXtd
d�}t|�ddggks�t�tdd�}t|�gks�t�dS)NZabcdefgr��ar�cr��e�f�gZabrE)r/�nextrFrlrm�
StopIterationr�)�itr>r>r?�test_chunkitfs


rLcCs�djdd�}tt|��dddgks&t�tt|dd��ddd	gksDt�tt|dd
��ddd
gksbt�tt|dd��ddddgks�t�tt|dd��ddddgks�t�dS)Nz$#comment
data1 #data1
data2

 data3
T)�keependszdata1 #data1Zdata2Zdata3F)�lstripz data3)�rstripz
data1 #data1
zdata2
zdata3
)Zremove_emptyrE)Zremove_commentsz#comment)�
splitlinesr�rrF)Zconfr>r>r?�test_clean_linesws rQcCsDtdd�}td|�dkst�td|�dks.t�td|�dks@t�dS)Nzbar baz)r�rEz{foo}zfoo{foo}fooz
foobar bazfoo)�dictrrF)�datar>r>r?�test_format_line�s
rTcCs�t�}tjt��td|�s t�WdQRXtjt��td|�sDt�WdQRXtjt��td|�sht�WdQRXtjt��td|�s�t�WdQRXdS)Nz	{invalid}z{}z{now!r}z'{now.__class__.__module__.__builtins__})rRrlrmrrrF)rSr>r>r?�test_format_line_erroneous�srUcCs2tj�}dtd�kst�ttd��|jks.t�dS)Nrz{now}z{now:%Y})rr�rrFr�Zyear)r�r>r>r?�test_replace_placeholders�srVcCstdddid�dkst�dS)Nz{uuid4}Zuuid4Z
overridden)Z	overrides)rrFr>r>r>r?�test_override_placeholders�srWcCstjd�dkS)Nu선r	)r
Zswidthr>r>r>r?�working_swidth�srXz"swidth() is not supported / active)�reasoncCsPd}t|d�dkst�t|d�dks(t�t|d�dks:t�t|d�dksLt�dS)	Nu-나윤선나윤선나윤선나윤선나윤선r6rEr�u나윤u윤선r����)r.rF)r�r>r>r?�test_swidth_slice�s
r[cCs,d}t|d�dkst�t|d�dks(t�dS)Nu.나윤a선나윤선나윤선나윤선나윤선r�u나윤ar�)r.rF)r�r>r>r?�"test_swidth_slice_mixed_characters�sr\cCsftr�td�d
kst�td�dks$t�td�dks4t�td�dksDt�dd}tjt��tj|�WdQRXtjt|��tddd�ks�t�tjt|�d	�tddd�ks�t�n�td�dks�t�td�dks�t�td�d	dk�s�t�td�dk�s�t�dd}tjt��tj|�WdQRXtjt|��td
dd�k�s>t�tjt|�d	�td
dd�k�sbt�dS)Nr	�@r:r6rr�ri�iʚ;i�lll����r�lli���r�lll����r�lll����r�)	r2r0rFr1rlrm�
OverflowErrorrZutcfromtimestamp)Zbeyond_y10kr>r>r?�test_safe_timestamps�s&$ r_c@sheZdZejjejd�dd�dd��Zejjejd�dd�dd	��Z	ejj
d
d�dd��Zdd�ZdS)�TestPopenWithErrorHandlingr�z"test" binary is needed)rYcCstd�}|j�dkst�dS)Nztest 1r)r3�waitrF)r=�procr>r>r?�test_simple�sz&TestPopenWithErrorHandling.test_simplezborg-foobar-test-notexistz4"borg-foobar-test-notexist" binary exists (somehow?)cCstd�}|dkst�dS)Nzborg-foobar-test-notexist 1234)r3rF)r=rbr>r>r?�test_not_found�sz)TestPopenWithErrorHandling.test_not_found�cmd�mismatched "quote�foo --bar="bazrEcCst|�}|dkst�dS)N)r3rF)r=rerbr>r>r?rw�sz*TestPopenWithErrorHandling.test_bad_syntaxcCs&tjt��tddd�WdQRXdS)NrET)�shell)rlrmrFr3)r=r>r>r?�
test_shell�sz%TestPopenWithErrorHandling.test_shellN)rfrgrE)
rArBrCrl�mark�skipif�shutilZwhichrcrd�parametrizerwrir>r>r>r?r`�s r`cCsXtdd�tjkst�tdd�tjks(t�tdd�tjjks>t�tdd�tjjksTt�dS)N�-�r�w�rb�wb)r4r<�stdinrF�stdoutr�r>r>r>r?�test_dash_open�srucCsHd}|d}|j|�|d}|j|�tt|��|j�|ksDt�dS)Ns
Hello, world
�victim�hardlink)�write_binary�mklinktor5rJ�read_binaryrF)rP�contentsrv�	hard_linkr>r>r?�test_safe_unlink_is_safe�s

r}c
Cstd}|d}|j|�|d}|j|�dd�}|jtd|�tjt��tt|��WdQRX|j	�|kspt
�dS)Ns
Hello, world
rvrwcSsttjd��dS)Nz Pretend that we ran out of space)�OSError�errnoZENOSPC)r`r>r>r?�	os_unlinksz2test_safe_unlink_is_safe_ENOSPC.<locals>.os_unlink�unlink)rxry�setattrrMrlrmr~r5rJrzrF)rPrQr{rvr|r�r>r>r?�test_safe_unlink_is_safe_ENOSPCs

r��r�r6�r�ra�r�r��r�r��r�r����m©r�r�)r�r�r�r�r�r�)rEr�r�r�r�){rr��iorMrlr<�argparserrrrZtimerrrrlrEr
Zhelpersrrr
rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r7r8r9rGrHr}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rjrmr�r�r�r�rrrrrrr!r"r)r*r7r8r9r>r?r@rCrLrQrTrUrVrWrXrkr[r\r_r`rur}r�r>r>r>r?�<module>s�$GP
	!7