a 4dgx@sddlZddlZddlZddlmZmZddlZddlZddlZddl m Z e e eddZ ddZGdd d eZGd d d ejZGd d d eZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZdS)N)start_new_thread TIMEOUT_MAX)supportforkz9platform doesn't support fork (no _at_fork_reinit method)cCstddS)N{Gz?)timesleepr r +/usr/local/lib/python3.9/test/lock_tests.py_waitsr c@s.eZdZd ddZddZddZdd Zd S) BunchFcsx_|_g_g_| _t_jfdd}zt |D]}t |dqLWnd_Yn0dS)Nc sZt}j|z$Wj|jsVtq*nj|jsTtqF0dSN) threading get_identstartedappendfinished _can_exitr )tidfselfr r task+s   zBunch.__init__..taskr T) rnrrrrwait_threads_exit wait_thread __enter__ranger)rrrZwait_before_exitrir rr __init__s    zBunch.__init__cCst|j|jkrtqdSr )lenrrr rr r r wait_for_started<szBunch.wait_for_startedcCs,t|j|jkrtq|jddddSr )r rrr r__exit__r!r r r wait_for_finished@szBunch.wait_for_finishedcCs d|_dSNT)rr!r r r do_finishFszBunch.do_finishN)F)__name__ __module__ __qualname__rr"r$r&r r r r r s r c@s$eZdZddZddZddZdS) BaseTestCasecCst|_dSr )rZthreading_setup_threadsr!r r r setUpKszBaseTestCase.setUpcCstj|jtdSr )rZthreading_cleanupr+ reap_childrenr!r r r tearDownNs zBaseTestCase.tearDowncCs$|||d|||ddS)Ng333333?g$@)ZassertGreaterEqual assertLess)ractualZexpectedr r r assertTimeoutRszBaseTestCase.assertTimeoutN)r'r(r)r,r.r1r r r r r*Jsr*c@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS) BaseLockTestscCs|}~dSr )locktyperlockr r r test_constructor`szBaseLockTests.test_constructorcCs|}|t|d~dS)Nz)r3 assertRegexreprr4r r r test_reprdszBaseLockTests.test_reprcCs&|}||t|d~dS)Nz)r3acquirer7r8r4r r r test_locked_repriszBaseLockTests.test_locked_reprcCs|}|~dSr )r3r:r4r r r test_acquire_destroyosz"BaseLockTests.test_acquire_destroycCs|}||~dSr r3r:releaser4r r r test_acquire_releasetsz"BaseLockTests.test_acquire_releasecCs$|}||d|dSNF)r3 assertTruer:r>r4r r r test_try_acquirezszBaseLockTests.test_try_acquirecsJ|gfdd}t|d|ddS)NcsddSr@rr:r r5resultr r rsz3BaseLockTests.test_try_acquire_contended..fr)r3r:r r$ assertFalser>rrr rDr test_try_acquire_contendedsz(BaseLockTests.test_try_acquire_contendedcsp|d}fdd}t||}|t|t|jd| |t|j|dS)NcsdSr r:r>r r5r r rsz/BaseLockTests.test_acquire_contended..fr) r3r:r r"r assertEqualr rr>r$rNrbr rLr test_acquire_contendeds  z$BaseLockTests.test_acquire_contendedcsV|fdd}dfdd }|t|d|t|tt|ddS)NcsdSr rKr rLr r rsz"BaseLockTests.test_with..fcs4|dur|Wdn1s&0YdSr r errrLr r _withsz&BaseLockTests.test_with.._withrF)N)r3r r$ assertRaises TypeError)rrrTr rLr test_withs zBaseLockTests.test_withcs`|fdd}tt}t|dtt|kr\td||ttdS)NcsdSr rKr rLr r rsz)BaseLockTests.test_thread_leak..fg?) r3r r enumerater r$rrrM)rrrr rLr test_thread_leaks   zBaseLockTests.test_thread_leakcs||tjdd|jtjdd|jtjdd|jtjtddjtdt}| jddt}| ||dgfdd}t |d | d |dd dS) NFrFitimeoutg}Ô%ITrJcs4t}jddt}||dS)N?r[)r monotonicrr:)t1t2r5resultsr r rsz%BaseLockTests.test_timeout..frr])r3rU ValueErrorr: OverflowErrorrr>rr^rAr/r r$rGr1)rr_r`rr rar test_timeouts  zBaseLockTests.test_timeoutcCs"|}t|}||dSr )r3weakrefrefZassertIsNotNonerr5rgr r r test_weakref_existss z!BaseLockTests.test_weakref_existscCs$|}t|}~||dSr )r3rfrgZ assertIsNonerhr r r test_weakref_deleteds z"BaseLockTests.test_weakref_deletedN)r'r(r)r6r9r;r<r?rBrIrQrWrZrerirjr r r r r2[s r2c@s0eZdZddZddZddZeddZd S) LockTestscs|gfdd}tpt|dtdkrBtq.t|tdtdkrttq`|tdWdn1s0YdS)Ncs(dddSr r:rr r5Zphaser r rs z#LockTests.test_reacquire..fr rrF)r3rrrr r rMr>rHr rmr test_reacquires    zLockTests.test_reacquirecsB|fdd}t|d}|dS)Ncs dSr )r>r rLr r rsz*LockTests.test_different_thread..frF)r3r:r r$r>rrrPr rLr test_different_threads  zLockTests.test_different_threadcCsN|}|||jdd|||||jdddS)Nrr[F)blocking)r3r:rGr>lockedrAr4r r r test_state_after_timeouts z"LockTests.test_state_after_timeoutcCsDdd}|}||||}||||dS)NcSs||dSr rKrLr r r use_locksz/LockTests.test_at_fork_reinit..use_lock)r3_at_fork_reinitr:)rrur5Zlock2r r r test_at_fork_reinitszLockTests.test_at_fork_reinitN)r'r(r)rorqrt requires_forkrwr r r r rks   rkc@s4eZdZddZddZddZddZd d Zd S) RLockTestscCs<|}||||||dSr r=r4r r r ro*szRLockTests.test_reacquirecCsX|}|t|j|||||||t|jdSr )r3rU RuntimeErrorr>r:r4r r r test_release_unacquired3sz"RLockTests.test_release_unacquiredcCsX|}|t|j|||||||t|jdSr )r3rUrz _release_saver:r>r4r r r test_release_save_unacquired?sz'RLockTests.test_release_save_unacquiredcsR|fdd}t|dd}z|tjW|n |0|dS)Ncs dSr )r:r rLr r rNsz+RLockTests.test_different_thread..frFT)r3r rUrzr>r&r$rpr rLr rqKs  z RLockTests.test_different_threadcs||||gfdd}t|d|d||dS)NcsdSr )r _is_ownedr rDr r r_sz$RLockTests.test__is_owned..frFr)r3rGr~r:rAr r$r>rHr rDr test__is_ownedWszRLockTests.test__is_ownedN)r'r(r)ror{r}rqrr r r r ry&s     ryc@s@eZdZddZddZddZddZd d Zed d Z d S) EventTestscCsr|}||||||||||||||dSr ) eventtyperGis_setsetrAclearrevtr r r test_is_setnszEventTests.test_is_setcs|d}ggfdd}t||}|t|td||dg||dg|dS)NrJcs dSr rwaitr rresults1results2r r rsz#EventTests._check_notify..frT)r r"r rMr rr$)rrrOrrPr rr _check_notifyzs zEventTests._check_notifycCs0|}||||||dSr )rrrrrr r r test_notifys  zEventTests.test_notifycs|ggd}fdd}t|||dg|D]\}}||||dqHggt|||dg|D]\}}||qdS)NrJcs@dt}d}t}|||fdS)Ngr])rrrr^)r_rr`rr r rs  z"EventTests.test_timeout..fFr]T)rr r$rMrGr1rrA)rrOrrdtr rr res"   zEventTests.test_timeoutcsn|gdd}fdd}t||}|t||dg|dS)Ng?rJcsddSNrr rrbr\r r rsz(EventTests.test_set_and_clear..fT) rr r"rrrrr$rMrNr rr test_set_and_clears  zEventTests.test_set_and_clearcCs|}|j"||jdWdn1s60Y||j"||jdWdn1sv0YdSr@)r_condrGr:rvrr r r rws 0zEventTests.test_at_fork_reinitN) r'r(r)rrrrerrxrwr r r r ris rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ConditionTestscCs|}||||t}||}|||d|||d||d|| ||dWdn1s0YdSr@)condtyper:r>rLockrGrA)rcondr5r r r test_acquires zConditionTests.test_acquirecCs|}|t|jdSr )rrUrzrrrr r r test_unacquired_waitsz#ConditionTests.test_unacquired_waitcCs|}|t|jdSr )rrUrznotifyrr r r test_unacquired_notifysz%ConditionTests.test_unacquired_notifycsd}gggdfdd}t||}|tdkrNtq:|gdtdtdkrtq|dgd|gtdkrtqdtdttd krtq|dgdd gd|d gdtdkrTtq< tdtdkrtqv|dgdd gd|d gdd gd| dS) NrJrcsd}|f}|fdSr )r:rrr>rEr phase_numreadyrrr r rs  z'ConditionTests._check_notify..frF)TrFrn)Trn)Tr) r r"r r rrMr:rr> notify_allr$)rrrOrrPr rr rsX           zConditionTests._check_notifycCs |}||||dSr )rrrr r r r2s zConditionTests.test_notifycsd|gd}fdd}t|||t|D]\}}||d||q@dS)NrJcs@t}d}t}|||fdS)Nr])r:rr^rr>r)r_rEr`rrbr r r<s  z&ConditionTests.test_timeout..fr])rr r$rMr r1rG)rrOrrrEr rr re8s  zConditionTests.test_timeoutc sdfdd}t|d}|tdD]B}td d7Wdq61sn0Yq6|dS)NrcsP8fdd}|dWdn1sB0YdS)NcsdkSrr r stater r Sz8ConditionTests.test_waitfor..f..r)wait_forrArMrrrrr r rQs z&ConditionTests.test_waitfor..frFrr)rr r"rrrrr$rrrPrr rr test_waitforNs   (zConditionTests.test_waitforc sdgfdd}t|d}|tdD]B}td d7Wdq<1st0Yq<|t ddS)NrcsrZt}jfdddd}t|}||ddWdn1sd0YdS)NcsdkSrr r rr r rfrz@ConditionTests.test_waitfor_timeout..f..g?r[)rr^rrGr1r)rrErrrsuccessr r rcs   z.ConditionTests.test_waitfor_timeout..frFrr) rr r"rrrrr$rMr rr rr test_waitfor_timeout_s   (z#ConditionTests.test_waitfor_timeoutN) r'r(r)rrrrrrerrr r r r rsJrc@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)BaseSemaphoreTestscCs,|jt|jdd|jt|jtj ddS)N)value)rUrcsemtypesysmaxsizer!r r r r6|sz#BaseSemaphoreTests.test_constructorcCsH|d}|||d}||||dS)NrFrn)rr:r>rsemr r r rs  zBaseSemaphoreTests.test_acquirecCs|}|~dSr )rr:rr r r r<sz'BaseSemaphoreTests.test_acquire_destroycst|dd}gggdfdd}t|d}|ttdkrhtqL|dgddtdD] }qttdkrtq|t dgddgdd tdD] }qttd krtq|t dgddgdd gd| d | |d gd dS)N rcs4dSr rCr rrrrZ sem_resultsr r rs z4BaseSemaphoreTests.test_acquire_contended..frF rnFT) rr:r r"r r rMrr>sortedrGr$)rrOrrPrr rr rQs:    $  .z)BaseSemaphoreTests.test_acquire_contendedcs>|dggdfdd}t|d}|ttdkr^tqB|dgdddttdkrtq|tdgddgdd dttd krtq|tdgddgdd gd| d | dS) Nrrcs(dSr rlr rrrrr r rs z/BaseSemaphoreTests.test_multirelease..frrrFrrnrF) rr:r r"r r rMr>rrGr$rpr rr test_multireleases0   $ .z$BaseSemaphoreTests.test_multireleasecCsV|d}||d||d||d|||ddS)NrnF)rrAr:rGr>rr r r rBs  z#BaseSemaphoreTests.test_try_acquirecsV|dgfdd}t|d|tdgddgddS) Nrcs$dddSr@rCr rbrr r rsz8BaseSemaphoreTests.test_try_acquire_contended..frJFrTr)rr:r r$rMrrHr rr rIs  z-BaseSemaphoreTests.test_try_acquire_contendedcCs|d}|jt|jddd||jdd||jdd||jdd|||jddt}||jddt|}| |ddS)NrnF?r[g{Gzt?r]) rrUrcr:rArGr>rr^r1)rrtrr r r test_acquire_timeouts  z'BaseSemaphoreTests.test_acquire_timeoutcsT|fdd}t|d}|t||j|dS)NcsdSr rKr rr r rsz0BaseSemaphoreTests.test_default_value..frF) rr:r r"r rGrr>r$rpr rr test_default_values   z%BaseSemaphoreTests.test_default_valuecsbddfdd }|dt|tddS)Nrnc s|dd(d|r<|Wdn1sP0YWdn1sn0YdSr@)rAr:r>rGrRrr r rTsz+BaseSemaphoreTests.test_with.._withF)N)rrAr:r>rUrV)rrTr rr rWs zBaseSemaphoreTests.test_withN) r'r(r)r6rr<rQrrBrIrrrWr r r r rws %   rc@seZdZddZdS)SemaphoreTestscCs.|d}||||dSNrF)rr>r:rr r r r{s  z&SemaphoreTests.test_release_unacquiredNr'r(r)r{r r r r rsrc@seZdZddZdS)BoundedSemaphoreTestscCs8|}|t|j|||t|jdSr )rrUrcr>r:rr r r r{(s z-BoundedSemaphoreTests.test_release_unacquiredNrr r r r r#src@seZdZdZdZddZddZddZd d Zd!d d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd S)" BarrierTestsrJg@cCs|j|j|jd|_dS)Nr[) barriertyperOdefaultTimeoutbarrierr!r r r r,8szBarrierTests.setUpcCs|jdSr )rabortr!r r r r.:szBarrierTests.tearDowncCs"t||jd}||dSr)r rOr$rpr r r run_threads=szBarrierTests.run_threadscCs|jj}|||jt|D]h}|dd|t|d|||j|dd|t|d|d||jq||jjd| |jj dS)NrTrF) rpartiesrMrOrrr r n_waitingrGbroken)rrbrmrr r r multipassBs   zBarrierTests.multipassrFcs&gggfdd}|dS)NcsdSr )rr passesrbrr r rTsz$BarrierTests.test_barrier..fr)rrrr rr test_barrierOszBarrierTests.test_barriercCs |dS)Nr)rr!r r r test_barrier_10XszBarrierTests.test_barrier_10cs:gfdd}|tttjdS)Ncsj}|dSr )rrr)rrbrr r rcs z(BarrierTests.test_wait_return..f)rrMsumrrOrHr rr test_wait_return^s zBarrierTests.test_wait_returncs<gfdd}j|fdd}|dS)NcsddSr%)rr )rbr r actionosz(BarrierTests.test_action..actioncstddSr)rrMr r rrbrr r rrsz#BarrierTests.test_action..frrOr)rrrr rr test_actionjs  zBarrierTests.test_actioncsZggfdd}|tdtjdjjdS)Ncsrz4j}|jdkrtjdWn8tjyRdYntyljYn0dSNrnT)rrrOrzrrBrokenBarrierErrorrrrrrr r r~s    z"BarrierTests.test_abort..frrF)rrMr rOrArrrHr rr test_abortxs zBarrierTests.test_abortcsdgggfdd}|tdtjdtjdS)Ncsj}|jdkrBjjjdkr6tdqjn8zjdWntj yxdYn0jddS)NrnrFgMbP?T) rrrOrrrresetrrrrrrresults3rr r rs     z"BarrierTests.test_reset..frrF)rrMr rOrHr rr test_resets zBarrierTests.test_resetcsrgggjfdd}|tdtjdtjdS)Ncsz4j}|jdkrtjdWn8tjyRdYntyljYn0jdkrjjddSr) rrrOrzrrrrrrZbarrier2rrrrr r rs       z,BarrierTests.test_abort_and_reset..frrF)rrOrrMr rHr rr test_abort_and_resets  z!BarrierTests.test_abort_and_resetcsfdd}|dS)Ncs:j}|jdkr"tdtjjjddS)Nrnrr])rrrOrrrUrrrr!r r rs   z$BarrierTests.test_timeout..frrHr r!r res zBarrierTests.test_timeoutcs,jjddfdd}|dS)Ng333333?r[cs4}|jdkr tdtjjdS)Nrnr)rrOrrrUrrrrrr r rs z,BarrierTests.test_default_timeout..frrHr rr test_default_timeoutsz!BarrierTests.test_default_timeoutcCs|d}||dSr)rr)rrPr r r test_single_threads zBarrierTests.test_single_threadN)rF)r'r(r)rOrr,r.rrrrrrrrrrerrr r r r r1s   "r)osrr_threadrrrZunittestrftestrZ skipUnlesshasattrrxr objectr ZTestCaser*r2rkryrrrrrrr r r r s2  1DC_0