a ‚oeÄã@sÔdZddlZddlZddlZddlZddlmZddlZddlmZddl m Z ddl m Z z ddlZWney~dZYn0dZGd d „d e jƒZGd d „d e jƒZed krÐe e ejdd…eg¡¡dS)z!Tests for certbot._internal.lock.éN)Úmock)Úerrors)Úos)ÚutilFTc@s$eZdZdZedd„ƒZdd„ZdS)Ú LockDirTestz*Tests for certbot._internal.lock.lock_dir.cOsddlm}||i|¤ŽS)Nr)Úlock_dir)Úcertbot._internal.lockr)ÚclsÚargsÚkwargsr©r úBC:\Program Files\Certbot\pkgs\certbot\_internal\tests\lock_test.pyÚ_calls zLockDirTest._callcCs8t |jtj|j|j¡}tj  |jd¡}t   ||¡dS)Nz .certbot.lock) Ú functoolsÚpartialÚ assertRaisesrÚ LockErrorrÚtempdirrÚpathÚjoinÚ test_utilÚ lock_and_call)ÚselfÚ assert_raisesÚ lock_pathr r r Útest_its ÿzLockDirTest.test_itN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú classmethodrrr r r r rs rcs~eZdZdZedd„ƒZ‡fdd„Zdd„Zdd „Zd d „Z d d „Z dd„Z e   d¡dd„ƒZdd„Zdd„Zdd„Z‡ZS)Ú LockFileTestz*Tests for certbot._internal.lock.LockFile.cOsddlm}||i|¤ŽS)Nr)ÚLockFile)rr")r r r r"r r r r(s zLockFileTest._callcs tƒ ¡tj |jd¡|_dS)Nz test.lock)ÚsuperÚsetUprrrrr)r©Ú __class__r r r$-s zLockFileTest.setUpcCsPtj|j|jfd�}| ¡| ¡|jdks2J‚tj  |j¡sDJ‚|  ¡dS)N)Útargetr r) ÚmultiprocessingZProcessrrÚstartrZexitcoderrÚexistsÚ test_removed)rÚchildr r r Útest_acquire_without_deletion1sÿz*LockFileTest.test_acquire_without_deletioncCs*t |jtj|j|j¡}t ||j¡dS©N) rrrrrrrrr)rrr r r Útest_contention=sÿzLockFileTest.test_contentioncCsH| |j¡}z,t|ƒ}| ||¡d|vs.J‚W| ¡n | ¡0dS)NZacquired)rrÚreprÚ_test_repr_commonÚrelease)rÚ lock_fileZ locked_reprr r r Útest_locked_reprBs   zLockFileTest.test_locked_reprcCs8| |j¡}| ¡t|ƒ}| ||¡d|vs4J‚dS)NZreleased)rrr2r0r1)rr3Z released_reprr r r Útest_released_reprKs   zLockFileTest.test_released_reprcCs"|jj|vsJ‚|j|vsJ‚dSr.)r&rr)rr3Z lock_reprr r r r1RszLockFileTest._test_repr_commonzWRace conditions on lock are specific to the non-blocking file access approach on Linux.cstddg‰ddlm‰‡‡‡fdd„}t d¡�"}||_ˆ ˆj¡Wdƒn1sV0YtˆƒdkspJ‚dS)NTFr)Ústatcs&|ˆjkrˆ d¡rt |¡ˆ|ƒS)z-Wrap os.stat and maybe delete the file first.r)rÚpoprÚremove)r©rZ should_deleter6r r Údelete_and_stat_s z/LockFileTest.test_race..delete_and_statú)certbot._internal.lock.filesystem.os.stat)rr6rÚpatchÚ side_effectrrÚlen)rr:Z mock_statr r9r Ú test_raceVs  *zLockFileTest.test_racecCs*| |j¡}| ¡tj |j¡r&J‚dSr.)rrr2rrr*)rr3r r r r+js zLockFileTest.test_removedc Csštr d}nd}d}t |¡�j}t|ƒ|_z| |j¡Wn4tyl}z|t|ƒvsXJ‚WYd}~nd}~00| d¡Wdƒn1sŒ0YdS)Nz"certbot._internal.lock.fcntl.lockfú%certbot._internal.lock.msvcrt.lockingúhi therezIOError not raised) Ú POSIX_MODErr<ÚIOErrorr=rrÚstrÚfail)rZmocked_functionÚmsgZ mock_lockÚerrr r r Ú$test_unexpected_lockf_or_locking_erros  &z1LockFileTest.test_unexpected_lockf_or_locking_errc Csštr d}nd}d}t |¡�j}t|ƒ|_z| |j¡Wn4tyl}z|t|ƒvsXJ‚WYd}~nd}~00| d¡Wdƒn1sŒ0YdS)Nr;r@rAzOSError not raised) rBrr<ÚOSErrorr=rrrDrE)rZ mock_functionrFZmock_osrGr r r Útest_unexpected_os_err~s  &z#LockFileTest.test_unexpected_os_err)rrrrr rr$r-r/r4r5r1rZskip_on_windowsr?r+rHrJÚ __classcell__r r r%r r!&s     ÿ r!Ú__main__é)rrr(ÚsysZunittestrZpytestZcertbotrZcertbot.compatrZ certbot.testsrrZfcntlÚ ImportErrorrBZTempDirTestCaserr!rÚexitÚmainÚargvÚ__file__r r r r Ús$       i