<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    Œ=Ý_D,  ã               @   sÊ  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	yddl
Z
W n ek
rl   dZ
Y nX yddlZW n ek
r’   dZY nX ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ dZdZe ¡ pdZe o*eƒ Zej  ej !e"¡¡Z#e	j$j%Z%d$dd„Z&G dd„ dƒZ'G dd„ de	j(ƒZ)G dd„ de	j*ƒZ+G dd„ de+ƒZ,d%dd„Z-dd„ Z.dd „ Z/d!d"„ Z0e1d#krÆe0ƒ  dS )&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é   Fc             C   sB   |d kr|dkrt jnt j}tr2t| |||d nt| |d d S )NÚred)ÚboldÚfile)r   )ÚsysÚstderrÚstdoutÚ
USE_COLORSr   Úprint)ÚmsgÚcolorr   r   © r   úF/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/runner.pyÚcprint>   s
    r   c               @   sX   e Zd ZeZdgZdejkr,e dddg¡ dd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ ZdS )Ú
TestLoaderztest_memleaks.pyZWHEELHOUSE_UPLOADER_USERNAMEztest_osx.pyztest_linux.pyztest_posix.pyc                s   ‡ fdd„t  ˆ j¡D ƒS )Nc                s:   g | ]2}|  d ¡r| d¡r|ˆ jkrtj ˆ j|¡‘qS )Ztest_z.py)Ú
startswithÚendswithÚ
skip_filesÚosÚpathÚjoinÚtestdir)Ú.0Úx)Úselfr   r   ú
<listcomp>O   s   z,TestLoader._get_testmods.<locals>.<listcomp>)r   Úlistdirr"   )r%   r   )r%   r   Ú_get_testmodsN   s    
zTestLoader._get_testmodsc             c   sV   xP|   ¡ D ]D}t|ƒ}x6t|ƒD ]*}t||ƒ}t|tƒr t|tjƒr |V  q W q
W dS )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Úobjr   r   r   Ú_iter_testmod_classesT   s    

z TestLoader._iter_testmod_classesc             C   s0   t  ¡ }x"|  ¡ D ]}t|ƒ}| |¡ qW |S )N)r.   Ú	TestSuiter3   ÚloadTestsFromTestCaseÚaddTest)r%   Úsuiter2   Útestr   r   r   Úall`   s
    zTestLoader.allc          	   C   sb   t  ¡ }tj t¡s|S ttdƒ}| ¡  ¡ }W d Q R X x"|D ]}t j	 
|¡}| |¡ q@W |S )NÚrt)r.   r4   r   r    ÚisfileÚFAILED_TESTS_FNAMEÚopenÚreadÚsplitÚdefaultTestLoaderÚloadTestsFromNamer6   )r%   r7   ÚfÚnamesÚnr8   r   r   r   Úlast_failedg   s    
zTestLoader.last_failedc             C   s.   |  d¡r"tj tj |¡¡d }tj |¡S )Nz.pyr   )r   r   r    ÚsplitextÚbasenamer.   r@   rA   )r%   r1   r   r   r   Ú	from_names   s    
zTestLoader.from_nameN)Ú__name__Ú
__module__Ú__qualname__ÚHEREr"   r   r   ÚenvironÚextendr(   r3   r9   rE   rH   r   r   r   r   r   G   s   
r   c                   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Z‡ fd	d
„Z‡  ZS )ÚColouredResultc             C   s   t j | |¡ tddƒ d S )NZOKÚgreen)r.   Ú
TestResultÚ
addSuccessr   )r%   r8   r   r   r   rR   {   s    zColouredResult.addSuccessc             C   s"   t j | ||¡ tdddd d S )NÚERRORr   T)r   )r.   rQ   ÚaddErrorr   )r%   r8   Úerrr   r   r   rT      s    zColouredResult.addErrorc             C   s   t j | ||¡ tddƒ d S )NZFAILr   )r.   rQ   Ú
addFailurer   )r%   r8   rU   r   r   r   rV   ƒ   s    zColouredResult.addFailurec             C   s&   t j | ||¡ td| ¡  dƒ d S )Nzskipped: %sÚbrown)r.   rQ   ÚaddSkipr   Ústrip)r%   r8   Úreasonr   r   r   rX   ‡   s    zColouredResult.addSkipc                s$   t |d|dkd}tƒ  ||¡ d S )Nr   rS   )r   )r   r   ÚprintErrorList)r%   ZflavourÚerrors)Ú	__class__r   r   r[   ‹   s    zColouredResult.printErrorList)	rI   rJ   rK   rR   rT   rV   rX   r[   Ú__classcell__r   r   )r]   r   rO   y   s
   rO   c                   sf   e Zd ZdZerenejZ‡ fdd„Z	‡ fdd„Z
