U
    ;gG                     @   st  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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 eoFe oFe Zdd ZG dd deZ G dd deZ!dS )zeIterate over all process PIDs and for each one of them invoke and
test all psutil.Process() methods.
    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)WINDOWS)
CI_TESTING)PYTEST_PARALLEL)VALID_PROC_STATUSES)PsutilTestCase)check_connection_ntuple)create_sockets)is_namedtuple)is_win_secure_system_proc)process_namespace)pytestc                    s(  t  fdd  fdd}ztW n$ tjk
rZ    i  Y S X zddg}W n  tjk
r    Y nX |d |d  dji}t}|j	|j
dd	D ]T\}}z| ||< W q tjk
r } z | W Y qW 5 d }~X Y qX q|  |S d S )
Nc                    s    | j  | jd k	r& | j| t| tjrd| | jd k	rz| jd  | j| nt| tj	rz
| t|  t|  d S Nr   )ZassertEqualpidname
isinstancepsutilZZombieProcessZassertProcessZombieppidZassertGreaterEqualNoSuchProcessassertProcessGonestrrepr)excprocr   r   )r   tcase ]/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/psutil/tests/test_process_all.pycheck_exception2   s    



z"proc_info.<locals>.check_exceptionc               
      sN   dkrJz d W n2 tjk
rH }  z |  W 5 d } ~ X Y nX d S r   )waitr   Error)r    )r%   r   r   r   r!   r#   r$   do_wait@   s
    zproc_info.<locals>.do_waitr   r   r   F)clear_cache)r   r   Processr   ZassertPidGoneas_dictr   r   r   itergettersr'   )r   r(   dinfonsZfunZfun_namer    r#   )r%   r   r   r   r!   r"   r$   	proc_info/   s.    


r1   c                   @   s8  e Zd Z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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d(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLS )MTestFetchAllProcesseszTest which iterates over all running processes and performs
    some sanity checks against Process API's returned values.
    Uses a process pool to get info about all processes.
    c                 C   s   t d trt | _d S NF)r   
_set_debugUSE_PROC_POOLmultiprocessingZPoolpoolselfr#   r#   r$   setUpf   s    
zTestFetchAllProcesses.setUpc                 C   s&   t d tr"| j  | j  d S NT)r   r4   r5   r7   	terminatejoinr8   r#   r#   r$   tearDownm   s    

zTestFetchAllProcesses.tearDownc                    s@   ddl m  tr"| j t S  fddt D }|S d S )Nr   r1   c                    s   g | ]} |qS r#   r#   ).0r   r?   r#   r$   
<listcomp>{   s     z8TestFetchAllProcesses.iter_proc_info.<locals>.<listcomp>)Zpsutil.tests.test_process_allr1   r5   r7   Zimap_unorderedr   pids)r9   Zlsr#   r?   r$   iter_proc_infos   s
    z$TestFetchAllProcesses.iter_proc_infoc                 C   s   g }|   D ]}| D ]\}}t| |}z||| W nt tk
