o
    adf2                     @   s  d 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 G dd deZG dd deZG dd deZG dd  d eZ G d!d" d"eZ!e"d#krdd$l#m$Z$ e$e% dS dS )%zContracts tests. These tests mainly check API sanity in terms of
returned types and APIs availability.
Some of these are duplicates of tests test_system.py and test_process.py.
    N)AIX)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)long)GITHUB_ACTIONS)HAS_CPU_FREQ)HAS_NET_IO_COUNTERS)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)PYPY)SKIP_SYSCONS)PsutilTestCase)create_sockets)enum)is_namedtuple)kernel_versionc                   @   sD   e Zd Zdd Zdd Zdd Zdd Zee	oe
d	d
d ZdS )TestAvailConstantsAPIsc                 C   s   |  ttdtptpt d S )NZPROCFS_PATH)assertEqualhasattrpsutilr   r	   r   self r   d/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATH2   s   z'TestAvailConstantsAPIs.test_PROCFS_PATHc                 C   sj   | j }|ttdt |ttdt |ttdt |ttdt |ttdt |ttdt d S )NZABOVE_NORMAL_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSr   r   r   r
   r   Zaer   r   r   test_win_priority5   s   z(TestAvailConstantsAPIs.test_win_priorityc                 C   J   | j }|ttdt |ttdt |ttdt |ttdt d S )NZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEr   r   r   r   r"   r   r   r   test_linux_ioprio_linux>   
   z.TestAvailConstantsAPIs.test_linux_ioprio_linuxc                 C   r$   )NZIOPRIO_HIGHZIOPRIO_NORMALZ
IOPRIO_LOWZIOPRIO_VERYLOWr!   r"   r   r   r   test_linux_ioprio_windowsE   r'   z0TestAvailConstantsAPIs.test_linux_ioprio_windows%unsupported on GITHUB_ACTIONS + LINUXc                 C   s  | j }|ttdtpt |ttdtpt |ttdtpt |ttdtp)t |ttdtp3t |ttdtp=t |ttdtpGt |ttdtpQt |ttd	tp[t |ttd
tpet |ttdtpot |ttdt trt dkr|ttdt t dkr|ttdt t dkr|ttdt t dkr|ttdt t dkr|ttdt |ttdt |ttdt |ttdt d S )NZRLIM_INFINITYZ	RLIMIT_ASZRLIMIT_COREZ
RLIMIT_CPUZRLIMIT_DATAZRLIMIT_FSIZEZRLIMIT_MEMLOCKZRLIMIT_NOFILEZRLIMIT_NPROCZ
RLIMIT_RSSZRLIMIT_STACKZRLIMIT_LOCKS)         ZRLIMIT_MSGQUEUE)r*   r+      ZRLIMIT_NICEZRLIMIT_RTPRIO)r*   r+      ZRLIMIT_RTTIMEZRLIMIT_SIGPENDINGZRLIMIT_SWAPZRLIMIT_SBSIZEZRLIMIT_NPTS)r   r   r   r   r   r   r   r"   r   r   r   test_rlimitL   s6   




z"TestAvailConstantsAPIs.test_rlimitN)__name__
__module____qualname__r    r#   r&   r(   unittestskipIfr   r   r/   r   r   r   r   r   1   s    	r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestAvailSystemAPIsc                 C      |  ttdt d S )NZwin_service_iterr!   r   r   r   r   test_win_service_iterp      z)TestAvailSystemAPIs.test_win_service_iterc                 C   r6   )NZwin_service_getr!   r   r   r   r   test_win_service_gets   r8   z(TestAvailSystemAPIs.test_win_service_getc                 C   s&   |  ttdtptptptpt d S )Ncpu_freq)r   r   r   r   r   r
   r   r   r   r   r   r   test_cpu_freqv   s   z!TestAvailSystemAPIs.test_cpu_freqc                 C   s   |  ttdtp	t d S )Nsensors_temperatures)r   r   r   r   r   r   r   r   r   test_sensors_temperatures|   s   z-TestAvailSystemAPIs.test_sensors_temperaturesc                 C   r6   )Nsensors_fansr%   r   r   r   r   test_sensors_fans   r8   z%TestAvailSystemAPIs.test_sensors_fansc                 C   s"   |  ttdtptptpt d S )NZsensors_battery)r   r   r   r   r
   r   r   r   r   r   r   test_battery   s   z TestAvailSystemAPIs.test_batteryN)	r0   r1   r2   r7   r9   r;   r=   r?   r@   r   r   r   r   r5   o   s    r5   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	e
