
    /h.                        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e          Z G d de          Z G d de          Z G d de          Z G 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                   t    e Zd Zd Zd Zd Zd Zej        	                    e
oed          d             ZdS )	TestAvailConstantsAPIsc                 b    t          t          d          t          pt          pt          k    sJ d S )NPROCFS_PATH)hasattrpsutilr   r
   r   selfs    N/var/www/html/venv/lib/python3.11/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATHz'TestAvailConstantsAPIs.test_PROCFS_PATH0   s-    v}--%2G52GCHHHHHH    c                    | 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   aes     r    test_win_priorityz(TestAvailConstantsAPIs.test_win_priority3   s    
768997CCC
768997CCC
760117;;;
760117;;;
76233W===
76455w?????r"   c                 4   | 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,   s     r    test_linux_ioprio_linuxz.TestAvailConstantsAPIs.test_linux_ioprio_linux<   s    
76.//777
76,--u555
76,--u555
76.//77777r"   c                 4   | j         } |t          t          d          t                      |t          t          d          t                      |t          t          d          t                      |t          t          d          t                     d S )NIOPRIO_HIGHIOPRIO_NORMAL
IOPRIO_LOWIOPRIO_VERYLOWr*   r,   s     r    test_linux_ioprio_windowsz0TestAvailConstantsAPIs.test_linux_ioprio_windowsC   s    
76=))7333
76?++W555
76<(('222
76+,,g66666r"   %unsupported on GITHUB_ACTIONS + LINUXreasonc                    | 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          pt                      |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          pt                      |t          t          d          t          pt                      |t          t          d          t                     t
          r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                      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)rK   rL      RLIMIT_NICERLIMIT_RTPRIO)rK   rL      RLIMIT_RTTIMERLIMIT_SIGPENDINGRLIMIT_SWAPRLIMIT_SBSIZERLIMIT_NPTS)r+   r   r   r   r   r	   r   r,   s     r    test_rlimitz"TestAvailConstantsAPIs.test_rlimitJ   s   
 
76?++U-=g>>>
76;'')9':::
76=))5+;G<<<
76<((%*:7;;;
76=))5+;G<<<
76>**E,<W===
76+,,e.>w???
76?++U-=g>>>
76>**E,<W===
76<((%*:7;;;
76>**E,<W===
76>**E222 
	@9,,76#455u===:--76=115999:--76?33U;;;:--76?33U;;;9,,76#677???
76=))7333
76?++W555
76=))733333r"   N)__name__
__module____qualname__r!   r.   r4   r:   r   markskipifr   r   rX    r"   r    r   r   /   s        I I I@ @ @8 8 87 7 7 [ 56   4 4	 4 4 4r"   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestAvailSystemAPIsc                 F    t          t          d          t          k    sJ d S )Nwin_service_iterr   r   r   r   s    r    test_win_service_iterz)TestAvailSystemAPIs.test_win_service_itero   s$    v122g======r"   c                 F    t          t          d          t          k    sJ d S )Nwin_service_getrc   r   s    r    test_win_service_getz(TestAvailSystemAPIs.test_win_service_getr   s$    v011W<<<<<<r"   c                 ~    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   s    r    test_cpu_freqz!TestAvailSystemAPIs.test_cpu_frequ   sD    vz**;U;g;;G
 
 
 
 
 
r"   c                 T    t          t          d          t          pt          k    sJ d S )Nsensors_temperatures)r   r   r   r   r   s    r    test_sensors_temperaturesz-TestAvailSystemAPIs.test_sensors_temperaturesz   s)    v5665;KGLLLLLLr"   c                 F    t          t          d          t          k    sJ d S )Nsensors_fans)r   r   r   r   s    r    test_sensors_fansz%TestAvailSystemAPIs.test_sensors_fans}   s#    v~..%777777r"   c                 p    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   s    r    test_batteryz TestAvailSystemAPIs.test_battery   s@    v0110W005
 
 
 
 
 
