o VEVq@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z Gddde j ZGddde jZdS)N) process_lock)testcs,eZdZfddZddZddZZS) BrokenLockcstt||||_dSN)superr__init__ errno_code)selfnamer __class__C/usr/lib/python3/dist-packages/fasteners/tests/test_process_lock.pyr!s zBrokenLock.__init__cCsdSrr r r r runlock%szBrokenLock.unlockcCst}|j|_|r)IOErrorrerrno)r errr r rtrylock(szBrokenLock.trylock)__name__ __module__ __qualname__rrr __classcell__r r r rr s rcsxeZdZfddZfddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZZS)ProcessLockTestcs&tt|t|_|jg|_dSr)rrsetUptempfilemkdtemplock_dirtmp_dirsrr r rr/s zProcessLockTest.setUpcs<tt|t|jD]}tj|rtj |ddq dS)NT) ignore_errors) rrtearDownreversedrospathexistsshutilrmtree)r a_dirr r rr 4s  zProcessLockTest.tearDowncstj|jdt}fddfdd}||z|d}|d|W| n| w|d}| d|dS) NlockcsVzt}td|_||tdWdSty*tdYdSw)Nwr) plInterProcessLockopenlockfilerrr"_exitr)my_lock) lock_filer rtry_lock>s   zEProcessLockTest.test_lock_acquire_release_file_lock..try_lockcsZg}t|D]}tjd}|||qg}|D] }|||jqt|S)N)target)rangemultiprocessingProcessstartappendjoinexitcodesum)countchildrenichild exit_codes)r2r rattempt_acquireHs   zLProcessLockTest.test_lock_acquire_release_file_lock..attempt_acquire r) r"r#r9rr+r, assertTrueacquire assertEqualreleaseassertNotEqual)r r(rAacquired_childrenr )r1r2r#test_lock_acquire_release_file_lock:s    z3ProcessLockTest.test_lock_acquire_release_file_lockcs<tttjjdfdd}|dS)Nz test-lock-1cs(ttjjdfdd}|S)Nz test-lock-2csSrr r )sentinelr r inner_lockdsz_ProcessLockTest.test_nested_synchronized_external_works..outer_lock..inner_lock)r+interprocess_lockedr"r#r9r)rLr 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 stj|dfdd}t}j|g}tdD]}t}|r,||qz ||Wt dqt dw|D]}t |d\}}|rR d|q@dS)Nr(c stag}tdD]}tj|d|}|t|dq d}|D]3}z,zt |tj tj B|d7}t |tj Wnt yLtdYnwW|q$|wd|WddS1siwYdS)N2zfile-%sr)rr*)r+r,r4r"r#r9r8r-fcntlflockLOCK_EXLOCK_NBLOCK_UNrr/closerF) handles_dirhandlesnr#r<handle lock_pathr r r lock_filesos$   "z.lock_filesrRr) r"r#r9rrrr8r4forkr/waitpidrF) r rr`rZr=r\pidr?statusr r^r_do_test_lock_externallyls$     z(ProcessLockTest._do_test_lock_externallycCs||jdSr)rerrr r rtest_lock_externallysz$ProcessLockTest.test_lock_externallycCst|j||jdSr)r"rmdirrrerr r r'test_lock_externally_lock_dir_not_exists z7ProcessLockTest.test_lock_externally_lock_dir_not_existcs2tjjdtfdd}|dS)Nr(cstjdSr)rDr"r#r$r r1r r rfoosz2ProcessLockTest.test_lock_file_exists..foo)r"r#r9rr+rM)r rjr rirtest_lock_file_existss z%ProcessLockTest.test_lock_file_existscCs0tj|jd}t|tj}|tj |j dSNr() r"r#r9rrrEBUSY assertRaises threading ThreadErrorrEr r1r(r r rtest_bad_acquires z ProcessLockTest.test_bad_acquirecCs.tj|jd}t|}|tj|j dSrl) r"r#r9rr+r,rnrorprGrqr r rtest_bad_releases z ProcessLockTest.test_bad_releasec Csvtj|jd}t}|rrt}tj|s0t|dkr%|dtdtj|rt d}t |d|_ t|dkrdz| |tdWn ty[Ynwt|dksC|dt|tjdSz=t d}t |d|_ d}|sz| d }Wn tyYnw|rWtd tddSWtd tddStd tdw) Nr(rCz(Timed out waiting for child to grab lockrrjr)z$Never caught expected lock exceptionFTg?)r"r#r9rratimer$failsleepr+r,r-r.rrrkillsignalSIGKILLr/)r r1rcr7lock1lock2 have_lockr r rtest_interprocess_locksR             z&ProcessLockTest.test_interprocess_lockc Cstj|jd}t|d }|dWdn1swYt|-t|}|| dWdn1s?wYWddSWddS1sWwYdS)Nz not-destroyedr)r) r"r#r9rr-writer+r,rFread)r r1fr r rtest_non_destructives    "z$ProcessLockTest.test_non_destructive)rrrrr rJrQrerfrhrkrrrsr}rrr r r rr.s  $/ 0r)rrTr5r"r%rxrrort fastenersrr+rr,rTestCaserr r r rs