oeddd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestAvailProcessAPIsc                 C   s4   |  ttjdtptptptptpt	pt
pt d S )Nenviron)r   r   r   Processr   r   r
   r   r	   r   r   r   r   r   r   r   test_environ   s"   
z!TestAvailProcessAPIs.test_environc                 C      |  ttjdt d S NZuidsr   r   r   rC   r   r   r   r   r   	test_uids      zTestAvailProcessAPIs.test_uidsc                 C   rE   rF   rG   r   r   r   r   	test_gids   rI   zTestAvailProcessAPIs.test_gidsc                 C   rE   )NterminalrG   r   r   r   r   test_terminal   rI   z"TestAvailProcessAPIs.test_terminalc                 C      |  ttjdtp
t d S )NZionice)r   r   r   rC   r   r
   r   r   r   r   test_ionice   s   z TestAvailProcessAPIs.test_ionicer)   c                 C   rM   )NZrlimit)r   r   r   rC   r   r   r   r   r   r   r/      s   z TestAvailProcessAPIs.test_rlimitc                 C   s"   t tjd}| |tpt  d S )NZio_counters)r   r   rC   r   r   r	   r   Zhasitr   r   r   test_io_counters   s   z%TestAvailProcessAPIs.test_io_countersc                 C   rE   )NZnum_fdsrG   r   r   r   r   test_num_fds   rI   z!TestAvailProcessAPIs.test_num_fdsc                 C   rE   )NZnum_handles)r   r   r   rC   r
   r   r   r   r   test_num_handles   rI   z%TestAvailProcessAPIs.test_num_handlesc                 C       |  ttjdtptpt d S )NZcpu_affinity)r   r   r   rC   r   r
   r   r   r   r   r   test_cpu_affinity   s   

z&TestAvailProcessAPIs.test_cpu_affinityc                 C   rS   )NZcpu_num)r   r   r   rC   r   r   r	   r   r   r   r   test_cpu_num   s   z!TestAvailProcessAPIs.test_cpu_numc                 C   s*   t tjd}| |tptptpt  d S )NZmemory_maps)r   r   rC   r   r   r   r   r   rO   r   r   r   test_memory_maps   s   z%TestAvailProcessAPIs.test_memory_mapsN)r0   r1   r2   rD   rH   rJ   rL   rN   r3   r4   r   r   r/   rP   rQ   rR   rT   rU   rV   r   r   r   r   rA      s     
rA   c                   @   s   e Zd ZdZedd ZedfddZdd Zd	d
 Z	dd Z
dd Zeeo,e dkdee ddd Zdd Zdd Zeeddd Zdd Zdd Zee ddd  Zee dd!d" Zee dd#d$ Zd%d& Zd'd( Z d)S )*TestSystemAPITypeszCheck the return types of system related APIs.
    Mainly we want to test we never return unicode on Python 2, see:
    https://github.com/giampaolo/psutil/issues/1039.
    c                 C   s   t  | _d S N)r   rC   proc)clsr   r   r   
