<!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
    Œ=Ý_7é  ã               @   sÞ  d 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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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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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dl m-Z- ddl m.Z. dd l m/Z/ dd!l m0Z0 dd"l m1Z1 dd#l m2Z2 dd$l m3Z3 dd%l m4Z4 dd&l m5Z5 dd'l m6Z6 dd(l m7Z7 dd)l m8Z8 dd*l m9Z9 dd+l m:Z: dd,l m;Z; dd-l m<Z< G d.d/„ d/e2ƒZ=er¬e >¡ dkr¬G d0d1„ d1e=ƒZ?G d2d3„ d3e2ƒZ@eAd4krÚdd5lBmCZC eCeDƒ dS )6zTests for psutil.Process class.é    N)ÚAIX)ÚBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚOSX)ÚPOSIX)ÚSUNOS)ÚWINDOWS)Ú	open_text)ÚFileNotFoundError)Úlong)ÚPY3)Úsuper)ÚAPPVEYOR)Ú
call_until)Ú
CI_TESTING)Úcopyload_shared_lib)Ú
create_exe)ÚGITHUB_ACTIONS)ÚGLOBAL_TIMEOUT)ÚHAS_CPU_AFFINITY)ÚHAS_ENVIRON)Ú
HAS_IONICE)ÚHAS_MEMORY_MAPS)ÚHAS_PROC_CPU_NUM)ÚHAS_PROC_IO_COUNTERS)Ú
HAS_RLIMIT)ÚHAS_THREADS)Úmock)Úprocess_namespace)ÚPsutilTestCase)ÚPYPY)Ú
PYTHON_EXE)Úreap_children)Úretry_on_failure)Úsh)Úskip_on_access_denied)Úskip_on_not_implemented)Ú
ThreadTask)Úunittest)Úwait_for_pidc               @   sÒ  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	 
e d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Ze	 
e d!¡d"d#„ ƒZd$d%„ Ze	 
e d&¡d'd(„ ƒZe	 
e d!¡eed)d*d+„ ƒƒZe	 
e d!¡e	 
e d,¡d-d.„ ƒƒZe	 
e d!¡e	 
e  d/¡d0d1„ ƒƒZ!e	 
e" d!¡d2d3„ ƒZ#e	 
e" d!¡d4d5„ ƒZ$e	 
e" d!¡d6d7„ ƒZ%e	 
e" d!¡d8d9„ ƒZ&e	 
e" d!¡d:d;„ ƒZ'd<d=„ Z(e	 
e  d>¡d?d@„ ƒZ)e	 
e* d!¡dAdB„ ƒZ+e,ƒ e-e.d)e	 
e* d!¡dCdD„ ƒƒƒZ/e,ƒ dEdF„ ƒZ0dGdH„ Z1e	 
e2 d!¡dIdJ„ ƒZ3e	 
e2 d!¡dKdL„ ƒZ4dMdN„ Z5dOdP„ Z6dQdR„ Z7dSdT„ Z8e	 
e9dU¡dVdW„ ƒZ:dXdY„ Z;e	 
e9dZ¡d[d\„ ƒZ<e	 
e=d]¡e	 
e>d^¡e	 
e9dU¡d_d`„ ƒƒƒZ?e	 
e d&¡dadb„ ƒZ@e	 
e d&¡dcdd„ ƒZAdedf„ ZBdgdh„ ZCdidj„ ZDdkdl„ ZEdmdn„ ZFe	 
eG d!¡dodp„ ƒZHe	 
eG d!¡dqdr„ ƒZIe	 
eG d!¡dsdt„ ƒZJe	 
eKdu¡e	 
eLdv¡dwdx„ ƒƒZMe	 
eKdu¡e	 
eLdv¡dydz„ ƒƒZNe	 
e d&¡d{d|„ ƒZOeed)e	 
ePp´eQd}¡d~d„ ƒƒZRd€d„ ZSd‚dƒ„ ZTd„d…„ ZUd†d‡„ ZVe,ƒ dˆd‰„ ƒZWdŠd‹„ ZXdŒd„ ZYdŽd„ ZZdd‘„ Z[d’d“„ Z\d”d•„ Z]d–d—„ Z^d˜d™„ Z_dšd›„ Z`dœd„ ZadždŸ„ Zbe	 
e d&¡d d¡„ ƒZce	 
e d&¡d¢d£„ ƒZde	 
e d&¡d¤d¥„ ƒZed¦d§„ Zfe	 
eg d!¡d¨d©„ ƒZhe	 
eg d!¡e	 
e d&¡dªd«„ ƒƒZid¬S )­ÚTestProcesszTests for psutil.Process class.c             O   s   | j ||Ž}t |j¡S )N)Úspawn_testprocÚpsutilÚProcessÚpid)ÚselfÚargsÚkwargsÚsproc© r6   úL/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_process.pyÚspawn_psprocN   s    zTestProcess.spawn_psprocc          	   C   s:   t  ¡ }|  |jt ¡ ¡ |  t¡ d|_W d Q R X d S )Né!   )r/   r0   ÚassertEqualr1   ÚosÚgetpidÚassertRaisesÚAttributeError)r2   Úpr6   r6   r7   Útest_pidT   s    zTestProcess.test_pidc             C   sJ   |   ¡ }| ¡  | ¡ }tr,|  |tj¡ n|  |tj ¡ |  |¡ d S )N)	r8   ÚkillÚwaitr   r:   ÚsignalÚSIGTERMÚSIGKILLÚassertProcessGone)r2   r?   Úcoder6   r6   r7   Ú	test_killZ   s    zTestProcess.test_killc             C   sJ   |   ¡ }| ¡  | ¡ }tr,|  |tj¡ n|  |tj ¡ |  |¡ d S )N)r8   Ú	terminaterB   r   r:   rC   rD   rF   )r2   r?   rG   r6   r6   r7   Útest_terminated   s    zTestProcess.test_terminatec             C   sX   t r
tjntj}|  ¡ }| |¡ | ¡ }tr<|  ||¡ n|  || ¡ |  	|¡ d S )N)
r	   rC   rE   rD   r8   Úsend_signalrB   r   r:   rF   )r2   Úsigr?   rG   r6   r6   r7   Útest_send_signaln   s    
zTestProcess.test_send_signalz	not POSIXc          	   C   s‚   t j}|  ¡ }tjdttjdƒd |  t	j
|j|¡ W d Q R X |  ¡ }tjdttjdƒd |  t	j|j|¡ W d Q R X d S )Nzpsutil.os.killÚ )Úside_effect)rC   rD   r8   r    ÚpatchÚOSErrorÚerrnoZESRCHr=   r/   ÚNoSuchProcessrK   ÚEPERMÚAccessDenied)r2   rL   r?   r6   r6   r7   Útest_send_signal_mockedy   s    z#TestProcess.test_send_signal_mockedc             C   sÒ   t ddg}|  |¡}| ¡ }|  |d¡ |  |¡ t ddg}| j|tjd}| ¡ }|  |d¡ |  |¡ t ddg}|  |¡}| ¡ }|  |d¡ |  |¡ t dd	g}|  |¡}| ¡ }|  |d¡ |  |¡ d S )
Nz-cÚpassr   z1 / 0)Ústderré   zimport sys; sys.exit(5);é   zimport os; os._exit(5);)r$   r8   rB   r:   rF   Ú
subprocessÚPIPE)r2   Úcmdr?   rG   r6   r6   r7   Útest_wait_exited†   s(    









zTestProcess.test_wait_exitedc             C   sê   |   ¡ }tr‚| tj¡ | jtj|jdd | tj	¡ | jtj|jdd | tj
¡ |  | ¡ tj
 ¡ |  | ¡ tj
 ¡ nd| ¡  | jtj|jdd | ¡  | jtj|jdd | ¡  |  | ¡ tj
