
    Xh/                        d 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e      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Zy)#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)AARCH64)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    e Zd Zd Zd Zd Zd Zej                  j                  e
xr ed      d        Zy)	TestAvailConstantsAPIsc                 V    t        t        d      t        xs t        xs t        k(  sJ y )NPROCFS_PATH)hasattrpsutilr   r
   r   selfs    O/var/www/html/myenv/lib/python3.12/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATHz'TestAvailConstantsAPIs.test_PROCFS_PATH/   s!    v}-%2G52GCHHH    c                 0   t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ y )NABOVE_NORMAL_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSIDLE_PRIORITY_CLASSNORMAL_PRIORITY_CLASSREALTIME_PRIORITY_CLASSr   r   r   r   s    r!   test_win_priorityz(TestAvailConstantsAPIs.test_win_priority2   s    v<=HHHv<=HHHv45@@@v45@@@v677BBBv89WDDDr#   c                     t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ y )NIOPRIO_CLASS_NONEIOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLEr   r   r   r   s    r!   test_linux_ioprio_linuxz.TestAvailConstantsAPIs.test_linux_ioprio_linux:   sZ    v23u<<<v01U:::v01U:::v23u<<<r#   c                     t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ y )NIOPRIO_HIGHIOPRIO_NORMAL
IOPRIO_LOWIOPRIO_VERYLOWr+   r   s    r!   test_linux_ioprio_windowsz0TestAvailConstantsAPIs.test_linux_ioprio_windows@   sW    v}-888v/7:::v|,777v/0G;;;r#   %unsupported on GITHUB_ACTIONS + LINUXreasonc                    t        t        d      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d	      t        k(  st        sJ t        t        d
      t        k(  st        sJ t        t        d      t        k(  st        sJ t        t        d      t        k(  sJ t        rt               dk\  rt        t        d      t        k(  sJ t               dk\  rt        t        d      t        k(  sJ t               dk\  rt        t        d      t        k(  sJ t               dk\  rt        t        d      t        k(  sJ t               dk\  rt        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ t        t        d      t        k(  sJ y )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)rJ   rK      RLIMIT_NICERLIMIT_RTPRIO)rJ   rK      RLIMIT_RTTIMERLIMIT_SIGPENDINGRLIMIT_SWAPRLIMIT_SBSIZERLIMIT_NPTS)r   r   r   r   r	   r   r   s    r!   test_rlimitz"TestAvailConstantsAPIs.test_rlimitF   s   
 v/58GCCv{+u4??v}-6'AAv|,5@@v}-6'AAv~.%77BBv/0E9WDDv/58GCCv~.%77BBv|,5@@v~.%77BBv~.%7779,v'89UBBB:-v}5>>>:-v75@@@:-v75@@@9,v':;uDDDv}-888v/7:::v}-888r#   N)__name__
__module____qualname__r"   r,   r3   r9   r   markskipifr   r   rW    r#   r!   r   r   .   sK    IE=< [[ 56  9	9r#   r   c                   x    e Zd Zd Zd Zej                  j                  exr e	d      d        Z
d Zd Zd Zy	)
TestAvailSystemAPIsc                 6    t        t        d      t        k(  sJ y )Nwin_service_iterr+   r   s    r!   test_win_service_iterz)TestAvailSystemAPIs.test_win_service_iterj   s    v12g===r#   c                 6    t        t        d      t        k(  sJ y )Nwin_service_getr+   r   s    r!   test_win_service_getz(TestAvailSystemAPIs.test_win_service_getm   s    v01W<<<r#   skipped due to #1892r;   c                 v    t        t        d      t        xs t        xs t        xs t
        xs t        k(  sJ y )Ncpu_freq)r   r   r   r   r   r   r   r   s    r!   test_cpu_freqz!TestAvailSystemAPIs.test_cpu_freqp   s2    vz*;U;g;;G
 	
 
r#   c                 F    t        t        d      t        xs t        k(  sJ y )Nsensors_temperatures)r   r   r   r   r   s    r!   test_sensors_temperaturesz-TestAvailSystemAPIs.test_sensors_temperaturesv   s    v565;KGLLLr#   c                 6    t        t        d      t        k(  sJ y )Nsensors_fansr2   r   s    r!   test_sensors_fansz%TestAvailSystemAPIs.test_sensors_fansy   s    v~.%777r#   c                 f    t        t        d      t        xs t        xs t        xs t
        k(  sJ y )Nsensors_battery)r   r   r   r   r   r   r   s    r!   test_batteryz TestAvailSystemAPIs.test_battery|   s.    v010W005
 	
 
r#   N)rX   rY   rZ   rb   re   r   r[   r\   r   r   ri   rl   ro   rr   r]   r#   r!   r_   r_   i   sK    >= [[)'2HI
 J

