
    ;^h.                        S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SS	KJ
r
  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr   " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      rg)"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                   ~    \ rS rSrS rS rS rS r\R                  R                  \=(       a    \SS9S 5       rS	rg
)TestAvailConstantsAPIs/   c                 l    [        [        S5      [        =(       d    [        =(       d    [        :X  d   eg )NPROCFS_PATH)hasattrpsutilr   r
   r   selfs    M/var/www/html/env/lib/python3.13/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATH'TestAvailConstantsAPIs.test_PROCFS_PATH0   s!    v}-%2G52GCHHH    c                 `   U R                   nU" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        g )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_priority(TestAvailConstantsAPIs.test_win_priority3   sy    
76897C
76897C
76017;
76017;
7623W=
7645w?r$   c                     U R                   nU" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        g )NIOPRIO_CLASS_NONEIOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLE)r-   r   r   r   r.   s     r!   test_linux_ioprio_linux.TestAvailConstantsAPIs.test_linux_ioprio_linux<   sU    
76./7
76,-u5
76,-u5
76./7r$   c                     U R                   nU" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        g )NIOPRIO_HIGHIOPRIO_NORMAL
IOPRIO_LOWIOPRIO_VERYLOWr,   r.   s     r!   test_linux_ioprio_windows0TestAvailConstantsAPIs.test_linux_ioprio_windowsC   sR    
76=)73
76?+W5
76<('2
76+,g6r$   %unsupported on GITHUB_ACTIONS + LINUXreasonc                    U R                   nU" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S	5      [        =(       d    [        5        U" [        [        S
5      [        =(       d    [        5        U" [        [        S5      [        =(       d    [        5        U" [        [        S5      [        5        [
        (       a  [        5       S:  a  U" [        [        S5      [        5        [        5       S:  a  U" [        [        S5      [        5        [        5       S:  a  U" [        [        S5      [        5        [        5       S:  a  U" [        [        S5      [        5        [        5       S:  a  U" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        U" [        [        S5      [        5        g )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)rP   rQ      RLIMIT_NICERLIMIT_RTPRIO)rP   rQ      RLIMIT_RTTIMERLIMIT_SIGPENDINGRLIMIT_SWAPRLIMIT_SBSIZERLIMIT_NPTS)r-   r   r   r   r   r	   r   r.   s     r!   test_rlimit"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59,76#45u=:-76=159:-76?3U;:-76?3U;9,76#67?
76=)73
76?+W5
76=)73r$    N)__name__
__module____qualname____firstlineno__r"   r0   r7   r>   r   markskipifr   r   r]   __static_attributes__r_   r$   r!   r   r   /   sK    I@87 [[ 56  4	4r$   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestAvailSystemAPIsn   c                 8    [        [        S5      [        :X  d   eg )Nwin_service_iterr   r   r   r   s    r!   test_win_service_iter)TestAvailSystemAPIs.test_win_service_itero   s    v12g===r$   c                 8    [        [        S5      [        :X  d   eg )Nwin_service_getrl   r   s    r!   test_win_service_get(TestAvailSystemAPIs.test_win_service_getr   s    v01W<<<r$   c                     [        [        S5      [        =(       d-    [        =(       d     [        =(       d    [
        =(       d    [        :X  d   eg )Ncpu_freq)r   r   r   r   r   r   r   r   s    r!   test_cpu_freq!TestAvailSystemAPIs.test_cpu_frequ   s2    vz*;U;g;;G
 	
 
r$   c                 R    [        [        S5      [        =(       d    [        :X  d   eg )Nsensors_temperatures)r   r   r   r   r   s    r!   test_sensors_temperatures-TestAvailSystemAPIs.test_sensors_temperaturesz   s    v565;KGLLLr$   c                 8    [        [        S5      [        :X  d   eg )Nsensors_fans)r   r   r   r   s    r!   test_sensors_fans%TestAvailSystemAPIs.test_sensors_fans}   s    v~.%777r$   c                     [        [        S5      [        =(       d     [        =(       d    [        =(       d    [
        :X  d   eg )Nsensors_battery)r   r   r   r   r   r   r   s    r!   test_battery TestAvailSystemAPIs.test_battery   s.    v010W005
 	
 
r$   r_   N)r`   ra   rb   rc   rm   rq   ru   ry   r}   r   rf   r_   r$   r!   rh   rh   n   s!    >=

M8
r$   rh   c                       \ rS rSrS rS rS rS rS r\	R                  R                  \=(       a    \SS9S	 5       rS
 rS rS rS rS rS rSrg)TestAvailProcessAPIs   c                    [        [        R                  S5      [        =(       dT    [        =(       dG    [
        =(       d:    [        =(       d-    [        =(       d     [        =(       d    [        =(       d    [        :X  d   eg )Nenviron)r   r   Processr   r   r   r   r
   r   r   r   r   s    r!   test_environ!TestAvailProcessAPIs.test_environ   sd    v~~y1   	
   	
 		
 	
r$   c                 L    [        [        R                  S5      [        :X  d   eg Nuidsr   r   r   r	   r   s    r!   	test_uidsTestAvailProcessAPIs.test_uids       v~~v.%777r$   c                 L    [        [        R                  S5      [        :X  d   eg r   r   r   s    r!   	test_gidsTestAvailProcessAPIs.test_gids   r   r$   c                 L    [        [        R                  S5      [        :X  d   eg )Nterminalr   r   s    r!   test_terminal"TestAvailProcessAPIs.test_terminal   s    v~~z2e;;;r$   c                 f    [        [        R                  S5      [        =(       d    [        :X  d   eg )Nionice)r   r   r   r   r   r   s    r!   test_ionice TestAvailProcessAPIs.test_ionice   s     v~~x0U5EgFFFr$   r@   rA   c                 f    [        [        R                  S5      [        =(       d    [        :X  d   eg )Nrlimit)r   r   r   r   r   r   s    r!   r]    TestAvailProcessAPIs.test_rlimit   s"    
 v~~x0U5EgFFFr$   c                 t    [        [        R                  S5      nU[        =(       d    [        (       + :X  d   eg )Nio_counters)r   r   r   r   r
   r    hasits     r!   test_io_counters%TestAvailProcessAPIs.test_io_counters   s'    6enu-...r$   c                 L    [        [        R                  S5      [        :X  d   eg )Nnum_fdsr   r   s    r!   test_num_fds!TestAvailProcessAPIs.test_num_fds   s    v~~y1U:::r$   c                 L    [        [        R                  S5      [        :X  d   eg )Nnum_handles)r   r   r   r   r   s    r!   test_num_handles%TestAvailProcessAPIs.test_num_handles   s    v~~}5@@@r$   c                     [        [        R                  S5      [        =(       d    [        =(       d    [
        :X  d   eg )Ncpu_affinity)r   r   r   r   r   r   r   s    r!   test_cpu_affinity&TestAvailProcessAPIs.test_cpu_affinity   s,    v~~~6'W'
 	
 
r$   c                     [        [        R                  S5      [        =(       d    [        =(       d    [
        :X  d   eg )Ncpu_num)r   r   r   r   r   r
   r   s    r!   test_cpu_num!TestAvailProcessAPIs.test_cpu_num   s,    v~~y1%W%
 	
 
r$   c                     [        [        R                  S5      nU[        =(       d     [        =(       d    [
        =(       d    [        (       + :X  d   eg )Nmemory_maps)r   r   r   r   r   r   r   r   s     r!   test_memory_maps%TestAvailProcessAPIs.test_memory_maps   s2    6g??3?%@AAAr$   r_   N)r`   ra   rb   rc   r   r   r   r   r   r   rd   re   r   r   r]   r   r   r   r   r   r   rf   r_   r$   r!   r   r      sq    

88<G [[ 56  G	G/;A



Br$   r   c                   J   \ rS rSrSr\S 5       r\S4S jrS r	S r
S rS	 r\R                  R                  \=(       a    \R$                  " 5       S
:H  SS9\R                  R                  \(       + SS9S 5       5       rS rS r\R                  R                  \SS9S 5       rS rS r\R                  R                  \(       + SS9S 5       r\R                  R                  \(       + SS9S 5       r\R                  R                  \(       + SS9S 5       r S r!S r"Sr#g)TestSystemAPITypes   z`Check the return types of system related APIs.
https://github.com/giampaolo/psutil/issues/1039.
c                 8    [         R                  " 5       U l        g N)r   r   proc)clss    r!   
setUpClassTestSystemAPITypes.setUpClass   s    >>#r$   Tc                     [        U5      (       d   eU H&  n[        XB5      (       d   eU(       d  M  US:  a  M&   e   g )Nr   )r   
isinstance)r    nttype_gezerons        r!   assert_ntuple_of_nums(TestSystemAPITypes.assert_ntuple_of_nums   s>    R    Aa''''vAvv r$   c                     U R                  [        R                  " 5       5        [        R                  " SS9 H  nU R                  U5        M     g )NT)percpu)r   r   	cpu_times)r    r   s     r!   test_cpu_times!TestSystemAPITypes.test_cpu_times   s<    ""6#3#3#56""$/B&&r* 0r$   c                     [        [        R                  " S S9[        5      (       d   e[        [        R                  " SS9[        5      (       d   eg )Nintervalgh㈵>)r   r   cpu_percentfloatr   s    r!   test_cpu_percent#TestSystemAPITypes.test_cpu_percent   s>    &,,d;UCCCC&,,g>FFFFr$   c                     U R                  [        R                  " S S95        U R                  [        R                  " SS95        g )Nr   g-C6?)r   r   cpu_times_percentr   s    r!   test_cpu_times_percent)TestSystemAPITypes.test_cpu_times_percent   s4    ""6#;#;T#JK""6#;#;V#LMr$   c                 X    [        [        R                  " 5       [        5      (       d   eg r   )r   r   	cpu_countintr   s    r!   test_cpu_count!TestSystemAPITypes.test_cpu_count   s    &**,c2222r$   arm64zskipped due to #1892rA   znot supportedc                     [         R                  " 5       c  [        R                  " S5      eU R	                  [         R                  " 5       [
        [        4S9  g )Nzcpu_freq() returns Noner   )r   rt   r   skipr   r   r   r   s    r!   ru    TestSystemAPITypes.test_cpu_freq   s?    
 ??$++788""6??#4UCL"Ir$   c                     [         R                  " SS9R                  5        H0  u  p[        U[        5      (       d   eU R                  U[        S9  M2     g )NT)perdiskr   )r   disk_io_countersitemsr   strr   r   )r    kvs      r!   test_disk_io_counters(TestSystemAPITypes.test_disk_io_counters   sI    ++D9??ADAa%%%%&&q&4 Br$   c                 D   [         R                  " 5        H  n[        UR                  [        5      (       d   e[        UR
                  [        5      (       d   e[        UR                  [        5      (       d   e[        UR                  [        5      (       a  M   e   g r   )r   disk_partitionsr   devicer   
mountpointfstypeopts)r    disks     r!   test_disk_partitions'TestSystemAPITypes.test_disk_partitions   sq    **,Ddkk3////doos3333dkk3////dii----	 -r$   zrequires rootc                     [        5          [        R                  " S5      n[        U5      [        [	        U5      5      :X  d   eU H  n[        U5      (       a  M   e   S S S 5        g ! , (       d  f       g = f)Nall)r   r   net_connectionslensetr   )r    retconns      r!   test_net_connections'TestSystemAPITypes.test_net_connections   sY    ((/Cs8s3s8},,,$T****  s   AA)A))
A7c           	         [         R                  " 5       R                  5        H  u  p[        U[        5      (       d   eU H  n[        UR
                  [        R                  5      (       d   e[        UR                  [        5      (       d   e[        UR                  [        [        S 5      45      (       d   e[        UR                  [        [        S 5      45      (       a  M   e   M     g r   )r   net_if_addrsr   r   r   familyr   IntEnumaddressnetmasktype	broadcast)r    ifnameaddrsaddrs       r!   test_net_if_addrs$TestSystemAPITypes.test_net_if_addrs  s    #00288:MFfc****!$++t||<<<<!$,,4444!$,,d4j0ABBBB!$..3T
2CDDDD	  ;r$   c                    [         R                  " 5       R                  5        H  u  p[        U[        5      (       d   e[        UR
                  [        5      (       d   e[        UR                  [        R                  5      (       d   e[        UR                  [        5      (       d   e[        UR                  [        5      (       a  M   e   g r   )r   net_if_statsr   r   r   isupboolduplexr   r  speedr   mtu)r    r  infos      r!   test_net_if_stats$TestSystemAPITypes.test_net_if_stats  s    "//1779LFfc****dii....dkk4<<8888djj#....dhh,,,, :r$   c                 h    [         R                  " SS9 H  n[        U[        5      (       a  M   e   g )NT)pernic)r   net_io_countersr   r   )r    r  s     r!   test_net_io_counters'TestSystemAPITypes.test_net_io_counters  s,     ,,D9Ffc**** :r$   c           
      @   [         R                  " 5       R                  5        Hw  u  p[        U[        5      (       d   eU HU  n[        UR
                  [        5      (       d   e[        UR                  [        [        [        S 5      45      (       a  MU   e   My     g r   )
r   r|   r   r   r   labelcurrentr   r   r  r    nameunitsunits       r!   r}   $TestSystemAPITypes.test_sensors_fans  sx     "..0668KDdC((((!$**c2222!$,,T$Z0HIIII  9r$   c           
         [         R                  " 5       R                  5        H  u  p[        U[        5      (       d   eU H  n[        UR
                  [        5      (       d   e[        UR                  [        [        [        S 5      45      (       d   e[        UR                  [        [        [        S 5      45      (       d   e[        UR                  [        [        [        S 5      45      (       a  M   e   M     g r   )r   rx   r   r   r   r  r  r   r   r  highcriticalr  s       r!   ry   ,TestSystemAPITypes.test_sensors_temperatures&  s     "668>>@KDdC((((!$**c2222!$,,T$Z0HIIII!$))eS$t*-EFFFF!$--%d4j1IJJJJ	  Ar$   c                 X    [        [        R                  " 5       [        5      (       d   eg r   )r   r   	boot_timer   r   s    r!   test_boot_time!TestSystemAPITypes.test_boot_time1  s    &**,e4444r$   c                    [         R                  " 5        H  n[        UR                  [        5      (       d   e[        UR
                  [        [        S 5      45      (       d   e[        UR                  [        [        S 5      45      (       d   e[        UR                  [        [        S 5      45      (       a  M   e   g r   )
r   usersr   r   r   r   r  hostpidr   )r    users     r!   
test_usersTestSystemAPITypes.test_users5  s    LLNDdii----dmmc4:->????dii#tDz):;;;;dhhd4j(9::::	 #r$   r_   N)$r`   ra   rb   rc   __doc__classmethodr   r   r   r   r   r   r   r   rd   re   r   platformmachiner   ru   r   r   r   r   r  r  r   r  r   r}   r   ry   r*  r1  rf   r_   r$   r!   r   r      st    $ $ /4D +
GN3 [[/(""$/8N   [[L(AJ BJ
5. [[_=+ >+E- [[//H+ I+
 [[,,_EJ FJ [[44_MK NK5;r$   r   c                   ^    \ rS rSr\R
                  R                  \(       + SS9S 5       rSr	g)TestProcessWaitTypei>  z	not POSIXrA   c                    [         R                  " U R                  5       R                  5      nUR	                  5         UR                  5       nU[        R                  * :X  d   e[        U[        R                  5      (       d   eg r   )r   r   spawn_testprocr/  	terminatewaitsignalSIGTERMr   r   r  )r    pcodes      r!   test_negative_signal(TestProcessWaitType.test_negative_signal?  s^    NN4..0445	vvx&&&$----r$   r_   N)
r`   ra   rb   rc   r   rd   re   r	   rA  rf   r_   r$   r!   r8  r8  >  s*    [[E	+6. 7.r$   r8  )r3  r5  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   rh   r   r   r8  r_   r$   r!   <module>rD     s   
             ' % , ) 1 % ' '  & ' <4^ <4~
. 
06B> 6B|w; w;t.. .r$   