a ze!@sddlZddlZddlZddlmZddlZddlZddlZddlm Z dZ dZ dZ e ZddZGd d d ejZGd d d eZGd ddZGdddeZGddde jZGdddejZedkredS)N)support) lock_tests g{Gz?cCs6tjr2tt|Wdn1s(0YdSN)rverbose _print_mutexprint)argr D/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_thread.py verbose_printsr c@seZdZddZdS)BasicThreadTestcCsZt|_|jt|_t|_d|_d|_d|_t }|j t j g|RdSNr) thread allocate_lock done_mutexacquire running_mutex random_mutexcreatedrunning next_identrZthreading_setupZ addCleanupZthreading_cleanup)selfkeyr r r setUps    zBasicThreadTest.setUpN)__name__ __module__ __qualname__rr r r r rsrc@sVeZdZddZddZddZddZee j d vd d d Z d dZ ddZ dS)ThreadRunningTestscCst|jZ|jd7_td|jt|j|jf|jd7_|jd7_Wdn1sf0YdS)Nzcreating task %s)rrr rstart_new_threadtaskrrrr r r newtask)s zThreadRunningTests.newtaskcCs|jtd}Wdn1s(0Ytd|t|dft|td||j<|jd8_|jt kr|jdkr|j Wdn1s0YdS)N@task %s will run for %sus.Az task %s doner r) rrandomr roundtimesleeprrrNUMTASKSrrelease)ridentdelayr r r r"1s*  zThreadRunningTests.taskcCs\t@ttD] }|qtd|jtdWdn1sN0YdS)Nz waiting for tasks to complete...all tasks done)rwait_threads_exitranger,r$r rrrir r r test_starting_threads<s     z(ThreadRunningTests.test_starting_threadscCs2|tddtd|tdddS)Nrzinitial stack size is not 0zstack_size not reset to default) assertEqualr stack_sizer#r r r test_stack_sizeEs z"ThreadRunningTests.test_stack_size)ntposixztest meant for nt and posixc CsztdWn6ty(tdYntjyD|dYn0d}dD]0}t||t|||td|qNdD]t}td|d |_d |_t @t t D] }| qtd |jtd Wdq1s0Yqtd dS) Niz3caught expected ValueError setting stack_size(4096)z4platform does not support changing thread stack sizez&stack_size(%d) failed - should succeed)rzsuccessfully set stack_size(%d))r;r<ztrying stack_size = (%d)rz!waiting for all tasks to completer0)rr7 ValueErrorr errorZskipTestr6rrrr1r2r,r$rr)rZfail_msgZtssr4r r r test_nt_and_posix_stack_sizeLs,        (z/ThreadRunningTests.test_nt_and_posix_stack_sizecst}tgfdd}tt|dsPtt q@| t|d gt |fdd}~stt tq| t|Wdn1s0YdS)NcsddSr)appendrr-r )mutstartedr r r"rs z,ThreadRunningTests.test__count..taskr r cs dSr)r@)_)doner r z0ThreadRunningTests.test__count..)r_countrrrr1r!r*r+ POLL_SLEEPr6r-weakrefref gc_collect)rZorigr"wrr )rDrArBr test__countks$     zThreadRunningTests.test__countc sfdd}tt}t,t|dWdn1sX0Y|t|j j d| |j j |||j j d||j jWdn1s0YdS)NcstddS)N task failed)r-r=r rBr r r"sz:ThreadRunningTests.test_unraisable_exception..taskr rNz&Exception ignored in thread started by)rrrZcatch_unraisable_exceptionr1rr!r6strZ unraisable exc_valueZassertIsobjecterr_msgassertIsNotNone exc_traceback)rr"cmr rOr test_unraisable_exceptions    & z,ThreadRunningTests.test_unraisable_exceptionN)rrrr$r"r5r8unittestZskipIfosnamer?rMrWr r r r r's   rc@seZdZddZddZdS)BarriercCs.||_d|_t|_t|_|jdSr) num_threadswaitingrr checkin_mutexcheckout_mutexr)rr\r r r __init__s   zBarrier.__init__cCs|j|jd|_|j|jkr<|jd|_|jdS|j|j|jd|_|jdkrt|jdS|jdS)Nr r)r^rr]r\r_r-r#r r r enters          z Barrier.enterN)rrrr`rar r r r r[sr[c@seZdZddZddZdS) BarrierTestcCsttXtt|_t|_ttD]}t|j |fq"t d|j t dWdn1sf0YdS)Nzwaiting for tasks to endz tasks done) rr1r[r,barrr2rr!task2r rrr3r r r test_barriers    zBarrierTest.test_barrierc CsttD]}|dkrd}n2|jtd}Wdn1sB0Ytd|t|dft|td||f|j td|q|j (|j d8_ |j dk}Wdn1s0Y|r|j dS)Nrr%r&r'ztask %s entering %sztask %s leaving barrierr )r2NUMTRIPSrr(r r)r*r+rcrarrrr-)rr.r4r/finishedr r r rds" *  (zBarrierTest.task2N)rrrrerdr r r r rbs rbc@seZdZejZdS) LockTestsN)rrrrrZlocktyper r r r rhsrhc@s<eZdZddZeeeddej ddZ ddZ d S) TestForkInThreadcCst\|_|_dSr)rYpiperead_fdwrite_fdr#r r r rszTestForkInThread.setUpforkz need os.forkcsdfdd}tFt||j|jf|t|jddt |jWdn1sd0Y| tj dddS)Nc sFtrdSz$t|t|dWtdn td0dS)NOKr)rYrmclosewrite_exit)rkrlpidr r fork_threads z7TestForkInThread.test_forkinthread..fork_threadrnr)exitcode) rr1rr!rkrlr6rYreadrorTZ wait_process)rrtr rrr test_forkinthreads  * z"TestForkInThread.test_forkinthreadcCsLzt|jWnty"Yn0zt|jWntyFYn0dSr)rYrorkOSErrorrlr#r r r tearDowns  zTestForkInThread.tearDownN) rrrrrXZ skipUnlesshasattrrYrZ reap_threadsrxrzr r r r ris  ri__main__)rYrXr(testr_threadrr*rIrr,rfrHrrr ZTestCaserrr[rbrhrirmainr r r r s(  u%-