¡ |  | ¡ tj
¡ d S )Ngü©ñÒMbP?)Útimeout)r8   r	   rK   rC   ÚSIGSTOPr=   r/   ÚTimeoutExpiredrB   ÚSIGCONTrD   r:   ÚsuspendÚresumerI   )r2   r?   r6   r6   r7   Útest_wait_stopped¡   s     zTestProcess.test_wait_stoppedc             C   s’   |   ¡ \}}|  tj|jd¡ |  tj|jd¡ | ¡  | ¡  | ¡ }| ¡ }trr|  |tj	 ¡ |  |d ¡ n|  |tj	¡ |  |tj	¡ d S )Ng{®Gáz„?)
Úspawn_children_pairr=   r/   ra   rB   rI   r	   r:   rC   rD   )r2   ÚchildÚ
grandchildZ	child_retZgrandchild_retr6   r6   r7   Útest_wait_non_children¶   s    z"TestProcess.test_wait_non_childrenc             C   sH   |   ¡ }| ¡  |  tj|jd¡ |  tj|jd¡ |  t|jd¡ d S )Ng{®Gáz„?r   éÿÿÿÿ)r8   Únamer=   r/   ra   rB   Ú
ValueError)r2   r?   r6   r6   r7   Útest_wait_timeoutË   s
    zTestProcess.test_wait_timeoutc             C   s¤   |   ¡ }|  tj|jd¡ | ¡  t ¡ t }xBt ¡ |k rfy| d¡}P W q0 tjk
rb   Y q0X q0W |  d¡‚t	rˆ|  
|tj ¡ n|  
|tj¡ |  |¡ d S )Nr   r_   )r8   r=   r/   ra   rB   rA   Útimer   Úfailr	   r:   rC   rE   rD   rF   )r2   r?   Zstop_atrG   r6   r6   r7   Útest_wait_timeout_nonblockingÒ   s    


z)TestProcess.test_wait_timeout_nonblockingc          	   C   s|   t  ¡ }|jdd |jdd x4tdƒD ](}|jd d}|  |t¡ |  |d¡ q*W |  t¡ |jdd W d Q R X d S )Ngü©ñÒMbP?)Úintervaléd   g        rj   )	r/   r0   Úcpu_percentÚrangeÚassertIsInstanceÚfloatÚassertGreaterEqualr=   rl   )r2   r?   ÚxÚpercentr6   r6   r7   Útest_cpu_percentå   s    zTestProcess.test_cpu_percentc          	   C   s4   t jdd d}t ¡  ¡  |js&t‚W d Q R X d S )Nzpsutil.cpu_count)Zreturn_value)r    rP   r/   r0   rs   ÚcalledÚAssertionError)r2   Úmr6   r6   r7   Útest_cpu_percent_numcpus_noneð   s    z)TestProcess.test_cpu_percent_numcpus_nonec          	   C   sŽ   t  ¡  ¡ }|jdks(|jdks(t|ƒ‚|jdks:t|ƒ‚|jdksLt|ƒ‚trb|j	dksbt|ƒ‚x&|j
D ]}t dt t||ƒ¡¡ qjW d S )Ng        z%H:%M:%S)r/   r0   Ú	cpu_timesÚuserÚsystemr|   Úchildren_userÚchildren_systemr   ZiowaitÚ_fieldsrn   ÚstrftimeÚ	localtimeÚgetattr)r2   Útimesrk   r6   r6   r7   Útest_cpu_timesö   s    zTestProcess.test_cpu_timesc             C   sŒ   t  ¡  ¡ d d… \}}t ¡ d d… \}}t||gƒt||gƒ dkrZ|  d||f ¡ t||gƒt||gƒ dkrˆ|  d||f ¡ d S )Né   gš™™™™™¹?zexpected: %s, found: %s)r/   r0   r   r;   rˆ   ÚmaxÚminro   )r2   Ú	user_timeZkernel_timeÚutimeZktimer6   r6   r7   Útest_cpu_times_2  s    zTestProcess.test_cpu_times_2znot supportedc             C   sP   t  ¡ }| ¡ }|  |d¡ t  ¡ dkr4|  |d¡ |  | ¡ tt  ¡ ƒ¡ d S )Nr   rY   )r/   r0   Zcpu_numrw   Ú	cpu_countr:   ÚassertInrt   )r2   r?   Únumr6   r6   r7   Útest_cpu_num  s    zTestProcess.test_cpu_numc             C   sZ   |   ¡ }t ¡ }| ¡ }t|| ƒ}|dkr@|  d|||f ¡ t dt | ¡ ¡¡ d S )NrŠ   z'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)r8   rn   Úcreate_timeÚabsro   r…   r†   )r2   r?   Únowr”   Ú
differencer6   r6   r7   Útest_create_time  s    zTestProcess.test_create_timez
POSIX onlyc             C   s4   t  ¡  ¡ }|d k	r0tj tdƒ¡}|  ||¡ d S )NÚtty)r/   r0   Úterminalr;   ÚpathÚrealpathr'   r:   )r2   rš   r™   r6   r6   r7   Útest_terminal'  s    zTestProcess.test_terminal)Zonly_ifc          	   C   s¬  t  ¡ }| ¡ }ttdƒ}| ¡  W d Q R X | ¡ }ts„ts„|  |j	|j	¡ |  
|j|j¡ tr¤|  |j|j¡ |  
|j|j¡ n |  |j|j¡ |  |j|j¡ | ¡ }t|  ¡ dƒ.}trÖ| tdd dƒ¡ n| dd ¡ W d Q R X | ¡ }|  |j|j¡ |  |j|j¡ |  |j	|j	¡ |  |j|j¡ tr\|  |j|j¡ |  |j|j¡ xJtt|ƒƒD ]:}tr‚|dkr‚qj|  || d¡ |  || d¡ qjW d S )NÚrbÚwbrx   i@B ÚasciirŠ   r   )r/   r0   Zio_countersÚopenr$   Úreadr   r   ÚassertGreaterÚ
read_countr:   Úwrite_countr   Z
read_charsZwrite_charsrw   Ú
read_bytesÚwrite_bytesÚ
get_testfnr   ÚwriteÚbytesrt   Úlen)r2   r?   Zio1ÚfZio2Úir6   r6   r7   Útest_io_counters.  s>    zTestProcess.test_io_countersz
linux onlyc          
   C   sÄ  t  ¡ }ts"|  | ¡ d t j¡ |  t jd¡ |  t jd¡ |  t jd¡ |  t jd¡ | ¡ }z4| t j¡ |  t	| ¡ ƒt jdf¡ |  
