
    ;^h                     0   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKJ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  \(       aC  \(       d<  \R:                  " 5          \R<                  " S5        SSKrSSK r SSK!r!SSK"r"SSS5        \(       a  SSK#J$r$  \RJ                  RL                  r&\RN                  RQ                  \(       + SS9\RN                  RQ                  \SS9 " S S\5      5       5       r)S r*\+4S jr, " S S\)5      r- " S S\)5      r. " S S\)5      r/ " S  S!\)5      r0 " S" S#\)5      r1\RN                  RQ                  \(       + SS9 " S$ S%\5      5       r2\RN                  RQ                  \(       + SS9 " S& S'\5      5       r3\RN                  RQ                  \(       + SS9 " S( S)\5      5       r4g! , (       d  f       GND= f)*zWindows specific tests.    N)mock)WINDOWS)GITHUB_ACTIONS)HAS_BATTERY)IS_64BIT)PYPY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)pytest)retry_on_failure)sh)spawn_testproc)	terminateignore)convert_oserrorzWINDOWS onlyreasonzpywin32 not available on PYPYc                       \ rS rSrSrg)WindowsTestCase5    N)__name__
__module____qualname____firstlineno____static_attributes__r       K/var/www/html/env/lib/python3.13/site-packages/psutil/tests/test_windows.pyr   r   5   s     	r   r   c                     [         R                  " S5      (       d  [        R                  " S5      eSU  S3n[	        U5      $ )zCurrently not used, but available just in case. Usage:

>>> powershell(
    "Get-CIMInstance Win32_PageFileUsage | Select AllocatedBaseSize")
zpowershell.exezpowershell.exe not availablezhpowershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -Command "")shutilwhichr   skipr   )cmdcmdlines     r   
powershellr'   ;   sF     <<())kk899	558E	=  g;r   c                   ^ [        SU  SU 35      R                  5       nSR                  UR                  5       SS 5      R                  5       nTb1  SU;   a#  [	        U4S jUR                  5        5       5      $ T" U5      $ U$ )z{Currently not used, but available just in case. Usage:

>>> wmic("Win32_OperatingSystem", "FreePhysicalMemory")
2134124534
z
wmic path z get     N,c              3   4   >#    U  H  nT" U5      v   M     g 7fNr   ).0x	converters     r   	<genexpr>wmic.<locals>.<genexpr>T   s     <|!1|s   )r   stripjoin
splitlinestuplesplit)pathwhatr0   outdatas     `  r   wmicr<   J   s}     z$uTF+
,
2
2
4C773>>#AB'(..0D$;<tzz|<<<T?"r   c                       \ rS rSr\R
                  R                  S\R                  ;  SS9S 5       r	S r
S rS rS	 rS
 rSrg)TestCpuAPIs`   NUMBER_OF_PROCESSORSz-NUMBER_OF_PROCESSORS env var is not availabler   c                 r    [        [        R                  S   5      nU[        R                  " 5       :X  d   eg )Nr@   )intosenvironpsutil	cpu_count)selfnum_cpuss     r   &test_cpu_count_vs_NUMBER_OF_PROCESSORS2TestCpuAPIs.test_cpu_count_vs_NUMBER_OF_PROCESSORSa   s/     rzz"89:6++----r   c                 l    [         R                  " 5       S   n[        R                  " 5       nX:X  d   eg )N   )win32apiGetSystemInforE   rF   rG   	sys_valuepsutil_values      r   test_cpu_count_vs_GetSystemInfo+TestCpuAPIs.test_cpu_count_vs_GetSystemInfok   s1     **,Q/	'')(((r   c                     [         R                  " 5       n[        S UR                  5        5       5      n[        R
                  " 5       U:X  d   eg )Nc              3   8   #    U  H  oR                   v   M     g 7fr-   )NumberOfLogicalProcessorsr.   procs     r   r1   <TestCpuAPIs.test_cpu_count_logical_vs_wmi.<locals>.<genexpr>t   s      
7Jt**7J   wmiWMIsumWin32_ProcessorrE   rF   )rG   wprocss      r   test_cpu_count_logical_vs_wmi)TestCpuAPIs.test_cpu_count_logical_vs_wmir   sF    GGI 
787H7H7J
 
 !U***r   c                     [         R                  " 5       n[        S UR                  5        5       5      n[        R
                  " SS9U:X  d   eg )Nc              3   8   #    U  H  oR                   v   M     g 7fr-   )NumberOfCoresrW   s     r   r1   :TestCpuAPIs.test_cpu_count_cores_vs_wmi.<locals>.<genexpr>{   s     G3F4&&3FrZ   F)logicalr[   )rG   r`   coress      r   test_cpu_count_cores_vs_wmi'TestCpuAPIs.test_cpu_count_cores_vs_wmiy   s?    GGIG13D3D3FGG.%777r   c                 p    [         R                  " 5       [        [         R                  " SS95      :X  d   eg )NT)percpu)rE   rF   len	cpu_timesrG   s    r   test_cpu_count_vs_cpu_times'TestCpuAPIs.test_cpu_count_vs_cpu_times~   s)    !S)9)9)F%GGGGr   c                    [         R                  " 5       nUR                  5       S   nUR                  [        R
                  " 5       R                  :X  d   eUR                  [        R
                  " 5       R                  :X  d   eg Nr   )	r\   r]   r_   CurrentClockSpeedrE   cpu_freqcurrentMaxClockSpeedmax)rG   r`   rX   s      r   test_cpu_freqTestCpuAPIs.test_cpu_freq   sb    GGI  "1%%%):)B)BBBB!!V__%6%:%::::r   r   N)r   r   r   r   r   markskipifrC   rD   rI   rR   rb   rj   rq   rz   r   r   r   r   r>   r>   `   sQ    [[bjj0>  .	.)+8
H;r   r>   c                       \ rS rSrS rS rS rS rS r\	" 5       S 5       r
\	" 5       S 5       r\	" 5       S	 5       rS
 rS rS rS rSrg)TestSystemAPIs   c                     [        S5      n[        R                  " SS9R                  5       nU HC  nSUR	                  SS5      R                  5       ;   a  M)  X1;  d  M0  U R                  U< S35      e   g )Nzipconfig /allT)perniczpseudo-interface -z+ nic wasn't found in 'ipconfig /all' output)r   rE   net_io_counterskeysreplacelowerfail)rG   r:   nicsnics       r   test_nic_namesTestSystemAPIs.test_nic_names   so    !%%T2779C!S[[c%:%@%@%BB~iigHI 	 r   c                     [         R                  " 5       R                  5       S   n[        UR                  5      [
        R                  " 5       R                  :X  d   eg rt   )r\   r]   Win32_ComputerSystemrB   TotalPhysicalMemoryrE   virtual_memorytotalrG   r`   s     r   test_total_phymem TestSystemAPIs.test_total_phymem   sC    GGI**,Q/1(()V-B-B-D-J-JJJJr   c                     [         R                  " 5       R                  5       S   n[        [	        UR
                  5      [        R                  " 5       R                  -
  5      [        :  d   eg rt   )
r\   r]   Win32_PerfRawData_PerfOS_MemoryabsrB   AvailableBytesrE   r   freer
   r   s     r   test_free_phymemTestSystemAPIs.test_free_phymem   sT    GGI557:A$$%(=(=(?(D(DDE 	
 r   c                    [         R                  " 5       R                  5       S   n[        UR                  5      [
        R                  " 5       R                  -
  [
        R                  " 5       R                  :X  d   e[
        R                  " 5       R                  S:X  aK  [
        R                  " 5       R                  S:X  d   e[
        R                  " 5       R                  S:X  d   eg g rt   )r\   r]   r   rB   CommitLimitrE   r   r   swap_memoryr   usedr   s     r   test_total_swapmem!TestSystemAPIs.test_total_swapmem   s    GGI557:!6!6!8!>!>>!!#))*	
* %%*%%',,111%%',,111 +r   c                    [         R                  " 5       R                  S:  a  [        R                  " 5       R                  SS9S   n[        UR                  5      S-  [        UR                  5      -  n[         R                  " 5       R                  S:  d   e[        [         R                  " 5       R                  U-
  5      S:  d   e[         R                  " 5       R                  S::  d   eg g )Nr   _Total)Named   rL   )rE   r   r   r\   r]   #Win32_PerfRawData_PerfOS_PagingFilerB   PercentUsagePercentUsage_Basepercentr   )rG   r`   percentSwaps      r   test_percent_swapmem#TestSystemAPIs.test_percent_swapmem   s    %%)	==8=LQOAann-3c!:M:M6NNK %%'//1444v))+33kABQFFF%%'//3666 *r   c                     [         R                  " 5       R                  5       nU Vs1 s H  o"R                  iM     nn[	        [
        R                  " 5       5      nX4:X  d   eg s  snf r-   )r\   r]   Win32_Process	ProcessIdsetrE   pids)rG   r`   r/   wmi_pidspsutil_pidss        r   	test_pidsTestSystemAPIs.test_pids   sO     GGI##%)*+AKK+&++-(&&& ,s   A%c                 *   [         R                  " SS9n[        R                  " 5       R	                  5       nU GHB  nU GH%  nUR
                  R                  SS5      UR                  :X  d  M0  UR                  (       d    MJ  SUR                  ;   a    M]  UR                  R                  S5      (       a    M   [         R                  " UR                  5      nUR                  [        UR                  5      :X  d   e[        UR                   5      nUR"                  U:X  d   e[%        UR"                  U-
  5      S:  a!  U R'                  SUR"                   S	U 35      e  GM.     U R'                  S
U< 35      e   g ! [         a       GMW  f = f)NTall\r)   cdromA:i   zpsutil=z, wmi=zcan't find partition )rE   disk_partitionsr\   r]   Win32_LogicalDiskdevicer   DeviceID
mountpointopts
startswith
disk_usageFileNotFoundErrorr   rB   Size	FreeSpacer   r   r   )rG   ps_parts	wmi_partsps_partwmi_partusagewmi_frees          r   
test_disksTestSystemAPIs.test_disks   sO   ))d3GGI//1	G%>>))$3x7H7HH"--',,.))44T:: & 1 1'2D2D E !;;#hmm*<<<<"8#5#56H ::1115::014DD"ii'%**VH:(NOO) &, ii"7{ CDD/   - s   ; F
FFc                    [         R                  " 5        H  nSUR                  ;   a  M  [        R                  " UR
                  5      n[         R                  " UR
                  5      n[        US   UR                  -
  5      [        :  d   e[        US   UR                  -
  5      [        :  d   eUR                  UR                  UR                  -
  :X  a  M   e   g )Nr   r   r*   )rE   r   r   rM   GetDiskFreeSpaceExr   r   r   r   r	   r   r   )rG   diskrP   rQ   s       r   test_disk_usageTestSystemAPIs.test_disk_usage   s    **,D$))# 33DOODI!,,T__=Ly|l&7&778;OOOOIaL<#5#5569MMM$$(:(:\=N=N(NNNN -r   c                 v   [         R                  " 5       R                  S5       Vs/ s H)  nU(       d  M  UR                  S5      (       a  M$  US-   PM+     nn[        R
                  " SS9 Vs/ s H1  nUR                  R                  S5      (       a  M%  UR                  PM3     nnX#:X  d   eg s  snf s  snf )Nz\ r   r   Tr   )rM   GetLogicalDriveStringsr7   r   rE   r   r   )rG   r/   rP   rQ   s       r   test_disk_partitions#TestSystemAPIs.test_disk_partitions   s     446<<XF
F d+ AHF 	 
 ++5
5<<**40 ALL5 	 

 (((


s   B1B1	B1/$B6B6c                 B   [        [        R                  5       5      n[        R                  " 5       R                  5       n[        5       nU H9  nUR                  UR                  5        UR                  UR                  5        M;     X-  (       d   SU SU 35       eg )Nzno common entries in z, )	r   cextnet_if_statsr\   r]   Win32_NetworkAdapteraddr   NetConnectionID)rG   ps_nameswmi_adapters	wmi_nameswmi_adapters        r   test_net_if_stats TestSystemAPIs.test_net_if_stats   s    t((*+wwy557E	'KMM+**+MM+556 (  	;"8*Byk:	; r   c                 v   [         R                  " 5       R                  5       nUS   R                  R	                  S5      S   n[
        R
                  R                  US5      n[
        R
                  R                  [        R                  " 5       5      n[        X4-
  R                  5       5      nUS::  d   eg )Nr   .%Y%m%d%H%M%SrL   )r\   r]   Win32_OperatingSystemLastBootUpTimer7   datetimestrptimefromtimestamprE   	boot_timer   total_seconds)rG   wmi_oswmi_btime_strwmi_btime_dt	psutil_dtdiffs         r   test_boot_timeTestSystemAPIs.test_boot_time  s    002q	0066s;A>((11>
 %%33F4D4D4FG	L,;;=>qyyr   c                 \   [         R                  " SSS9   [        R                  " 5       S:X  d   e S S S 5        [         R                  " SSS9   [        R                  " 5       S:X  d   e S S S 5        [         R                  " SSS9   [        R                  " 5       S:X  d   e S S S 5        [         R                  " SSS9   [        R                  " 5       S:X  d   e S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nk= f! , (       d  f       g = f)Nz psutil._pswindows.cext.boot_timerL   return_value      iM  )r   patchrE   r   rp   s    r   test_boot_time_fluctuation)TestSystemAPIs.test_boot_time_fluctuation  s    ZZ:K##%*** LZZ:K##%*** LZZ:K##%*** LZZ:M##%,,, NM LKKKKKMMs/   C*C;
DD*
C8;
D	
D
D+r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sy    	K
2	7. ' ' E E8 
O 
O)	;	-r   r   c                       \ rS rSrS r\R                  R                  \(       + SS9S 5       r	\R                  R                  \(       + SS9S 5       r
S rS rS	 rS
 rSrg)TestSensorsBatteryi&  c                     [         R                  " 5       S   (       a  [        R                  " 5       c   eg [        R                  " 5       b   eg )NSystemBatteriesPresent)rM   GetPwrCapabilitiesrE   sensors_batteryrp   s    r   test_has_battery#TestSensorsBattery.test_has_battery'  s>    &&()AB))+777))+333r   z
no batteryr   c                     [         R                  " 5       nUR                  S5      S   n[        R                  " 5       n[        UR                  UR                  -
  5      S:  d   eg )Nselect * from Win32_Batteryr   r*   )r\   r]   queryrE   r  r   r   EstimatedChargeRemainingrG   r`   battery_wmibattery_psutils       r   test_percentTestSensorsBattery.test_percent-  sZ    GGIgg;<Q?//1&&)M)MMN	
r   c                     [         R                  " 5       nUR                  S5      S   n[        R                  " 5       nUR
                  UR                  S:H  :X  d   eg )Nr  r      )r\   r]   r  rE   r  power_pluggedBatteryStatusr
  s       r   test_power_plugged%TestSensorsBattery.test_power_plugged7  sP    GGIgg;<Q?//1 ++0I0IQ0NOOOr   c                     [         R                  " SSS9 n[        R                  " 5       b   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)N&psutil._pswindows.cext.sensors_battery)r      r   r   r   )r   r   rE   r  calledrG   ms     r   test_emulate_no_battery*TestSensorsBattery.test_emulate_no_battery@  sI    ZZ4'
 ))+33388O8
 
 
s   ,A
Ac                     [         R                  " SSS9 n[        R                  " 5       R                  [        R
                  :X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nr  )r*   r   r   r   r   r   r   rE   r  secsleftPOWER_TIME_UNLIMITEDr  r  s     r   test_emulate_power_connected/TestSensorsBattery.test_emulate_power_connectedH  ]    ZZ4<
&&(11..// 88O8
 
 
   AA''
A5c                     [         R                  " SSS9 n[        R                  " 5       R                  [        R
                  :X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nr  )r      r   r   r   r  r  s     r   test_emulate_power_charging.TestSensorsBattery.test_emulate_power_chargingR  r#  r$  c                     [         R                  " SSS9 n[        R                  " 5       R                  [        R
                  :X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nr  )r   r   r   r   )r   r   rE   r  r  POWER_TIME_UNKNOWNr  r  s     r   test_emulate_secs_left_unknown1TestSensorsBattery.test_emulate_secs_left_unknown\  sY    ZZ4&
 &&(11V5N5NNN88O8
 
 
r$  r   N)r   r   r   r   r  r   r|   r}   r   r  r  r  r!  r'  r,  r   r   r   r   r   r   &  sq    4 [[K=
 >
 [[K=P >Pr   r   c                       \ rS rSr\S 5       r\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rSrg)TestProcessil  c                 6    [        5       R                  U l        g r-   r   pidclss    r   
setUpClassTestProcess.setUpClassm       "&&r   c                 .    [        U R                  5        g r-   r   r2  r3  s    r   tearDownClassTestProcess.tearDownClassq      #''r   c                     [         R                  " S5      n[        R                  " [         R                  5         UR                  5         S S S 5        g ! , (       d  f       g = frt   )rE   Processr   raisesAccessDeniedkillrG   ps     r   test_issue_24TestProcess.test_issue_24u  s7    NN1]]6../FFH 0//s   A
A#c                 h   [         R                  " S5      nUR                  5       S:X  d   e[        U5        UR	                  5         UR                  5       S:  d   e UR                  5       S S u  p#US:  d   eg ! [         R                   a     [        R                  " 5       S   S;  a  e  g f = f)Nr   Systemg        r  r   r*   >   win7vistawin-7)
rE   r>  namestrusernamecreate_timememory_infor@  platformuname)rG   rC  rss_vmss       r   test_special_pidTestProcess.test_special_pidz  s    NN1vvx8### 	A	

}}#%%%	+IC 7N7 "" 	~~"*DD E	s   A= =1B10B1c                     [         R                  " U R                  5      n[        R                  " [
        5         UR                  [        R                  5        S S S 5        g ! , (       d  f       g = fr-   )	rE   r>  r2  r   r?  
ValueErrorsend_signalsignalSIGINTrB  s     r   test_send_signalTestProcess.test_send_signal  s<    NN488$]]:&MM&--( '&&s    A$$
A2c                    [         R                  " [        R                  " 5       5      nUR	                  5       n[
        R                  " [        R                  [        R                  [        R                  " 5       5      nUR	                  5       nXBS-   :X  d   e[
        R                  " U5        UR	                  5       U:X  d   eg )Nr*   )rE   r>  rC   getpidnum_handlesrM   OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSECloseHandle)rG   rC  beforehandleafters        r   test_num_handles_increment&TestProcess.test_num_handles_increment  s    NN299;'%%..		
 
"""V$}}&(((r   c                    [         R                  " U R                  5       R                  5      nUR	                  [
        R                  5        UR	                  [
        R                  5        UR                  5         UR                  5         [        R                  " [         R                  5         UR	                  [
        R                  5        S S S 5        [        R                  " [         R                  5         UR	                  [
        R                  5        S S S 5        g ! , (       d  f       N[= f! , (       d  f       g = fr-   )rE   r>  r   r2  rX  rY  CTRL_C_EVENTCTRL_BREAK_EVENTrA  waitr   r?  NoSuchProcessrB  s     r   test_ctrl_signalsTestProcess.test_ctrl_signals  s    NN4..0445	f))*	f--.		]]6//0MM&--. 1]]6//0MM&112 10 1000s   1 D&= D7&
D47
Ec                     [         R                  " [        R                  5      nUR	                  S5      (       a  [
        R                  " S5      e[        R                  " 5       R                  5       U:X  d   eg )N$zrunning as service account)
rM   GetUserNameExra  NameSamCompatibleendswithr   r$   rE   r>  rM  )rG   rK  s     r   test_usernameTestProcess.test_username  sW    %%h&@&@A== ++:;;~~((*d222r   c                 :   [         R                  " SS[        R                  " 5       5      R	                  5       nSR                  [        R                  " 5       R                  5       5      nUS   Ss=:X  a	  US   :w  a  O  OUR                  SSS5      nX:X  d   eg )Nz[ ]+r   r   r!   r)   r  )
resubrM   GetCommandLiner3   r4   rE   r>  r&   r   rO   s      r   test_cmdlineTestProcess.test_cmdline  s{    FF7C)@)@)BCIIK	xx 0 8 8 :;Q<31,q/1
 "))#r15I(((r   c                 R   [         R                  " [        R                  [        R                  [
        R                  " 5       5      nU R                  [         R                  U5        [        R                  " U5      n[        R                  " 5       R                  5       nX2:X  d   eg r-   )rM   r`  ra  rb  rc  rC   r^  
addCleanuprd  win32processGetPriorityClassrE   r>  nicerG   rf  rP   rQ   s       r   	test_niceTestProcess.test_nice  sp    %%..		
 	,,f5 11&9	~~',,.(((r   c                    [         R                  " [        R                  [        R                  U R
                  5      nU R                  [         R                  U5        [        R                  " U5      n[        R                  " U R
                  5      R                  5       nUS   UR                  :X  d   eUS   UR                  :X  d   eUS   UR                  :X  d   eUS   UR                   :X  d   eUS   UR"                  :X  d   eUS   UR$                  :X  d   eUS   UR&                  :X  d   eUS   UR(                  :X  d   eUR*                  UR                  :X  d   eUR,                  UR&                  :X  d   eg )	NPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsage)rM   r`  ra  rb  rc  r2  r  rd  r  GetProcessMemoryInforE   r>  rO  	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpagefilepeak_pagefilerR  vmsr  s       r   test_memory_infoTestProcess.test_memory_info  s   %%..
 	,,f5 55f=	~~dhh/;;=-.,2H2HHHH)*l.?.????/0++,	
, ./<3J3JJJJ23../	
/ ./<3M3MM	
M)\-B-BBBB,-1K1KKKK<#4#4444<#8#8888r   c                 z   [         R                  " [        R                  [        R                  U R
                  5      nU R                  [         R                  U5        [        R                  " U R
                  5      nUR                  5         UR                  5       n[        R                  " U5      nX4:X  d   eg r-   )rM   r`  ra  rb  rc  r2  r  rd  rE   r>  r   rm  r  GetExitCodeProcess)rG   rf  rC  rQ   rP   s        r   	test_waitTestProcess.test_wait  s    %%..
 	,,f5NN488$	vvx 33F;	(((r   c                 n   S n[         R                  " [        R                  [        R                  U R
                  5      nU R                  [         R                  U5        U" [        R                  " U5      S   5      n[        R                  " U R
                  5      R                  5       nXC:X  d   eg )Nc                 b    [        S5       Vs/ s H  nSU-  U -  (       d  M  UPM     sn$ s  snf )N@   r*   )range)r/   is     r   from_bitmask3TestProcess.test_cpu_affinity.<locals>.from_bitmask  s(    $Ry9y!Q!VqLAy999s   ,,r   )rM   r`  ra  rb  rc  r2  r  rd  r  GetProcessAffinityMaskrE   r>  cpu_affinity)rG   r  rf  rP   rQ   s        r   test_cpu_affinityTestProcess.test_cpu_affinity  s    	: %%..
 	,,f5 //7:
	 ~~dhh/<<>(((r   c                 @   [         R                  " [        R                  [        R                  [
        R                  " 5       5      nU R                  [         R                  U5        [        R                  " U5      n[        R                  " 5       R                  5       nUR                  US   :X  d   eUR                  US   :X  d   eUR                   US   :X  d   eUR"                  US   :X  d   eUR$                  US   :X  d   eUR&                  US   :X  d   eg )NReadOperationCountWriteOperationCountReadTransferCountWriteTransferCountOtherOperationCountOtherTransferCount)rM   r`  ra  rb  rc  rC   r^  r  rd  r  GetProcessIoCountersrE   r>  io_counters
read_countwrite_count
read_byteswrite_bytesother_countother_bytesr  s       r   test_io_countersTestProcess.test_io_counters  s    %%..		
 	,,f5 55f=	~~'335&&)4H*IIII''95J+KKKK&&)4G*HHHH''95I+JJJJ''95J+KKKK''95I+JJJJr   c                    SS K nSS KnSnUR                  R                  R	                  USU R
                  5      nU R                  UR                  R                  R                  U5        UR                  R                  5       nUR                  R                  R                  X1R                  U5      5        UR                  n[        R                  " U R
                  5      R                  5       nXe:X  d   eg )Nr      )ctypesctypes.wintypeswindllkernel32r`  r2  r  rd  wintypesDWORDGetProcessHandleCountbyrefvaluerE   r>  r_  )rG   r  rb  rf  hndcntrP   rQ   s          r   test_num_handlesTestProcess.test_num_handles  s    $)!''33%q$((
 	..::FC&&(44LL(	
 LL	~~dhh/;;=(((r   c                    [        5       nSUl        [        R                  " SUS9   [        R                  " S5       n[        R
                  " 5       n[        R                  " [        R                  5         UR                  5         S S S 5        S S S 5        S S S 5        WR                  S:  d   eg ! , (       d  f       N1= f! , (       d  f       N:= f! , (       d  f       NC= f)Ni+  z psutil._psplatform.cext.proc_cwdside_effectz
time.sleeprL   )OSErrorwinerrorr   r   rE   r>  r   r?  r@  cwd
call_count)rG   excr  rC  s       r   test_error_partial_copy#TestProcess.test_error_partial_copy&  s    iZZ:LL)QNN$]]6#6#67EEG 8 * M
 ||q    87 *) MLs:   C:C8B4	CC4
C>C
C	C
C$c                    [         R                  " 5       S   S-   n[         R                  R                  U5      n[        R
                  " [         R                  5         UR                  5         S S S 5        g ! , (       d  f       g = f)Nr*  i )rE   r   _psplatformr>  r   r?  rn  exe)rG   r2  rX   s      r   test_exeTestProcess.test_exe1  sV     kkmB%'!!))#.]]6//0HHJ 100s   A99
Br   N)r   r   r   r   classmethodr5  r:  rD  rT  r[  rh  ro  rv  r|  r  r  r  r  r  r  r  r  r   r   r   r   r/  r/  l  st    ' '  
")
	)	33	)4)96	))K)$	!r   r/  c                       \ rS rSrSr\S 5       r\S 5       rS r\	R                  R                  \SS9S 5       rS	 rS
 r\" 5       S 5       r\" 5       S 5       rS rSrg)TestProcessWMIi:  z%Compare Process API results with WMI.c                 6    [        5       R                  U l        g r-   r1  r3  s    r   r5  TestProcessWMI.setUpClass=  r7  r   c                 .    [        U R                  5        g r-   r9  r3  s    r   r:  TestProcessWMI.tearDownClassA  r<  r   c                     [         R                  " 5       R                  U R                  S9S   n[        R
                  " U R                  5      nUR                  5       UR                  :X  d   eg Nr   r   )r\   r]   r   r2  rE   r>  rK  CaptionrG   r`   rC  s      r   	test_nameTestProcessWMI.test_nameE  sN    GGI##dhh#7:NN488$vvx199$$$r   z!unreliable path on GITHUB_ACTIONSr   c                    [         R                  " 5       R                  U R                  S9S   n[        R
                  " U R                  5      nUR                  5       R                  5       UR                  R                  5       :X  d   eg r  )	r\   r]   r   r2  rE   r>  r  r   ExecutablePathr  s      r   r  TestProcessWMI.test_exeK  sc     GGI##dhh#7:NN488$ uuw}}!"2"2"8"8"::::r   c                     [         R                  " 5       R                  U R                  S9S   n[        R
                  " U R                  5      nSR                  UR                  5       5      UR                  R                  SS5      :X  d   eg )Nr  r   r   r!   r)   )
r\   r]   r   r2  rE   r>  r4   r&   CommandLiner   r  s      r   r|  TestProcessWMI.test_cmdlineU  sd    GGI##dhh#7:NN488$xx		$(=(=c2(FFFFr   c                    [         R                  " 5       R                  U R                  S9S   n[        R
                  " U R                  5      nUR                  5       u  p4nU SU 3nUR                  5       U:X  d   eg )Nr  r   r   )r\   r]   r   r2  rE   r>  GetOwnerrM  )rG   r`   rC  domain_rM  s         r   rv  TestProcessWMI.test_usernameZ  sj    GGI##dhh#7:NN488$jjl8XRz*zz|x'''r   c                    [         R                  " 5       R                  U R                  S9S   n[        R
                  " U R                  5      nUR                  5       R                  nU[        UR                  5      :X  d   eg r  )
r\   r]   r   r2  rE   r>  rO  rR  rB   r  )rG   r`   rC  rR  s       r   test_memory_rssTestProcessWMI.test_memory_rssa  s`    GGI##dhh#7:NN488$mmo!!c!**++++r   c                 B   [         R                  " 5       R                  U R                  S9S   n[        R
                  " U R                  5      nUR                  5       R                  n[        UR                  5      nX4US-  1;  a  U R                  SU SU 35      eg )Nr  r   r  zwmi=z	, psutil=)r\   r]   r   r2  rE   r>  rO  r  rB   PageFileUsager   )rG   r`   rC  r  	wmi_usages        r   test_memory_vmsTestProcessWMI.test_memory_vmsh  s    GGI##dhh#7:NN488$mmo!!
 (	)d"233))d9+Yse<== 4r   c                 p   [         R                  " 5       R                  U R                  S9S   n[        R
                  " U R                  5      n[        UR                  R                  S5      S   5      n[        R                  " S[        R                  " UR                  5       5      5      nX4:X  d   eg )Nr  r   r   r   )r\   r]   r   r2  rE   r>  rL  CreationDater7   timestrftime	localtimerN  )rG   r`   rC  wmic_createpsutil_creates        r   test_create_timeTestProcessWMI.test_create_timeu  s    GGI##dhh#7:NN488$!....s3A67DNN1==?;
 +++r   r   N)r   r   r   r   __doc__r  r5  r:  r  r   r|   r}   r   r  r|  rv  r   r  r  r   r   r   r   r   r  r  :  s    /' '  % [[B  ;;G
( , , 
> 
>,r   r  c                   \    \ rS rSrSr\S 5       r\S 5       rS rS r	S r
S rS	 rS
 rSrg)TestDualProcessImplementationi  a[  Certain APIs on Windows have 2 internal implementations, one
based on documented Windows APIs, another one based
NtQuerySystemInformation() which gets called as fallback in
case the first fails because of limited permission error.
Here we test that the two methods return the exact same value,
see:
https://github.com/giampaolo/psutil/issues/304.
c                 6    [        5       R                  U l        g r-   r1  r3  s    r   r5  (TestDualProcessImplementation.setUpClass  r7  r   c                 .    [        U R                  5        g r-   r9  r3  s    r   r:  +TestDualProcessImplementation.tearDownClass  r<  r   c                    [         R                  " U R                  5      R                  5       n[        R
                  " S[        S9 n[         R                  " U R                  5      R                  5       n[        U5      [        U5      :X  d   e[        [        U5      5       H/  nX   S:  d   eX4   S:  d   e[        X   X4   -
  5      S:  a  M/   e   UR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nz(psutil._psplatform.cext.proc_memory_infor  r   i   )rE   r>  r2  rO  r   r   PermissionErrorrn   r  r   r  )rG   mem_1funmem_2r  s        r   r  .TestDualProcessImplementation.test_memory_info  s    txx(446ZZ6'
 NN488,88:Eu:U+++3u:&x1}$}x1}$}58eh./#555 ' :::
 
 
s   BC5C55
Dc                 V   [         R                  " U R                  5      R                  5       n[        R
                  " S[        S9 n[         R                  " U R                  5      R                  5       U:X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)N"psutil._psplatform.cext.proc_timesr  )rE   r>  r2  rN  r   r   r
  r  )rG   ctimer  s      r   r   .TestDualProcessImplementation.test_create_time  st    txx(446ZZ0'
 >>$((+779UBBB:::
 
 
   AB
B(c                    [         R                  " U R                  5      R                  5       n[        R
                  " S[        S9 n[         R                  " U R                  5      R                  5       nUR                  (       d   e[        UR                  UR                  -
  5      S:  d   e[        UR                  UR                  -
  5      S:  d   e S S S 5        g ! , (       d  f       g = f)Nr  r  g{Gz?)rE   r>  r2  ro   r   r   r
  r  r   usersystem)rG   cpu_times_1r  cpu_times_2s       r   test_cpu_times,TestDualProcessImplementation.test_cpu_times  s    nnTXX.88:ZZ0'
  ..2<<>K:::{''+*:*::;dBBB{))K,>,>>?$FFF
 
 
s   BC$$
C2c                    [         R                  " U R                  5      R                  5       n[        R
                  " S[        S9 n[         R                  " U R                  5      R                  5       n[        [        U5      5       H  n[        X   X4   -
  5      S:  a  M   e   UR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nz(psutil._psplatform.cext.proc_io_countersr  rL   )rE   r>  r2  r  r   r   r
  r  rn   r   r  )rG   io_counters_1r  io_counters_2r  s        r   r  .TestDualProcessImplementation.test_io_counters  s    txx0<<>ZZ6'
 "NN4884@@BM3}-.=+m.>>?!CCC /:::
 
 
s   AC&C
Cc                 V   [         R                  " U R                  5      R                  5       n[        R
                  " S[        S9 n[         R                  " U R                  5      R                  5       U:X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nz(psutil._psplatform.cext.proc_num_handlesr  )rE   r>  r2  r_  r   r   r
  r  )rG   r_  r  s      r   r  .TestDualProcessImplementation.test_num_handles  st    nnTXX.::<ZZ6'
 >>$((+779[HHH:::
 
 
r  c                 B   [         R                  " 5        H3  n [        R                  USS9n[        R                  USS9nX#:X  d   eM5     g ! [         aF  n[        U5      n[        U[         R                  [         R                  45      (       d  e  S nAM  S nAff = f)NT)use_pebF)	rE   r   r   proc_cmdliner  r   
isinstancer@  rn  )rG   r2  aberrs        r   r|  *TestDualProcessImplementation.test_cmdline  s    ;;=C
%%c4%8%%c5%9 vv !  %c*!&--v/C/CD  s   (A
B;BBr   N)r   r   r   r   r  r  r5  r:  r  r   r  r  r  r|  r   r   r   r   r  r    sN     ' '  	G	r   r  c                   t   ^  \ rS rSrSr\S 5       rSS/rU 4S jrU 4S jr	S r
S	 rS
 rS rS rS rSrU =r$ )RemoteProcessTestCasei  zCertain functions require calling ReadProcessMemory.
This trivially works when called on the current process.
Check that this works on other processes, especially when they
have a different bitness.
c                  (   Sn [         R                   " S5       Hv  n[        R                  " USU /[        R                  [        R                  S9nUR                  5       u  p4UR                  5         U[        [        (       + 5      :X  d  Mt  Us  $    g )Nz6import sys; sys.stdout.write(str(sys.maxsize > 2**32))zC:\Python*\python.exe-c)argsstdoutstderr)	glob
subprocessPopenPIPESTDOUTcommunicaterm  rL  r   )codefilenamerX   outputr  s        r   find_other_interpreter,RemoteProcessTestCase.find_other_interpreter  sy     H 		":;H##d+!!((D
 ((*IFIIK\** <r   r,  zimport sys; sys.stdin.read()c                 f  > [         TU ]  5         U R                  5       nUc  [        R                  " S5      e[
        (       a  [        R                  U l        Xl	        OXl        [        R                  U l	        [        R                  R                  5       n[        [        R                  " 5       5      US'   U R                  U R                  /U R                   -   U["        R$                  S9U l        U R                  U R                  /U R                   -   U["        R$                  S9U l        g )Nz0could not find interpreter with opposite bitnessTHINK_OF_A_NUMBER)envstdin)supersetUpr9  r   r$   r   sys
executablepython64python32rC   rD   copyrL  r^  r   	test_argsr1  r3  proc32proc64)rG   other_pythonr=  	__class__s      r   r@  RemoteProcessTestCase.setUp  s    224++B  8NNDM(M(MNNDMjjoo#&ryy{#3 ))]]Odnn,#Z__ * 
 ))]]Odnn,#Z__ * 
r   c                    > [         TU ]  5         U R                  R                  5         U R                  R                  5         g r-   )r?  tearDownrG  r5  rH  )rG   rJ  s    r   rM  RemoteProcessTestCase.tearDown  s.    !!r   c                     [         R                  " U R                  R                  5      n[	        UR                  5       5      S:X  d   eUR                  5       SS  U R                  :X  d   eg N   r*   )rE   r>  rG  r2  rn   r&   rF  rB  s     r   test_cmdline_32%RemoteProcessTestCase.test_cmdline_32  O    NN4;;??+199;1$$$yy{12$..000r   c                     [         R                  " U R                  R                  5      n[	        UR                  5       5      S:X  d   eUR                  5       SS  U R                  :X  d   eg rP  )rE   r>  rH  r2  rn   r&   rF  rB  s     r   test_cmdline_64%RemoteProcessTestCase.test_cmdline_64  rT  r   c                     [         R                  " U R                  R                  5      nUR	                  5       [
        R                  " 5       :X  d   eg r-   )rE   r>  rG  r2  r  rC   getcwdrB  s     r   test_cwd_32!RemoteProcessTestCase.test_cwd_32  2    NN4;;??+uuw"))+%%%r   c                     [         R                  " U R                  R                  5      nUR	                  5       [
        R                  " 5       :X  d   eg r-   )rE   r>  rH  r2  r  rC   rY  rB  s     r   test_cwd_64!RemoteProcessTestCase.test_cwd_64!  r\  r   c                     [         R                  " U R                  R                  5      nUR	                  5       nSU;   d   eUS   [        [        R                  " 5       5      :X  d   eg )Nr<  )rE   r>  rG  r2  rD   rL  rC   r^  )rG   rC  es      r   test_environ_32%RemoteProcessTestCase.test_environ_32%  sP    NN4;;??+IIK"a'''$%RYY[)9999r   c                     [         R                  " U R                  R                  5      n UR	                  5         g ! [         R
                   a     g f = fr-   )rE   r>  rH  r2  rD   r@  rB  s     r   test_environ_64%RemoteProcessTestCase.test_environ_64+  s>    NN4;;??+	IIK"" 		s   = AA)rG  rH  rD  rC  )r   r   r   r   r  staticmethodr9  rF  r@  rM  rR  rV  rZ  r^  rb  re  r   __classcell__)rJ  s   @r   r*  r*    sV        " 56I
0"
1
1
&&: r   r*  c                        \ rS rSrS rS rSrg)TestServicesi8  c                 n   1 Skn1 Skn1 Skn[         R                  " 5        GH  nUR                  5       n[        US   [        5      (       d   eUS   R                  5       (       d   e[        US   [        5      (       d   e[        US   [        5      (       d   eUS   U;   d   eUS   b  [         R                  " US   5        [        US	   [        5      (       d   e[        US   [        5      (       d   e[        US
   [        5      (       d   eUS
   U;   d   eUS   U;   d   e[        US   [        5      (       d   eUR                  5       nUb-  [         R                  " U5      nUR                  5       (       d   e[         R                  " UR                  5       5      nX7:X  a  GM   e   g )N>   stoppausestartpausedrunningstoppedcontinue>   manualdisabled	automatic>   ro  rp  rq  stop_pendingpause_pendingstart_pendingcontinue_pendingrK  display_namerM  statusr2  binpath
start_typedescription)rE   win_service_iteras_dictr$  rL  r3   r>  r2  
is_runningwin_service_getrK  )rG   valid_statusesvalid_start_typesservr;   r2  rC  ss           r   test_win_service_iter"TestServices.test_win_service_iter:  s   
 @
 ++-D<<>Dd6lC0000<%%''''d>2C8888d:.4444>^333E{&tE{+d9os3333d:.4444d<0#6666%)::::>^333d=137777((*CNN3'||~~%~&&tyy{3A99- .r   c                 B   [         R                  R                  R                  n[         R                  R                  R                  n[        [         R                  " 5       5      R                  5       n[        R                  " [         R                  5       n[         R                  " US-   5        S S S 5        WR                  R                  US-   :X  d   e[         R                  " U5      n[        SSS5      nXl        [        R                   " SUS9   [        R                  " [         R                  5         UR#                  5         S S S 5        S S S 5        [        R                   " SUS9   [        R                  " [         R                  5         UR%                  5         S S S 5        S S S 5        [        SSS5      nX&l        [        R                   " SUS9   [        R                  " [         R&                  5         UR#                  5         S S S 5        S S S 5        [        R                   " SUS9   [        R                  " [         R&                  5         UR%                  5         S S S 5        S S S 5        UR                  5       [)        U5      ;   d   eUR+                  5       [)        U5      ;   d   eUR                  5       [-        U5      ;   d   eUR+                  5       [-        U5      ;   d   eg ! , (       d  f       GNS= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNI= f! , (       d  f       GNS= f! , (       d  f       GN= f! , (       d  f       GN= f)Nz???r   msgz/psutil._psplatform.cext.winservice_query_statusr  z/psutil._psplatform.cext.winservice_query_config)rE   r  r   ERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextr  rK  r   r?  rn  r  r  r  r  r   r   r{  rM  r@  rL  rz  repr)rG   r  r  rK  cmservicer  s          r   test_win_service_get!TestServices.test_win_service_getf  s   ##@@ 	% %0055IIF++-.335]]6//0B""4%<0 1xx}}u,,, ((.a"3ZZ=3
 v334  5

 ZZ=3
 v334  " 5
 a"*ZZ=3
 v223  4

 ZZ=3
 v223  " 4
 ||~W---##%W555||~g...##%g666K 10 54
 
 54
 
 43
 
 43
 
s   K?%L#=LL#3%ML5)M!%M+MM+<%N!M=2N?
L
L 	L##
L25
M	?M
M
M(	#M++
M:=
N	N
Nr   N)r   r   r   r   r  r  r   r   r   r   rj  rj  8  s    *X,7r   rj  )5r  r   r0  rC   rP  ry  r"   rY  r1  rA  r  warningsunittestr   rE   r   psutil.testsr   r   r   r   r	   r
   r   r   r   r   r   r   catch_warningssimplefilterrM   ra  r  r\   psutil._pswindowsr   r  r   r|   r}   r   r'   rB   r<   r>   r   r   r/  r  r  r*  rj  r   r   r   <module>r     s      	  	    
      ' $ !  - * '  )  ' " 4		 	 	"h' 
# 1  K7D!@A	n 	 B 8	  # ,%;/ %;PV-_ V-|> >LK/ K\B,_ B,P K7TN T 8Tn K7UN U 8Uz K7Y7> Y7 8Y7e 
#	"s   &#H
H