B Œ=Ý_D,ã@sÊdZddlmZddlZddlZddlZddlZddlZddlZddl Z y ddl Z Wne k rldZ YnXy ddl Z Wne k r’dZ YnXddl Z ddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZd ZdZe  ¡pdZe o*eƒZej  ej !e"¡¡Z#e j$j%Z%d$dd„Z&Gdd„dƒZ'Gdd„de j(ƒZ)Gdd„de j*ƒZ+Gdd„de+ƒZ,d%dd„Z-dd„Z.dd „Z/d!d"„Z0e1d#krÆe0ƒdS)&aA Unit test runner, providing new features on top of unittest module: - colourized output - parallel run (UNIX only) - print failures/tracebacks on CTRL+C - re-run failed tests only (make test-failed) Invocation examples: - make test - make test-failed Parallel: - make test-parallel - make test-process ARGS=--parallel é)Úprint_functionN)Úhilite)Ú print_color)Úterm_supports_colors)Úsuper)Ú CI_TESTING)Úimport_module_by_path)Ú print_sysinfo)Ú reap_children)Ú safe_rmpathéz.failed-tests.txtéFcCsB|dkr|dkrtjntj}tr2t||||dn t||ddS)NÚred)ÚboldÚfile)r)ÚsysÚstderrÚstdoutÚ USE_COLORSrÚprint)ÚmsgZcolorrr©rúF/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/runner.pyÚcprint>s rc@sXeZdZeZdgZdejkr,e dddg¡dd„Z dd „Z d d „Z d d „Z dd„Z dS)Ú TestLoaderztest_memleaks.pyZWHEELHOUSE_UPLOADER_USERNAMEz test_osx.pyz test_linux.pyz test_posix.pycs‡fdd„t ˆj¡DƒS)Ncs:g|]2}| d¡r| d¡r|ˆjkrtj ˆj|¡‘qS)Ztest_z.py)Ú startswithÚendswithÚ skip_filesÚosÚpathÚjoinÚtestdir)Ú.0Úx)Úselfrrú Osz,TestLoader._get_testmods..)rÚlistdirr!)r$r)r$rÚ _get_testmodsNs zTestLoader._get_testmodsccsVxP| ¡D]D}t|ƒ}x6t|ƒD]*}t||ƒ}t|tƒr t|tjƒr |Vq Wq WdS)zgIterate over all test files in this directory and return all TestCase classes in them. N) r'rÚdirÚgetattrÚ isinstanceÚtypeÚ issubclassÚunittestÚTestCase)r$rÚmodÚnameÚobjrrrÚ_iter_testmod_classesTs   z TestLoader._iter_testmod_classescCs0t ¡}x"| ¡D]}t|ƒ}| |¡qW|S)N)r-Ú TestSuiter2ÚloadTestsFromTestCaseÚaddTest)r$Úsuiter1ÚtestrrrÚall`s zTestLoader.allc Csbt ¡}tj t¡s|Sttdƒ}| ¡ ¡}WdQRXx"|D]}tj   |¡}|  |¡q@W|S)NZrt) r-r3rrÚisfileÚFAILED_TESTS_FNAMEÚopenÚreadÚsplitÚdefaultTestLoaderÚloadTestsFromNamer5)r$r6ÚfÚnamesÚnr7rrrÚ last_failedgs    zTestLoader.last_failedcCs.| d¡r"tj tj |¡¡d}tj |¡S)Nz.pyr)rrrÚsplitextÚbasenamer-r>r?)r$r0rrrÚ from_namess zTestLoader.from_nameN)Ú__name__Ú __module__Ú __qualname__ÚHEREr!rrÚenvironÚextendr'r2r8rCrFrrrrrGs   rcs<eZdZdd„Zdd„Zdd„Zdd„Z‡fd d „Z‡ZS) ÚColouredResultcCstj ||¡tddƒdS)NZOKÚgreen)r-Ú TestResultÚ addSuccessr)r$r7rrrrP{szColouredResult.addSuccesscCs"tj |||¡tdddddS)NÚERRORrT)r)r-rOÚaddErrorr)r$r7ÚerrrrrrRszColouredResult.addErrorcCstj |||¡tddƒdS)NZFAILr)r-rOÚ addFailurer)r$r7rSrrrrTƒszColouredResult.addFailurecCs&tj |||¡td| ¡dƒdS)Nz skipped: %sZbrown)r-rOÚaddSkiprÚstrip)r$r7ÚreasonrrrrU‡szColouredResult.addSkipcs$t|d|dkd}tƒ ||¡dS)NrrQ)r)rrÚprintErrorList)r$ZflavourÚerrors)Ú __class__rrrX‹szColouredResult.printErrorList) rGrHrIrPrRrTrUrXÚ __classcell__rr)rZrrMys rMcsfeZdZdZerenejZ‡fdd„Z ‡fdd„Z dd„Z dd „Z ‡fd d „Z d d „Zdd„Z‡ZS)ÚColouredTextRunnerz” A coloured text runner which also prints failed tests on KeyboardInterrupt and save failed tests in a file so that they can be re-run. cstƒj||Žtƒ|_dS)N)rÚ__init__ÚsetÚ failed_tnames)r$ÚargsÚkwargs)rZrrr]—szColouredTextRunner.__init__cstƒ ¡|_|jS)N)rÚ _makeResultÚresult)r$)rZrrrb›s zColouredTextRunner._makeResultc Cs>|jr:ttdƒ$}x|jD]}| |d¡qWWdQRXdS)NZwtÚ )r_r;r:Úwrite)r$r@ÚtnamerrrÚ_write_last_failed¡s  z%ColouredTextRunner._write_last_failedcCs:| ¡s6x,|j|jD]}|d ¡}|j |¡qWdS)Nr)Ú wasSuccessfulrYÚfailuresÚidr_Úadd)r$rcÚtrfrrrÚ _save_result§s zColouredTextRunner._save_resultc sVytƒ |¡}Wn2ttfk rB|jj}| ¡t d¡‚YnX|  |¡|SdS)Nr ) rÚrunÚKeyboardInterruptÚ SystemExitÚrunnerrcÚ printErrorsrÚexitrm)r$r6rc)rZrrÚ_run­s zColouredTextRunner._runcCsJ|r&tddddttƒt d¡n tdddd| ¡t d¡dS) NÚSUCCESSrNT)rrZFAILEDrr )rr r:rrsrg)r$ÚsuccessrrrÚ_exit¸s zColouredTextRunner._exitcCs| |¡}| | ¡¡dS)N)rtrwrh)r$r6rcrrrrnÂs zColouredTextRunner.run)rGrHrIÚ__doc__rrMr-ÚTextTestResultZ resultclassr]rbrgrmrtrwrnr[rr)rZrr\s    r\c@s,eZdZedd„ƒZedd„ƒZdd„ZdS)ÚParallelRunnercs0‡fdd„}tj‰|tj_t t¡}t ||¡S)Ncsˆ||ƒ}t |j¡|S)N)ÚatexitÚregisterÚclose)ÚfdÚmodeÚkwdsÚstream)Ú orig_fdopenrrÚfdopenËs  z+ParallelRunner._parallelize..fdopen)rrƒÚconcurrencytestZfork_for_testsÚNWORKERSZConcurrentTestSuite)r6rƒZforkerr)r‚rÚ _parallelizeÉs   zParallelRunner._parallelizecCst ¡}t ¡}xv|D]n}| ¡dkr*qn8t|tjƒrD|jdj}nt|tjƒrV|}n td|ƒ‚t|ddƒrz|  |¡q|  |¡qW||fS)Nrzcan't recognize type %rZ _serialrunF) r-r3ÚcountTestCasesr*Z_testsrZr.Ú TypeErrorr)r5)r6ÚserialÚparallelr7Z test_classrrrÚ _split_suite×s       zParallelRunner._split_suitecCsX| |¡\}}| |¡}tdtdddt ¡}| |¡}t ¡|}t ¡ ¡}tj |dd\}} | r~td| dƒt ƒt ¡}| |¡} t ¡|} |  ¡s¸|  ¡d kr¸|  ¡tt|j|j|jfƒ\} } }tt| j| j| jfƒ\}}}tt d |j| | ||| j|||| f ¡ƒtd |j| j|| tfƒ|  ¡oH|   ¡}| |¡dS) Nz(starting parallel tests using %s workersrNT)rr )Ztimeoutzalive processes %srra= +----------+----------+----------+----------+----------+----------+ | | total | failures | errors | skipped | time | +----------+----------+----------+----------+----------+----------+ | parallel | %3s | %3s | %3s | %3s | %.2fs | +----------+----------+----------+----------+----------+----------+ | serial | %3s | %3s | %3s | %3s | %.2fs | +----------+----------+----------+----------+----------+----------+ z&Ran %s tests in %.3fs using %s workers)r‹r†rr…ÚtimertÚpsutilZProcessZchildrenZ wait_procsr rhr‡rrÚmapÚlenrirYZskippedrÚtextwrapÚdedentZtestsRunrw)r$r6Z ser_suiteZ par_suiterlZparZ par_elapsedZorphansZgoneZaliveZserZ ser_elapsedZ par_failsZpar_errsZ par_skipsZ ser_failsZser_errsZ ser_skipsÚokrrrrnës<       zParallelRunner.runN)rGrHrIÚ staticmethodr†r‹rnrrrrrzÇs  rzcCsTdd„}|rJtjr|dƒn.tdkr.|dƒntdkr@|dƒn ttdSttdS)NcSst|ddƒdS)Nz Running serial tests instead.r)r)rrrrÚwarnszget_runner..warnz$Can't run parallel tests on Windows.z(concurrencytest module is not installed.r zOnly 1 CPU available.)Ú verbosity)rZWINDOWSr„r…rzÚ VERBOSITYr\)rŠr”rrrÚ get_runners    r—cCs tƒ |¡}tƒ}| |¡dS)N)rrFr—rn)r0r6rqrrrÚ run_from_name,s r˜cCstjj ¡dS)N)rZ _psplatformZcextZ set_testingrrrrÚsetup2sr™cCsÈtƒd}tj|dd}|jddddd|jd ddd d| ¡\}}|jsVttƒtƒ}|rŽt |ƒd kr~|  ¡t   d ¡S|  |d ¡}n|jrž| ¡}n| ¡}tr°tƒt|jƒ}| |¡dS) Nz*python3 -m psutil.tests [opts] [test-name]zrun unit tests)ÚusageÚ descriptionz --last-failedÚ store_trueFzonly run last failed tests)ÚactionÚdefaultÚhelpz --parallelzrun tests in parallelr r)r™ÚoptparseZ OptionParserZ add_optionÚ parse_argsrCr r:rrZ print_usagerrsrFr8rr r—rŠrn)ršÚparserZoptsr`Úloaderr6rqrrrÚmain9s2     r¤Ú__main__)FN)F)2rxZ __future__rr{r rrrrŒr-ZctypesÚ ImportErrorr„rZpsutil._commonrrrZpsutil._compatrZ psutil.testsrrr r r r–r:Ú cpu_countr…rrÚabspathÚdirnameÚ__file__rJr>r4rrryrMZTextTestRunnerr\rzr—r˜r™r¤rGrrrrÚsV               27U "