HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //usr/lib64/python3.9/site-packages/borg/testsuite/__pycache__/__init__.cpython-39.pyc
a

HZ�h�8�@spddlmZddlZddlZddlZzddlZWneyFdZYn0ddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlmZddlmZddlmZddlmZmZmZddlmZdd	lmZmZmZer�eejd
�ndZzddl m!Z!WndZ!Yn0eed
��p,e	j�"d�Z#z>e�$�� Z%e�&e%j'ej(�Wd�n1�s`0YWne)�y�dZ#Yn0e�r�de*edg�v�r�dZ+nde
�,�v�r�dZ+ndZ+e	j�"d��r�dZ+dd�Z-edd��Z.ej/dd��Z0ej/dd��Z1ej/dd��Z2ej/d d!��Z3ej/d"d#��Z4d$d%�Z5Gd&d'�d'ej6�Z7Gd(d)�d)�Z8Gd*d+�d+�Z9Gd,d-�d-�Z:dS).�)�contextmanagerN�)�get_all)�	get_flags)�umount)�EXIT_SUCCESS�EXIT_WARNING�
EXIT_ERROR)�platform)�llfuse�has_pyfuse3�
has_llfuse�st_mtime_nsF)�raisesZlchflags�linuxZ
HAVE_FUTIMENS�_have_functionsZHAVE_UTIMES���i�����netbsd���cCs"tt||��}dt}||kS)zKcompare 2 timestamps (both in nanoseconds) whether they are (roughly) equal�
)�int�abs�st_mtime_ns_round)Zts_ns1Zts_ns2Zdiff_tsZdiff_max�r�=/usr/lib64/python3.9/site-packages/borg/testsuite/__init__.py�
same_ts_ns8s
rccs<t��� }tj�|d�VWd�n1s.0YdS)N�file)�tempfileZTemporaryDirectory�os�path�join)Ztempdirrrr�unopened_tempfile?s
r!c	Cs|t��b}z>t�d|�tj|dd�rDt�|�dkrDWWd�dSWntyXYn0Wd�n1sn0YdS)NZ	somewhereF��follow_symlinksT)r!r�symlink�stat�readlink�OSError��filepathrrr�are_symlinks_supportedEs$r*c
Cs�ttd�sdSt���}t���}t|d���zjt�||�t�|�}t�|�}|j|jkrfdkr�nn*|j|jkr�WWd�Wd�dSWnt	y�Yn0Wd�n1s�0YWd�n1s�0YdS)N�linkF�wrT)
�hasattrrr!�open�closer+r%�st_nlink�st_inor')Z	file1pathZ	file2pathZstat1Zstat2rrr�are_hardlinks_supportedQs


("Br2c	Cs|t��b}zt�|�WWd�dSty6Yn"tyFYntyVYn0Wd�dS1sn0YdS)NTF)r!r�mkfifor'�NotImplementedError�AttributeErrorr(rrr�are_fifos_supportedds
r6c	Cs�t���}t�rt�d|�nt|d���zHtj|ddd�tj|dd�}|jdkrp|j	dkrpWWd�dSWn"t
y�Ynty�Yn0Wd�dS1s�0YdS)	N�	somethingr,)����Fr"r8r9T)r!r*rr$r.r/�utimer%�st_atime�st_mtimer'r4)r)�	new_statsrrr�is_utime_fully_supportedssr>c	Cs�ttjd�sdSt���}t�r,t�d|�nt|d���ztd\}}}tj|||fdd�tj|||fdd�tj	|dd�}|j
|kr�|j|kr�|j|kr�WWd�dSWn"t
y�Ynty�Yn0Wd�dS1s�0YdS)N�st_birthtimeFr7r,)i�k8i�Cm8i�n8r"T)r-r�stat_resultr!r*r$r.r/r:r%r?r<r;r'r4)r)Z	birthtime�mtimeZatimer=rrr�is_birthtime_fully_supported�s$
rBcsDd�t|t�r$�fdd�|��D�St|t�r@�fdd�|D�SdS)Nssecurity.selinuxcsi|]\}}|�kr||�qSrr)�.0�k�v�ZSELINUX_KEYrr�
<dictcomp>��zno_selinux.<locals>.<dictcomp>csg|]}|�kr|�qSrr)rCrDrFrr�
<listcomp>�rHzno_selinux.<locals>.<listcomp>)�
isinstance�dict�items�list)�xrrFr�
no_selinux�s


