o
    h.                     @   sl  d 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 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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)GITHUB_ACTIONS)HAS_CPU_FREQ)HAS_NET_IO_COUNTERS)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)SKIP_SYSCONS)PsutilTestCase)create_sockets)enum)is_namedtuple)kernel_version)pytestc                   @   sH   e Zd Zdd Zdd Zdd Zdd Zejj	e
oed	d
dd ZdS )TestAvailConstantsAPIsc                 C   s   t tdtp	tp	tksJ d S )NPROCFS_PATH)hasattrpsutilr   r	   r   self r   O/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATH0   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 )NABOVE_NORMAL_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSIDLE_PRIORITY_CLASSNORMAL_PRIORITY_CLASSREALTIME_PRIORITY_CLASSassertEqualr   r   r
   r   aer   r   r   test_win_priority3   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 )NIOPRIO_CLASS_NONEIOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLE)r'   r   r   r   r(   r   r   r   test_linux_ioprio_linux<   
   z.TestAvailConstantsAPIs.test_linux_ioprio_linuxc                 C   r+   )NIOPRIO_HIGHIOPRIO_NORMAL
IOPRIO_LOWIOPRIO_VERYLOWr&   r(   r   r   r   test_linux_ioprio_windowsC   r1   z0TestAvailConstantsAPIs.test_linux_ioprio_windows%unsupported on GITHUB_ACTIONS + LINUXreasonc                 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 )NRLIM_INFINITY	RLIMIT_ASRLIMIT_CORE
RLIMIT_CPURLIMIT_DATARLIMIT_FSIZERLIMIT_MEMLOCKRLIMIT_NOFILERLIMIT_NPROC
RLIMIT_RSSRLIMIT_STACKRLIMIT_LOCKS)         RLIMIT_MSGQUEUE)rF   rG      RLIMIT_NICERLIMIT_RTPRIO)rF   rG      RLIMIT_RTTIMERLIMIT_SIGPENDINGRLIMIT_SWAPRLIMIT_SBSIZERLIMIT_NPTS)r'   r   r   r   r   r   r   r(   r   r   r   test_rlimitJ   s6   




