
­­­­­­­­­­­­­­­­­­
<!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 }|j  sttj|d  |j s8td S )Ng      ?g      ?)r   startZ	timed_outAssertionErrortimesleep)selftimeouttr   r   r   test_timeout   s
    zTestTimeoutTimer.test_timeoutc             C   sj   d\}}t ||j }|j  s$ttj |jd|  ks>t|j  sLttj |jd|  ksftd S )N      ?r   r   )Nr$   )r   r   Ztimed_out_or_sleepr   r   Z
start_time)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   s0   t |dd}|j r|j s"tW d Q R X d S )Nr   )r!   )r   Z	is_lockedby_mer   )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)r1   g?)r1   r!   )r   r2   pytestraisesr   r5   r3   )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   )r1   T)r1   kill_stale_locksg?)r1   r:   r!   )r9   r   r   )	r   r   r3   r7   r8   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   s   t t }}|d |d kstt||dj }|j|ks<t|j}|j sNt|j|| |j|ksht|j}|j szt||kstd S )Nr   )r1   )	r2   r5   r   r   r3   r1   Zunique_namer/   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(   r0   r6   r#   r@   rD   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   s   t |dtdj }t |dtdj }t|jjtdks<tt|jjt	dksTt|jj
tt	 sht|jj
t	sxt|j  |j  d S )NF)	exclusiver1   r   r   )r   r2   r3   r5   len_rostergetr   r   r   emptyr;   )r    r-   Zlock1Zlock2r   r   r   test_shared_   s    zTestLock.test_sharedc          
   C   sb   t |dtdJ}t|jjtdks(tt|jjtdks@t|jjtt sTtW d Q R X d S )NT)rF   r1   r   r   )	r   r2   rG   rH   rI   r   r   r   rJ   )r    r-   r)   r   r   r   test_exclusivei   s    zTestLock.test_exclusivec          
   C   sp   t |ddZ}|j  |j  t|jjtdks6tt|jjtdksNt|jjtt sbtW d Q R X d S )NF)rF   r   r   )	r   ZupgraderG   rH   rI   r   r   r   rJ   )r    r-   r)   r   r   r   test_upgradeo   s    zTestLock.test_upgradec          
   C   s\   t |ddF}|j  |j  t|jjtdks6tt|jjtdksNtW d Q R X d S )NT)rF   r   r   )r   Z	downgraderG   rH   rI   r   r   r   )r    r-   r)   r   r   r   test_downgradew   s
    zTestLock.test_downgradec             C   sJ   t |dtd}|j  st|j  |j s0t|j  |j  sFtd S )NT)rF   r1   )r   r2   Zgot_exclusive_lockr   r3   r;   )r    r-   r)   r   r   r   test_got_exclusive_lock~   s    z TestLock.test_got_exclusive_lockc          	   C   sh   t |dtdj }|j  t|jjtdks2tt|jjt	dksJtt |dt
d W d Q R X d S )NT)rF   r1   r   )r   r2   r3   r4   rG   rH   rI   r   r   r   r5   )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)rF   r1   Tg?)rF   r1   r!   )r   r2   r7   r8   r   r5   r3   )r    r-   r   r   r   r#      s    ((zTestLock.test_timeoutc          "   C   s  t   \}}}}|||f}d	}t||ddj }	|	j}
t||dd. |
jtt ksZt|
jt|hksntW d Q R X |
jtt kst|
jtt kst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)r1   rF   )r1   r:   g?)r1   r:   r!   )rQ   r   r   )r   r   r3   rH   rI   r   setr   r   r7   r8   r   r;   r   )r    r-   r   r   r   r   r<   r=   r>   r?   rosterr   r   r   r@      s    
zTestLock.test_kill_stalec             C   s   t t }}|d |d kstt||ddj }|j|ks>t|j|| |j|ksXt|j  t||ddj }|j|kst|j|| |j|kst|j  d S )Nr   T)r1   rF   F)r2   r5   r   r   r3   r1   rA   r;   )r    r-   rB   rC   r)   r   r   r   rD      s    
zTestLock.test_migrate_lockN)r&   r'   r(   rK   rL   rM   rN   rO   rP   r#   r@   rD   r   r   r   r   rE   ^   s   
rE   c             C   s   t | jdS )NrS   )r*   r+   )r,   r   r   r   
rosterpath   s    rT   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| |i ks&td S )N)r	   loadZsaver   )r    rT   rS   rJ   r   r   r   
test_empty   s    
zTestLockRoster.test_emptyc             C   s   t |td}|jtt ks t|jtt |jtthks@tt |td}|jtt |jttthksntt |td}|jtt	 |jtthkstt |td}|jtt	 |jtt kstd S )N)r1   )
r	   r2   rI   r   rR   r   modifyr
   r5   r   )r    rT   roster1Zroster2r   r   r   test_modify_get   s    zTestLockRoster.test_modify_getc             C   s
  t   \}}}}|||f}t||d}|jtt ks:t|jtt |jt|hksZtd}	t||	d}|jt|hks~t|jtt |jt||	hkstt|dd}
|
jt|	hkst|
jtt |
jt||	hkstt|dd}|jt||	hkstd S )N)r1   foo.bar.example.netr   r   T)r:   )r[   r   r   )r   r	   rI   r   rR   r   rX   r
   )r    rT   r   r   r   r   r<   r=   rY   r>   Zkiller_rosterZother_killer_rosterr   r   r   r@      s"    
zTestLockRoster.test_kill_stalec             C   s   t t }}|d |d kstt||d}|j|ks8t|jtt |jt|hksXt|j	t|| |j|kstt|jt|hkstd S )Nr   )r1   )
r2   r5   r   r	   r1   rX   r   r
   rI   rA   )r    rT   rB   rC   rS   r   r   r   rD      s    
z TestLockRoster.test_migrate_lockN)r&   r'   r(   rW   rZ   r@   rD   r   r   r   r   rU      s   rU   )r   r   r   )r   r   r   )r   r   r7   Zhelpersr   platformr   r   Zlockingr   r   r   r	   r
   r   r   r   r   r   r   r2   r5   Zfixturer   r   r-   r.   rE   rT   rU   r   r   r   r   <module>   s   4._