o
    F+ iH                     @   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psutilZZombieProcessZassert_proc_zombieppidNoSuchProcessassert_proc_gonestrrepr)excprocr   r   )r   tcase i/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   Zassert_pid_goneas_dictr   r   r   iterZgettersr'   )r   r(   dinfonsZfunZfun_namer    r#   )r%   r   r   r   r!   r"   r$   	proc_info.   s6   

r0   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 t | _d S d S )NFfork)r   
_set_debugUSE_PROC_POOLmultiprocessingZset_start_methodZPoolpoolselfr#   r#   r$   setUpe   s
   

zTestFetchAllProcesses.setUpc                 C   s*   t d tr| j  | j  d S d S NT)r   r3   r4   r6   	terminatejoinr7   r#   r#   r$   tearDowns   s
   

zTestFetchAllProcesses.tearDownc                    s<   ddl m  tr| j t S  fddt D }|S )Nr   r0   c                    s   g | ]} |qS r#   r#   ).0r   r>   r#   r$   
<listcomp>   s    z8TestFetchAllProcesses.iter_proc_info.<locals>.<listcomp>)Zpsutil.tests.test_process_allr0   r4   r6   Zimap_unorderedr   pids)r8   Zlsr#   r>   r$   iter_proc_infoy   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
|S 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            )rB   itemsgetattr	Exceptionformatr   	traceback
format_excr<   
splitlinesappendr   Zfail)r8   Zfailuresr.   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   )r8   retr.   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hasattrrY   rZ   AssertionErrorexistsr   r8   rV   r.   r#   r#   r$   exe   s$   zTestFetchAllProcesses.exec                 C      t |tsJ |dksJ d S r   r   intrd   r#   r#   r$   r         zTestFetchAllProcesses.pidc                 C   s&   t |tsJ |dksJ t| d S r   )r   rh   r0   rd   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   rd   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   floatrb   r   r   ZSTATUS_ZOMBIEtimestrftime	localtimerd   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   rh   )r8   rV   r.   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   rh   r   r   )r8   rV   r.   gidr#   r#   r$   gids   s   zTestFetchAllProcesses.gidsc                 C   s.   t |tsJ | |ksJ | sJ d S rT   )r   r   r[   rd   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   rd   r#   r#   r$   rj      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   rq   )r8   rV   r.   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   Zioclassrh   rP   r   ZIOPRIO_VERYLOWZ
IOPRIO_LOWZIOPRIO_NORMALZIOPRIO_HIGH)r8   rV   r.   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   rh   r   r   rd   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   rU   r   idZ	user_timeZsystem_timerh   rk   )r8   rV   r.   trz   r#   r#   r$   threads  s   zTestFetchAllProcesses.threadsc                 C   rp   r   )r   r   rk   )r8   rV   r.   nr#   r#   r$   	cpu_times  rt   zTestFetchAllProcesses.cpu_timesc                 C   6   t |tsJ d|  krdksJ | J |d S )NrF   g      Y@r   rk   rd   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 )Nry   r   r~   )r   rh   r   r   	cpu_countrU   rangerd   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   rh   r   Z	peak_wsetZwsetZpeak_paged_poolZ
paged_poolZpeak_nonpaged_poolZnonpaged_poolZpeak_pagefileZpagefiler8   rV   r.   rP   r#   r#   r$   memory_info0  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   >   dataZvms)r   r   Zvirtual_memorytotal_fieldsrI   r   rh   r   r	   ZpssZuss)r8   rV   r.   r   r   rP   r#   r#   r$   memory_full_info;  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 )Nry   r   >   za+azr+rw)r   rU   fdrh   r^   r   r[   r   r   positionmodeflagsr   r]   r_   statFileNotFoundErrorS_ISREGst_mode)r8   rV   r.   fstr#   r#   r$   
open_filesK  s0   
z TestFetchAllProcesses.open_filesc                 C   rf   r   rg   rd   r#   r#   r$   num_fdse  ri   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 rT   )r   lensetr   r   )r8   rV   r.   connr#   r#   r$   net_connectionsi  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 rT   )r   r   r[   r]   r^   r_   r   OSErrorr   r   Z_psplatformZis_permission_errerrnoENOENTS_ISDIRr   )r8   rV   r.   r   errr#   r#   r$   cwdp  s$   zTestFetchAllProcesses.cwdc                 C   r   )Nr   d   r   rd   r#   r#   r$   memory_percent  r   z$TestFetchAllProcesses.memory_percentc                 C   s   t |tsJ d S rT   )r   boolrd   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 rT   )r   rU   r   r   r   rh   )r8   rV   r.   Z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 rT   )r   r   typer]   r^   r_   rc   rd   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 )Nr^   )[zanon_inode:Zpvclockaddrpermsr   )r   r   r   r   r^   r   rI   
startswithr   r]   r_   r   r   rh   )r8   rV   r.   ntfnamerP   r#   r#   r$   memory_maps  s,   


z!TestFetchAllProcesses.memory_mapsc                 C   rf   r   rg   rd   r#   r#   r$   num_handles  ri   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 )Z_PRIORITY_CLASS)r\   rI   r   )r?   xr#   r#   r$   r@     s    z.TestFetchAllProcesses.nice.<locals>.<listcomp>)r   rh   r
   dirr   enumIntEnum)r8   rV   r.   Z
prioritiesr#   r#   r$   nice  s   (zTestFetchAllProcesses.nicec                 C   rp   r   rq   r   r#   r#   r$   num_ctx_switches  rt   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   ry   r~   )r   tupler   rd   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 rT   )r   dictrH   r   )r8   rV   r.   kvr#   r#   r$   environ  s
   zTestFetchAllProcesses.environN))__name__
__module____qualname____doc__r9   r=   rB   rS   rX   re   r   r   r   ro   rs   rv   rw   rj   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$   r1   _   sN    		
	r1   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 )NFr   r3   r7   r#   r#   r$   r9        zTestPidsRange.setUpc                 C   r   r:   r   r7   r#   r#   r$   r=     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   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 | }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   Z
pid_existsr*   r   rA   r   r   Zraisesr   r'   rb   )r   r   rc   r#   r#   r$   check  s:   

z$TestPidsRange.test_it.<locals>.checkr~   i  )r   r   )r8   r   r   r   r#   r#   r$   test_it  s   
zTestPidsRange.test_itN)r   r   r   r   r9   r=   r   r#   r#   r#   r$   r     s
    r   )"r   r   r   r5   r]   r   rl   rL   r   r   r   r   r   r   r   r   r	   r
   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r4   r0   r1   r   r#   r#   r#   r$   <module>   sF   1  u