h}h(ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlmZddlm Z ddl!m"Z"m#Z#m$Z$m%Z%ddl&m'Z'ddl(m)Z)dd l(m*Z*d Z+Gd d Z,dd Z-dS)N) _parse_args) findtestsruntestget_abs_module is_failedSTDTESTSNOTTESTSPROGRESS_MIN_TIMEPassedFailed EnvChangedSkippedResourceDenied Interrupted ChildError DidNotRun) setup_tests)setup_pgo_tests)removepycountformat_duration printlist)support) os_helper)threading_helperg^@ceZdZdZdZdZddZd dZdZd Z d Z d Z d Z d Z dZdZdZdZdZdZdZdZdZdZdZdZdZd!dZdZdZdS)"RegrtestaaExecute a test suite. This also parses command-line options and modifies its behavior accordingly. tests -- a list of strings containing test names (optional) testdir -- the directory in which to look for tests (optional) Users other than the Python test suite will certainly want to specify testdir; if it's omitted, the directory containing the Python test suite is searched for. If the tests argument is omitted, the tests listed on the command-line will be used. If that's empty, too, then all *.py files beginning with test_ will be used. The other default arguments (verbose, quiet, exclude, single, randomize, use_resources, trace, coverdir, print_slow, and random_seed) allow programmers calling main() directly to set the values that would normally be set by flags on the command line. cxd|_g|_g|_g|_g|_g|_g|_g|_g|_g|_ g|_ d|_ d|_ g|_ d|_tj|_d|_d|_d|_d|_d|_d|_d|_d|_dS)NF)nstestsselectedgoodbadskippedresource_deniedsenvironment_changed run_no_tests need_rerunrerun first_result interrupted test_timestracertime monotonic start_time test_counttest_count_widthnext_single_testnext_single_filename testsuite_xmlwin_load_trackertmp_dirworker_test_nameselfs ,/usr/lib/python3.11/test/libregrtest/main.py__init__zRegrtest.__init__7s    "#%     .** !!%$(!"!% $ct|jt|jzt|jzt|jzt|jzt|jzSN)setr$r%r&r'r(r)r;s r= get_executedzRegrtest.get_executedbshDITX.T\1B1BBd+,,-/243K/L/LMd'(() *r?Fc|j}t|ttfs#|s!|j|j|ft|tr|j|nVt|tr6|j ||j |n t|tr|j |nt|tr|j|nt|tr7|s4|j||j|n_t|t$r|j|n/t|trd|_nt+d|z|r6t|ttfs|j||j}|rfddlmcm}|D]\} |j||1#|j$rt=|t>j wxYwdSdS)NTzinvalid test result: %rrfile)!name isinstancerrr.append duration_secr r$rr&r'rr r(r r%r*rr)r- ValueErrorremovexml_dataxml.etree.ElementTreeetree ElementTreer7 fromstring ParseErrorprintsys __stderr__)r<resultr+ test_namerMETes r=accumulate_resultzRegrtest.accumulate_resultgsK &:{";<< EU E O " "F$7#C D D D ff % % A I  Y ' ' ' '  / / A L   * * *  ! ( ( 3 3 3 3  ( ( A L   * * * *  + + A  $ + +I 6 6 6 6  ' ' A / ***&&v...  * * A   $ $Y / / / /  , , A#D  6?@@ @  'FV[,ABB ' HOOI & & &?   . . . . . . . . .  &--bmmA.>.>????}(8888     s -I  'I2rc>| }|}| d|dd|}tj|jz }t t |d\}}t |d\}}d|||fz}|d|}|r |dd}t |ddS) Nz load avg: z.2f <z %d:%02d:%02dT)flush) getloadavgr0r1r2divmodintrS)r<lineemptyload_avg test_timeminssecshourss r=logz Regrtest.logs??$$  5555t55DN$$t6 C NNB// dT2&& t"eT4%88 $$d$$  9D d$r?c|jjrdS||j|j}t |jt |jz}|r|jjs|d|}|d|d|dS)N/[z] ) r!quietr4r3lenr%r(pgorj)r< test_indextextrcfailss r=display_progresszRegrtest.display_progresss 7=  Fd3GGdoGGDH D$< = ==  % %$$U$$D #T##T##$$$$$r?cttjddfi|}|jrgxt_|_|j}|'ddlm }||j\}}||_||_ t|j |j rI|j \}}}|dks|dkr2d} t| tjdtjd|jr)t$j|j|_||_dS)Nr r)parse_worker_argszwInvalid values for the --huntrleaks/-R parameters. The number of warmups and repetitions must be at least 1 each (1:1).TrFr_)rrTargvxmlpathrjunit_xml_listr7 worker_argstest.libregrtest.runtest_mprvr:rargs huntrleaksrSstderrexittempdirospath expanduserr!) r<kwargsr!r|rvrWwarmup repetitions_msgs r= parse_argszRegrtest.parse_argss !"" 0 0 0 0 : =:<  (* T\<(P(PD % $3S99-R "  1 1I"+DJ---------------     7  9DJJ899Ebgll9#5tw7GHHII 9R99D::c1--a0D::<  M"1"-DM nnT]1%566(0q(9%%     7= 8 8M"E4=#6#6tw}#E#E"EFF 8 8 8I &,/J888888 8 7  *w"*&,&6x&@&@# K+ , , , N4= ) ) ) ) )  * *slB/B BBBBB B('B(A9FF F>0L// L<;L< ,M992N.-N.c8|jD]}t|dSrA)r#rS)r<rGs r= list_testszRegrtest.list_testss*M  D $KKKK  r?cN|D]}t|tjjr"t|tjr||Rt|tjr5tj|r!t| dSrA) rHunittestloader _FailedTest TestSuite _list_casesTestCaser match_testrSid)r<suitetests r=rzRegrtest._list_casess % %D$ ;<< $ 233 %  &&&&D("344 %%d++%$''))$$$ % %r?ctdt_tj|jj|jj|jD]{}t|j|} tj |}| |M#tj $r|j |YxwxYw|j rxtt jtt%t'|j ddt jt)|j t jdSdS)NFrErskipped:)rverboseset_match_testsr! match_tests ignore_testsr#rrdefaultTestLoaderloadTestsFromNamerSkipTestr&rIrSrTrrror)r<rWabstestrs r= list_caseszRegrtest.list_cases#s% 3TW5IJJJ / /I$TWi88G / 2DDWMM  ''''$ / / / ##I..... / < 5 sz " " " " %DL))622JSZ P P P P dl 4 4 4 4 4 4 5 5s4B  )B65B6c||jjr|ddSd|j_d|j_d|j_||_|dt|j }|j |D]g}|j }|j ||jpg}|jpg}d|D}d|D}d|j_|jj}|s|r|jj g|j_|jj||jj|dd|jjz} |d |d | d n|d |d t'|j|}||j_||d t+|t,rni|jrDt1t3t5|jddt7|j|dS)NzJRe-running failed tests is not supported with --python host runner option.TFz'Re-running failed tests in verbose modecHg|]^}}|dd Sr\rr.0test_full_namers r= z/Regrtest.rerun_failed_tests..Ns0[[[//44Q7[[[r?cHg|]^}}|dd Srrrs r=rz/Regrtest.rerun_failed_tests..Os1___>R~PQ^11#66q9___r?z matching: , z Re-running z in verbose mode ()z in verbose mode)r+rz failed again:)rjr!pythonrfailfastverbose3get_tests_resultr,rr*clearrGr+rIerrorsfailuresrextendrrrZrHrr%rSrrordisplay_result) r< rerun_listrVrWrr error_names failure_namesorig_match_testsmatchings r=rerun_failed_testszRegrtest.rerun_failed_tests4s  7>  HH&    F   1133 :;;;$/**     F I J  i ( ( (](bF,"H[[TZ[[[K__V^___M"DGO#w2  D D7&.*,DG'#**;777#**=999'$))DG4G*H*HHOyOOHOOOPPPPByBBBCCCTWi00F"2DG   " "6 " 6 6 6&+..   8 %DH v.. @ @ @ dh    r?c j|jjrdSttd|z|jrtdt |j|z }|rHtttt|ddt||j r|jj s|t|j s7|js0|js)t|j dkrtddttt|j dd |jjro|jd ttd |jdd D]'\}}td|dt%|(|j rRtttt|j ddt|j |jrdttdtt|jdt|j|jr^|jj sRtttt|jddt|j|jrTttdtt|jdzt|j|jrTtttt|jddt|jdSdS)Nz== Tests result: %s ==z(Test suite interrupted by signal SIGINT.rzomitted:r Allr\)endzOK.T)reversez10 slowest tests: z- z: zfailed:z%{} altered the execution environment:rz%s:z re-run testz run no tests:)r!rprSrr-rBr#rCrrorr$rnr%r& print_slowr.sortrr(formatr+r))r<omittedrfrs r=rzRegrtest.display_resultisb 7;  F  &)>)>)@)@@AAA   > < = = =dm$$t'8'8':'::   GGG %G f--z : : : g    9 8TW] 8 GGGH &  &( & NNQ&&e%%%% %DI// 7 7 7 7  G O  . . . GGG % & & &#'?3B3#7 G G 4DDD/)*D*D*DEFFFF 8 GGG %DH v.. : : : dh     # 0 GGG 9@@3t788&AACC D D D d. / / / < $  $ GGG %DL))622J ? ? ? dl # # # : " GGG %%DJ??? @ @ @ dj ! ! !   ) GGG %D-..77 I I I d' ( ( ( ( ( ) )r?c|jjr ddl}|dd|_tj}d}|jjr|dt|jjzz }| |d}t|j dD]\}}tj }|}|r|d|}||||jrOd } tt!} |j| t%| | d } n*t'|j|} || t+| t,rnt/| }tj |z } | t0kr|d t| }nt+| t2rd}tjD]/} | |vr)| d rt7j| 0|jjrt=| |jrn|rt?|dSdS)NrFT)tracerzRun tests sequentiallyz (timeout: %s)r z -- zDresult = runtest(self.ns, test_name); self.accumulate_result(result))globalslocalsrVz in ztest.) r!rTracer/rTmoduleskeystimeoutrrj enumerater"r0r1rtdictrrunctxrrrZrHrstrr r startswithrunloadrrrS)r<r save_modulesr previous_testrqrWr2rrcmdr!rVrfmodules r=run_tests_sequentialzRegrtest.run_tests_sequentials` 7= ? LLL++E+>>DK{'')) & 7? G #odgo&F&FF FC   %.tz1%=%=% %  !J ))JD :%)TT==9  ! !*d 3 3 3{ /8&((^^ ""3 ""EEEH )44&&v...&+.. KKM((:5I---.;mm_Y=W=W=W X FF++ % $ +**,, + +--&2C2CG2L2L-N6***w Ifdg$>$>   ! -  ! !r?c#\K |D]&}|V|jrdS|jjr |jrdS'*rA)r%r!fail_env_changedr()r<r"rWs r= _test_foreverzRegrtest._test_foreversX "   8FF7+0HFF  r?ctdtjgtjRtdtjddtjztdtjtj }|rtd|tdtj dtj dS) Nz==T)aliasedz %s-endianz== cwd:z == CPU count:z== encodings: locale=z, FS=) rSplatformpython_implementationrTversionr byteorderrgetcwd cpu_countlocale getencodinggetfilesystemencoding)r<r s r=display_headerzRegrtest.display_headers dH244Ks{7H7H7J7JKKKK dH%d333!CM1 3 3 3 i%%%LNN  . /9 - - - #%%%%s'@'B'B'BD E E E E Er?cg}|jr|dnk|jjr|jr|dnBt |j|j|j|j|jfs|d|jr|d|s|dd |}|j r |j d|}|S)NFAILUREz ENV CHANGEDz NO TEST RUN INTERRUPTEDSUCCESSrz then ) r%rIr!rr(anyr$r&r-rr,)r<rVs r=rzRegrtest.get_tests_results 8 ) MM) $ $ $ $ W % )$*B ) MM- ( ( ( (di4<9I  $&'' ) MM- ( ( (   ) MM- ( ( ( % MM) $ $ $6""   @%)%6%6%6?F r?c|jjs7|jjs?|jjs3|jjs'|js |jjs||jjr4|jj\}}}|dkrd}t|tj d|jj rtd|jj |jjr;|t!|j|_d|_d|_nat)|j|_dt-|j|_t-|jdz |_|jjrd d lm}tjd krG|j@d d lm} ||_n)#t>$r}td |Yd}~nd}~wwxYw |||j"|j d|_dSdS#|j |j d|_wxYw|!dS)NzhWARNING: Running tests with --huntrleaks/-R and less than 3 warmup repetitions can give false positives!TrwzUsing random seedrz/{}r r)run_tests_multiprocesswin32)WindowsLoadTrackerz%Failed to create WindowsLoadTracker: )"r!headerrprnrr"r~rrrSrTstdoutrrforeverrrr#r3r4iterrrouse_mpr}rrr:test.libregrtest.win_utilsrr8PermissionErrorcloser)r<rrrrrrerrors r= run_testszRegrtest.run_testss GN "7; ""&'- "377> "j "$(GL "    ! ! ! 7  8%)W%7 "FKzzIc $7777 7  < %tw': ; ; ; 7? =++D,?,?@@DJ DO$%D ! !dm,,DJ#ll3t}+=+=>>DO$'$8$81$ ( J J J J J J|w&&4+@+HIIIIIIK,>,>,@,@D))&KKKI%IIJJJJJJJJK  1&&t,,,(4)//111,0D)))544(4)//111,0D)0000  % % ' ' ' ' 's$F&& G 0GG  H)H/c|jrk|jrKt|jd5}||jdzdddn #1swxYwYnt j|j|jr;|j}|dd|j j ttj |jz }tdt|ztd|z|j jr*t jdt jzdSdS)Nw T) show_missingsummarycoverdirzTotal duration: %szTests result: %szleaks %d)r6r5rwriterunlinkr/results write_resultsr!r+rSr0r1r2rrrunleakssystemgetpid)r<rrdurations r=finalizezRegrtest.finalize6s  $ 5$ 5$3S99;RHHT2T9:::;;;;;;;;;;;;;;; $3444 ; 7 ##%%A OOt%)W%5  7 7 7 >##do5 "_X%>%>>???  4#8#8#:#::;;; 7  0 Ij29;;. / / / / / 0 0sAAAc |jjs |jsdSddlmcm}|d}dddd}|jD]^}|||D]D} ||xxt| |dz cc<5#t$rYAwxYw_| D](\}}| |t|)tjt"j|jj}t'|d5}||D]} ||  ddddS#1swxYwYdS)Nr testsuites)r"rrwb)r!rzr7rNrOrPElementrIrbgetrKitemsrBrrrrrrr tostringlistr,) r<rXroottotalsrkvrzfss r=save_xml_resultzRegrtest.save_xml_resultKsw t'9  F*********zz,''q99'  E KK     1IIIUYYq!__!5!55IIII!D  LLNN  DAq HHQA    ',,y147?CC '4  A__T**                      s$1B BB!.EE!$E!ctjrFtjd}|dkrtjddStj|dSdS)Nri)r is_emscriptenrumask)r<old_masks r= fix_umaskzRegrtest.fix_umaskdsX   #x{{H5  """"" # #r?c|jjr|jj|_|jstjrdtjd|_|jtjd|_t j|jd|_ntj |_t j |j|_dS)N abs_builddirsrcdirbuild) r!rr9 sysconfigis_python_buildget_config_varrrrtempfile gettempdirabspathr;s r= set_temp_dirzRegrtest.set_temp_dirns 7? +7?DL| 5(** 5(7GG <' $-#;H#E#EDL!w||DL'BB '244 wt|44 r?cvtj|jdtjdvrt jdd}ntj}|jd |}nd |}|tj z }tj |j|}|S)NT)exist_ok>wasi emscriptenri@Bztest_python_worker_{}ztest_python_{})rmakedirsr9rTrrrandintr2r:rr FS_NONASCIIrr)r<nouncetest_cwds r=create_temp_dirzRegrtest.create_temp_dirs DL40000 <1 1 1^Ay11FFY[[F  ,.55f==HH'..v66HI))7<< h77r?cddl}tj||jd}t d|jz||D]n}tj|r't d|ztj |Ht d|ztj |odS)Nrz test_python_*zCleanup %s directoryzRemove directory: %szRemove file: %s) globrrrescaper9rSisdirrrmtreer-)r<r_rrGs r=cleanupzRegrtest.cleanups w||DKK 55GG $t|3444IIdOO ' 'Dw}}T"" ',t3444 &&&&'$./// &&&&  ' 'r?Nc d|||||jjr(|t jd|} tj |d5||j_ | ||ddddS#1swxYwYdS#t$rK}tjrtjt"dt j|jYd}~dSd}~wwxYw)NrT)rn)r)rrSrHr!rcrTrr]rtemp_cwdr_main SystemExitrcan_start_thread faulthandlerdump_traceback_later EXIT_TIMEOUTcode)r<r"rr\excs r=mainz Regrtest.mainsv    7?  LLNNN HQKKK''))  #HD999 * *#+ 5&)))  * * * * * * * * * * * * * * * * * *    0 K1,TJJJJ HSX           s=C#C  C CCCC D/$AD**D/c|j|jSttdrtjdSdS)Nr`r)r8r`hasattrrr;s r=r`zRegrtest.getloadavgsH  ,(3355 5 2| $ $ &=??1% %tr?c|jddlm}||j|j|jjrt d|jjt_|jj t_ t|j| ||jj r(| tjd|jjr(|tjd|||jjr|jr||||jrtjd|jrtjd|jjr|jrtjdtjddS)Nr)run_tests_workerzPress any key to continue...rxr)r:r}rrr!waitinputrprPGO pgo_extended PGO_EXTENDEDrrrrTrrr%rverbose2r%rr4rBr-rr()r<r"rrrs r=rfzRegrtest._mains  , D D D D D D  TWd&; < < < 7< 2 0 1 1 1gk #w3DG  7   OO    HQKKK 7   OO    HQKKK   7  & &  # # % % %   8  HQKKK    HSMMM 7 # (@  HQKKK  r?)F)rrA)__name__ __module__ __qualname____doc__r>rCrZrjrtrrrrrrrrrrrr%r4rBrHrSr]rcrnr`rfr?r=rr s,)%)%)%V*** %%%%N    * % % %rs   000000 /.....000000NNNNNNNNNNNN""""""))))))  V V V V V V V V r++++++r?