t¡ |jt jdd W d Q R X | t j¡ |  t	| ¡ ƒt jdf¡ |jt jdd |  t	| ¡ ƒt jdf¡ |  
t¡ |jt jdd W d Q R X y|jt jdd W n t jk
rT   Y nX |  td|jt jd¡ |  td|jt jd¡ | jtd	|jdd W d |\}}|t jkr²d}| ||¡ X d S )
Nr   rY   rŠ   é   é   )Úvalueé   zioclass accepts no valuez$'ioclass' argument must be specified)r/   r0   r   r:   ÚioniceZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEÚtupler=   rl   rU   ÚassertRaisesRegex)r2   r?   ÚinitÚioclassr±   r6   r6   r7   Útest_ionice_linuxY  sH    zTestProcess.test_ionice_linuxz!not supported on this win versionc          	   C   sâ   t  ¡ }ts|  | ¡ t j¡ | ¡ }zª| t j¡ |  | ¡ t j¡ | t j¡ |  | ¡ t j¡ y| t j¡ W n t j	k
rŠ   Y nX |  | ¡ t j¡ | j
td|jt jdd |  
td|jt jd ¡ W d | |¡ X d S )Nz&value argument not accepted on WindowsrY   )r±   zis not a valid priority)r/   r0   r   r:   r³   ZIOPRIO_NORMALZIOPRIO_VERYLOWZ
IOPRIO_LOWZIOPRIO_HIGHrU   rµ   Ú	TypeErrorrl   )r2   r?   r¶   r6   r6   r7   Útest_ionice_win…  s*    zTestProcess.test_ionice_winc             C   sÔ   dd l }t t ¡ ¡}dd„ ttƒD ƒ}|s4t|ƒ‚xš|D ]’}tt|ƒ}|  |d¡ |t|ƒkr’|  	|t||ƒ¡ t
rxq:|  	| |¡| |¡¡ q:| |¡}|  	t|ƒd¡ |  |d d¡ |  |d d¡ q:W d S )Nr   c             S   s   g | ]}|  d ¡r|‘qS )ZRLIMIT)Ú
startswith)Ú.0rx   r6   r6   r7   ú
<listcomp>¦  s    z/TestProcess.test_rlimit_get.<locals>.<listcomp>rŠ   rj   rY   )Úresourcer/   r0   r;   r<   Údirr|   r‡   rw   r:   r#   ÚrlimitZ	getrlimitr«   )r2   r¾   r?   Únamesrk   r±   Úretr6   r6   r7   Útest_rlimit_get¢  s     


