o V‡EVqã@sˆddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z Gdd„de j ƒZGdd„de jƒZdS)éN)Ú process_lock)Útestcs,eZdZ‡fdd„Zdd„Zdd„Z‡ZS)Ú BrokenLockcstt|ƒ |¡||_dS©N)ÚsuperrÚ__init__Ú errno_code)ÚselfÚnamer©Ú __class__©úC/usr/lib/python3/dist-packages/fasteners/tests/test_process_lock.pyr!s zBrokenLock.__init__cCsdSrr ©r r r rÚunlock%szBrokenLock.unlockcCstƒ}|j|_|‚r)ÚIOErrorrÚerrno)r Úerrr r rÚtrylock(szBrokenLock.trylock)Ú__name__Ú __module__Ú __qualname__rrrÚ __classcell__r r r rr s rcsxeZdZ‡fdd„Z‡fdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Z‡ZS)ÚProcessLockTestcs&tt|ƒ ¡t ¡|_|jg|_dSr)rrÚsetUpÚtempfileÚmkdtempÚlock_dirÚtmp_dirsrr r rr/s zProcessLockTest.setUpcs<tt|ƒ ¡t|jƒD]}tj |¡rtj |ddq dS)NT)Ú ignore_errors) rrÚtearDownÚreversedrÚosÚpathÚexistsÚshutilÚrmtree)r Úa_dirr r rr 4s  €þzProcessLockTest.tearDowncs„tj |jd¡‰t ˆ¡}‡fdd„‰‡fdd„}| | ¡¡z|dƒ}| d|¡W|  ¡n|  ¡w|dƒ}|  d|¡dS) NÚlockcsVzt ˆ¡}tˆdƒ|_| ¡| ¡t d¡WdSty*t d¡YdSw)NÚwér) ÚplÚInterProcessLockÚopenÚlockfilerrr"Ú_exitr)Úmy_lock)Ú lock_filer rÚtry_lock>s   ÿzEProcessLockTest.test_lock_acquire_release_file_lock..try_lockcsZg}t|ƒD]}tjˆd}| ¡| |¡qg}|D] }| ¡| |j¡qt|ƒS)N)Útarget)ÚrangeÚmultiprocessingÚProcessÚstartÚappendÚjoinÚexitcodeÚsum)ÚcountÚchildrenÚiÚchildÚ exit_codes)r2r rÚattempt_acquireHs   zLProcessLockTest.test_lock_acquire_release_file_lock..attempt_acquireé ré) r"r#r9rr+r,Ú assertTrueÚacquireÚ assertEqualÚreleaseÚassertNotEqual)r r(rAÚacquired_childrenr )r1r2rÚ#test_lock_acquire_release_file_lock:s    z3ProcessLockTest.test_lock_acquire_release_file_lockcs<tƒ‰t tj ˆjd¡¡‡‡fdd„ƒ}ˆ ˆ|ƒ¡dS)Nz test-lock-1cs(t tj ˆjd¡¡‡fdd„ƒ}|ƒS)Nz test-lock-2csˆSrr r )Úsentinelr rÚ inner_lockdsz_ProcessLockTest.test_nested_synchronized_external_works..outer_lock..inner_lock)r+Úinterprocess_lockedr"r#r9r)rL©r rKr rÚ outer_lockaszKProcessLockTest.test_nested_synchronized_external_works..outer_lock)Úobjectr+rMr"r#r9rrF)r rOr rNrÚ'test_nested_synchronized_external_works^sz7ProcessLockTest.test_nested_synchronized_external_worksc sªtj |d¡‰‡‡fdd„}t ¡}ˆj |¡g}tdƒD]}t ¡}|r,| |¡qz ||ƒWt  d¡qt  d¡w|D]}t  |d¡\}}|rRˆ  d|¡q@dS)Nr(c sàt ˆ¡ag}tdƒD]}tj |d|¡}| t|dƒ¡q d}|D]3}z,zt  |tj tj B¡|d7}t  |tj ¡Wnt yLt d¡YnwW| ¡q$| ¡wˆ d|¡WdƒdS1siwYdS)Né2zfile-%sr)rr*é)r+r,r4r"r#r9r8r-ÚfcntlÚflockÚLOCK_EXÚLOCK_NBÚLOCK_UNrr/ÚcloserF)Ú handles_dirÚhandlesÚnr#r<Úhandle©Ú lock_pathr r rÚ lock_filesos$   ÿ€"èz.lock_filesrRr) r"r#r9rrrr8r4Úforkr/ÚwaitpidrF) r rr`rZr=r\Úpidr?Ústatusr r^rÚ_do_test_lock_externallyls$     €ýz(ProcessLockTest._do_test_lock_externallycCs| |j¡dSr)rerrr r rÚtest_lock_externally›sz$ProcessLockTest.test_lock_externallycCst |j¡| |j¡dSr)r"Úrmdirrrerr r rÚ'test_lock_externally_lock_dir_not_existžs z7ProcessLockTest.test_lock_externally_lock_dir_not_existcs2tj ˆjd¡‰t ˆ¡‡‡fdd„ƒ}|ƒdS)Nr(csˆ tj ˆ¡¡dSr)rDr"r#r$r ©r1r r rÚfoo¥sz2ProcessLockTest.test_lock_file_exists..foo)r"r#r9rr+rM)r rjr rirÚtest_lock_file_exists¢s z%ProcessLockTest.test_lock_file_existscCs0tj |jd¡}t|tjƒ}| tj |j ¡dS©Nr() r"r#r9rrrÚEBUSYÚ assertRaisesÚ threadingÚ ThreadErrorrE©r r1r(r r rÚtest_bad_acquire«s z ProcessLockTest.test_bad_acquirecCs.tj |jd¡}t |¡}| tj|j ¡dSrl) r"r#r9rr+r,rnrorprGrqr r rÚtest_bad_release°s z ProcessLockTest.test_bad_releasec Csvtj |jd¡}t ¡}|rrt ¡}tj |¡s0t ¡|dkr%| d¡t d¡tj |¡rt   d¡}t |dƒ|_ t ¡|dkrdz|  ¡| ¡t d¡Wn ty[Ynwt ¡|dksC| d¡t |tj¡dSz=t   d¡}t |dƒ|_ d}|s£z|  ¡d }Wn ty“Ynw|r‚Wt d ¡t d¡dSWt d ¡t d¡dSt d ¡t d¡w) Nr(rCz(Timed out waiting for child to grab lockrrjr)z$Never caught expected lock exceptionFTgà?)r"r#r9rraÚtimer$ÚfailÚsleepr+r,r-r.rrrÚkillÚsignalÚSIGKILLr/)r r1rcr7Úlock1Úlock2Ú have_lockr r rÚtest_interprocess_lockµsR    ý   þû    ÿü õ  ÿ z&ProcessLockTest.test_interprocess_lockc Cs¼tj |jd¡}t|dƒ }| d¡Wdƒn1swYt |¡-t|ƒ}| |  ¡d¡Wdƒn1s?wYWdƒdSWdƒdS1sWwYdS)Nz not-destroyedr)r) r"r#r9rr-Úwriter+r,rFÚread)r r1Úfr r rÚtest_non_destructiveås  ÿ  ÿÿ"ÿz$ProcessLockTest.test_non_destructive)rrrrr rJrQrerfrhrkrrrsr}rrr r r rr.s  $/ 0r)rrTr5r"r%rxrrortÚ fastenersrr+rr,rÚTestCaserr r r rÚs