M8
r#   r_   c                       e Zd Zd Zd Zd Zd Zd Zej                  j                  exr ed      d        Zd	 Zd
 Zd Zd Zd Zd Zy)TestAvailProcessAPIsc                     t        t        j                  d      t        xs6 t        xs. t
        xs& t        xs t        xs t        xs t        xs t        k(  sJ y )Nenviron)r   r   Processr   r   r   r   r
   r   r   r   r   s    r!   test_environz!TestAvailProcessAPIs.test_environ   sd    v~~y1   	
   	
 		
 	
r#   c                 J    t        t        j                  d      t        k(  sJ y Nuidsr   r   rw   r	   r   s    r!   	test_uidszTestAvailProcessAPIs.test_uids       v~~v.%777r#   c                 J    t        t        j                  d      t        k(  sJ y rz   r|   r   s    r!   	test_gidszTestAvailProcessAPIs.test_gids   r~   r#   c                 J    t        t        j                  d      t        k(  sJ y )Nterminalr|   r   s    r!   test_terminalz"TestAvailProcessAPIs.test_terminal   s    v~~z2e;;;r#   c                 Z    t        t        j                  d      t        xs t        k(  sJ y )Nionice)r   r   rw   r   r   r   s    r!   test_ionicez TestAvailProcessAPIs.test_ionice   s     v~~x0U5EgFFFr#   r:   r;   c                 Z    t        t        j                  d      t        xs t        k(  sJ y )Nrlimit)r   r   rw   r   r   r   s    r!   rW   z TestAvailProcessAPIs.test_rlimit   s"    
 v~~x0U5EgFFFr#   c                 `    t        t        j                  d      }|t        xs t         k(  sJ y )Nio_counters)r   r   rw   r   r
   r    hasits     r!   test_io_countersz%TestAvailProcessAPIs.test_io_counters   s'    6enu-...r#   c                 J    t        t        j                  d      t        k(  sJ y )Nnum_fdsr|   r   s    r!   test_num_fdsz!TestAvailProcessAPIs.test_num_fds   s    v~~y1U:::r#   c                 J    t        t        j                  d      t        k(  sJ y )Nnum_handles)r   r   rw   r   r   s    r!   test_num_handlesz%TestAvailProcessAPIs.test_num_handles   s    v~~}5@@@r#   c                 j    t        t        j                  d      t        xs t        xs t
        k(  sJ y )Ncpu_affinity)r   r   rw   r   r   r   r   s    r!   test_cpu_affinityz&TestAvailProcessAPIs.test_cpu_affinity   s,    v~~~6'W'
 	
 
r#   c                 j    t        t        j                  d      t        xs t        xs t
        k(  sJ y )Ncpu_num)r   r   rw   r   r   r
   r   s    r!   test_cpu_numz!TestAvailProcessAPIs.test_cpu_num   s,    v~~y1%W%
 	
 
r#   c                     t        t        j                  d      }|t        xs t        xs t
        xs t         k(  sJ y )Nmemory_maps)r   r   rw   r   r   r   r   r   s     r!   test_memory_mapsz%TestAvailProcessAPIs.test_memory_maps   s2    6g??3?%@AAAr#   N)rX   rY   rZ   rx   r}   r   r   r   r   r[   r\   r   r   rW   r   r   r   r   r   r   r]   r#   r!   rt   rt      sq    

88<G [[ 56  G	G/;A



Br#   rt   c                      e Zd ZdZed        ZedfdZd Zd Z	d Z
d Zej                  j                  exr ed	
      ej                  j                  e d
      d               Zd Zd Zej                  j                  ed
      d        Zd Zd Zej                  j                  e d
      d        Zej                  j                  e d
      d        Zej                  j                  e d
      d        Zd Zd Z y)TestSystemAPITypeszhCheck the return types of system related APIs.
    https://github.com/giampaolo/psutil/issues/1039.
    c                 6    t        j                         | _        y N)r   rw   proc)clss    r!   
