
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
i%                 @   s   d dl Z d dlZd dlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZ dZdZej d	d
 ZG dd dZej dd ZG dd dZG dd dZej dd ZG dd dZdS )    N   )	daemonize)get_process_idprocess_alive)TimeoutTimerExclusiveLockLock
LockRosterADDREMOVESHARED	EXCLUSIVELockTimeout	NotLocked	NotMyLockfoo   barc              C   s2   t  \} }}x tjdd}t| ||s|S qW dS )zBReturn a free PID not used by any process (naturally this is racy)i  i  N)r   randomZrandintr   )hostpidtid r   /usr/lib64/python3.6/locking.pyfree_pid   s
    r   c               @   s   e Zd Zdd Zdd ZdS )TestTimeoutTimerc             C   s"   d}t |j }tj|d  d S )Ng      ?g      ?)r   starttimesleep)selftimeouttr   r   r   test_timeout   s    zTestTimeoutTimer.test_timeoutc             C   s   d\}}t ||j }d S )N      ?)Nr#   )r   r   )r   r    r   r!   r   r   r   test_notimeout_sleep"   s    z%TestTimeoutTimer.test_notimeout_sleepN)__name__
__module____qualname__r"   r$   r   r   r   r   r      s   r   c             C   s   t | jdS )Nlock)strjoin)tmpdirr   r   r   lockpath+   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 )TestExclusiveLockc          	   C   s   t |dd}W d Q R X d S )Nr   )r    )r   )r   r,   r(   r   r   r   test_checks1   s    zTestExclusiveLock.test_checksc          	   C   s4   t |tdj }|j  t |td W d Q R X d S )N)id)r   ID1acquire
break_lockID2)r   r,   r(   r   r   r   test_acquire_break_reacquire5   s    z.TestExclusiveLock.test_acquire_break_reacquirec             C   sD   t |td. tjt t |tddj  W d Q R X W d Q R X d S )N)r/   g?)r/   r    )r   r0   pytestraisesr   r3   r1   )r   r,   r   r   r   r"   ;   s    zTestExclusiveLock.test_timeoutc       
   )   C   s   t   \}}}}|||f}d	}t||dj }	t||dd$ tjt |	j  W d Q R X W d Q R X tjt |	j  W d Q R X t||d0 tjt t||dddj  W d Q R X W d Q R X d S )
Nfoo.bar.example.netr   r   )r/   T)r/   kill_stale_locksg?)r/   r8   r    )r7   r   r   )	r   r   r1   r5   r6   r   releaser   r   )
r   r,   r   r   r   r   our_iddead_idcant_know_if_dead_id	dead_lockr   r   r   test_kill_stale@   s    
z!TestExclusiveLock.test_kill_stalec             C   s6   t t }}t||dj }|j}|j|| |j}d S )N)r/   )r0   r3   r   r1   Zunique_namemigrate_lock)r   r,   old_idnew_idr(   Zold_unique_nameZnew_unique_namer   r   r   test_migrate_lockP   s    
z#TestExclusiveLock.test_migrate_lockN)r%   r&   r'   r.   r4   r"   r>   rB   r   r   r   r   r-   0   s
   r-   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 )TestLockc             C   s8   t |dtdj }t |dtdj }|j  |j  d S )NF)	exclusiver/   )r   r0   r1   r3   r9   )r   r,   Zlock1Zlock2r   r   r   test_shared_   s    zTestLock.test_sharedc          	   C   s   t |dtd}W d Q R X d S )NT)rD   r/   )r   r0   )r   r,   r(   r   r   r   test_exclusivei   s    zTestLock.test_exclusivec          	   C   s,   t |dd}|j  |j  W d Q R X d S )NF)rD   )r   Zupgrade)r   r,   r(   r   r   r   test_upgradeo   s    zTestLock.test_upgradec          	   C   s,   t |dd}|j  |j  W d Q R X d S )NT)rD   )r   Z	downgrade)r   r,   r(   r   r   r   test_downgradew   s    zTestLock.test_downgradec             C   s"   t |dtd}|j  |j  d S )NT)rD   r/   )r   r0   r1   r9   )r   r,   r(   r   r   r   test_got_exclusive_lock~   s    z TestLock.test_got_exclusive_lockc          	   C   s8   t |dtdj }|j  t |dtd W d Q R X d S )NT)rD   r/   )r   r0   r1   r2   r3   )r   r,   r(   r   r   r   
test_break   s    zTestLock.test_breakc          0   C   s   t |dtd0 tjt t |dtddj  W d Q R X W d Q R X t |dtd0 tjt t |dtddj  W d Q R X W d Q R X t |dtd0 tjt t |dtddj  W d Q R X W d Q R X d S )NF)rD   r/   Tg?)rD   r/   r    )r   r0   r5   r6   r   r3   r1   )r   r,   r   r   r   r"      s    ((zTestLock.test_timeoutc          "   C   s   t   \}}}}|||f}d	}t||ddj }	|	j}
t||dd W d Q R X tjt |	j  W d Q R X t||dd0 tjt t||dddj  W d Q R X W d Q R X d S )
Nfoo.bar.example.netr   r   T)r/   rD   )r/   r8   g?)r/   r8   r    )rK   r   r   )	r   r   r1   Z_rosterr5   r6   r   r9   r   )r   r,   r   r   r   r   r:   r;   r<   r=   rosterr   r   r   r>      s    

zTestLock.test_kill_stalec             C   sZ   t t }}t||ddj }|j|| |j  t||ddj }|j|| |j  d S )NT)r/   rD   F)r0   r3   r   r1   r?   r9   )r   r,   r@   rA   r(   r   r   r   rB      s    
zTestLock.test_migrate_lockN)r%   r&   r'   rE   rF   rG   rH   rI   rJ   r"   r>   rB   r   r   r   r   rC   ^   s   
rC   c             C   s   t | jdS )NrL   )r)   r*   )r+   r   r   r   
rosterpath   s    rM   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestLockRosterc             C   s   t |}|j }|j| d S )N)r	   loadZsave)r   rM   rL   emptyr   r   r   
test_empty   s    
zTestLockRoster.test_emptyc             C   sd   t |td}|jtt t |td}|jtt t |td}|jtt t |td}|jtt d S )N)r/   )r	   r0   modifyr   r
   r3   r   )r   rM   roster1Zroster2r   r   r   test_modify_get   s    zTestLockRoster.test_modify_getc             C   sv   t   \}}}}|||f}t||d}|jtt d}	t||	d}|jtt t|dd}
|
jtt t|dd}d S )N)r/   foo.bar.example.netr   r   T)r8   )rU   r   r   )r   r	   rR   r   r
   )r   rM   r   r   r   r   r:   r;   rS   r<   Zkiller_rosterZother_killer_rosterr   r   r   r>      s    
zTestLockRoster.test_kill_stalec             C   s4   t t }}t||d}|jtt |jt|| d S )N)r/   )r0   r3   r	   rR   r   r
   r?   )r   rM   r@   rA   rL   r   r   r   rB      s
    
z TestLockRoster.test_migrate_lockN)r%   r&   r'   rQ   rT   r>   rB   r   r   r   r   rN      s   rN   )r   r   r   )r   r   r   )r   r   r5   Zhelpersr   platformr   r   Zlockingr   r   r   r	   r
   r   r   r   r   r   r   r0   r3   Zfixturer   r   r,   r-   rC   rM   rN   r   r   r   r   <module>   s   4._