r"   N)	rY   rZ   r[   rd   rg   rj   rm   rp   rs   r^   r"   r    r`   r`   n   sq        > > >= = =
 
 

M M M8 8 8
 
 
 
 
r"   r`   c                       e Zd Zd Zd Zd Zd Zd Zej	        
                    eoed          d             Zd	 Zd
 Zd Zd Zd Zd ZdS )TestAvailProcessAPIsc                     t          t          j        d          t          p0t          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   s    r    test_environz!TestAvailProcessAPIs.test_environ   st    v~y11   	
   	
 	
 	
 	
 	
 	
r"   c                 P    t          t          j        d          t          k    sJ d S Nuidsr   r   rx   r	   r   s    r    	test_uidszTestAvailProcessAPIs.test_uids   %    v~v..%777777r"   c                 P    t          t          j        d          t          k    sJ d S r{   r}   r   s    r    	test_gidszTestAvailProcessAPIs.test_gids   r   r"   c                 P    t          t          j        d          t          k    sJ d S )Nterminalr}   r   s    r    test_terminalz"TestAvailProcessAPIs.test_terminal   s%    v~z22e;;;;;;r"   c                 ^    t          t          j        d          t          pt          k    sJ d S )Nionice)r   r   rx   r   r   r   s    r    test_ionicez TestAvailProcessAPIs.test_ionice   s*    v~x00U5EgFFFFFFr"   r;   r<   c                 ^    t          t          j        d          t          pt          k    sJ d S )Nrlimit)r   r   rx   r   r   r   s    r    rX   z TestAvailProcessAPIs.test_rlimit   s,    
 v~x00U5EgFFFFFFr"   c                 d    t          t          j        d          }|t          pt           k    sJ d S )Nio_counters)r   r   rx   r   r
   r   hasits     r    test_io_countersz%TestAvailProcessAPIs.test_io_counters   s1    66enu-......r"   c                 P    t          t          j        d          t          k    sJ d S )Nnum_fdsr}   r   s    r    test_num_fdsz!TestAvailProcessAPIs.test_num_fds   s%    v~y11U::::::r"   c                 P    t          t          j        d          t          k    sJ d S )Nnum_handles)r   r   rx   r   r   s    r    test_num_handlesz%TestAvailProcessAPIs.test_num_handles   s%    v~}55@@@@@@r"   c                 l    t          t          j        d          t          pt          pt
          k    sJ d S )Ncpu_affinity)r   r   rx   r   r   r   r   s    r    test_cpu_affinityz&TestAvailProcessAPIs.test_cpu_affinity   s<    v~~66'W'
 
 
 
 
 
r"   c                 l    t          t          j        d          t          pt          pt
          k    sJ d S )Ncpu_num)r   r   rx   r   r   r
   r   s    r    test_cpu_numz!TestAvailProcessAPIs.test_cpu_num   s<    v~y11%W%
 
 
 
 
 
r"   c                     t          t          j        d          }|t          pt          pt
          pt           k    sJ d S )Nmemory_maps)r   r   rx   r   r   r   r   r   s     r    test_memory_mapsz%TestAvailProcessAPIs.test_memory_maps   s<    66g??3?%@AAAAAAr"   N)rY   rZ   r[   ry   r~   r   r   r   r   r\   r]   r   r   rX   r   r   r   r   r   r   r^   r"   r    ru   ru      s       

 

 

8 8 88 8 8< < <G G G [ 56   G G	 G/ / /; ; ;A A A
 
 


 
 

B B B B Br"   ru   c                   T   e Zd ZdZed             ZedfdZd Zd Z	d Z
d Zej                            eo ej                    d	k    d
          ej                            e d          d                         Zd Zd Zej                            ed          d             Zd Zd Zej                            e d          d             Zej                            e d          d             Zej                            e d          d             Zd Z d Z!dS )TestSystemAPITypeszhCheck the return types of system related APIs.
    https://github.com/giampaolo/psutil/issues/1039.
    c                 6    t          j                    | _        d S N)r   rx   proc)clss    r    