z"TestAvailConstantsAPIs.test_rlimitN)__name__
__module____qualname__r   r*   r0   r6   r   markskipifr   r   rS   r   r   r   r   r   /   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ks	J d S )Nwin_service_iterr   r   r
   r   r   r   r   test_win_service_itero      z)TestAvailSystemAPIs.test_win_service_iterc                 C   rZ   )Nwin_service_getr\   r   r   r   r   test_win_service_getr   r^   z(TestAvailSystemAPIs.test_win_service_getc                 C   s&   t tdtptptptptksJ d S )Ncpu_freq)r   r   r   r   r
   r   r   r   r   r   r   test_cpu_frequ   s   z!TestAvailSystemAPIs.test_cpu_freqc                 C   s   t tdtptksJ d S )Nsensors_temperatures)r   r   r   r   r   r   r   r   test_sensors_temperaturesz   s   z-TestAvailSystemAPIs.test_sensors_temperaturesc                 C   rZ   )Nsensors_fans)r   r   r   r   r   r   r   test_sensors_fans}   r^   z%TestAvailSystemAPIs.test_sensors_fansc                 C   s"   t tdtptptptksJ d S )Nsensors_battery)r   r   r   r
   r   r   r   r   r   r   test_battery   s   z TestAvailSystemAPIs.test_batteryN)	rT   rU   rV   r]   r`   rb   rd   rf   rh   r   r   r   r   rY   n   s    rY   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	j
eoed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
ksJ d S )Nenviron)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ks
J d S Nuidsr   r   rk   r   r   r   r   r   	test_uids      zTestAvailProcessAPIs.test_uidsc                 C   rm   rn   rp   r   r   r   r   	test_gids   rr   zTestAvailProcessAPIs.test_gidsc                 C   rm   )Nterminalrp   r   r   r   r   test_terminal   rr   z"TestAvailProcessAPIs.test_terminalc                 C      t tjdtptksJ d S )Nionice)r   r   rk   r   r
   r   r   r   r   test_ionice   s   z TestAvailProcessAPIs.test_ionicer7   r8   c                 C   rv   )Nrlimit)r   r   rk   r   r   r   r   r   r   rS      s   z TestAvailProcessAPIs.test_rlimitc                 C   s"   t tjd}|tp
t ksJ d S )Nio_counters)r   r   rk   r   r	   r   hasitr   r   r   test_io_counters   s   z%TestAvailProcessAPIs.test_io_countersc                 C   rm   )Nnum_fdsrp   r   r   r   r   test_num_fds   rr   z!TestAvailProcessAPIs.test_num_fdsc                 C   rm   )Nnum_handles)r   r   rk   r
   r   r   r   r   test_num_handles   rr   z%TestAvailProcessAPIs.test_num_handlesc                 C       t tjdtp
tp
tksJ d S )Ncpu_affinity)r   r   rk   r   r
   r   r   r   r   r   test_cpu_affinity      

z&TestAvailProcessAPIs.test_cpu_affinityc                 C   r   )Ncpu_num)r   r   rk   r   r   r	   r   r   r   r   test_cpu_num   r   z!TestAvailProcessAPIs.test_cpu_numc                 C   s*   t tjd}|tptptpt ksJ d S )Nmemory_maps)r   r   rk   r   r   r   r   r{   r   r   r   test_memory_maps   s   z%TestAvailProcessAPIs.test_memory_mapsN)rT   rU   rV   rl   rq   rs   ru   rx   r   rW   rX   r   r   rS   r}   r   r   r   r   r   r   r   r   r   ri      s"    
ri   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jjeo-e dkddejje dddd Zdd Zdd Zejjedddd Zdd Zdd Zejje ddd d! Zejje ddd"d# Zejje ddd$d% Zd&d' Z d(d) Z!d*S )+TestSystemAPITypeszhCheck the return types of system related APIs.
    https://github.com/giampaolo/psutil/issues/1039.
    c                 C   s   t  | _d S N)r   rk   proc)clsr   r   r   
setUpClass   s   zTestSystemAPITypes.setUpClassTc                 C   s8   t |sJ |D ]}t||sJ |r|dksJ qd S )Nr   )r   
isinstance)r   nttype_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)percpu)r   r   	cpu_times)r   r   r   r   r   test_cpu_times   s   z!TestSystemAPITypes.test_cpu_timesc                 C   s0   t tjd dtsJ t tjddtsJ d S )Nintervalgh㈵>)r   r   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 )Nr   g-C6?)r   r   cpu_times_percentr   r   r   r   test_cpu_times_percent   s   z)TestSystemAPITypes.test_cpu_times_percentc                 C      t t ts	J d S r   )r   r   	cpu_countintr   r   r   r   test_cpu_count   r^   z!TestSystemAPITypes.test_cpu_countarm64zskipped due to #1892r8   znot supportedc                 C   s0   t  d u rtd| jt  ttfd d S )Nzcpu_freq() returns Noner   )r   ra   r   skipr   r   r   r   r   r   r   rb      s   
z TestSystemAPITypes.test_cpu_freqc                 C   s:   t jdd D ]\}}t|tsJ | j|td qd S )NT)perdiskr   )r   disk_io_countersitemsr   strr   r   )r   kvr   r   r   test_disk_io_counters   s   z(TestSystemAPITypes.test_disk_io_countersc                 C   sR   t  D ]"}t|jtsJ t|jtsJ t|jtsJ t|jts&J qd S r   )r   disk_partitionsr   devicer   
mountpointfstypeopts)r   diskr   r   r   test_disk_partitions   s   z'TestSystemAPITypes.test_disk_partitionszrequires rootc                 C   sd   t  % td}t|tt|ksJ |D ]}t|sJ qW d    d S 1 s+w   Y  d S )Nall)r   r   net_connectionslensetr   )r   retconnr   r   r   test_net_connections   s   
"z'TestSystemAPITypes.test_net_connectionsc                 C   s   t   D ]9\}}t|tsJ |D ]+}t|jtjsJ t|jts&J t|j	tt
d fs2J t|jtt
d fs>J qqd S r   )r   net_if_addrsr   r   r   familyr   IntEnumaddressnetmasktype	broadcast)r   ifnameaddrsaddrr   r   r   test_net_if_addrs  s   z$TestSystemAPITypes.test_net_if_addrsc                 C   sj   t   D ],\}}t|tsJ t|jtsJ t|jtj	s"J t|j
ts*J t|jts2J qd S r   )r   net_if_statsr   r   r   isupboolduplexr   r   speedr   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|tsJ qd S )NT)pernic)r   net_io_countersr   r   )r   r   r   r   r   test_net_io_counters  s   z'TestSystemAPITypes.test_net_io_countersc                 C   s\   t   D ]%\}}t|tsJ |D ]}t|jtsJ t|jttt	d fs*J qqd S r   )
r   re   r   r   r   labelcurrentr   r   r   r   nameunitsunitr   r   r   rf     s   z$TestSystemAPITypes.test_sensors_fansc                 C   s   t   D ]?\}}t|tsJ |D ]1}t|jtsJ t|jttt	d fs*J t|j
ttt	d fs7J t|jttt	d fsDJ qqd S r   )r   rc   r   r   r   r   r   r   r   r   highcriticalr   r   r   r   rd   &  s   z,TestSystemAPITypes.test_sensors_temperaturesc                 C   r   r   )r   r   	boot_timer   r   r   r   r   test_boot_time1  s   z!TestSystemAPITypes.test_boot_timec                 C   sj   t  D ].}t|jtsJ t|jttd fsJ t|jttd fs&J t|jt	td fs2J qd S r   )
r   usersr   r   r   rt   r   hostpidr   )r   userr   r   r   
test_users5  s   zTestSystemAPITypes.test_usersN)"rT   rU   rV   __doc__classmethodr   r   r   r   r   r   r   r   rW   rX   r   platformmachiner   rb   r   r   r   r   r   r   r   r   r   rf   r   rd   r   r   r   r   r   r   r      s8    


	



r   c                   @   s&   e Zd Zejje dddd ZdS )TestProcessWaitTypez	not POSIXr8   c                 C   sD   t |  j}|  | }|tj ksJ t|t	j
s J d S r   )r   rk   spawn_testprocr   	terminatewaitsignalSIGTERMr   r   r   )r   pcoder   r   r   test_negative_signal?  s
   z(TestProcessWaitType.test_negative_signalN)rT   rU   rV   r   rW   rX   r   r   r   r   r   r   r   >  s    r   )r   r   r   r   r   r   r   r   r   r   r   r	   r
   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   rY   ri   r   r   r   r   r   r   <module>   s<   ?>z