zTestProcess.test_rlimit_getc          	   C   s€   |   ¡ }| tjd¡ |  | tj¡d¡ trX|  td¡ tj 	d¡ d¡ W d Q R X |  
t¡ | tjd¡ W d Q R X d S )N)rZ   rZ   zcan't use prlimitr   )rZ   rZ   rZ   )r8   rÀ   r/   ZRLIMIT_NOFILEr:   r   rµ   rl   Z_psplatformr0   r=   )r2   r?   r6   r6   r7   Útest_rlimit_set¹  s    zTestProcess.test_rlimit_setc             C   sÞ   t  ¡ }|  ¡ }| t j¡\}}zŒ| t jd|f¡ t|dƒ}| d¡ W d Q R X |  t¡&}t|dƒ}| d¡ W d Q R X W d Q R X |  	t
rš|jjn|jd tj¡ W d | t j||f¡ |  	| t j¡||f¡ X d S )Ni   rŸ   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   )r/   r0   r¨   rÀ   ÚRLIMIT_FSIZEr¡   r©   r=   ÚIOErrorr:   r   Ú	exceptionrR   ZEFBIG)r2   r?   ÚtestfnÚsoftÚhardr¬   Úexcr6   r6   r7   Útest_rlimitÆ  s    zTestProcess.test_rlimitc             C   s˜   t  ¡ }| t j¡\}}zN| t jd|f¡ | t jt j|f¡ t|  ¡ dƒ}| d¡ W d Q R X W d | t j||f¡ |  | t j¡||f¡ X d S )Ni   rŸ   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)	r/   r0   rÀ   rÅ   ÚRLIM_INFINITYr¡   r¨   r©   r:   )r2   r?   rÉ   rÊ   r¬   r6   r6   r7   Útest_rlimit_infinityÚ  s    z TestProcess.test_rlimit_infinityc             C   s<   t  ¡ }| t j¡\}}|  t j|¡ | t j||f¡ d S )N)r/   r0   rÀ   rÅ   r:   rÍ   )r2   r?   rÉ   rÊ   r6   r6   r7   Útest_rlimit_infinity_valueé  s    z&TestProcess.test_rlimit_infinity_valuec          	   C   sr   t  ¡ }tr<y| ¡ }W qD t jk
r8   t d¡‚Y qDX n| ¡ }tƒ  | ¡ }|  ||d ¡ W d Q R X d S )Nz$on OpenBSD this requires root accessrY   )	r/   r0   r   Únum_threadsrU   r+   ÚSkipTestr*   r:   )r2   r?   Ústep1Ústep2r6   r6   r7   Útest_num_threadsõ  s    zTestProcess.test_num_threadszWINDOWS onlyc             C   s   t  ¡ }|  | ¡ d¡ d S )Nr   )r/   r0   r£   Znum_handles)r2   r?   r6   r6   r7   Útest_num_handles  s    zTestProcess.test_num_handlesc          	   C   s¸   t  ¡ }tr<y| ¡ }W qD t jk
r8   t d¡‚Y qDX n| ¡ }tƒ d | ¡ }|  t	|ƒt	|ƒd ¡ |d }|  |j
|d ¡ |  |j|d ¡ |  |j|d ¡ W d Q R X d S )Nz$on OpenBSD this requires root accessrY   r   rŠ   )r/   r0   r   ÚthreadsrU   r+   rÑ   r*   r:   r«   Úidr   Úsystem_time)r2   r?   rÒ   rÓ   Zathreadr6   r6   r7   Útest_threads  s    zTestProcess.test_threadsc             C   sŽ   |   ¡ }tr:y| ¡  W n  tjk
r8   t d¡‚Y nX | j| ¡ j	t
dd„ | ¡ D ƒƒdd | j| ¡ jt
dd„ | ¡ D ƒƒdd d S )Nz$on OpenBSD this requires root accessc             S   s   g | ]
}|j ‘qS r6   )r   )r¼   rx   r6   r6   r7   r½   -  s    z.TestProcess.test_threads_2.<locals>.<listcomp>gš™™™™™¹?)Údeltac             S   s   g | ]
}|j ‘qS r6   )rØ   )r¼   rx   r6   r6   r7   r½   0  s    )r8   r   rÖ   r/   rU   r+   rÑ   ZassertAlmostEqualr   r€   Úsumr   )r2   r?   r6   r6   r7   Útest_threads_2   s    zTestProcess.test_threads_2c             C   sâ   t  ¡ }| ¡ d d… \}}| ¡ }|  |d¡ |  |d¡ d gd }| ¡ d d… \}}| ¡ }|  ||¡ |  ||¡ |  ||¡ ~tr´| ¡ }	|  |	j|	j	¡ |  |	j
|	j¡ | ¡ }	x |	jD ]}
|  t|	|
ƒd¡ qÄW d S )NrŠ   r   i`ã )r/   r0   Zmemory_infoÚmemory_percentr£   rw   r   r:   ZrssZwsetÚvmsZpagefiler„   r‡   )r2   r?   Zrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2Úmemrk   r6   r6   r7   Útest_memory_info2  s&    
zTestProcess.test_memory_infoc             C   s®   t  ¡ }t  ¡ j}| ¡ }xT|jD ]J}t||ƒ}| j|d||fd |dkrPts"t	rVq"| j
|||||fd q"W t	s|ts|trŠ|  |jd¡ t	rª|  |jd¡ |  |jd¡ d S )Nr   )ÚmsgrÞ   )r/   r0   Zvirtual_memoryÚtotalZmemory_full_infor„   r‡   rw   r   r   ZassertLessEqualr   r   ÚussZpssZswap)r2   r?   râ   rß   rk   r±   r6   r6   r7   Útest_memory_full_infoQ  s    

z!TestProcess.test_memory_full_infoc             C   s¼  t  ¡ }| ¡ }dd„ |D ƒ}|  t|ƒtt|ƒƒ¡ |jdd} xú|D ]ò}|j d¡sJtj 	|j¡srt
|jƒ‚trìy*tj |j¡sžtj |j¡sžt
|jƒ‚W nH t
k
rè   ts¸‚ n,tdƒ}| ¡ }W d Q R X d|j |krä‚ Y nX qJdtj |j¡krJyt |j¡}W n tk
r$   Y qJX t |j¡sJt
|jƒ‚qJW xv|D ]n}xf|jD ]\}	t||	ƒ}
|	d	krpqRn<|	d
krŠ|
s¬t
|
ƒ‚n"|  |
ttf¡ |
dksRt
|
ƒ‚qRW qFW d S )Nc             S   s   g | ]}|‘qS r6   r6   )r¼   rx   r6   r6   r7   r½   e  s    z0TestProcess.test_memory_maps.<locals>.<listcomp>F)Zgroupedú[z/proc/self/smapsz%s (deleted)Z64r›   )ÚaddrZpermsr   )r/   r0   Úmemory_mapsr:   r«   Úsetr›   r»   r;   Úisabsr|   r	   ÚexistsÚislinkr   r   r¢   ÚbasenameÚstatr   ÚS_ISREGÚst_moder„   r‡   ru   Úintr   )r2   r?   ÚmapsÚpathsZext_mapsÚntr¬   ÚdataÚstÚfnamer±   r6   r6   r7   Útest_memory_mapsa  sD    





zTestProcess.test_memory_mapsc          	      sL   t  ¡ }tƒ 4}dd„ ‰ ‡ fdd„| ¡ D ƒ}|  ˆ |ƒ|¡ W d Q R X d S )Nc             S   s   t j t j | ¡¡S )N)r;   r›   rœ   Únormcase)r?   r6   r6   r7   Únormpath”  s    z8TestProcess.test_memory_maps_lists_lib.<locals>.normpathc                s   g | ]}ˆ |j ƒ‘qS r6   )r›   )r¼   rx   )rù   r6   r7   r½   –  s   z:TestProcess.test_memory_maps_lists_lib.<locals>.<listcomp>)r/   r0   r   rç   r‘   )r2   r?   r›   Zlibpathsr6   )rù   r7   Útest_memory_maps_lists_lib  s    
z&TestProcess.test_memory_maps_lists_libc             C   s>   t  ¡ }| ¡  | jt|jdd ts.ts.tr:|jdd d S )Nz?!?)Zmemtyperã   )r/   r0   rÝ   r=   rl   r   r   r   )r2   r?   r6   r6   r7   Útest_memory_percentš  s
    zTestProcess.test_memory_percentc             C   sL   |   ¡ }| ¡ st‚| ¡ s t‚| ¡  | ¡  | ¡ r<t‚| ¡ rHt‚d S )N)r8   Ú
is_runningr|   rA   rB   )r2   r?   r6   r6   r7   Útest_is_running¡  s    zTestProcess.test_is_runningc             C   sÔ   |   ¡ }| ¡ }y|  |t¡ W n” tk
r´   trbt|ƒttƒkrbtjj	}|  ||ƒ|tƒ¡ nNdt
jd t
jd f }y |  | |d¡t |d¡¡ W n tk
r®   Y nX Y nX t|ddgƒ}|  |d¡ d S )Nz%s.%sr   rY   rN   z-czimport os; print('hey')Zhey)r8   Úexer:   r$   r|   r   r«   r;   r›   rø   ÚsysÚversion_infoÚreplacer'   )r2   r?   rþ   rø   ÚverÚoutr6   r6   r7   Útest_exeª  s     zTestProcess.test_exec             C   sV   t ddg}|  |¡}ts ts tr6|  | ¡ d t ¡ n|  d | ¡ ¡d |¡¡ d S )Nz-czimport time; time.sleep(60)r   ú )r$   r8   r   r   r   r:   ÚcmdlineÚjoin)r2   r  r?   r6   r6   r7   Útest_cmdlineÆ  s
    

zTestProcess.test_cmdlinezbroken on PYPYc             C   s>   |   ¡ }t|ƒ |gdgd  }|  |¡}|  | ¡ |¡ d S )NÚ
0123456789é   )r¨   r   r8   r:   r  )r2   rÈ   r  r?   r6   r6   r7   Útest_long_cmdlineÓ  s
    
zTestProcess.test_long_cmdlinec             C   sJ   |   t¡}| ¡  ¡ }tj tj tj	¡¡ ¡ }| 
|¡sFt||fƒ‚d S )N)r8   r$   rk   Úlowerr;   r›   rì   rœ   rÿ   Ú
executabler»   r|   )r2   r?   rk   Zpyexer6   r6   r7   Ú	test_nameÛ  s    
zTestProcess.test_namezunreliable on PYPYc             C   s:   | j dd}t|ƒ |  |¡}|  | ¡ tj |¡¡ d S )NZ01234567890123456789)Úsuffix)r¨   r   r8   r:   rk   r;   r›   rì   )r2   rÈ   r?   r6   r6   r7   Útest_long_nameá  s    
zTestProcess.test_long_namezbroken on SUNOSzbroken on AIXc             C   s|   | j dd}t|ƒ |ddddddg}|  |¡}|  | ¡ |¡ |  | ¡ tj |¡¡ |  tj 	| 
¡ ¡tj 	|¡¡ d S )Nz	foo bar ))r  z-cz9import time; [time.sleep(0.01) for x in range(3000)];arg1Zarg2rN   Zarg3)r¨   r   r8   r:   r  rk   r;   r›   rì   rø   rþ   )r2   Z
funky_pathr  r?   r6   r6   r7   Útest_prog_w_funky_nameé  s    
z"TestProcess.test_prog_w_funky_namec             C   sX   t  ¡ }| ¡ \}}}|  |t ¡ ¡ |  |t ¡ ¡ ttdƒrT|  t ¡ | ¡ ¡ d S )NÚ	getresuid)	r/   r0   Úuidsr:   r;   ÚgetuidÚgeteuidÚhasattrr  )r2   r?   ÚrealÚ	effectiveÚsavedr6   r6   r7   Ú	test_uidsû  s    
zTestProcess.test_uidsc             C   sX   t  ¡ }| ¡ \}}}|  |t ¡ ¡ |  |t ¡ ¡ ttdƒrT|  t ¡ | ¡ ¡ d S )Nr  )	r/   r0   Úgidsr:   r;   ÚgetgidÚgetegidr  Ú	getresgid)r2   r?   r  r  r  r6   r6   r7   Ú	test_gids	  s    
zTestProcess.test_gidsc             C   sz  t  ¡ }|  t|jd¡ | ¡ }z(tržxrt jt jt jt j	t j
t jgD ]R}| j|d< y| |¡ W n t jk
r|   Y nX |  | ¡ |¡ W d Q R X qFW nªyttdƒrÈ|  t tjt ¡ ¡| ¡ ¡ | d¡ |  | ¡ d¡ ttdƒr|  t tjt ¡ ¡| ¡ ¡ ts,| d¡ |  | ¡ d¡ W n t jk
rF   Y nX W d y| |¡ W n t jk
rr   Y nX X d S )NÚstr)ÚprioÚgetpriorityrY   r   )r/   r0   r=   r¹   Únicer   ZNORMAL_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZsubTestrU   r:   r  r;   r"  ÚPRIO_PROCESSr<   r   )r2   r?   r¶   r!  r6   r6   r7   Ú	test_nice  sJ     





zTestProcess.test_nicec             C   s   t  ¡ }|  | ¡ t j¡ d S )N)r/   r0   r:   ÚstatusÚSTATUS_RUNNING)r2   r?   r6   r6   r7   Útest_statusC  s    zTestProcess.test_statusc             C   sd   |   ¡ }| ¡ }trP| d¡\}}|  |t ¡ ¡ dtjkr`|  |tjd ¡ n|  |t ¡ ¡ d S )Nú\Z
USERDOMAIN)	r8   Úusernamer   Úsplitr:   ÚgetpassZgetuserr;   Úenviron)r2   r?   r*  Údomainr6   r6   r7   Útest_usernameG  s    
zTestProcess.test_usernamec             C   s    |   ¡ }|  | ¡ t ¡ ¡ d S )N)r8   r:   Úcwdr;   Úgetcwd)r2   r?   r6   r6   r7   Útest_cwdR  s    zTestProcess.test_cwdc             C   s$   t ddg}|  |¡}t|jdƒ d S )Nz-cz/import os, time; os.chdir('..'); time.sleep(60)z#ret == os.path.dirname(os.getcwd()))r$   r8   r   r0  )r2   r]   r?   r6   r6   r7   Ú
test_cwd_2V  s    
zTestProcess.test_cwd_2c             C   sŠ  t  ¡ }| ¡ }|st|ƒ‚|  |j|¡ ttdƒrL|  |tt 	|j
¡ƒ¡ |  t|ƒtt|ƒƒ¡ tttt jddƒƒƒ}xr|D ]j}| |g¡ |  | ¡ |g¡ ttdƒrÊ|  | ¡ tt 	|j
¡ƒ¡ t|dƒr‚|  | ¡ d | ¡ ¡ q‚W | g ¡ tr|  | ¡ |j ¡ ¡ n|  | ¡ |¡ ttdƒrP|  | ¡ tt 	|j
¡ƒ¡ |  t|jd¡ | |¡ | t|ƒ¡ | t|ƒ¡ d S )NÚsched_getaffinityT)ÚpercpuÚnum_cpur   rY   )r/   r0   Úcpu_affinityr|   Ú
addCleanupr  r;   r:   Úlistr4  r1   r«   rè   rt   rs   r6  r   Ú_procZ_get_eligible_cpusr=   r¹   r´   )r2   r?   ÚinitialZall_cpusÚnr6   r6   r7   Útest_cpu_affinity\  s6    