setUpClass   s   zTestSystemAPITypes.setUpClassTc                 C   s6   t |sJ |D ]}| || |r| |d qd S )Nr   )r   assertIsInstanceZassertGreaterEqual)r   nttype_Zgezeronr   r   r   assert_ntuple_of_nums   s   z(TestSystemAPITypes.assert_ntuple_of_numsc                 C   s.   |  t  tjddD ]}|  | qd S )NT)Zpercpu)r`   r   Z	cpu_times)r   r]   r   r   r   test_cpu_times   s   z!TestSystemAPITypes.test_cpu_timesc                 C   s,   |  tjd dt |  tjddt d S )Nintervalgh㈵>)r\   r   Zcpu_percentfloatr   r   r   r   test_cpu_percent   s   z#TestSystemAPITypes.test_cpu_percentc                 C   s(   |  tjd d |  tjdd d S )Nrb   g-C6?)r`   r   Zcpu_times_percentr   r   r   r   test_cpu_times_percent   s   z)TestSystemAPITypes.test_cpu_times_percentc                 C      |  t t d S rX   )r\   r   	cpu_countintr   r   r   r   test_cpu_count   s   z!TestSystemAPITypes.test_cpu_countarm64zskipped due to #1892znot supportedc                 C   s2   t  d u r| d| jt  tttfd d S )Nzcpu_freq() returns Noner^   )r   r:   ZskipTestr`   rd   ri   r   r   r   r   r   r;      s   
z TestSystemAPITypes.test_cpu_freqc                 C   s<   t jdd D ]\}}| |t | j|ttfd qd S )NT)Zperdiskrl   )r   Zdisk_io_countersitemsr\   strr`   ri   r   )r   kvr   r   r   test_disk_io_counters   s   z(TestSystemAPITypes.test_disk_io_countersc                 C   sv   t  D ]4}| |jt | |jt | |jt | |jt | |jt	t
d f | |jt	t
d f qd S rX   )r   Zdisk_partitionsr\   Zdevicern   Z
mountpointZfstypeoptsZmaxfileri   typeZmaxpath)r   Zdiskr   r   r   test_disk_partitions   s   z'TestSystemAPITypes.test_disk_partitionszrequires rootc                 C   sd   t  % td}| t|tt| |D ]}t|sJ qW d    d S 1 s+w   Y  d S )Nall)r   r   Znet_connectionsr   lensetr   )r   retconnr   r   r   test_net_connections  s   
"z'TestSystemAPITypes.test_net_connectionsc                 C   s   t   D ]B\}}| |t |D ]5}td ur#ts#| |jtj n| |jt	 | |j
t | |jttd f | |jttd f qqd S rX   )r   Znet_if_addrsrm   r\   rn   r   r   familyIntEnumri   addressnetmaskrs   	broadcast)r   ifnameaddrsaddrr   r   r   test_net_if_addrs  s   z$TestSystemAPITypes.test_net_if_addrsc                 C   sx   t   D ]3\}}| |t | |jt td ur$| |jtj	 n| |jt
 | |jt
 | |jt
 qd S rX   )r   Znet_if_statsrm   r\   rn   Zisupboolr   Zduplexr|   ri   speedZmtu)r   r   infor   r   r   test_net_if_stats  s   z$TestSystemAPITypes.test_net_if_statsc                 C   s"   t jddD ]}| |t qd S )NT)Zpernic)r   Znet_io_countersr\   rn   )r   r   r   r   r   test_net_io_counters&  s   z'TestSystemAPITypes.test_net_io_countersc              	   C   sV   t   D ]"\}}| |t |D ]}| |jt | |jttt	d f qqd S rX   )
r   r>   rm   r\   rn   labelcurrentrd   ri   rs   r   nameZunitsunitr   r   r   r?   ,  s   z$TestSystemAPITypes.test_sensors_fansc              	   C   s   t   D ]:\}}| |t |D ]-}| |jt | |jttt	d f | |j
ttt	d f | |jttt	d f qqd S rX   )r   r<   rm   r\   rn   r   r   rd   ri   rs   highcriticalr   r   r   r   r=   5  s   z,TestSystemAPITypes.test_sensors_temperaturesc                 C   rg   rX   )r\   r   Z	boot_timerd   r   r   r   r   test_boot_time@  s   z!TestSystemAPITypes.test_boot_timec                 C   sb   t  D ]*}| |jt | |jttd f | |jttd f | |jt	td f qd S rX   )
r   Zusersr\   r   rn   rK   rs   hostpidri   )r   userr   r   r   
test_usersD  s   zTestSystemAPITypes.test_usersN)!r0   r1   r2   __doc__classmethodr[   rd   r`   ra   re   rf   rj   r3   r4   r   platformmachiner   r;   rq   rt   r   rz   r   r   r   r   r   r?   r   r=   r   r   r   r   r   r   rW      s8    







rW   c                   @   s"   e Zd Zee ddd ZdS )TestProcessWaitTypez	not POSIXc                 C   sZ   t |  j}|  | }| |tj  t	d ur%| 
|t	j d S | 
|t d S rX   )r   rC   Zspawn_testprocr   	terminatewaitr   signalSIGTERMr   r\   r|   ri   )r   pcoder   r   r   test_negative_signalN  s   z(TestProcessWaitType.test_negative_signalN)r0   r1   r2   r3   r4   r   r   r   r   r   r   r   M  s    r   __main__)run_from_name)&r   r   r   r3   r   r   r   r   r   r   r   r   r	   r
   Zpsutil._compatr   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r5   rA   rW   r   r0   Zpsutil.tests.runnerr   __file__r   r   r   r   <module>   sJ   >? 