setUpClasszTestSystemAPITypes.setUpClass   s    >##r"   Tc                 j    t          |          sJ |D ]}t          ||          sJ |r|dk    sJ d S )Nr   )r   
isinstance)r   nttype_gezerons        r    assert_ntuple_of_numsz(TestSystemAPITypes.assert_ntuple_of_nums   s[    R      	 	Aa''''' Avvvv	 	r"   c                     |                      t          j                               t          j        d          D ]}|                      |           d S )NT)percpu)r   r   	cpu_times)r   r   s     r    test_cpu_timesz!TestSystemAPITypes.test_cpu_times   s]    ""6#3#5#5666"$/// 	+ 	+B&&r****	+ 	+r"   c                     t          t          j        d           t                    sJ t          t          j        d          t                    sJ d S )Nintervalgh㈵>)r   r   cpu_percentfloatr   s    r    test_cpu_percentz#TestSystemAPITypes.test_cpu_percent   sP    &,d;;;UCCCCC&,g>>>FFFFFFFr"   c                     |                      t          j        d                      |                      t          j        d                     d S )Nr   g-C6?)r   r   cpu_times_percentr   s    r    test_cpu_times_percentz)TestSystemAPITypes.test_cpu_times_percent   sL    ""6#;T#J#J#JKKK""6#;V#L#L#LMMMMMr"   c                 V    t          t          j                    t                    sJ d S r   )r   r   	cpu_countintr   s    r    test_cpu_countz!TestSystemAPITypes.test_cpu_count   s'    &*,,c2222222r"   arm64zskipped due to #1892r<   znot supportedc                     t          j                    t          j        d          |                     t          j                    t
          t          f           d S )Nzcpu_freq() returns Noner   )r   ri   r   skipr   r   r   r   s    r    rj   z TestSystemAPITypes.test_cpu_freq   sN    
 ?$+7888""6?#4#4UCL"IIIIIr"   c                     t          j        d                                          D ]8\  }}t          |t                    sJ |                     |t                     9d S )NT)perdiskr   )r   disk_io_countersitemsr   strr   r   )r   kvs      r    test_disk_io_countersz(TestSystemAPITypes.test_disk_io_counters   sk    +D999??AA 	5 	5DAqa%%%%%&&q&4444	5 	5r"   c                    t          j                    D ]r}t          |j        t                    sJ t          |j        t                    sJ t          |j        t                    sJ t          |j        t                    sJ sd S r   )r   disk_partitionsr   devicer   
mountpointfstypeopts)r   disks     r    test_disk_partitionsz'TestSystemAPITypes.test_disk_partitions   s    *,, 	. 	.Ddk3/////dos33333dk3/////di------		. 	.r"   zrequires rootc                    t                      5  t          j        d          }t          |          t          t	          |                    k    sJ |D ]}t          |          sJ 	 d d d            d S # 1 swxY w Y   d S )Nall)r   r   net_connectionslensetr   )r   retconns      r    test_net_connectionsz'TestSystemAPITypes.test_net_connections   s     	+ 	+(//Cs88s3s88}},,,, + +$T******+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   AA77A;>A;c           	         t          j                                                    D ]\  }}t          |t                    sJ |D ]}t          |j        t          j                  sJ t          |j        t                    sJ t          |j	        t          t          d           f          sJ t          |j        t          t          d           f          sJ d S r   )r   net_if_addrsr   r   r   familyr   IntEnumaddressnetmasktype	broadcast)r   ifnameaddrsaddrs       r    test_net_if_addrsz$TestSystemAPITypes.test_net_if_addrs  s    #02288:: 	E 	EMFEfc***** E E!$+t|<<<<<!$,44444!$,d4jj0ABBBBB!$.3T

2CDDDDDD	E	E 	Er"   c                 t   t          j                                                    D ]\  }}t          |t                    sJ t          |j        t                    sJ t          |j        t          j	                  sJ t          |j
        t                    sJ t          |j        t                    sJ d S r   )r   net_if_statsr   r   r   isupboolduplexr   r   speedr   mtu)r   r   infos      r    test_net_if_statsz$TestSystemAPITypes.test_net_if_stats  s    "/117799 	- 	-LFDfc*****di.....dk4<88888dj#.....dh,,,,,,	- 	-r"   c                 d    t          j        d          D ]}t          |t                    sJ d S )NT)pernic)r   net_io_countersr   r   )r   r   s     r    test_net_io_countersz'TestSystemAPITypes.test_net_io_counters  sD     ,D999 	+ 	+Ffc******	+ 	+r"   c           
      .   t          j                                                    D ]n\  }}t          |t                    sJ |D ]O}t          |j        t                    sJ t          |j        t          t          t          d           f          sJ Pod S r   )
r   ro   r   r   r   labelcurrentr   r   r   r   nameunitsunits       r    rp   z$TestSystemAPITypes.test_sensors_fans  s     ".006688 	J 	JKD%dC((((( J J!$*c22222!$,T$ZZ0HIIIIIIJ	J 	Jr"   c           
         t          j                                                    D ]\  }}t          |t                    sJ |D ]}t          |j        t                    sJ t          |j        t          t          t          d           f          sJ t          |j
        t          t          t          d           f          sJ t          |j        t          t          t          d           f          sJ d S r   )r   rl   r   r   r   r   r   r   r   r   highcriticalr   s       r    rm   z,TestSystemAPITypes.test_sensors_temperatures&  s     "688>>@@ 	K 	KKD%dC((((( K K!$*c22222!$,T$ZZ0HIIIII!$)eS$t**-EFFFFF!$-%d4jj1IJJJJJJ	K	K 	Kr"   c                 V    t          t          j                    t                    sJ d S r   )r   r   	boot_timer   r   s    r    test_boot_timez!TestSystemAPITypes.test_boot_time1  s'    &*,,e4444444r"   c                 l   t          j                    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          sJ d S r   )
r   usersr   r   r   r   r   hostpidr   )r   users     r    
test_userszTestSystemAPITypes.test_users5  s    LNN 	; 	;Ddi-----dmc4::->?????di#tDzz):;;;;;dhd4jj(9::::::		; 	;r"   N)"rY   rZ   r[   __doc__classmethodr   r   r   r   r   r   r   r   r\   r]   r   platformmachiner   rj   r   r   r   r   r   r   r   r   r   rp   r   rm   r   r  r^   r"   r    r   r      sF         $ $ [$ /4D    + + +
G G GN N N3 3 3 [/"("$$/8N    [L(AAJ J BA J
5 5 5. . . [_==+ + >=+E E E- - - [//HH+ + IH+
 [,,_EEJ J FEJ [44_MMK K NMK5 5 5; ; ; ; ;r"   r   c                   Z    e Zd Zej                            e d          d             ZdS )TestProcessWaitTypez	not POSIXr<   c                 
   t          j        |                                 j                  }|                                 |                                }|t          j         k    sJ t          |t          j
                  sJ d S r   )r   rx   spawn_testprocr  	terminatewaitsignalSIGTERMr   r   r   )r   pcodes      r    test_negative_signalz(TestProcessWaitType.test_negative_signal?  sm    N4..00455	vvxx&&&&$-------r"   N)rY   rZ   r[   r   r\   r]   r	   r  r^   r"   r    r
  r
  >  sE        [E	+66. . 76. . .r"   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   r`   ru   r   r
  r^   r"   r    <module>r     s   
                                                          ' ' ' ' ' ' % % % % % % , , , , , , ) ) ) ) ) ) 1 1 1 1 1 1 % % % % % % ' ' ' ' ' ' ' ' ' ' ' '       & & & & & & ' ' ' ' ' '      <4 <4 <4 <4 <4^ <4 <4 <4~
 
 
 
 
. 
 
 
06B 6B 6B 6B 6B> 6B 6B 6B|w; w; w; w; w; w; w; w;t. . . . .. . . . . .r"   