U
    ÓZj~  ã                   @   sª   d Z ddlZddlZddlZzddlZW n ek
r@   dZY nX dZddlZddlm	Z	 ddl
mZ ddlmZ G dd	„ d	ejƒZG d
d„ dejƒZedkr¦e ¡  dS )zTests for certbot.lock.é    NFT)Úerrors)Úos)Úutilc                   @   s$   e Zd ZdZedd„ ƒZdd„ ZdS )ÚLockDirTestz Tests for certbot.lock.lock_dir.c                 O   s   ddl m} |||ŽS )Nr   )Úlock_dir)Úcertbot.lockr   )ÚclsÚargsÚkwargsr   © r   úZ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/certbot/tests/lock_test.pyÚ_call   s    zLockDirTest._callc                 C   s8   t  | jtj| j| j¡}tj 	| jd¡}t
 ||¡ d S )Nz.certbot.lock)Ú	functoolsÚpartialÚassertRaisesr   Ú	LockErrorr   Útempdirr   ÚpathÚjoinÚ	test_utilÚlock_and_call)ÚselfÚassert_raisesÚ	lock_pathr   r   r   Útest_it   s       ÿzLockDirTest.test_itN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r   r   r   r   r   r      s   
r   c                       s~   e Zd ZdZedd„ ƒZ‡ fdd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Ze d¡dd„ ƒZdd„ Zdd„ Zdd„ Z‡  ZS )ÚLockFileTestz Tests for certbot.lock.LockFile.c                 O   s   ddl m} |||ŽS )Nr   )ÚLockFile)r   r!   )r   r	   r
   r!   r   r   r   r   #   s    zLockFileTest._callc                    s$   t t| ƒ ¡  tj | jd¡| _d S )Nz	test.lock)Úsuperr    ÚsetUpr   r   r   r   r   )r   ©Ú	__class__r   r   r#   (   s    zLockFileTest.setUpc                 C   sR   t j| j| jfd�}| ¡  | ¡  |  |jd¡ |  t	j
 | j¡¡ |  ¡  d S )N)Útargetr	   r   )ÚmultiprocessingÚProcessr   r   Ústartr   ZassertEqualÚexitcodeÚ
assertTruer   r   ÚexistsÚtest_removed)r   Úchildr   r   r   Útest_acquire_without_deletion,   s    ÿz*LockFileTest.test_acquire_without_deletionc                 C   s*   t  | jtj| j| j¡}t || j¡ d S ©N)	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   Útest_contention8   s       ÿzLockFileTest.test_contentionc                 C   sB   |   | j¡}z&t|ƒ}|  ||¡ |  d|k¡ W 5 | ¡  X d S )NZacquired©r   r   ÚreleaseÚreprÚ_test_repr_commonr+   )r   Ú	lock_fileZlocked_reprr   r   r   Útest_locked_repr=   s    zLockFileTest.test_locked_reprc                 C   s:   |   | j¡}| ¡  t|ƒ}|  ||¡ |  d|k¡ d S )NZreleasedr2   )r   r6   Zreleased_reprr   r   r   Útest_released_reprF   s
    zLockFileTest.test_released_reprc                 C   s&   |   |jj|k¡ |   | j|k¡ d S r0   )r+   r%   r   r   )r   r6   Z	lock_reprr   r   r   r5   M   s    zLockFileTest._test_repr_commonzWRace conditions on lock are specific to the non-blocking file access approach on Linux.c              	      sZ   ddg‰ddl m‰ ‡ ‡‡fdd„}t d¡�}||_ˆ  ˆ j¡ W 5 Q R X ˆ  ˆ¡ d S )NTFr   )Ústatc                    s&   | ˆ j krˆ d¡rt | ¡ ˆ| ƒS )z-Wrap os.stat and maybe delete the file first.r   )r   Úpopr   Úremove)r   ©r   Zshould_deleter9   r   r   Údelete_and_statZ   s    
z/LockFileTest.test_race.<locals>.delete_and_statúcertbot.lock.filesystem.os.stat)r   r9   ÚmockÚpatchÚside_effectr   r   ÚassertFalse)r   r=   Z	mock_statr   r<   r   Ú	test_raceQ   s    zLockFileTest.test_racec                 C   s,   |   | j¡}| ¡  |  tj | j¡¡ d S r0   )r   r   r3   rB   r   r   r,   )r   r6   r   r   r   r-   e   s    zLockFileTest.test_removedc                 C   s†   t r
d}nd}d}t |¡�`}t|ƒ|_z|  | j¡ W n4 tk
rl } z|  |t|ƒk¡ W 5 d }~X Y nX |  	d¡ W 5 Q R X d S )Nzcertbot.lock.fcntl.lockfúcertbot.lock.msvcrt.lockingúhi therezIOError not raised)
Ú
POSIX_MODEr?   r@   ÚIOErrorrA   r   r   r+   ÚstrÚfail)r   Zmocked_functionÚmsgZ	mock_lockÚerrr   r   r   Ú$test_unexpected_lockf_or_locking_errj   s    
$z1LockFileTest.test_unexpected_lockf_or_locking_errc                 C   s†   t r
d}nd}d}t |¡�`}t|ƒ|_z|  | j¡ W n4 tk
rl } z|  |t|ƒk¡ W 5 d }~X Y nX |  	d¡ W 5 Q R X d S )Nr>   rD   rE   zOSError not raised)
rF   r?   r@   ÚOSErrorrA   r   r   r+   rH   rI   )r   Zmock_functionrJ   Zmock_osrK   r   r   r   Útest_unexpected_os_erry   s    
$z#LockFileTest.test_unexpected_os_err)r   r   r   r   r   r   r#   r/   r1   r7   r8   r5   r   Zskip_on_windowsrC   r-   rL   rN   Ú__classcell__r   r   r$   r   r    !   s    
	ÿ
r    Ú__main__)r   r   r'   ZunittestZfcntlÚImportErrorrF   r?   Zcertbotr   Zcertbot.compatr   Zcertbot.testsr   r   ZTempDirTestCaser   r    r   Úmainr   r   r   r   Ú<module>   s    
i