rOc@s�eZdZdZejjZejjZ	ejj
ZejjZ
er:ee�ZnejjZedd��Zdd�Zdd�Zdd	d
�Zedddd
�dd��Zdd�dd�Zedd��ZdS)�BaseTestCasez
    ccs>tj�|�rJ|�d���dVtj�|�s:J|�d���dS)Nz should not existz
 should exist)rr�exists)�selfrrrr�assert_creates_file�sz BaseTestCase.assert_creates_filecKs"t�||�}|j|fi|��dS�N)�filecmp�dircmp�_assert_dirs_equal_cmp)rRZdir1Zdir2�kwargs�diffrrr�assert_dirs_equal�szBaseTestCase.assert_dirs_equalcs.t�fdd�|D��s*Jd��d|����dS)Nc3s|]}t��|�VqdSrT)�re�search)rC�line��expected_regexprrr�	<genexpr>�rHz2BaseTestCase.assert_line_exists.<locals>.<genexpr>z
no match for z in )�any)rR�linesr_rr^r�assert_line_exists�szBaseTestCase.assert_line_existsFc
sf|�|jg�|�|jg�|�|jg�|�|jg�|jD�]�}tj�|j	|�}tj�|j
|�}tj|dd��tj|dd���j�jk}gd�}	|r�tj�
|�s�|	�d�|g�fdd�|	D�}
|g�fdd�|	D�}|
�dt�j��|�dt�j��|�s(|
�t|���|�t|���t��j��sLt��j��sLd|
d	<t��j��spt��j��spd|d	<t��r�|�r�|
�t�jd
��|�t�jd
��nV|�r�t�s�|
�t�jd��|�t�jd��n$|
�t�jt��|�t�jt��|�s0|
�tt|dd���|�tt|dd���|�|
|�q>|j��D]}|j||||d��qHdS)
NFr")�st_uid�st_gid�st_rdevr0csg|]}t�|��qSr��getattr�rC�a)�s1rrrI�rHz7BaseTestCase._assert_dirs_equal_cmp.<locals>.<listcomp>csg|]}t�|��qSrrgri)�s2rrrI�rH��ge��Ar)�ignore_flags�
ignore_xattrs�	ignore_ns) �assert_equal�	left_only�
right_only�
diff_files�funny_files�commonrrr �left�rightr%�st_dev�isdir�append�insert�oct�st_moder�S_ISCHR�S_ISBLKr>rr�have_fuse_mtime_ns�roundrrOr�subdirs�valuesrW)
rRrYrorprq�filenameZpath1Zpath2Zfuse�attrsZd1Zd2Zsub_diffr)rkrlrrW�sN
z#BaseTestCase._assert_dirs_equal_cmpNT)�fork�os_forkcos|durt��}n
t�|�d||gt|�}|r�t��dkr�t��t��dkr\t�d�z2|j|ddi|��Wt	dt
jdd�t�d�q�t	dt
jdd�t�d�0n.|j|d|i|��|�dt
�tkr�dVdS|j|dd	�dVt|�|j|dd	�t�|�t�d
�dS)N�mountrr�Fz<Fatal: borg mount did not daemonize properly. Force exiting.T)r�flushZ	exit_code)�mountedg�������?)rZmkdtempr�mkdirrMr��setsid�_exit�cmd�print�sys�stderr�getrr	�wait_for_mountstater�rmdir�time�sleep)rR�location�
mountpointr�r��optionsrX�argsrrr�
fuse_mount�s:


