
    M/e                     N   d Z ddlZddlZddlZddlZddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ 	 ddlZdZ G d	 d
ej"                        Z G d dej"                        Zedk(  r4 ej*                   ej,                  ej.                  dd egz                yy# e$ r dZY mw xY w)z!Tests for certbot._internal.lock.    N)mock)errors)os)utilTFc                   &    e Zd ZdZed        Zd Zy)LockDirTestz*Tests for certbot._internal.lock.lock_dir.c                     ddl m}  ||i |S )Nr   )lock_dir)certbot._internal.lockr
   )clsargskwargsr
   s       C/usr/lib/python3/dist-packages/certbot/_internal/tests/lock_test.py_callzLockDirTest._call       3(((    c                    t        j                  | j                  t        j                  | j
                  | j                        }t        j                  j                  | j                  d      }t        j                  ||       y )Nz.certbot.lock)	functoolspartialassertRaisesr   	LockErrorr   tempdirr   pathjoin	test_utillock_and_call)selfassert_raises	lock_paths      r   test_itzLockDirTest.test_it   sX    !))v//T\\KGGLL?	y9r   N)__name__
__module____qualname____doc__classmethodr   r     r   r   r   r      s    4) ):r   r   c                        e Zd ZdZed        Z fdZd Zd Zd Z	d Z
d Z ej                  d	      d
        Zd Zd Zd Z xZS )LockFileTestz*Tests for certbot._internal.lock.LockFile.c                     ddl m}  ||i |S )Nr   )LockFile)r   r*   )r   r   r   r*   s       r   r   zLockFileTest._call(   r   r   c                     t         |           t        j                  j	                  | j
                  d      | _        y )Nz	test.lock)supersetUpr   r   r   r   r   )r   	__class__s    r   r-   zLockFileTest.setUp-   s&    dllK@r   c                 4   t        j                  | j                  | j                  f      }|j	                          |j                          |j                  dk(  sJ t        j                  j                  | j                        sJ | j                          y )N)targetr   r   )multiprocessingProcessr   r   startr   exitcoder   r   existstest_removed)r   childs     r   test_acquire_without_deletionz*LockFileTest.test_acquire_without_deletion1   so    ''tzz.2nn->@

~~"""ww~~dnn--- 	r   c                     t        j                  | j                  t        j                  | j
                  | j                        }t        j                  || j                         y N)	r   r   r   r   r   r   r   r   r   )r   r   s     r   test_contentionzLockFileTest.test_contention=   sD    !))v//T^^Mt~~>r   c                     | j                  | j                        }	 t        |      }| j                  ||       d|v sJ 	 |j	                          y # |j	                          w xY w)Nacquired)r   r   repr_test_repr_commonrelease)r   	lock_filelocked_reprs      r   test_locked_reprzLockFileTest.test_locked_reprB   sY    JJt~~.		 y/K""9k:,,,Is   #A A$c                     | j                  | j                        }|j                          t        |      }| j	                  ||       d|v sJ y )Nreleased)r   r   r@   r>   r?   )r   rA   released_reprs      r   test_released_reprzLockFileTest.test_released_reprK   sG    JJt~~.	Yy-8]***r   c                 X    |j                   j                  |v sJ | j                  |v sJ y r:   )r.   r!   r   )r   rA   	lock_reprs      r   r?   zLockFileTest._test_repr_commonR   s.    ""++y888~~***r   zWRace conditions on lock are specific to the non-blocking file access approach on Linux.c                      ddgddl m  fd}t        j                  d      5 }||_         j                   j                         d d d        t              dk(  sJ y # 1 sw Y   xY w)NTFr   )statc                 ~    | j                   k(  r&j                  d      rt        j                  |         |       S )z-Wrap os.stat and maybe delete the file first.r   )r   popr   remove)r   r   should_deleterK   s    r   delete_and_statz/LockFileTest.test_race.<locals>.delete_and_stat_   s1    t~~%-*;*;A*>		$:r   )certbot._internal.lock.filesystem.os.stat)r   rK   r   patchside_effectr   r   len)r   rP   	mock_statrO   rK   s   `  @@r   	test_racezLockFileTest.test_raceV   sk     u 		 ZZCD 	'	$3I!JJt~~&	' =!Q&&&	' 	's   #A&&A/c                     | j                  | j                        }|j                          t        j                  j                  | j                        rJ y r:   )r   r   r@   r   r   r5   )r   rA   s     r   r6   zLockFileTest.test_removedj   s=    JJt~~.	77>>$..1111r   c                 6   t         rd}nd}d}t        j                  |      5 }t        |      |_        	 | j                  | j                         | j                  d       d d d        y # t        $ r}|t        |      v sJ Y d }~&d }~ww xY w# 1 sw Y   y xY w)Nz"certbot._internal.lock.fcntl.lockf%certbot._internal.lock.msvcrt.lockinghi therezIOError not raised)	
POSIX_MODEr   rR   IOErrorrS   r   r   failstr)r   mocked_functionmsg	mock_lockerrs        r   $test_unexpected_lockf_or_locking_errz1LockFileTest.test_unexpected_lockf_or_locking_erro   s    BOEOZZ( 	0I$+CLI!0

4>>* 		./	0 	0  'c#h&'		0 	04   BA*B*	B3BBBBBc                 6   t         rd}nd}d}t        j                  |      5 }t        |      |_        	 | j                  | j                         | j                  d       d d d        y # t        $ r}|t        |      v sJ Y d }~&d }~ww xY w# 1 sw Y   y xY w)NrQ   rY   rZ   zOSError not raised)	r[   r   rR   OSErrorrS   r   r   r]   r^   )r   mock_functionr`   mock_osrb   s        r   test_unexpected_os_errz#LockFileTest.test_unexpected_os_err~   s    GMCMZZ& 	0'")#,G0

4>>* 		./	0 	0  'c#h&'		0 	0rd   )r!   r"   r#   r$   r%   r   r-   r8   r;   rC   rG   r?   r   skip_on_windowsrV   r6   rc   ri   __classcell__)r.   s   @r   r(   r(   &   sl    4) )A
?
 ++ Yac'c'$2
00r   r(   __main__   )r$   r   r1   sysunittestr   pytestcertbotr   certbot.compatr   certbot.testsr   r   fcntlr[   ImportErrorTempDirTestCaser   r(   r!   exitmainargv__file__r&   r   r   <module>r{      s    '   
      + J
:)++ :f09,, f0R zCHH[V[[!"
234   Js   B B$#B$