a  ze9D@s ddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z mZmZmZmZddlmZddlmZddlmZddlmZmZmZmZmZmZmZddl m!Z!dd l"m#Z#m$Z$d Z%d Z&d Z'e(ed oe(ed Z)ddddddZ*ddddZ+ddddddZ,dddddd Z-Gd!d"d"Z.Gd#d$d$e Z/ere0Z1e2ed%e/fe2ed&e1fBZ3Gd'd(d(e4Z5Gd)d*d*e j6Z7d+d+d,d-d.Z8Gd/d0d0Z9d1d2d3d4d5Z:Gd6d7d7ej;Zd?Z>dS)@) annotationsN) NamedTupleNoReturnLiteralAny TYPE_CHECKING)support) Namespace)Regrtest)runtest is_failed TestResult InterruptedTimeout ChildErrorPROGRESS_MIN_TIME) setup_tests)format_duration print_warningg>@gr@setsidkillpgr r bool)resultnsreturncCs&t|trdS|jr"t||r"dSdS)NTF) isinstancerZfailfastr )rrrO/opt/bitninja-python-dojo/embedded/lib/python3.9/test/libregrtest/runtest_mp.py must_stop)s  rztuple[Namespace, str]rcCs$t|\}}tfi|}||fSN)jsonloadsr ) worker_argsns_dict test_namerrrrparse_worker_args1sr&strzsubprocess.Popen)testnamerrcCsxt|}||f}t|}tjgtdddd|}i}trNd|d<tj |ftj tj dt j dktj d|S) Nz-uz-mz test.regrtestz --worker-argsTstart_new_sessionnt)stdoutstderruniversal_newlines close_fdscwd)varsr!dumpssys executablerZargs_from_interpreter_flagsUSE_PROCESS_GROUP subprocessPopenPIPEosnameZSAVEDCWD)r(rr$r#cmdkwrrrrun_test_in_subprocess7s4 r<r)rr%rcCs<t|t||}tttj|tdddtddS)N)clsTflushr)rr printr!r1EncodeTestResultr2exit)rr%rrrrrun_tests_workerPs  rCc@s,eZdZddZddZddZddZd S) MultiprocessIteratorcCst|_||_dSr ) threadingLocklock tests_iter)selfrHrrr__init__as zMultiprocessIterator.__init__cCs|Sr rrIrrr__iter__eszMultiprocessIterator.__iter__cCsB|j(|jdurtt|jWdS1s40YdSr )rGrH StopIterationnextrKrrr__next__hs zMultiprocessIterator.__next__cCs0|jd|_Wdn1s"0YdSr )rGrHrKrrrstopnszMultiprocessIterator.stopN)__name__ __module__ __qualname__rJrLrOrPrrrrrD]srDc@s.eZdZUded<ded<ded<ded<dS)MultiprocessResultr rr'r+r, error_msgN)rQrRrS__annotations__rrrrrTss rTFTc@s eZdZdS) ExitThreadN)rQrRrSrrrrrWsrWcseZdZddddfdd Zddd d Zddd d Zddd dZd$dddddddZdddddZdddddZ ddddZ ddddZ d dd!d"d#Z Z S)%TestWorkerProcessintz'MultiprocessTestRunner'None) worker_idrunnerrcsZt||_|j|_|j|_|j|_|j|_|j|_d|_ d|_ d|_ d|_ d|_ dS)NF)superrJr[pendingoutputrworker_timeouttimeoutregrtestcurrent_test_name start_time_popen_killed_stopped)rIr[r\ __class__rrrJs zTestWorkerProcess.__init__r'rcCsd|jg}|r"|dn |d|j}|rF|d||j}|durt|j}|d|jj dt |fdd |S) NzTestWorkerProcess #runningstoppedztest=zpid=ztime=z<%s> ) r[is_aliveappendrcretime monotonicrdextendpidrjoin)rIinfotestpopendtrrr__repr__s   zTestWorkerProcess.__repr__c Cs|j}|durdS|jrdSd|_tr2|d}n|}td|tjddz"trft|jt j n| WnHt yYn8t y}z td|d|WYd}~n d}~00dS)NTz process groupzKill filer?zFailed to kill z: )rerfr4r@r2r,r8rrrsignalSIGKILLkillProcessLookupErrorOSErrorr)rIrvZwhatexcrrr_kills$   zTestWorkerProcess._killcCsd|_|dS)NT)rgrrKrrrrPszTestWorkerProcess.stopNr rT) test_resultr+r,rcCst|j|_t||||Sr )rorprd duration_secrT)rIrr+r,err_msgrrrmp_result_errorsz!TestWorkerProcess.mp_result_errorztuple[int, str, str])r%rcCs>t|_||_zt||j}d|_||_Wnd|_Yn0zz|jrX| t z|j |j d\}}|j }WnNtjy|jrt | d}d}}Yn.ty|jrt Yn0|}|}|||fWW|d|_d|_S| Yn0W|d|_d|_n|d|_d|_0dS)NFrar)rorprdrcr<rrfrergrrW communicatera returncoder5TimeoutExpiredrstriprstrip_wait_completed)rIr%rvr+r,retcoderrr _run_processsV       zTestWorkerProcess._run_processc Cs||\}}}|dur*|t|||Sd}|dkr@d|}nb|d\}}}|}|sbd}n@ztj|td}Wn,ty}zd|}WYd}~n d}~00|dur|t ||||St ||||S)Nrz Exit code %s zFailed to parse worker stdout)Z object_hookzFailed to parse worker JSON: %s) rrr rpartitionrr!r"decode_test_result ExceptionrrT) rIr%rr+r,r_rrrrr_runtests&  zTestWorkerProcess._runtestcCs|jszXzt|j}Wnty.YWqYn0||}|jd|ft|j|j r\WqWqt ytYqYqt y|jdt fYqYq0qdS)NFT)rgrNr^rMrr_putrrrrW BaseException traceback format_exc)rIr% mp_resultrrrrun#s     zTestWorkerProcess.runc Csv|j}|j|jz|tWnHtjtfyp}z*t d|dt td|WYd}~n d}~00dS)NzFailed to wait for z completion (timeout=z): ) rer+closer,wait JOIN_TIMEOUTr5rrrr)rIrvrrrrr6s   z!TestWorkerProcess._wait_completedfloat)rdrcCsd|d|sq`t|}|jd|dt||tkrtd|dt|q`qdS)Ng?z Waiting for z thread for zFailed to join z in ) rsrmrorprblogrrr)rIrdrwrrr wait_stoppedEs  zTestWorkerProcess.wait_stopped)rrN)rQrRrSrJrxrrPrrrrrr __classcell__rrrhrrXs ;rXzlist[TestWorkerProcess])workersrcCsNg}|D]@}|j}|sqt|j}|tkrd|t|f}||q|S)Nz%s (%s))rcrorprdrrrn)rrjworkerrcrwtextrrr get_running]s rc@steZdZdddddZddddZddd d Zd dd d ZdddddZdddddZddddZ dS)MultiprocessTestRunnerr rZrbrcCsj||_|jj|_|j|_t|_t|jj|_|jj durZt |jj d|jj d|_ nd|_ d|_ dS)Ng?i,) rbrrqueueQueuer_rDZtestsr^raminr`r)rIrbrrrrJks     zMultiprocessTestRunner.__init__rcs|fddtdjjdD_dtjd}jjrZ|dtjjtjf7}|jD] }| qjdS)Ncsg|]}t|qSr)rX).0indexrKrr |sz8MultiprocessTestRunner.start_workers..zRun tests in parallel using z child processesz" (timeout: %s, worker timeout: %s)) rangerZuse_mprlenrarr`rstart)rImsgrrrKr start_workers{s    z$MultiprocessTestRunner.start_workerscCs6t}|jD] }|q|jD]}||q"dSr )rorprrPr)rIrdrrrr stop_workerss    z#MultiprocessTestRunner.stop_workerszQueueOutput | NonecCstdd|jDsz5MultiprocessTestRunner._get_result..rrT)rBz running: %s, )anyrr_getrEmptyrraPROGRESS_UPDATE faulthandlerZdump_traceback_laterMAIN_PROCESS_TIMEOUTrpgorrs)rIZuse_faulthandlerrarjrrr _get_results$   z"MultiprocessTestRunner._get_resultrT)rrcCs|j}t|}|jdur(|d|j7}n$|jtkrL|jjsL|dt|j7}t|j }|rt|jjst|dd |7}|j |j |dS)Nz (%s)z -- running: %sr)rr'rUrrrrrrrrsrbZdisplay_progress test_index)rIrrrrjrrrdisplay_results   z%MultiprocessTestRunner.display_result QueueOutputr)itemrcCs|dr"|d}td|dS|jd7_|d}|j|j|||jrdt|jdd|jr|j j st|jt jddt |j|j rdSdS)Nrrzregrtest worker thread failed: Tr>ryF) rrrbZaccumulate_resultrrr+r@r,rrr2r)rIrrrrrr_process_results z&MultiprocessTestRunner._process_resultcCs|d|_ztz(|}|dur$q6||}|rq6qWn tyXtd|j_Yn0W|jj durpt |j |n(|jj durt |j |0dS)NrT)rrrrKeyboardInterruptr@rbZ interruptedrrarZcancel_dump_traceback_laterr^rPr)rIrrPrrr run_testss(      z MultiprocessTestRunner.run_testsN) rQrRrSrJrrrrrrrrrrrjs rr rZrcCst|dSr )rr)rbrrrrun_tests_multiprocesssrcs$eZdZdddfdd ZZS)rArdict[str, Any])orcs.t|tr"t|}|jj|d<|St|SNZ__test_result__)rr r0rirQr]default)rIrrrhrrrs   zEncodeTestResult.default)rQrRrSrrrrrhrrAsrArzTestResult | dict[str, Any])drcCsBd|vr |S|d}tD] }|j|kr|fi|SqdSr)popget_all_test_result_classesrQ)rcls_namer=rrrrs    rzset[type[TestResult]]cCsJd}th}t||krFt|}g}|D]}||q&||q |S)Nr)r rrq__subclasses__update)Z prev_countclassesZto_addr=rrrrs  r)?Z __future__rrr!r8rr{r5r2rErortypingrrrrrrurZtest.libregrtest.cmdliner Ztest.libregrtest.mainr Ztest.libregrtest.runtestr r r rrrrZtest.libregrtest.setuprZtest.libregrtest.utilsrrrrrhasattrr4rr&r<rCrDrTr'ZExcStrtuplerrrWThreadrXrrrZ JSONEncoderrArrrrrrsN    $   [ }