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.setUpcCs0tj|j|jfd}|||dS)N)targetr )multiprocessingZProcessrrstartr test_removed)rchildr r r test_acquire_without_deletion1s z*LockFileTest.test_acquire_without_deletioncCs*t|jtj|j|j}t||jdSN) rrrrrrrrr)rrr r r test_contention=szLockFileTest.test_contentioncCs<||j}z t|}|||W|n |0dSr-)rrrepr_test_repr_commonrelease)r lock_fileZ locked_reprr r r test_locked_reprBs   zLockFileTest.test_locked_reprcCs,||j}|t|}|||dSr-)rrr1r/r0)rr2Z released_reprr r r test_released_reprKs   zLockFileTest.test_released_reprcCsdSr-r )rr2Z lock_reprr r r r0RszLockFileTest._test_repr_commonzWRace conditions on lock are specific to the non-blocking file access approach on Linux.csdddgddlmfdd}td"}||_jWdn1sV0YdS)NTFr)statcs&|jkrdrt||S)z-Wrap os.stat and maybe delete the file first.r)rpoprremove)rrZ should_deleter5r r delete_and_stat_s z/LockFileTest.test_race..delete_and_stat)certbot._internal.lock.filesystem.os.stat)rr5rpatch side_effectrr)rr9Z mock_statr r8r test_raceVs  *zLockFileTest.test_racecCs||j}|dSr-)rrr1)rr2r r r r*js zLockFileTest.test_removedc Cstr d}nd}d}t|Z}t||_z||jWn$ty\}z WYd}~nd}~00|dWdn1s|0YdS)Nz"certbot._internal.lock.fcntl.lockf%certbot._internal.lock.msvcrt.lockinghi therezIOError not raised POSIX_MODErr;OSErrorr<rrZfail)rZmocked_functionmsgZ mock_lockerrr r r $test_unexpected_lockf_or_locking_erros  z1LockFileTest.test_unexpected_lockf_or_locking_errc Cstr d}nd}d}t|Z}t||_z||jWn$ty\}z WYd}~nd}~00|dWdn1s|0YdS)Nr:r>r?zOSError not raisedr@)rZ mock_functionrCZmock_osrDr r r test_unexpected_os_err~s  z#LockFileTest.test_unexpected_os_err)rrrrr rr$r,r.r3r4r0rZskip_on_windowsr=r*rErF __classcell__r r r%r r!&s      r!__main__)rrr(sysZunittestrZpytestZcertbotrZcertbot.compatrZ certbot.testsrrZfcntl ImportErrorrAZTempDirTestCaserr!rexitmainargv__file__r r r r s$       i