o
    hAG                     @   sp  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oe oe 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y,    i  Y S w z	ddg}W n tjyF    Y d S w |d |d dji}t}|j	|j
dd	D ]%\}}z| ||< W qa tjy } z | W Y d }~qad }~ww |  |S )
Nc                    s   | j  ksJ | jd ur| j|ksJ t| tjr2| | jd ur1| jdks*J | j|ks1J nt| tjr=| t	|  t
|  d S Nr   )pidname
isinstancepsutilZombieProcessassert_proc_zombieppidNoSuchProcessassert_proc_gonestrrepr)excprocr   r   )r   tcase S/var/www/html/ai/venv/lib/python3.10/site-packages/psutil/tests/test_process_all.pycheck_exception1   s   



z"proc_info.<locals>.check_exceptionc               
      sT   dkr(z d W d S  tjy' }  z |  W Y d } ~ d S d } ~ ww 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   assert_pid_goneas_dictr   r   r   itergettersr)   )r   r*   dinfonsfunfun_namer"   r%   )r'   r   r   r   r#   r$   r&   	proc_info.   s6   

r6   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 d S NF)r   
_set_debugUSE_PROC_POOLmultiprocessingPoolpoolselfr%   r%   r&   setUpe   s   
zTestFetchAllProcesses.setUpc                 C   s*   t d tr| j  | j  d S d S NT)r   r9   r:   r=   	terminatejoinr>   r%   r%   r&   tearDownl   s
   

zTestFetchAllProcesses.tearDownc                    s<   ddl m  tr| j t S  fddt D }|S )Nr   r6   c                    s   g | ]} |qS r%   r%   ).0r   rE   r%   r&   
<listcomp>z   s    z8TestFetchAllProcesses.iter_proc_info.<locals>.<listcomp>)psutil.tests.test_process_allr6   r:   r=   imap_unorderedr   pids)r?   lsr%   rE   r&   iter_proc_infor   s
   z$TestFetchAllProcesses.iter_proc_infoc                 C   s   g }|   D ]a}| D ]Z\}}t| |}z||| W n9 tyU   d}|d||d t||7 }|d7 }|dt  7 }ddd |	 D d }|
| Y qw |dd	g d d
i fvrf|sfJ |qq|rrtd
|d S )NzH
======================================================================
z+FAIL: name=test_{}, pid={}, ret={}
info={}
r   zF----------------------------------------------------------------------
c                 s   s    | ]}d | V  qdS )z    Nr%   )rF   ir%   r%   r&   	<genexpr>   s    z1TestFetchAllProcesses.test_all.<locals>.<genexpr>r            )rL   itemsgetattr	Exceptionformatr!   	traceback
format_excrC   
splitlinesappendr   fail)r?   failuresr2   r   valuemethsr%   r%   r&   test_all}   s8   
zTestFetchAllProcesses.test_allc                 C   s*   t |tsJ |D ]	}t |tsJ q	d S N)r   listr    )r?   retr2   partr%   r%   r&   cmdline   s   zTestFetchAllProcesses.cmdlinec                 C   s   t |tsJ | |ksJ |rYtr|dsd S tj|s$J |tr[tj	|r]t
tdr_t
tdrazt|tjs@J W d S  tyX   tj|rRtsU Y d S Y d S w d S d S d S d S d S )Nz.exeaccessX_OK)r   r    stripr   endswithospathisabsr
   isfilehasattrre   rf   AssertionErrorexistsr   r?   rb   r2   r%   r%   r&   exe   s$   zTestFetchAllProcesses.exec                 C      t |tsJ |dksJ d S r   r   intrp   r%   r%   r&   r         zTestFetchAllProcesses.pidc                 C   s&   t |tsJ |dksJ t| d S r   )r   rt   r6   rp   r%   r%   r&   r      s   zTestFetchAllProcesses.ppidc                 C   sB   t |tsJ tr|st|d rd S ts|sJ t|d S d S )Nr   )r   r    r   r   r   r!   rp   r%   r%   r&   r      s   zTestFetchAllProcesses.namec                 C   s^   t |tsJ z|dksJ W n ty#   tr |d tjkr n Y nw tdt| d S )Nr   statusz%Y %m %d %H:%M:%S)	r   floatrn   r   r   STATUS_ZOMBIEtimestrftime	localtimerp   r%   r%   r&   create_time   s   