zTestProcess.test_cpu_affinityc             C   sp   |   ¡ }ttjddƒd g}|  t|j|¡ |  t|jtddƒ¡ |  t|jddg¡ |  t|jddg¡ d S )	NT)r5  é
   i'  iø*  r   Ú1rj   )	r8   r«   r/   r   r=   rl   r7  rt   r¹   )r2   r?   Zinvalid_cpur6   r6   r7   Útest_cpu_affinity_errs„  s    z"TestProcess.test_cpu_affinity_errsc             C   s¾   t  ¡ }| ¡ }|st|ƒ‚|  |j|¡ t|ƒdkrB|d d… }g }xBtdt|ƒd ƒD ],}x&t ||¡D ]}|rl| 	t
|ƒ¡ qlW qZW x.|D ]&}| |¡ |  t| ¡ ƒt|ƒ¡ qW d S )Né   r   rY   )r/   r0   r7  r|   r8  r«   rt   Ú	itertoolsÚcombinationsÚappendr9  r:   Úsorted)r2   r?   r;  Zcombosr­   ZsubsetÚcombor6   r6   r7   Ú"test_cpu_affinity_all_combinations  s    

z.TestProcess.test_cpu_affinity_all_combinationszbroken on BSDzunreliable on APPVEYORc       	   	   C   s`  t  ¡ }|  ¡ }| ¡ }|  ||¡ t|dƒx}| d¡ | ¡  t|jdt	|ƒ ƒ}dd„ |D ƒ}|  
tj |¡|¡ tr¢x$|D ]}|j|kr‚|  |jd¡ q‚W W d Q R X x"|D ]}tj |j¡s²t|ƒ‚q²W d| }|  td|g¡}xLtd	ƒD ],}d
d„ | ¡ D ƒ}||krP t d¡ qòW |  
tj |¡|¡ x$|D ]}tj |¡s<t|ƒ‚q<W d S )NrŸ   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzlen(ret) != %ic             S   s   g | ]}t j |j¡‘qS r6   )r;   r›   rø   )r¼   rx   r6   r6   r7   r½   ¯  s    z/TestProcess.test_open_files.<locals>.<listcomp>i   z2import time; f = open(r'%s', 'r'); time.sleep(60);z-crr   c             S   s   g | ]}t j |j¡‘qS r6   )r;   r›   rø   )r¼   rx   r6   r6   r7   r½   ½  s    g{®Gáz„?)r/   r0   r¨   Ú
open_filesÚassertNotInr¡   r©   Úflushr   r«   r‘   r;   r›   rø   r   r:   ÚpositionÚisfiler|   r8   r$   rt   rn   Úsleep)	r2   r?   rÈ   Úfilesr¬   Ú	filenamesÚfiler  rx   r6   r6   r7   Útest_open_files¢  s4    





zTestProcess.test_open_filesc          	   C   sþ   t  ¡ }tjj}|  ¡ }t|dƒÒ}xJ| ¡ D ](}||jƒ||jƒksT|j	| 
¡ kr.P q.W |  dt| ¡ ƒ ¡ |  ||jƒ||jƒ¡ trœ|  |j	d¡ n|  |j	| 
¡ ¡ | ¡ d }|  |d |j¡ |  |d |j	¡ |  |j| ¡ ¡ W d Q R X d S )NÚwzno file found; files=%srj   r   rY   )r/   r0   r;   r›   rø   r¨   r¡   rH  rk   ÚfdÚfilenoro   Úreprr:   r   rI  )r2   r?   rø   rÈ   ÚfileobjrP  Zntupler6   r6   r7   Útest_open_files_2Ç  s"    zTestProcess.test_open_files_2c             C   sŽ   t  ¡ }|  ¡ }| ¡ }t|dƒ}|  |j¡ |  | ¡ |d ¡ t ¡ }|  |j¡ |  | ¡ |d ¡ | ¡  | ¡  |  | ¡ |¡ d S )NrR  rY   rŠ   )	r/   r0   r¨   Znum_fdsr¡   r8  Úcloser:   Úsocket)r2   r?   rÈ   ÚstartrP  Úsockr6   r6   r7   Útest_num_fdsâ  s    
zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDc             C   sL   t  ¡ }t| ¡ ƒ}x(tdƒD ]}t| ¡ ƒ}||krd S qW |  d¡ d S )Ni ¡ z7num ctx switches still the same after 50.000 iterations)r/   r0   rÛ   Znum_ctx_switchesrt   ro   )r2   r?   Úbeforerx   Úafterr6   r6   r7   Útest_num_ctx_switchesñ  s    z!TestProcess.test_num_ctx_switchesc             C   sN   t  ¡ }ttdƒr&|  | ¡ t ¡ ¡ |  ¡ }|  | ¡ t ¡ ¡ t	rJd S d S )NÚgetppid)
r/   r0   r  r;   r:   Úppidr`  r8   r<   r   )r2   r?   r6   r6   r7   Ú	test_ppidü  s    
zTestProcess.test_ppidc             C   sB   |   ¡ }|  | ¡ jt ¡ ¡ t ¡ d }|  t 	|¡ ¡ ¡ d S )Nr   )
r8   r:   Úparentr1   r;   r<   r/   ÚpidsÚassertIsNoner0   )r2   r?   Z
lowest_pidr6   r6   r7   Útest_parent  s    zTestProcess.test_parentc             C   s8   t  ¡ }|  ¡ \}}|  | ¡ |¡ |  | ¡ |¡ d S )N)r/   r0   rf   r:   rc  )r2   rc  rg   rh   r6   r6   r7   Útest_parent_multi  s    zTestProcess.test_parent_multic          	   C   s<   |   ¡ }tjdt dd¡d |  | ¡ ¡ W d Q R X d S )Nzpsutil.Processr   Úfoo)rO   )r8   r    rP   r/   rS   re  rc  )r2   r?   r6   r6   r7   Útest_parent_disappeared  s    z#TestProcess.test_parent_disappearedc             C   s`   t  ¡ }| ¡ st‚|  ¡ \}}|  | ¡ d |¡ |  | ¡ d |¡ |  | ¡ d |¡ d S )Nr   rY   )r/   r0   Úparentsr|   rf   r:   )r2   rc  rg   rh   r6   r6   r7   Útest_parents  s    zTestProcess.test_parentsc             C   sœ   t  ¡ }|  | ¡ g ¡ |  |jddg ¡ | jdd}| ¡ }|jdd}xJ||fD ]>}|  t|ƒd¡ |  |d j|j¡ |  |d  ¡ |j¡ qVW d S )NT)Ú	recursiver   )ÚcreationflagsrY   )r/   r0   r:   Úchildrenr8   r«   r1   ra  )r2   rc  rg   Z	children1Z	children2rn  r6   r6   r7   Útest_children%  s    zTestProcess.test_childrenc             C   sf   t  ¡ }|  ¡ \}}|  | ¡ |g¡ |  |jdd||g¡ | ¡  | ¡  |  |jddg ¡ d S )NT)rl  )r/   r0   rf   r:   rn  rI   rB   )r2   rc  rg   rh   r6   r6   r7   Útest_children_recursive4  s    z#TestProcess.test_children_recursivec          	   C   sÌ   t  t¡}x@t ¡ D ]4}y|| ¡   d7  < W q tjk
rF   Y qX qW t| ¡ dd„ dd d }t	r~|dkr~|  
d¡‚t |¡}y|jdd	}W n tjk
r®   Y nX |  t|ƒtt|ƒƒ¡ d S )
NrY   c             S   s   | d S )NrY   r6   )rx   r6   r6   r7   Ú<lambda>J  ó    z6TestProcess.test_children_duplicates.<locals>.<lambda>)Úkeyrj   r   zPID 0T)rl  )ÚcollectionsÚdefaultdictrð   r/   Úprocess_iterra  ÚErrorrE  Úitemsr   ZskipTestr0   rn  rU   r:   r«   rè   )r2   Útabler?   r1   Úcr6   r6   r7   Útest_children_duplicatesA  s    



