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(0YdS)z2Helper function for printing out debugging output.N)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 r sr c@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 donerr) 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 completer/)rr6 ValueErrorr errorZskipTestr5rrrr0r1r+r#rr)rZfail_msgZtssr3r 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)NcsddSN)appendrr,r )mutstartedr r r!rs z,ThreadRunningTests.test__count..taskr rcs dSr?)r@)_)doner r z0ThreadRunningTests.test__count..)r_countrrrr0r r)r* POLL_SLEEPr5r,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_exceptionr0rr r5strZ unraisable exc_valueZassertIsobjecterr_msgassertIsNotNone exc_traceback)rr!cmr rOr test_unraisable_exceptions    & z,ThreadRunningTests.test_unraisable_exceptionN)rrrr#r!r4r7unittestZskipIfosnamer>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)Nrr)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) rr0r[r+barrr1rr task2r rrr2r 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)r1NUMTRIPSrr'r r(r)r*rcrarrrr,)rr-r3r.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) rr0rr rkrlr5rYreadrorTZ 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 ZTestCaser rr[rbrhrirmainr r r r s(  u%-