r   d}|d||d t||7 }|d7 }|dt  7 }ddd |	 D d }|
| Y qX |dd	g d d
i fkr|st|qq|r| d
|d S )NzH
======================================================================
z+FAIL: name=test_{}, pid={}, ret={}
info={}
r   zF----------------------------------------------------------------------
c                 s   s   | ]}d | V  qdS )z    Nr#   )r@   ir#   r#   r$   	<genexpr>   s     z1TestFetchAllProcesses.test_all.<locals>.<genexpr>r            )rC   itemsgetattr	Exceptionformatr   	traceback
format_excr=   
splitlinesappendAssertionErrorZfail)r9   Zfailuresr/   r   valuemethsr#   r#   r$   test_all~   s0    
zTestFetchAllProcesses.test_allc                 C   s*   t |tst|D ]}t |tstqd S N)r   listrQ   r   )r9   retr/   partr#   r#   r$   cmdline   s    zTestFetchAllProcesses.cmdlinec                 C   s   t |tst| |kst|rtr4|ds4d S tj|sHt|t	rtj
|rttdrttdrzt|tjstW n& tk
r   tj|rts Y nX d S )Nz.exeaccessX_OK)r   r   rQ   stripr   endswithospathisabsr
   isfilehasattrr[   r\   existsr   r9   rX   r/   r#   r#   r$   exe   s    zTestFetchAllProcesses.exec                 C   s   t |tst|dkstd S r   r   intrQ   re   r#   r#   r$   r      s    zTestFetchAllProcesses.pidc                 C   s&   t |tst|dkstt| d S r   )r   rh   rQ   r1   re   r#   r#   r$   r      s    zTestFetchAllProcesses.ppidc                 C   s>   t |tsttr&|s&t|d r&d S ts:|s:tt|d S )Nr   )r   r   rQ   r   r   r   r   re   r#   r#   r$   r      s
    zTestFetchAllProcesses.namec                 C   s`   t |tstz|dkstW n* tk
rH   trB|d tjkrBn Y nX tdt| d S )Nr   statusz%Y %m %d %H:%M:%S)	r   floatrQ   r   r   ZSTATUS_ZOMBIEtimestrftime	localtimere   r#   r#   r$   create_time   s    z!TestFetchAllProcesses.create_timec                 C   s4   t |st|D ]}t|ts"t|dkstqd S r   r   rQ   r   rh   )r9   rX   r/   uidr#   r#   r$   uids   s    zTestFetchAllProcesses.uidsc                 C   s<   t |st|D ]&}t|ts"ttsts|dkstqd S r   )r   rQ   r   rh   r   r   )r9   rX   r/   gidr#   r#   r$   gids   s
    zTestFetchAllProcesses.gidsc                 C   s.   t |tst| |kst| s*td S rV   )r   r   rQ   r]   re   r#   r#   r$   username   s    zTestFetchAllProcesses.usernamec                 C   s6   t |tst|st||dks&t|tks2td S )N?)r   r   rQ   r   re   r#   r#   r$   ri      s    zTestFetchAllProcesses.statusc                 C   s<   t |st|D ]&}t|ts"t|dkr|dkstqd S )Nr   ro   )r9   rX   r/   fieldr#   r#   r$   io_counters   s
    z!TestFetchAllProcesses.io_countersc                 C   s   t rBt|jtstt|jts$t|jdks2t|jdks|tn:tjtjtj	tj
g}t|tsdt|dkspt||ks|td S r   )r   r   Zioclassrh   rQ   rR   r   ZIOPRIO_VERYLOWZ
IOPRIO_LOWZIOPRIO_NORMALZIOPRIO_HIGH)r9   rX   r/   choicesr#   r#   r$   ionice   s    zTestFetchAllProcesses.ionicec                 C   s:   t |tsttr*|dkr*t|d r*d S |dks6td S )Nr   r      )r   rh   rQ   r   r   re   r#   r#   r$   num_threads  s    z!TestFetchAllProcesses.num_threadsc                 C   sn   t |tst|D ]V}t|s"t|jdks0t|jdks>t|jdksLt|D ]}t |ttfsPtqPqd S r   )	r   rW   rQ   r   idZ	user_timeZsystem_timerh   rj   )r9   rX   r/   trw   r#   r#   r$   threads  s    zTestFetchAllProcesses.threadsc                 C   s4   t |st|D ]}t|ts"t|dkstqd S r   )r   rQ   r   rj   )r9   rX   r/   nr#   r#   r$   	cpu_times  s    zTestFetchAllProcesses.cpu_timesc                 C   s0   t |tstd|  kr"dks,n t|d S )NrG   g      Y@r   rj   rQ   re   r#   r#   r$   cpu_percent  s    z!TestFetchAllProcesses.cpu_percentc                 C   s^   t |tsttr|dkrd S |dks*tt dkrB|dksBt|ttt ksZtd S )Nrv   r   r{   )r   rh   rQ   r   r   	cpu_countrW   rangere   r#   r#   r$   cpu_num!  s    zTestFetchAllProcesses.cpu_numc                 C   sx   t |st|D ]}t|ts"t|dkstqtrt|j|jksDt|j|jksTt|j	|j
ksdt|j|jksttd S r   )r   rQ   r   rh   r   Z	peak_wsetZwsetZpeak_paged_poolZ
paged_poolZpeak_nonpaged_poolZnonpaged_poolZpeak_pagefileZpagefiler9   rX   r/   rR   r#   r#   r$   memory_info*  s    z!TestFetchAllProcesses.memory_infoc                 C   s   t |stt j}|jD ]J}t||}t|ts8t|dksDtt	st
rV|dkrVq||kst|qt	r||j|jks|td S )Nr   >   datavms)r   rQ   r   Zvirtual_memorytotal_fieldsrJ   r   rh   r   r	   ZpssZuss)r9   rX   r/   r   r   rR   r#   r#   r$   memory_full_info5  s    


z&TestFetchAllProcesses.memory_full_infoc              	   C   s$  t |tst|D ]
}t |jts(tt |jts8t|j |jksLttr`|jdkstnlt	rt |j
tsttt |jtstt |jtst|j
dkst|jdkst|jdkstntr|jsqtj|jst|zt|j}W n tk
r   Y qX t|jst|qd S )Nrv   r   >   awa+rr+)r   rW   rQ   fdrh   r`   r   r]   r   r   positionmodeflagsr   r_   ra   statFileNotFoundErrorS_ISREGst_mode)r9   rX   r/   fstr#   r#   r$   
open_filesE  s,    

z TestFetchAllProcesses.open_filesc                 C   s   t |tst|dkstd S r   rg   re   r#   r#   r$   num_fds_  s    zTestFetchAllProcesses.num_fdsc              	   C   sL   t  < t|tt|ks t|D ]}t|s4tt| q$W 5 Q R X d S rV   )r   lensetrQ   r   r   )r9   rX   r/   connr#   r#   r$   net_connectionsc  s
    z%TestFetchAllProcesses.net_connectionsc              
   C   s   t |tst| |kst|rtj|s6t|zt|}W nB tk
r } z$t	rht
j|rhn|jtjkrv W 5 d }~X Y nX t|jstd S rV   )r   r   rQ   r]   r_   r`   ra   r   OSErrorr   r   Z_psplatformZis_permission_errerrnoENOENTS_ISDIRr   )r9   rX   r/   r   errr#   r#   r$   cwdj  s    zTestFetchAllProcesses.cwdc                 C   s0   t |tstd|  kr"dks,n t|d S )Nr   d   r   re   r#   r#   r$   memory_percentz  s    z$TestFetchAllProcesses.memory_percentc                 C   s   t |tstd S rV   )r   boolrQ   re   r#   r#   r$   
is_running~  s    z TestFetchAllProcesses.is_runningc                 C   sR   t |tst|g kstttt }|D ]}t |ts@t||ks.tq.d S rV   )r   rW   rQ   r   r   r   rh   )r9   rX   r/   Zcpusr   r#   r#   r$   cpu_affinity  s    z"TestFetchAllProcesses.cpu_affinityc                 C   sJ   t |ttd fst|d k	rFtj|s2t|tj|sFt|d S rV   )r   r   typerQ   r_   r`   ra   rd   re   r#   r#   r$   terminal  s    zTestFetchAllProcesses.terminalc                 C   s   |D ]}t |jtstt |jts(tt |jts8t|jD ]}t||}|dkr|dr`q>t	rn|dkrnq>t
j|jst|jq>|dkr|stt|q>|dkrts|stt|q>t |tst|dks>tq>qd S )Nr`   )[zanon_inode:Zpvclockaddrpermsr   )r   r   r   rQ   r   r`   r   rJ   
startswithr   r_   ra   r   r   rh   )r9   rX   r/   ntfnamerR   r#   r#   r$   memory_maps  s&    