z$TestProcess.test_children_duplicatesc             C   s|   t  ¡ }|  ¡ \}}|jdd}|  t|ƒd¡ |  |d |¡ |  |d |¡ | ¡ }|  |d |¡ |  |d |¡ d S )NT)rl  rŠ   r   rY   )r/   r0   rf   rn  r:   r«   rj  )r2   rc  rg   rh   rn  rj  r6   r6   r7   Útest_parents_and_childrenU  s    z%TestProcess.test_parents_and_childrenc             C   sZ   |   ¡ }| ¡  x*tdƒD ]}| ¡ tjkr.P t d¡ qW | ¡  |  	| ¡ tj¡ d S )Nrr   g{®Gáz„?)
r8   rc   rt   r&  r/   ÚSTATUS_STOPPEDrn   rM  rd   ÚassertNotEqual)r2   r?   rx   r6   r6   r7   Útest_suspend_resumeb  s    zTestProcess.test_suspend_resumec             C   s$   |   ttjd¡ |   ttjd¡ d S )Nr?  rj   )r=   r¹   r/   r0   rl   )r2   r6   r6   r7   Útest_invalid_pidl  s    zTestProcess.test_invalid_pidc          
   C   sî  t  ¡ }|jddgd}|  t| ¡ ƒddg¡ t  tt  ¡ ƒ¡}|jdgdd}t|d t	ƒsp|  |d d¡ t
jddt jd	" |  |jd
gddd
di¡ W d Q R X t
jddt  |jd¡d	 | jt j|jd
gd W d Q R X t
jddt  |jd¡d	" |  |jd
gddd
di¡ W d Q R X t
jddtd	F | ¡ }|  d
t	| ¡ ƒ¡ |  t¡ |jd
gd W d Q R X W d Q R X |  t¡ | d¡ W d Q R X |  t¡ | dg¡ W d Q R X |  t¡ | ddg¡ W d Q R X d S )Nrþ   rk   )ÚattrsZconnectionsrh  )r  Zad_valuezpsutil.Process.niceT)ÚcreaterO   r#  rY   Zbar)r/   r0   Úas_dictr:   rE  ÚkeysrŒ   rd  Ú
isinstancer9  r    rP   rU   rS   r1   r=   ÚZombieProcessÚNotImplementedErrorrI  r¹   rl   )r2   r?   Údr6   r6   r7   Útest_as_dictp  s>    ""
"zTestProcess.test_as_dictc          
   C   sˆ   t  ¡ }t d¡8}| ¡  | ¡  | ¡  W d Q R X |  |jd¡ W d Q R X t d¡}| ¡  | ¡  W d Q R X |  |jd¡ d S )Nz$psutil._psplatform.Process.cpu_timesrY   rŠ   )r/   r0   r    rP   Úoneshotr   r:   Ú