setUpClasszTestSystemAPITypes.setUpClass   s    >>#r#   Tc                 \    t        |      sJ |D ]  }t        ||      sJ |s|dk\  rJ  y Nr   )r   
isinstance)r    nttype_gezerons        r!   assert_ntuple_of_numsz(TestSystemAPITypes.assert_ntuple_of_nums   s=    R    	Aa'''Avv	r#   c                     | j                  t        j                                t        j                  d      D ]  }| j                  |        y )NT)percpu)r   r   	cpu_times)r    r   s     r!   test_cpu_timesz!TestSystemAPITypes.test_cpu_times   sA    ""6#3#3#56""$/ 	+B&&r*	+r#   c                     t        t        j                  d       t              sJ t        t        j                  d      t              sJ y )Nintervalgh㈵>)r   r   cpu_percentfloatr   s    r!   test_cpu_percentz#TestSystemAPITypes.test_cpu_percent   s8    &,,d;UCCC&,,g>FFFr#   c                     | j                  t        j                  d              | j                  t        j                  d             y )Nr   g-C6?)r   r   cpu_times_percentr   s    r!   test_cpu_times_percentz)TestSystemAPITypes.test_cpu_times_percent   s4    ""6#;#;T#JK""6#;#;V#LMr#   c                 L    t        t        j                         t              sJ y r   )r   r   	cpu_countintr   s    r!   test_cpu_countz!TestSystemAPITypes.test_cpu_count   s    &**,c222r#   rf   r;   znot supportedc                     t        j                         t        j                  d      | j	                  t        j                         t
        t        f       y )Nzcpu_freq() returns Noner   )r   rh   r   skipr   r   r   r   s    r!   ri   z TestSystemAPITypes.test_cpu_freq   s?     ??$++788""6??#4UCL"Ir#   c                     t        j                  d      j                         D ].  \  }}t        |t              sJ | j                  |t               0 y )NT)perdiskr   )r   disk_io_countersitemsr   strr   r   )r    kvs      r!   test_disk_io_countersz(TestSystemAPITypes.test_disk_io_counters   sL    ++D9??A 	5DAqa%%%&&q&4	5r#   c                    t        j                         D ]r  }t        |j                  t              sJ t        |j
                  t              sJ t        |j                  t              sJ t        |j                  t              rrJ  y r   )r   disk_partitionsr   devicer   
mountpointfstypeopts)r    disks     r!   test_disk_partitionsz'TestSystemAPITypes.test_disk_partitions   sj    **, 	.Ddkk3///doos333dkk3///dii---		.r#   zrequires rootc                     t               5  t        j                  d      }t        |      t        t	        |            k(  sJ |D ]  }t        |      rJ  	 d d d        y # 1 sw Y   y xY w)Nall)r   r   net_connectionslensetr   )r    retconns      r!   test_net_connectionsz'TestSystemAPITypes.test_net_connections   sd     	+((/Cs8s3s8},,, +$T***+	+ 	+ 	+s   AA!A!!A*c           	         t        j                         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      rJ   y 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0288: 	EMFEfc*** E!$++t||<<<!$,,444!$,,d4j0ABBB!$..3T
2CDDD	E	Er#   c                 p   t        j                         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              rJ  y 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779 	-LFDfc***dii...dkk4<<888djj#...dhh,,,	-r#   c                 ^    t        j                  d      D ]  }t        |t              rJ  y )NT)pernic)r   net_io_countersr   r   )r    r   s     r!   test_net_io_countersz'TestSystemAPITypes.test_net_io_counters  s.     ,,D9 	+Ffc***	+r#   c           
         t        j                         j                         D ]f  \  }}t        |t              sJ |D ]J  }t        |j
                  t              sJ t        |j                  t        t        t        d       f      rJJ  h y r   )
r   rn   r   r   r   labelcurrentr   r   r   r    nameunitsunits       r!   ro   z$TestSystemAPITypes.test_sensors_fans  s     "..0668 	JKD%dC((( J!$**c222!$,,T$Z0HIIIJ	Jr#   c           
         t        j                         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      rJ   y r   )r   rk   r   r   r   r   r   r   r   r   highcriticalr   s       r!   rl   z,TestSystemAPITypes.test_sensors_temperatures   s     "668>>@ 	KKD%dC((( K!$**c222!$,,T$Z0HIII!$))eS$t*-EFFF!$--%d4j1IJJJ	K	Kr#   c                 L    t        t        j                         t              sJ y r   )r   r   	boot_timer   r   s    r!   test_boot_timez!TestSystemAPITypes.test_boot_time+  s    &**,e444r#   c                    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 t        |j                  t              s|j                  dkD  rJ  y r   )
r   usersr   r   r   r   r   hostpidr   )r    users     r!   
test_userszTestSystemAPITypes.test_users/  s    LLN 	$Ddii---dmmc4:->???dii#tDz):;;;dhhd4j(9:::$((C(xx!|#|	$r#   N)!rX   rY   rZ   __doc__classmethodr   r   r   r   r   r   r   r   r[   r\   r   r   r   ri   r   r   r   r   r   r   r   r   r   ro   r   rl   r   r  r]   r#   r!   r   r      s`    $ $ /4D +
GN3 [[)'2HI[[L(AJ B JJ
5. [[_=+ >+E- [[//H+ I+
 [[,,_EJ FJ [[44_MK NK5$r#   r   c                   T    e Zd Zej                  j                  e d      d        Zy)TestProcessWaitTypez	not POSIXr;   c                    t        j                  | j                         j                        }|j	                          |j                         }|t        j                   k(  sJ t        |t        j                        sJ y r   )r   rw   spawn_subprocr  	terminatewaitsignalSIGTERMr   r   r   )r    pcodes      r!   test_negative_signalz(TestProcessWaitType.test_negative_signal;  s[    NN4--/334	vvx&&&$---r#   N)rX   rY   rZ   r   r[   r\   r	   r  r]   r#   r!   r  r  :  s*    [[E	+6. 7.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   r_   rt   r   r  r]   r#   r!   <module>r     s   
              ' % , ) 1 % ' '  & ' 89^ 89v
. 
26B> 6B|w$ w$t.. .r#   