dd„ Zdd	„ Z‡ fd
d„Zdd„ Zdd„ Z‡  ZS )Ú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.
    c                s   t ƒ j||Ž tƒ | _d S )N)r   Ú__init__ÚsetÚfailed_tnames)r%   ÚargsÚkwargs)r]   r   r   r`   —   s    zColouredTextRunner.__init__c                s   t ƒ  ¡ | _| jS )N)r   Ú_makeResultÚresult)r%   )r]   r   r   re   ›   s    zColouredTextRunner._makeResultc          	   C   s>   | j r:ttdƒ$}x| j D ]}| |d ¡ qW W d Q R X d S )NÚwtÚ
)rb   r=   r<   Úwrite)r%   rB   Útnamer   r   r   Ú_write_last_failed¡   s    z%ColouredTextRunner._write_last_failedc             C   s:   |  ¡ s6x,|j|j D ]}|d  ¡ }| j |¡ qW d S )Nr   )ÚwasSuccessfulr\   ÚfailuresÚidrb   Úadd)r%   rf   Útrj   r   r   r   Ú_save_result§   s    zColouredTextRunner._save_resultc          	      sV   yt ƒ  |¡}W n2 ttfk
rB   | jj}| ¡  t d¡‚Y nX |  	|¡ |S d S )Nr   )
r   ÚrunÚKeyboardInterruptÚ
SystemExitÚrunnerrf   ÚprintErrorsr   Úexitrq   )r%   r7   rf   )r]   r   r   Ú_run­   s    
zColouredTextRunner._runc             C   sJ   |r&t dddd ttƒ t d¡ n t dddd |  ¡  t d¡ d S )	NÚSUCCESSrP   T)r   r   ZFAILEDr   r   )r   r   r<   r   rw   rk   )r%   Úsuccessr   r   r   Ú_exit¸   s    zColouredTextRunner._exitc             C   s   |   |¡}|  | ¡ ¡ d S )N)rx   r{   rl   )r%   r7   rf   r   r   r   rr   Â   s    
zColouredTextRunner.run)rI   rJ   rK   Ú__doc__r   rO   r.   ÚTextTestResultZresultclassr`   re   rk   rq   rx   r{   rr   r^   r   r   )r]   r   r_      s   
r_   c               @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚParallelRunnerc                s0   ‡ fdd„}t j‰ |tj _t t¡}t | |¡S )Nc                s   ˆ | |ƒ}t  |j¡ |S )N)ÚatexitÚregisterÚclose)ÚfdÚmodeÚkwdsÚstream)Úorig_fdopenr   r   ÚfdopenË   s    
z+ParallelRunner._parallelize.<locals>.fdopen)r   r‡   ÚconcurrencytestZfork_for_testsÚNWORKERSZConcurrentTestSuite)r7   r‡   Zforkerr   )r†   r   Ú_parallelizeÉ   s
    
