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)ÚmsgÚcolorrr©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.Ú TestSuiter3ÚloadTestsFromTestCaseÚaddTest)r%Úsuiter2ÚtestrrrÚall`s zTestLoader.allc Csbt ¡}tj t¡s|Sttdƒ}| ¡ ¡}WdQRXx"|D]}tj   |¡}|  |¡q@W|S)NÚrt) r.r4rr ÚisfileÚFAILED_TESTS_FNAMEÚopenÚreadÚsplitÚdefaultTestLoaderÚloadTestsFromNamer6)r%r7ÚfÚnamesÚnr8rrrÚ last_failedgs    zTestLoader.last_failedcCs.| d¡r"tj tj |¡¡d}tj |¡S)Nz.pyr)rrr ÚsplitextÚbasenamer.r@rA)r%r1rrrÚ from_namess zTestLoader.from_nameN)Ú__name__Ú __module__Ú __qualname__ÚHEREr"rrÚenvironÚextendr(r3r9rErHrrrrrGs   rcs<eZdZdd„Zdd„Zdd„Zdd„Z‡fd d „Z‡ZS) ÚColouredResultcCstj ||¡tddƒdS)NZOKÚgreen)r.Ú TestResultÚ addSuccessr)r%r8rrrrR{szColouredResult.addSuccesscCs"tj |||¡tdddddS)NÚERRORrT)r)r.rQÚaddErrorr)r%r8ÚerrrrrrTszColouredResult.addErrorcCstj |||¡tddƒdS)NZFAILr)r.rQÚ addFailurer)r%r8rUrrrrVƒszColouredResult.addFailurecCs&tj |||¡td| ¡dƒdS)Nz skipped: %sÚbrown)r.rQÚaddSkiprÚstrip)r%r8ÚreasonrrrrX‡szColouredResult.addSkipcs$t|d|dkd}tƒ ||¡dS)NrrS)r)rrÚprintErrorList)r%ZflavourÚerrors)Ú __class__rrr[‹szColouredResult.printErrorList) rIrJrKrRrTrVrXr[Ú __classcell__rr)r]rrOys rOcsfeZdZdZerenejZ‡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)r]rrr`—szColouredTextRunner.__init__cstƒ ¡|_|jS)N)rÚ _makeResultÚresult)r%)r]rrre›s zColouredTextRunner._makeResultc Cs>|jr:ttdƒ$}x|jD]}| |d¡qWWdQRXdS)NÚwtÚ )rbr=r<Úwrite)r%rBÚtnamerrrÚ_write_last_failed¡s  z%ColouredTextRunner._write_last_failedcCs:| ¡s6x,|j|jD]}|d ¡}|j |¡qWdS)Nr)Ú wasSuccessfulr\ÚfailuresÚidrbÚadd)r%rfÚtrjrrrÚ _save_result§s zColouredTextRunner._save_resultc sVytƒ |¡}Wn2ttfk rB|jj}| ¡t d¡‚YnX|  |¡|SdS)Nr ) rÚrunÚKeyboardInterruptÚ SystemExitÚrunnerrfÚ printErrorsrÚexitrq)r%r7rf)r]rrÚ_run­s zColouredTextRunner._runcCsJ|r&tddddttƒt d¡n tdddd| ¡t d¡dS) NÚSUCCESSrPT)rrZFAILEDrr )rr r<rrwrk)r%ÚsuccessrrrÚ_exit¸s zColouredTextRunner._exitcCs| |¡}| | ¡¡dS)N)rxr{rl)r%r7rfrrrrrÂs zColouredTextRunner.run)rIrJrKÚ__doc__rrOr.ÚTextTestResultZ resultclassr`rerkrqrxr{rrr^rr)r]rr_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)r7r‡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.r4ÚcountTestCasesr+Z_testsr]r/Ú TypeErrorr*r6)r7ÚserialÚparallelr8Z 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 workersrPT)rr )Útimeoutzalive 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)rrŠrr‰ÚtimerxÚpsutilZProcessÚchildrenZ wait_procsr rlr‹rvÚmapÚlenrmr\ZskippedrÚtextwrapÚdedentZtestsRunr{)r%r7Z ser_suiteZ par_suiterpÚparZ par_elapsedZorphansZgoneÚaliveZserZ ser_elapsedZ par_failsZpar_errsZ par_skipsZ ser_failsZser_errsZ ser_skipsÚokrrrrrës<       zParallelRunner.runN)rIrJrKÚ staticmethodrŠrrrrrrrr~Çs  r~cCsTdd„}|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)r’ÚWINDOWSrˆr‰r~Ú VERBOSITYr_)rŽrœrrrÚ get_runners    r cCs tƒ |¡}tƒ}| |¡dS)N)rrHr rr)r1r7rurrrÚ run_from_name,s r¡cCstjj ¡dS)N)r’Z _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¢ÚoptparseÚ OptionParserÚ add_optionÚ parse_argsrEr r<rr•Z print_usagerrwrHr9rr r rŽrr)r£ÚparserÚoptsrcÚloaderr7rurrrÚmain9s2     r°Ú__main__)FN)F)2r|Ú __future__rrr©rrr–r‘r.ÚctypesÚ ImportErrorrˆr’Zpsutil._commonrrrZpsutil._compatrZ psutil.testsrrr r r rŸr<Ú cpu_countr‰rr ÚabspathÚdirnameÚ__file__rLr@r5rrr}rOZTextTestRunnerr_r~r r¡r¢r°rIrrrrÚsV               27U "