call_count)r2   r?   r}   r6   r6   r7   Útest_oneshotž  s    
zTestProcess.test_oneshotc             C   sÐ   t  ¡ }t d¡€}t d¡j}| ¡ : | ¡  | ¡  | ¡  | ¡  | ¡  W d Q R X W d Q R X |  |jd¡ |  |jd¡ W d Q R X W d Q R X t d¡}| ¡  | ¡  W d Q R X |  |jd¡ d S )Nz$psutil._psplatform.Process.cpu_timesz(psutil._psplatform.Process.oneshot_enterrY   rŠ   )r/   r0   r    rP   rŠ  r   r:   r‹  )r2   r?   Úm1Úm2r}   r6   r6   r7   Útest_oneshot_twice«  s    

"zTestProcess.test_oneshot_twicec          	   C   s”   |   ¡ \}}| ¡ }| ¡ }|  ||¡ | ¡ & |  | ¡ |¡ |  | ¡ |¡ W d Q R X | ¡ & |  | ¡ |¡ |  | ¡ |¡ W d Q R X d S )N)rf   ra  r~  rŠ  r:   )r2   Úp1Úp2Zp1_ppidZp2_ppidr6   r6   r7   Útest_oneshot_cache¿  s    

zTestProcess.test_oneshot_cachec                sœ   ‡ fdd„}ˆ   ¡ }| ¡  | ¡  tr:ttjd|j ƒ ˆ  |¡ t	|ƒ}x"| 
|j¡D ]\}}|||ƒ qZW tr˜ts˜tjj}ˆ  || ¡ ƒ|tƒ¡ d S )Nc                s„   y
| ƒ }W nR t jk
r"   ‚ Y n^ t jk
r6   Y nJ t jk
r\   trV|dkrVd S ‚ Y n$X trn|dkrnd S ˆ  d| |f ¡‚d S )N)rÖ   rÐ   )rþ   rk   z+%r didn't raise NSP and returned %r instead)r/   r†  rS   rU   r   r   ro   )ÚfunZfun_namerÂ   )r2   r6   r7   Úassert_raises_nspÖ  s    
zFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nspz%s not in ret)r8   rI   rB   r   r   r/   rd  r1   rF   r!   ÚiterÚallr   r;   r›   rø   r:   rþ   r$   )r2   r”  r?   Únsr“  rk   rø   r6   )r2   r7   Útest_halfway_terminated_processÎ  s    
z+TestProcess.test_halfway_terminated_processc             C   sÔ   dd„ }|   ¡ \}}t |j¡}|  | ¡ tj¡ | ¡ s>t‚| 	¡  t
|ƒ}x | |j¡D ]\}}||ƒ q\W t |j¡s€t‚|  |jt ¡ ¡ |  |jdd„ t ¡ D ƒ¡ i t_|  |jdd„ t ¡ D ƒ¡ d S )Nc          	   S   s(   y| ƒ S  t jt jfk
r"   Y nX d S )N)r/   r†  rU   )r“  r6   r6   r7   Úsucceed_or_zombie_p_excú  s    z@TestProcess.test_zombie_process.<locals>.succeed_or_zombie_p_excc             S   s   g | ]
}|j ‘qS r6   )r1   )r¼   rx   r6   r6   r7   r½     s    z3TestProcess.test_zombie_process.<locals>.<listcomp>c             S   s   g | ]
}|j ‘qS r6   )r1   )r¼   rx   r6   r6   r7   r½     s    )Zspawn_zombier/   r0   r1   r:   r&  ÚSTATUS_ZOMBIErü   r|   rƒ  r!   r•  r–  Ú
pid_existsr‘   rd  rv  Z_pmap)r2   r™  rc  ÚzombieZzprocr—  r“  rk   r6   r6   r7   Útest_zombie_processø  s    zTestProcess.test_zombie_processc          	   C   sB   t  ¡ }tjdt  d¡d}| ¡ s*t‚|js4t‚W d Q R X d S )Nzpsutil.Processr   )rO   )r/   r0   r    rP   r†  rü   r|   r{   )r2   r?   r}   r6   r6   r7   Ú$test_zombie_process_is_running_w_exc  s
    z0TestProcess.test_zombie_process_is_running_w_excc          	   C   sH   t  ¡ }tjdt  d¡d"}|  | ¡ t j¡ |js:t	‚W d Q R X d S )Nz!psutil._psplatform.Process.statusr   )rO   )
r/   r0   r    rP   r†  r:   r&  rš  r{   r|   )r2   r?   r}   r6   r6   r7   Ú test_zombie_process_status_w_exc'  s
    z,TestProcess.test_zombie_process_status_w_excc          	   C   s‚  dt  ¡ krF|  t jt jd¡ t  d¡r,t‚|  t  d¡ ¡ d¡ d S t  d¡}t	rZt j
nt}|  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ |  ||j¡ |  ||jtj¡ t|ƒ}x˜| |j|j ¡D ]‚\}}y
|ƒ }W n t j
k
rú   Y qÒX |dkr|  |jd¡ qÒ|dkr@t	r*dnd}|  | ¡ |¡ qÒ|dkrÒ|sÒt|ƒ‚qÒW ts~|  dt  ¡ ¡ t  d¡s~t‚d S )Nr   rY   )r  r  r*  zNT AUTHORITY\SYSTEMÚrootrk   )r/   rd  r=   rS   r0   r›  r|   r:   ra  r   rU   rl   rB   rI   rc   rd   rA   rK   rC   rD   r!   r•  ÚgettersZsettersr  r*  r   r‘   )r2   r?   rË   r—  r“  rk   rÂ   r€   r6   r6   r7   Ú
test_pid_01  s:    