zParallelRunner._parallelizec             C   s   t  ¡ }t  ¡ }xv| D ]n}| ¡ dkr*qn8t|t jƒrD|jd j}nt|t jƒrV|}ntd| ƒ‚t|ddƒrz| 	|¡ q| 	|¡ qW ||fS )Nr   zcan't recognize type %rZ
_serialrunF)
r.   r4   ÚcountTestCasesr+   Z_testsr]   r/   Ú	TypeErrorr*   r6   )r7   ÚserialÚparallelr8   Z
test_classr   r   r   Ú_split_suite×   s    
zParallelRunner._split_suitec             C   sX  |   |¡\}}|  |¡}tdt ddd t ¡ }|  |¡}t ¡ | }t ¡  ¡ }tj	|dd\}}	|	r~td|	 dƒ t
ƒ  t ¡ }|  |¡}
t ¡ | }| ¡ s¸| ¡ d	kr¸| ¡  tt|j|j|jfƒ\}}}tt|
j|
j|
jfƒ\}}}tt d
|j|||||
j||||f
 ¡ƒ td|j|
j || tf ƒ | ¡ oH|
 ¡ }|  |¡ d S )Nz(starting parallel tests using %s workersrP   T)r   r   )Útimeoutzalive processes %sr   r   a=  
            +----------+----------+----------+----------+----------+----------+
            |          |    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Š   r   r‰   Útimerx   ÚpsutilZProcessÚchildrenZ
wait_procsr
   rl   r‹   rv   ÚmapÚlenrm   r\   Zskippedr   ÚtextwrapÚdedentZtestsRunr{   )r%   r7   Z	ser_suiteZ	par_suiterp   ÚparZpar_elapsedZorphansZgoneÚaliveZserZser_elapsedZ	par_failsZpar_errsZ	par_skipsZ	ser_failsZser_errsZ	ser_skipsÚokr   r   r   rr   ë   s<    



zParallelRunner.runN)rI   rJ   rK   ÚstaticmethodrŠ   r   rr   r   r   r   r   r~   Ç   s   r~   c             C   sT   dd„ }| rJt jr|dƒ n.td kr.|dƒ ntdkr@|dƒ n
ttdS ttdS )Nc             S   s   t | d dƒ d S )Nz Running serial tests instead.r   )r   )r   r   r   r   Úwarn  s    zget_runner.<locals>.warnz$Can't run parallel tests on Windows.z(concurrencytest module is not installed.r   zOnly 1 CPU available.)Ú	verbosity)r’   ÚWINDOWSrˆ   r‰   r~   Ú	VERBOSITYr_   )rŽ   rœ   r   r   r   Ú
get_runner  s    



r    c             C   s    t ƒ  | ¡}tƒ }| |¡ d S )N)r   rH   r    rr   )r1   r7   ru   r   r   r   Úrun_from_name,  s    r¡   c               C   s   t jj ¡  d S )N)r’   Z_psplatformZcextZset_testingr   r   r   r   Úsetup2  s    r¢   c              C   sÈ   t ƒ  d} tj| dd}|jddddd |jd	ddd
d | ¡ \}}|jsVttƒ tƒ }|rŽt	|ƒdkr~| 
¡  t d¡S | |d ¡}n|jrž| ¡ }n| ¡ }tr°tƒ  t|jƒ}| |¡ d S )Nz*python3 -m psutil.tests [opts] [test-name]zrun unit tests)ÚusageÚdescriptionz--last-failedÚ
store_trueFzonly run last failed tests)ÚactionÚdefaultÚhelpz
--parallelzrun tests in parallelr   r   )r¢   ÚoptparseÚOptionParserÚ
add_optionÚ
parse_argsrE   r   r<   r   r•   Zprint_usager   rw   rH   r9   r   r	   r    rŽ   rr   )r£   ÚparserÚoptsrc   Úloaderr7   ru   r   r   r   Úmain9  s2    


r°   Ú__main__)FN)F)2r|   Ú
__future__r   r   r©   r   r   r–   r‘   r.   ÚctypesÚImportErrorrˆ   r’   Zpsutil._commonr   r   r   Zpsutil._compatr   Zpsutil.testsr   r   r	   r
   r   rŸ   r<   Ú	cpu_countr‰   r   r    ÚabspathÚdirnameÚ__file__rL   r@   r5   r   r   r}   rO   ZTextTestRunnerr_   r~   r    r¡   r¢   r°   rI   r   r   r   r   Ú<module>   sV   


	27U
"