���
zBaseTestCase.fuse_mount�)�timeoutcCsX|t��7}|t��kr8tj�|�|kr,dSt�d�qd�|rDdnd|�}t|��dS)z4Wait until a path meets specified mount point statusNg�������?zWaiting for {} of {}r�r)r�rr�ismountr��format�TimeoutError)rRr�r�r��messagerrrr�,sz BaseTestCase.wait_for_mountstatec
cs�tj�d�rd|}d|}nPtj�d�r<d|}d|}n2tj�d�rZd|}d	|}nd
tj}|�|�z:t�d|�t�|�dVWt�|�t�d
|�nt�|�t�d
|�0dS)a�Some paths need to be made read-only for testing

        If the tests are executed inside a fakeroot environment, the
        changes from chmod won't affect the real permissions of that
        folder. This issue is circumvented by temporarily disabling
        fakeroot with `LD_PRELOAD=`.

        Using chmod to remove write permissions is not enough if the
        tests are running with root privileges. Instead, the folder is
        rendered immutable with chattr or chflags, respectively.
        rzchattr +i "%s"zchattr -i "%s")�darwinZfreebsdrZopenbsdzchflags uchg "%s"zchflags nouchg "%s"Zsunoszchmod S+vimmutable "%s"zchmod S-vimmutable "%s"z7Testing read-only repos is not supported on platform %szLD_PRELOAD= chmod -R ugo-w "%s"NzLD_PRELOAD= chmod -R ugo+w "%s")r�r
�
startswithZskipTestr�system)rRrZ
cmd_immutableZcmd_mutabler�rrr�	read_only6s&







�
zBaseTestCase.read_only)FFF)N)�__name__�
__module__�__qualname__�__doc__�unittest�TestCaseZassertInZ	assert_inZassertNotInZ
assert_not_inZassertEqualrrZassertNotEqualZassert_not_equalr�staticmethodZ
assert_raisesZassertRaisesrrSrZrcrWr�r�r�rrrrrP�s$


09
rPc@s$eZdZdd�Zdd�Zdd�ZdS)�	changedircCs
||_dSrT)�dir)rRr�rrr�__init__Zszchangedir.__init__cCst��|_t�|j�dSrT)r�getcwd�old�chdirr�)rRrrr�	__enter__]s
zchangedir.__enter__cOst�|j�dSrT)rr�r�)rRr��kwrrr�__exit__aszchangedir.__exit__N�r�r�r�r�r�r�rrrrr�Ysr�c@s$eZdZdd�Zdd�Zdd�ZdS)�environment_variablecKs||_i|_dSrT)r��
old_values)rRr�rrrr�fszenvironment_variable.__init__cCsL|j��D]<\}}tj�|�|j|<|dur<tj�|d�q
|tj|<q
dSrT)r�rLr�environr�r��pop)rRrDrErrrr�js
zenvironment_variable.__enter__cOs:|j��D]*\}}|dur*tj�|d�q
|tj|<q
dSrT)r�rLrr�r�)rRr�r�rDrErrrr�rszenvironment_variable.__exit__Nr�rrrrr�esr�c@s"eZdZdZdd�Zddd�ZdS)�
FakeInputszASimulate multiple user inputs, can be used as input() replacementcCs
||_dSrT)�inputs)rRr�rrrr�|szFakeInputs.__init__NcCs@|durt|dd�z|j�d�WSty:td�Yn0dS)N�)�endr)r�r�r��
IndexError�EOFError)rR�promptrrr�__call__szFakeInputs.__call__)N)r�r�r�r�r�r�rrrrr�zsr�);�
contextlibrrU�	functoolsr�posix�ImportErrorr[r%r�Z	sysconfigrr�Zuuidr�Zxattrrr
rZhelpersrrrr	r�Z	fuse_implrrr
r-ZEntryAttributesr�Zpytestrr�Zhas_lchflagsZNamedTemporaryFilerZ	set_flags�name�	UF_NODUMPr'rhrZget_config_varsrr!�	lru_cacher*r2r6r>rBrOr�rPr�r�r�rrrr�<module>st


4






	2