hcFZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z m Z mZmZmZddlmZddlmZddlmZddlmZddlmZmZmZmZmZmZm Z ddl!m"Z"dd l#m$Z$m%Z%ej&d krddl'Z'd Z(e(e ksJd Z)e)e(ksJd Z*e+ed o e+edZ,dedede-fdZ.de/ee0ffdZ1de0dededej2fdZ3dede0de fdZ4GddZ5Gdde Z6e0Z7e/ede6fe/ede7fzZ8Gdd e9Z:Gd!d"ej;ZGd%d&Z?d'eddfd(Z@Gd)d*ejAZBd+eCe0efdeeCe0efzfd,ZDdeEeFefd-ZGdS).N) NamedTupleNoReturnLiteralAnyTextIO)support) os_helper) Namespace)Regrtest)runtest is_failed TestResult InterruptedTimeout ChildErrorPROGRESS_MIN_TIME) setup_tests)format_duration print_warningwin32g>@gr@setsidkillpgresultnsreturncft|trdS|jrt||rdSdS)NTF) isinstancerfailfastr )rrs 2/usr/lib/python3.11/test/libregrtest/runtest_mp.py must_stopr ,s>&+&&t {y,,t 5cPtj|\}}tdi|}||fS)N)jsonloadsr ) worker_argsns_dict test_namers rparse_worker_argsr)4s3K00GY   W  B  ?r!testname stdout_fhc^t|}||f}tj|}|j|j}n tjg}g|t jdddd|}t||dtj dktj }trd|d<tj|fi|S) Nz-uz-mz test.regrtestz --worker-argsTnt)stdoutstderrtext close_fdscwdstart_new_session)varsr$dumpspythonsys executablerargs_from_interpreter_flagsdictosnamer SAVEDCWDUSE_PROCESS_GROUP subprocessPopen)r*rr+r'r&r8cmdkws rrun_test_in_subprocessrC:s2hhGH%K*[))K yY n%  )J )<>> )  )  )  )  )( )C  7d?      B'"&   C & &2 & &&r!r(ct|t||}tttj|t dt jddS)N)clsTflushr)rr printr$r5EncodeTestResultr7exit)rr(rs rrun_tests_workerrKWs[OOO R # #F GGG $*V!1 2 2 2$????HQKKKKKr!c*eZdZdZdZdZdZdZdS)MultiprocessIteratorz8A thread-safe iterator over tests for multiprocess mode.cDtj|_||_dSN) threadingLocklock tests_iter)selfrSs r__init__zMultiprocessIterator.__init__hsN$$ $r!c|SrOr#rTs r__iter__zMultiprocessIterator.__iter__ls r!c|j5|jtt|jcdddS#1swxYwYdSrO)rRrS StopIterationnextrWs r__next__zMultiprocessIterator.__next__os Y ) )&##(( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s "7;;cT|j5d|_ddddS#1swxYwYdSrO)rRrSrWs rstopzMultiprocessIterator.stopusu Y # #"DO # # # # # # # # # # # # # # # # # #s !!N)__name__ __module__ __qualname____doc__rUrXr\r^r#r!rrMrMdsVBB%%%))) #####r!rMc.eZdZUeed<eed<eed<dS)MultiprocessResultrr. error_msgN)r_r`rar__annotations__strr#r!rrdrdzs.  KKKNNNNNr!rdFTceZdZdS) ExitThreadN)r_r`rar#r!rririsDr!riceZdZdeddddffd ZdefdZddZdd Z dd e d ede fd Z dede defdZ dede fdZddZddZdeddfdZxZS)TestWorkerProcess worker_idrunnerMultiprocessTestRunnerrNct||_|j|_|j|_|j|_|j|_|j|_d|_ d|_ d|_ d|_ d|_ dS)NF)superrUrlpendingoutputrworker_timeouttimeoutregrtestcurrent_test_name start_time_popen_killed_stopped)rTrlrm __class__s rrUzTestWorkerProcess.__init__sv "~ m ),  !%   r!cd|jg}|r|dn|d|j}|r|d||j}|Ot j|jz }|d|jj dt|fdd |zS) NzTestWorkerProcess #runningstoppedztest=zpid=ztime=z<%s> ) rlis_aliveappendrvrxtime monotonicrwextendpidrjoin)rTinfotestpopendts r__repr__zTestWorkerProcess.__repr__s6dn667 ==?? # KK " " " " KK " " "%  ( KK ' ' '   !!DO3B KK1 116!4!4668 9 9 9&&r!c|j}|dS|jrdSd|_tr|d}n|}td|tjd tr&t j|jtj dS| dS#t$rYdSt$r }td|d|Yd}~dSd}~wwxYw)NTz process groupzKill )filerGzFailed to kill z: )rxryr>rHr7r/r;rrsignalSIGKILLkillProcessLookupErrorOSErrorr)rTrwhatexcs r_killzTestWorkerProcess._kills   = F <  F  ***DD9D ndnn3:T:::: =   %)V^44444 !    DD = = = ;D;;C;; < < < < < < < < < =s$ +B9B C C%CCc<d|_|dS)NT)rzrrWs rr^zTestWorkerProcess.stops  r! test_resultr.cdtj|jz |_t |||SrO)rrrw duration_secrd)rTrr.err_msgs rmp_result_errorz!TestWorkerProcess.mp_result_errors- $(>#3#3do#E  !+vw???r!r(r+ctj|_||_ t ||j|}d|_||_n #d|_xYw |jr| t | |j }|J|| d|_d|_S#tj$r'|jrt| d}Ynt $r|jrtwxYwn#| xYw | d|_d|_dS#| d|_d|_wxYw)NFrt)rrrwrvrCrryrxrzrriwaitrt_wait_completedr?TimeoutExpiredr)rTr(r+rretcodes r _run_processzTestWorkerProcess._run_processs.**!* *9dgyIIE DLDKK %)D " ' *} !    **T\*::***2  " " "DK%)D " "5,   =%%$    =%%$     JJLLL   " " "DK%)D " " "  " " "DK%)D " ) ) ) )sG$A A"D 7 B::3D-D /DD E D##E $E/ctjdkrtj}ntjj}t jd|5}|||}| d| }dddn #1swxYwY|#| t||Sd}|dkrd|z}nk|d\}}}|}|sd}n9 t!j|t$}n#t&$r} d | z}Yd} ~ nd} ~ wwxYw|$| t)|||St+|||S) Nrzw+)encodingrz Exit code %s zFailed to parse worker stdout) object_hookzFailed to parse worker JSON: %s)r7platformlocale getencodingr.rtempfile TemporaryFilerseekreadstriprr rpartitionrstripr$r%decode_test_result Exceptionrrd) rTr(rr+rr.r_rrs r_runtestzTestWorkerProcess._runtests <7 " ")++HHz*H #D8 < < < . '' 9==G NN1   ^^%%++--F  . . . . . . . . . . . . . . . ?'' (:(:FCC C a<<$w.GG & 1 1$ 7 7 FAv]]__F F9F!Z#@#@D  #'D  r!c|fdtdjjdzD_dt jd}jjr5|dt jjdt jdz }|jD]}| dS)Nc0g|]}t|Sr#)rk).0indexrTs r z8MultiprocessTestRunner.start_workers..s9CCC!*%66CCCr!zRun tests in parallel using z child processesz (timeout: z, worker timeout: r) rangeruse_mprlenrtrrsrstart)rTmsgrs` r start_workersz$MultiprocessTestRunner.start_workerssCCCC%*1dgnq.@%A%ACCC PS->->PPP 7? > C&tw7777&t':;;;;= >C  l  F LLNNNN  r!ctj}|jD]}||jD]}||dSrO)rrrr^r)rTrwrs r stop_workersz#MultiprocessTestRunner.stop_workerssa^%% l  F KKMMMMl , ,F    + + + + , ,r!c>|jjdu}t}td|jDr|rt jtd |j |S#tj $rYnwxYwt|j}|r7|jj s+|dd|ztd|jD |j dS#tj $rYdSwxYw)Nc3>K|]}|VdSrO)r)rrs r z5MultiprocessTestRunner._get_result..s,??&//##??????r!T)rJrz running: %s, r)rrtPROGRESS_UPDATEanyr faulthandlerdump_traceback_laterMAIN_PROCESS_TIMEOUTrrgetrEmptyrpgorr)rTuse_faulthandlerrtr}s r _get_resultz"MultiprocessTestRunner._get_resultsG GO47!??$,????? = =12F7;==== {w777;    "$,//G =tw{ =7););;<<<??$,????? =" ;??1?-- -{   44 s$A--A?>A?.D DDrc|j}t|}|j|d|jzz }n6|jtkr&|jjs|dt|jzz }t|j }|r'|jjs|dd |zz }|j |j |dS)Nz (%s)z -- running: %sr)rrgrerrrrrrrrrudisplay_progress test_index)rTrrr0r}s rdisplay_resultz%MultiprocessTestRunner.display_results!6{{   * Gi11 1DD!%666tw{6 Gof.ABBB BDdl++  ;47; ; % '(:(:: :D &&t=====r!itemcX|dr|d}td|dS|xjdz c_|d}|j|j|||jrt|jdt|j|j rdSdS)z&Returns True if test runner must stop.rrzregrtest worker thread failed: TrFF) rrruaccumulate_resultrrr.rHr r)rTrrrs r_process_resultz&MultiprocessTestRunner._process_results 7 aJ HJHH I I I4 1G  '' (8999 I&&&   0 )"$ / / / / Y%tw / / 4ur!c0|d|_ |}|n||}|rn0n*#t$rt d|j_YnwxYw|jj tj |j |dS#|jj tj |j |wxYw)NrT)rrrrKeyboardInterruptrHru interruptedrrtrcancel_dump_traceback_laterrqr^r)rTrr^s r run_testsz MultiprocessTestRunner.run_testss+   ''))<++D11 ! - - - GGG(,DM % % % -w*8::: L              w*8::: L            s*1AC$A63C5A66CADr)r_r`rar rUrr QueueOutputrrdrboolrrr#r!rrnrnssd    ,,,,[4/8 >(: >t > > > >KD*      r!rnrucHt|dSrO)rnr)rus rrun_tests_multiprocessrs"8$$..00000r!c<eZdZdZdedeeefffd ZxZS)rIz7Encode a TestResult (sub)class object into a JSON dict.orct|tr t|}|jj|d<|St |S)N__test_result__)rrr4r{r_rpdefault)rTrrr{s rrzEncodeTestResult.defaultsK a $ $ !WWF() (rr tuplergr)r@rCrKrMrdExcStrrrriThreadrklistrrnr JSONEncoderrIr:rsettyperr#r!rrs   ==============""""""......******YYYYYYYYYYYYYYYYYY......AAAAAAAA<7MMM+++++  .... WR**Dwwr8/D/DjiDeIsN&; 'S'i'F'zO_'''':  s x    ########, GEN$667% v@U:VV         ZZZZZ (ZZZz /0 T:K5L    z z z z z z z z z1X1$1111 " " " " "t' " " " $sCx. Z$sCx.-H     Sj)9%:      r!