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

y��b�%�@s�ddlZddlZddlZddlmZddlmZmZddlm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZdZdZej�d	d
��ZGdd�d�Zej�d
d��ZGdd�d�ZGdd�d�Zej�dd��ZGdd�d�ZdS)�N�)�	daemonize)�get_process_id�
process_alive)�TimeoutTimer�
ExclusiveLock�Lock�
LockRoster�ADD�REMOVE�SHARED�	EXCLUSIVE�LockTimeout�	NotLocked�	NotMyLock�foo��barcCs2t�\}}}x tjdd�}t|||�s|SqWdS)zBReturn a free PID not used by any process (naturally this is racy)i�i�N)r�randomZrandintr)�host�pid�tid�r�/usr/lib64/python3.6/locking.py�free_pids
rc@seZdZdd�Zdd�ZdS)�TestTimeoutTimercCs<d}t|�j�}|j�st�tj|d�|j�s8t�dS)Ng�?g�?)r�startZ	timed_out�AssertionError�time�sleep)�self�timeout�trrr�test_timeouts
zTestTimeoutTimer.test_timeoutcCsjd\}}t||�j�}|j�s$t�tj�|jd|ks>t�|j�sLt�tj�|jd|ksft�dS)N��?rr)Nr$)rrZtimed_out_or_sleeprrZ
start_time)r r!rr"rrr�test_notimeout_sleep"sz%TestTimeoutTimer.test_notimeout_sleepN)�__name__�
__module__�__qualname__r#r%rrrrrsrcCst|jd��S)N�lock)�str�join)�tmpdirrrr�lockpath+sr-c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestExclusiveLockc	Cs0t|dd��}|j�r|j�s"t�WdQRXdS)Nr)r!)rZ	is_locked�by_mer)r r-r)rrr�test_checks1szTestExclusiveLock.test_checksc	Cs4t|td�j�}|j�t|td��WdQRXdS)N)�id)r�ID1�acquire�
break_lock�ID2)r r-r)rrr�test_acquire_break_reacquire5sz.TestExclusiveLock.test_acquire_break_reacquirecCsDt|td��.tjt��t|tdd�j�WdQRXWdQRXdS)N)r1g�������?)r1r!)rr2�pytest�raisesrr5r3)r r-rrrr#;szTestExclusiveLock.test_timeoutc
)Cs�t�\}}}}|||f}d	}t||d�j�}	t||dd��$tjt��|	j�WdQRXWdQRXtjt��|	j�WdQRXt||d��0tjt��t||ddd�j�WdQRXWdQRXdS)
N�foo.bar.example.netrr)r1T)r1�kill_stale_locksg�������?)r1r:r!)r9rr)	rrr3r7r8r�releaserr)
r r-rrrr�our_id�dead_id�cant_know_if_dead_id�	dead_lockrrr�test_kill_stale@s
z!TestExclusiveLock.test_kill_stalecCs�tt}}|d|dkst�t||d�j�}|j|ks<t�|j}|j�sNt�|j||�|j|ksht�|j}|j�szt�||ks�t�dS)Nr)r1)	r2r5rrr3r1Zunique_namer/�migrate_lock)r r-�old_id�new_idr)Zold_unique_nameZnew_unique_namerrr�test_migrate_lockPs
z#TestExclusiveLock.test_migrate_lockN)r&r'r(r0r6r#r@rDrrrrr.0s
r.c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestLockcCs�t|dtd�j�}t|dtd�j�}t|jjt��dks<t�t|jjt	��dksTt�|jj
tt	�sht�|jj
t	�sxt�|j�|j�dS)NF)�	exclusiver1rr)rr2r3r5�len�_roster�getrrr
�emptyr;)r r-Zlock1Zlock2rrr�test_shared_szTestLock.test_sharedc
Csbt|dtd��J}t|jjt��dks(t�t|jjt��dks@t�|jjtt�sTt�WdQRXdS)NT)rFr1rr)	rr2rGrHrIrrr
rJ)r r-r)rrr�test_exclusiveiszTestLock.test_exclusivec
Cspt|dd��Z}|j�|j�t|jjt��dks6t�t|jjt��dksNt�|jjtt�sbt�WdQRXdS)NF)rFrr)	rZupgraderGrHrIrrr
rJ)r r-r)rrr�test_upgradeoszTestLock.test_upgradec
Cs\t|dd��F}|j�|j�t|jjt��dks6t�t|jjt��dksNt�WdQRXdS)NT)rFrr)rZ	downgraderGrHrIrrr
)r r-r)rrr�test_downgradews
zTestLock.test_downgradecCsJt|dtd�}|j�st�|j�|j�s0t�|j�|j�sFt�dS)NT)rFr1)rr2Zgot_exclusive_lockrr3r;)r r-r)rrr�test_got_exclusive_lock~sz TestLock.test_got_exclusive_lockc	Csht|dtd�j�}|j�t|jjt��dks2t�t|jjt	��dksJt�t|dt
d��WdQRXdS)NT)rFr1r)rr2r3r4rGrHrIrrr
r5)r r-r)rrr�
test_break�szTestLock.test_breakc0Cs�t|dtd��0tjt��t|dtdd�j�WdQRXWdQRXt|dtd��0tjt��t|dtdd�j�WdQRXWdQRXt|dtd��0tjt��t|dtdd�j�WdQRXWdQRXdS)NF)rFr1Tg�������?)rFr1r!)rr2r7r8rr5r3)r r-rrrr#�s((zTestLock.test_timeoutc"Cst�\}}}}|||f}d	}t||dd�j�}	|	j}
t||dd��.|
jt�t�ksZt�|
jt�|hksnt�WdQRX|
jt�t�ks�t�|
jt�t�ks�t�t	j
t��|	j�WdQRXt||dd��0t	j
t
��t||ddd�j�WdQRXWdQRXdS)
N�foo.bar.example.netrrT)r1rF)r1r:g�������?)r1r:r!)rQrr)rrr3rHrIr
�setrrr7r8�KeyErrorr;r)r r-rrrrr<r=r>r?�rosterrrrr@�s
zTestLock.test_kill_stalecCs�tt}}|d|dkst�t||dd�j�}|j|ks>t�|j||�|j|ksXt�|j�t||dd�j�}|j|ks�t�|j||�|j|ks�t�|j�dS)NrT)r1rFF)r2r5rrr3r1rAr;)r r-rBrCr)rrrrD�s
zTestLock.test_migrate_lockN)r&r'r(rKrLrMrNrOrPr#r@rDrrrrrE^s
rEcCst|jd��S)NrT)r*r+)r,rrr�
rosterpath�srUc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestLockRostercCs*t|�}|j�}|j|�|iks&t�dS)N)r	�loadZsaver)r rUrTrJrrr�
test_empty�s
zTestLockRoster.test_emptycCs�t|td�}|jt�t�ks t�|jtt�|jt�thks@t�t|td�}|jtt�|jt�tthksnt�t|td�}|jtt	�|jt�thks�t�t|td�}|jtt	�|jt�t�ks�t�dS)N)r1)
r	r2rIrrRr�modifyr
r5r)r rU�roster1Zroster2rrr�test_modify_get�szTestLockRoster.test_modify_getcCs
t�\}}}}|||f}t||d�}|jt�t�ks:t�|jtt�|jt�|hksZt�d}	t||	d�}|jt�|hks~t�|jtt�|jt�||	hks�t�t|dd�}
|
jt�|	hks�t�|
jtt�|
jt�||	hks�t�t|dd�}|jt�||	hk�st�dS)N)r1�foo.bar.example.netrrT)r:)r\rr)rr	rIrrRrrYr
)r rUrrrrr<r=rZr>Z
killer_rosterZother_killer_rosterrrrr@�s"
zTestLockRoster.test_kill_stalecCs�tt}}|d|dkst�t||d�}|j|ks8t�|jtt�|jt�|hksXt�|j	t||�|j|kstt�|jt�|hks�t�dS)Nr)r1)
r2r5rr	r1rYrr
rIrA)r rUrBrCrTrrrrD�s
z TestLockRoster.test_migrate_lockN)r&r'r(rXr[r@rDrrrrrV�srV)rrr)rrr)rrr7Zhelpersr�platformrrZlockingrrrr	r
rrr
rrrr2r5Zfixturerrr-r.rErUrVrrrr�<module>s4._