z!TestFetchAllProcesses.create_timec                 C   4   t |sJ |D ]}t|tsJ |dksJ qd S r   r   r   rt   )r?   rb   r2   uidr%   r%   r&   uids   
   zTestFetchAllProcesses.uidsc                 C   s<   t |sJ |D ]}t|tsJ tsts|dksJ qd S r   )r   r   rt   r   r   )r?   rb   r2   gidr%   r%   r&   gids   s   zTestFetchAllProcesses.gidsc                 C   s.   t |tsJ | |ksJ | sJ d S r`   )r   r    rg   rp   r%   r%   r&   username   s   zTestFetchAllProcesses.usernamec                 C   s6   t |tsJ |sJ ||dksJ |tv sJ d S )N?)r   r    r   rp   r%   r%   r&   rv      s   zTestFetchAllProcesses.statusc                 C   s<   t |sJ |D ]}t|tsJ |dkr|dksJ qd S )Nr   r~   )r?   rb   r2   fieldr%   r%   r&   io_counters   s   z!TestFetchAllProcesses.io_countersc                 C   s   t r"t|jts
J t|jtsJ |jdksJ |jdks J d S tjtjtjtj	g}t|ts3J |dks9J ||v s?J d S r   )
r   r   ioclassrt   r\   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGH)r?   rb   r2   choicesr%   r%   r&   ionice   s   zTestFetchAllProcesses.ionicec                 C   s:   t |tsJ tr|dkrt|d rd S |dksJ d S )Nr   r      )r   rt   r   r   rp   r%   r%   r&   num_threads  s   z!TestFetchAllProcesses.num_threadsc                 C   sn   t |tsJ |D ]+}t|sJ |jdksJ |jdksJ |jdks&J |D ]}t |ttfs3J q(q	d S r   )r   ra   r   id	user_timesystem_timert   rw   )r?   rb   r2   tr   r%   r%   r&   threads  s   zTestFetchAllProcesses.threadsc                 C   r}   r   )r   r   rw   )r?   rb   r2   nr%   r%   r&   	cpu_times  r   zTestFetchAllProcesses.cpu_timesc                 C   6   t |tsJ d|  krdksJ | J |d S )NrP   g      Y@r   rw   rp   r%   r%   r&   cpu_percent     (z!TestFetchAllProcesses.cpu_percentc                 C   s^   t |tsJ tr|dkrd S |dksJ t dkr!|dks!J |ttt v s-J d S )Nr   r   r   )r   rt   r   r   	cpu_countra   rangerp   r%   r%   r&   cpu_num   s   zTestFetchAllProcesses.cpu_numc                 C   s|   t |sJ |D ]}t|tsJ |dksJ qtr:|j|jks"J |j|jks*J |j|j	ks2J |j
|jks<J d S d S r   )r   r   rt   r   	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpeak_pagefilepagefiler?   rb   r2   r\   r%   r%   r&   memory_info)  s   z!TestFetchAllProcesses.memory_infoc                 C   s   t |sJ t j}|jD ]%}t||}t|tsJ |dks"J ts*t	r+|dv r+q||ks3J |qtr>|j
|jks@J d S d S )Nr   >   vmsdata)r   r   virtual_memorytotal_fieldsrS   r   rt   r   r	   pssuss)r?   rb   r2   r   r   r\   r%   r%   r&   memory_full_info4  s   


z&TestFetchAllProcesses.memory_full_infoc              	   C   s  t |tsJ |D ]}t |jtsJ t |jtsJ |j |jks%J tr/|jdks.J n6tr_t |j	ts9J t |j
tsAJ t |jtsIJ |j	dksPJ |j
dv sWJ |jdks^J ntre|jseq	tj|jspJ |zt|j}W n	 ty   Y q	w t|jsJ |q	d S )Nr   r   >   a+r+arw)r   ra   fdrt   rj   r    rg   r   r   positionmodeflagsr   ri   rk   statFileNotFoundErrorS_ISREGst_mode)r?   rb   r2   fstr%   r%   r&   
open_filesD  s0   
z TestFetchAllProcesses.open_filesc                 C   rr   r   rs   rp   r%   r%   r&   num_fds^  ru   zTestFetchAllProcesses.num_fdsc                 C   sb   t  $ t|tt|ksJ |D ]}t|sJ t| qW d    d S 1 s*w   Y  d S r`   )r   lensetr   r   )r?   rb   r2   connr%   r%   r&   net_connectionsb  s   
"z%TestFetchAllProcesses.net_connectionsc              
   C   s   t |tsJ | |ksJ |rUtj|sJ |zt|}W n* tyL } ztr3t	j