z!TestFetchAllProcesses.memory_mapsc                 C   s   t |tst|dkstd S r   rg   re   r#   r#   r$   num_handles  s    z!TestFetchAllProcesses.num_handlesc                 C   sd   t |tsttr2d|  kr&dks`n t|n.dd ttD }||ksPtt |tjs`td S )Ni   c                 S   s    g | ]}| d rtt|qS )Z_PRIORITY_CLASS)r^   rJ   r   )r@   xr#   r#   r$   rA     s   
z.TestFetchAllProcesses.nice.<locals>.<listcomp>)r   rh   rQ   r
   dirr   enumIntEnum)r9   rX   r/   Z
prioritiesr#   r#   r$   nice  s     zTestFetchAllProcesses.nicec                 C   s4   t |st|D ]}t|ts"t|dkstqd S r   ro   r   r#   r#   r$   num_ctx_switches  s    z&TestFetchAllProcesses.num_ctx_switchesc                 C   sB   t |tstt|dkst|d dks.t|d dks>td S )N   r   rv   r{   )r   tuplerQ   r   re   r#   r#   r$   rlimit  s    zTestFetchAllProcesses.rlimitc                 C   s@   t |tst| D ]$\}}t |ts,tt |tstqd S rV   )r   dictrQ   rI   r   )r9   rX   r/   kvr#   r#   r$   environ  s    zTestFetchAllProcesses.environN))__name__
__module____qualname____doc__r:   r>   rC   rU   rZ   rf   r   r   r   rn   rq   rs   rt   ri   rx   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$   r2   `   sL   		
	r2   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestPidsRangea@  Given pid_exists() return value for a range of PIDs which may or
    may not exist, make sure that psutil.Process() and psutil.pids()
    agree with pid_exists(). This guarantees that the 3 APIs are all
    consistent with each other. See:
    https://github.com/giampaolo/psutil/issues/2359

    XXX - Note about Windows: it turns out there are some "hidden" PIDs
    which are not returned by psutil.pids() and are also not revealed
    by taskmgr.exe and ProcessHacker, still they can be instantiated by
    psutil.Process() and queried. One of such PIDs is "conhost.exe".
    Running as_dict() for it reveals that some Process() APIs
    erroneously raise NoSuchProcess, so we know we have problem there.
    Let's ignore this for now, since it's quite a corner case (who even
    imagined hidden PIDs existed on Windows?).
    c                 C   s   t d d S r3   r   r4   r8   r#   r#   r$   r:     s    zTestPidsRange.setUpc                 C   s   t d d S r;   r   r8   r#   r#   r$   r>     s    zTestPidsRange.tearDownc              
   C   sR   dd }dd }t ddD ]2}tr,||r,q| j|d || W 5 Q R X qd S )Nc              
   S   s   zt d|  dd}W n tk
r,   Y dS X |J |D ]6}|dr8t| d }|| k  W  5 Q R  S q8tdW 5 Q R X d S )Nz/proc/z/statusrbFs   Tgid:r{   z'Tgid' line not found)openr   r   rh   split
ValueError)r   r   lineZtgidr#   r#   r$   is_linux_tid  s    
z+TestPidsRange.test_it.<locals>.is_linux_tidc              	   S   s   d}t | }zb|r4t |  tsn| t  ksntn:tsZtt j	 t |  W 5 Q R X tsn| t  ksntW n, t j
tfk
r   |d8 }|dkr Y qX d S qd S )N   r{   r   )r   Z
pid_existsr*   r   rB   rQ   r   r   Zraisesr   r'   )r   r   rd   r#   r#   r$   check  s"    

z$TestPidsRange.test_it.<locals>.checkr{   i  )r   )r   r   ZsubTest)r9   r   r   r   r#   r#   r$   test_it  s    zTestPidsRange.test_itN)r   r   r   r   r:   r>   r   r#   r#   r#   r$   r     s   r   )"r   r   r   r6   r_   r   rk   rM   r   r   r   r   r   r   r   r   r	   r
   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r5   r1   r2   r   r#   r#   r#   r$   <module>   sD   1  n