zTestProcess.test_pid_0c             C   sH   dd„ }d | _ t ¡ }|| ¡ ƒ}|tj ¡ ƒ}tsDtrD|  ||¡ d S )Nc             S   sb   |   dd ¡ |   dd ¡ |   dd ¡ trL|   dd ¡ |   dd ¡ |   dd ¡ tdd„ |  ¡ D ƒƒS )	NZPSUTIL_TESTINGÚPLATÚHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONc             S   s8   g | ]0\}}|  d d¡  dd¡|  d d¡  dd¡f‘qS )úrN   Ú
)r  )r¼   ÚkÚvr6   r6   r7   r½   d  s   z@TestProcess.test_environ.<locals>.clean_dict.<locals>.<listcomp>)Úpopr   Údictrx  )rˆ  r6   r6   r7   Ú
clean_dictZ  s    z,TestProcess.test_environ.<locals>.clean_dict)	ZmaxDiffr/   r0   r-  r;   Úcopyr   r   r:   )r2   r«  r?   Zd1Zd2r6   r6   r7   Útest_environX  s    zTestProcess.test_environc             C   sÊ   t  d¡}|  ¡ }t||d | j|gtjtjd}t |j	¡}t
|j	ƒ | ¡ sVt‚|  |j ¡ d¡ tr–tr–y| ¡ }W qž tjk
r’   d S X n| ¡ }|  |dddœ¡ | ¡  |  |jd¡ d S )	Na×  
            #include <unistd.h>
            #include <fcntl.h>
            char * const argv[] = {"cat", 0};
            char * const envp[] = {"A=1", "X", "C=3", 0};
            int main(void) {
                /* Close stderr on exec so parent can wait for the execve to
                 * finish. */
                if (fcntl(2, F_SETFD, FD_CLOEXEC) != 0)
                    return 0;
                return execve("/bin/cat", argv, envp);
            }
            )Zc_code)ÚstdinrX   rr  r?  Ú3)ÚAÚCr   )ÚtextwrapÚdedentr¨   r   r.   r[   r\   r/   r0   r1   r,   rü   r|   r:   rX   r¢   r   r   r-  rU   ÚcommunicateÚ
returncode)r2   rG   r›   r5   r?   Úenvr6   r6   r7   Útest_weird_environo  s&    
zTestProcess.test_weird_environN)jÚ__name__Ú
__module__Ú__qualname__Ú__doc__r8   r@   rH   rJ   rM   r+   ÚskipIfr	   rV   r^   re   ri   rm   rp   rz   r~   r‰   r   r   r“   r˜   r   r   r)   r   r®   r   r¸   r   rº   r   rÃ   rÄ   rÌ   rÎ   rÏ   rÔ   rÕ   r   rÙ   r&   r(   r   rÜ   rà   rä   r   r÷   rú   rû   rý   r  r  r#   r  r  r  r
   r   r  r  r  r%  r(  r/  r2  r3  r   r=  r@  rG  r   r   rQ  rW  r\  r   r   r_  rb  rf  rg  ri  rk  ro  rp  r{  r|  r  r€  r‰  rŒ  r  r’  r˜  r  rž  rŸ  r¢  r   r­  r·  r6   r6   r6   r7   r-   K   s´   

	*+.	

,(	
#

	
.*%

'r-   c                   sn   e Zd ZdZeedƒr&e ¡ Ze ¡ Z	‡ fdd„Z
‡ fdd„Z‡ fdd„Zd	d
„ Ze dd¡dd„ ƒZ‡  ZS )ÚLimitedUserTestCasez—Repeat the previous tests by using a limited user.
        Executed only on UNIX and only if the user who run the test script
        is root.
        r  c                sX   t ƒ j||Ž xDdd„ t| ƒD ƒD ].}t| |ƒ‰ ‡ fdd„}t| |t || ¡ƒ q"W d S )Nc             S   s   g | ]}|  d ¡r|‘qS )Útest)r»   )r¼   rx   r6   r6   r7   r½   ¬  s    z0LimitedUserTestCase.__init__.<locals>.<listcomp>c                s&   y
ˆ ƒ  W n t jk
r    Y nX d S )N)r/   rU   )r2   )Úmethr6   r7   Útest_¯  s    
z+LimitedUserTestCase.__init__.<locals>.test_)r   Ú__init__r¿   r‡   ÚsetattrÚtypesÚ
MethodType)r2   r3   r4   ÚattrrÀ  )Ú	__class__)r¿  r7   rÁ  ¨  s
    
zLimitedUserTestCase.__init__c                s"   t ƒ  ¡  t d¡ t d¡ d S )Niè  )r   ÚsetUpr;   ÚsetegidÚseteuid)r2   )rÆ  r6   r7   rÇ  ¶  s    

zLimitedUserTestCase.setUpc                s&   t  | j¡ t  | j¡ tƒ  ¡  d S )N)r;   rÈ  ÚPROCESS_UIDrÉ  ÚPROCESS_GIDr   ÚtearDown)r2   )rÆ  r6   r7   rÌ  »  s    zLimitedUserTestCase.tearDownc             C   s8   yt  ¡  d¡ W n t jk
r(   Y nX |  d¡ d S )Nrj   zexception not raised)r/   r0   r#  rU   ro   )r2   r6   r6   r7   r%  À  s
    zLimitedUserTestCase.test_nicerY   zcauses problem as rootc             C   s   d S )Nr6   )r2   r6   r6   r7   r  È  s    z'LimitedUserTestCase.test_zombie_process)r¸  r¹  rº  r»  r  r;   r  rÊ  r  rË  rÁ  rÇ  rÌ  r%  r+   r¼  r  Ú__classcell__r6   r6   )rÆ  r7   r½  ž  s   
r½  c               @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )Ú	TestPopenzTests for psutil.Popen class.c             C   s
   t ƒ  d S )N)r%   )Úclsr6   r6   r7   ÚtearDownClassÕ  s    zTestPopen.tearDownClassc          	   C   sš   t ddg}tj|tjtjdB}| ¡  | ¡  |j |  t	|ƒ¡ |  
tt|d¡ | ¡  W d Q R X tr‚|  | d¡tj ¡ n|  | d¡tj¡ d S )Nz-czimport time; time.sleep(60);)ÚstdoutrX   rh  rZ   )r$   r/   ÚPopenr[   r\   rk   r   r®  Z
assertTruer¿   r=   r>   r‡   rI   r	   r:   rB   rC   rD   )r2   r]   Úprocr6   r6   r7   Ú	test_miscÙ  s    

zTestPopen.test_miscc          	   C   sf   t jtdgtjtjtjd}| ¡  W d Q R X |jjs<t‚|j	jsHt‚|j
jsTt‚|  |jd¡ d S )Nz-V)rÑ  rX   r®  r   )r/   rÒ  r$   r[   r\   r´  rÑ  Úclosedr|   rX   r®  r:   rµ  )r2   rÓ  r6   r6   r7   Útest_ctx_managerë  s    
zTestPopen.test_ctx_managerc          	   C   s¨   t ddg}tj|tjtjd€}| ¡  | ¡  |  tj|j¡ |  tj|j	¡ |  tj|j
tj¡ trštjdkrš|  tj|j
tj¡ |  tj|j
tj¡ W d Q R X d S )Nz-czimport time; time.sleep(60);)rÑ  rX   )rŠ   r°   )r$   r/   rÒ  r[   r\   rI   rB   r=   rS   rA   rK   rC   rD   r   rÿ   r   ZCTRL_C_EVENTZCTRL_BREAK_EVENT)r2   r]   rÓ  r6   r6   r7   Útest_kill_terminateö  s    

zTestPopen.test_kill_terminateN)	r¸  r¹  rº  r»  ÚclassmethodrÐ  rÔ  rÖ  r×  r6   r6   r6   r7   rÎ  Ò  s
   rÎ  Ú__main__)Úrun_from_name)Er»  rt  rR   r,  rB  r;   rC   rY  rí   r[   rÿ   r²  rn   rÃ  r/   r   r   r   r   r   r   r   r	   r
   r   Zpsutil._commonr   Zpsutil._compatr   r   r   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r  r½  rÎ  r¸  Zpsutil.tests.runnerrÚ  Ú__file__r6   r6   r6   r7   Ú<module>   s”             [48