|r3n|jtjkr: W Y d }~d S W Y d }~d S d }~ww t|jsWJ d S d S r`   )r   r    rg   ri   rj   rk   r   OSErrorr   r   _psplatformis_permission_errerrnoENOENTS_ISDIRr   )r?   rb   r2   r   errr%   r%   r&   cwdi  s$   zTestFetchAllProcesses.cwdc                 C   r   )Nr   d   r   rp   r%   r%   r&   memory_percenty  r   z$TestFetchAllProcesses.memory_percentc                 C   s   t |tsJ d S r`   )r   boolrp   r%   r%   r&   
is_running}  s   z TestFetchAllProcesses.is_runningc                 C   sR   t |tsJ |g ksJ ttt }|D ]}t |ts J ||v s&J qd S r`   )r   ra   r   r   r   rt   )r?   rb   r2   cpusr   r%   r%   r&   cpu_affinity  s   z"TestFetchAllProcesses.cpu_affinityc                 C   sN   t |ttd fsJ |d ur#tj|sJ |tj|s%J |d S d S r`   )r   r    typeri   rj   rk   ro   rp   r%   r%   r&   terminal  s   zTestFetchAllProcesses.terminalc                 C   s   |D ]l}t |jtsJ t |jtsJ t |jtsJ |jD ]N}t||}|dkrD|dr0qtr7|dkr7qt	j
|jsCJ |jq|dkrQ|sPJ t|q|dkr`ts_|s_J t|qt |tsgJ |dksmJ qqd S )Nrj   )[zanon_inode:pvclockaddrpermsr   )r   r   r    r   rj   r   rS   
startswithr   ri   rk   r!   r   rt   )r?   rb   r2   ntfnamer\   r%   r%   r&   memory_maps  s,   


z!TestFetchAllProcesses.memory_mapsc                 C   rr   r   rs   rp   r%   r%   r&   num_handles  ru   z!TestFetchAllProcesses.num_handlesc                 C   sl   t |tsJ trd|  krdksJ | J |d S dd ttD }||v s,J t |tjs4J d S )Ni   c                 S   s    g | ]}| d rtt|qS )_PRIORITY_CLASS)rh   rS   r   )rF   xr%   r%   r&   rG     s    z.TestFetchAllProcesses.nice.<locals>.<listcomp>)r   rt   r
   dirr   enumIntEnum)r?   rb   r2   
prioritiesr%   r%   r&   nice  s   (zTestFetchAllProcesses.nicec                 C   r}   r   r~   r   r%   r%   r&   num_ctx_switches  r   z&TestFetchAllProcesses.num_ctx_switchesc                 C   sB   t |tsJ t|dksJ |d dksJ |d dksJ d S )N   r   r   r   )r   tupler   rp   r%   r%   r&   rlimit  s   zTestFetchAllProcesses.rlimitc                 C   s@   t |tsJ | D ]\}}t |tsJ t |tsJ qd S r`   )r   dictrR   r    )r?   rb   r2   kvr%   r%   r&   environ  s
   zTestFetchAllProcesses.environN))__name__
__module____qualname____doc__r@   rD   rL   r_   rd   rq   r   r   r   r|   r   r   r   rv   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&   r7   _   sN    		
	r7   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      t d d S r8   r   r9   r>   r%   r%   r&   r@        zTestPidsRange.setUpc                 C   r   rA   r   r>   r%   r%   r&   rD     r   zTestPidsRange.tearDownc                 C   s:   dd }dd }t ddD ]}tr||rq|| qd S )Nc                 S   s   zt d|  dd}W n
 ty   Y dS w |$ |D ]}|dr7t| d }|| k  W  d    S qtd1 s?w   Y  d S )Nz/proc/z/statusrbFs   Tgid:r   z'Tgid' line not found)openr   r   rt   split
ValueError)r   r   linetgidr%   r%   r&   is_linux_tid  s   

z+TestPidsRange.test_it.<locals>.is_linux_tidc              	   S   s   d}	 t | }zD|r t |  ts| t  v sJ W d S W d S ts=tt j t |  W d    n1 s8w   Y  tsG| t  vsJJ W d S W d S  t j	t
fya   |d8 }|dkr_ Y nw q)N   Tr   r   )r   
pid_existsr,   r   rJ   r   r   raisesr   r)   rn   )r   r   ro   r%   r%   r&   check  s:   

z$TestPidsRange.test_it.<locals>.checkr   i  )r   r   )r?   r   r  r   r%   r%   r&   test_it  s   
zTestPidsRange.test_itN)r   r   r   r   r@   rD   r  r%   r%   r%   r&   r     s
    r   )"r   r   r   r;   ri   r   ry   rV   r   r   r   r   r   r   r   r   r	   r
   r   psutil.testsr   r   r   r   r   r   r   r   r   r   r:   r6   r7   r   r%   r%   r%   r&   <module>   sF   1  n