a }|g@sdZddlZddlZddlZddlZddlmZddlZddlmZddl m Z ddl m Z z ddlZWney~dZYn0dZGd d d e jZGd d d e jZed kreeejddegdS)z!Tests for certbot._internal.lock.N)mock)errors)os)utilFTc@s$eZdZdZeddZddZdS) LockDirTestz*Tests for certbot._internal.lock.lock_dir.cOsddlm}||i|S)Nr)lock_dir)certbot._internal.lockr)clsargskwargsrr E/usr/lib/python3.9/site-packages/certbot/_internal/tests/lock_test.py_calls zLockDirTest._callcCs8t|jtj|j|j}tj |jd}t ||dS)Nz .certbot.lock) functoolspartial assertRaisesr LockErrorrtempdirrpathjoin 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~eZdZdZeddZfddZddZdd Zd d Z d d Z ddZ e dddZddZddZddZZS) LockFileTestz*Tests for certbot._internal.lock.LockFile.cOsddlm}||i|S)Nr)LockFile)rr")r r r r"r r r r(s zLockFileTest._callcs ttj|jd|_dS)Nz test.lock)supersetUprrrrr)r __class__r r r$-s zLockFileTest.setUpcCsPtj|j|jfd}|||jdks2Jtj |jsDJ| dS)N)targetr r) multiprocessingZProcessrrstartrZexitcoderrexists test_removed)rchildr r r test_acquire_without_deletion1sz*LockFileTest.test_acquire_without_deletioncCs*t|jtj|j|j}t||jdSN) rrrrrrrrr)rrr r r test_contention=szLockFileTest.test_contentioncCsH||j}z,t|}|||d|vs.JW|n |0dS)NZacquired)rrrepr_test_repr_commonrelease)r lock_fileZ locked_reprr r r test_locked_reprBs   zLockFileTest.test_locked_reprcCs8||j}|t|}|||d|vs4JdS)NZreleased)rrr2r0r1)rr3Z released_reprr r r test_released_reprKs   zLockFileTest.test_released_reprcCs"|jj|vsJ|j|vsJdSr.)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.cstddgddlmfdd}td"}||_jWdn1sV0YtdkspJdS)NTFr)statcs&|jkrdrt||S)z-Wrap os.stat and maybe delete the file first.r)rpoprremove)rrZ should_deleter6r r delete_and_stat_s z/LockFileTest.test_race..delete_and_stat)certbot._internal.lock.filesystem.os.stat)rr6rpatch side_effectrrlen)rr:Z mock_statr r9r test_raceVs  *zLockFileTest.test_racecCs*||j}|tj|jr&JdSr.)rrr2rrr*)rr3r r r r+js zLockFileTest.test_removedc Cstr d}nd}d}t|j}t||_z||jWn4tyl}z|t|vsXJWYd}~nd}~00|dWdn1s0YdS)Nz"certbot._internal.lock.fcntl.lockf%certbot._internal.lock.msvcrt.lockinghi therezIOError not raised POSIX_MODErr<OSErrorr=rrstrZfail)rZmocked_functionmsgZ mock_lockerrr r r $test_unexpected_lockf_or_locking_erros  &z1LockFileTest.test_unexpected_lockf_or_locking_errc Cstr d}nd}d}t|j}t||_z||jWn4tyl}z|t|vsXJWYd}~nd}~00|dWdn1s0YdS)Nr;r@rAzOSError not raisedrB)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+rHrI __classcell__r r r%r r!&s      r!__main__)rrr(sysZunittestrZpytestZcertbotrZcertbot.compatrZ certbot.testsrrZfcntl ImportErrorrCZTempDirTestCaserr!rexitmainargv__file__r r r r s$       i