
    g؄                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! er>es< ejD                         5   ejF                  d       ddl$Z$ddl%Z%ddl&Z&ddl'Z'ddd       erddl(m)Z) ejT                  jV                  Z+ejX                  j[                  e d      ejX                  j[                  ed      ejX                  j[                  exr e d       G d de                           Z.d Z/e0fdZ1 G d  d!e.      Z2 G d" d#e.      Z3 G d$ d%e.      Z4 G d& d'e.      Z5 G d( d)e.      Z6ejX                  j[                  e d       G d* d+e             Z7ejX                  j[                  e d       G d, d-e             Z8ejX                  j[                  e d       G d. d/e             Z9y# 1 sw Y   ]xY w)0zWindows specific tests.    N)WINDOWS)FileNotFoundError)super)which)APPVEYOR)GITHUB_ACTIONS)HAS_BATTERY)IS_64BIT)PY3)PYPY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)mock)pytest)retry_on_failure)sh)spawn_testproc)	terminateignore)convert_oserrorzWINDOWS onlyreasonzpywin32 not available on PYPYzpywin32 broken on GITHUB + PY2c                       e Zd Zy)WindowsTestCaseN)__name__
__module____qualname__     N/var/www/openai/venv/lib/python3.12/site-packages/psutil/tests/test_windows.pyr   r   ;   s     	r    r   c                 h    t        d      st        j                  d      dd| z  z   }t        |      S )zCurrently not used, but available just in case. Usage:

    >>> powershell(
        "Get-CIMInstance Win32_PageFileUsage | Select AllocatedBaseSize")
    zpowershell.exezpowershell.exe not availablez?powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive z,-NoProfile -WindowStyle Hidden -Command "%s")r   r   skipr   )cmdcmdlines     r!   
powershellr&   E   s>     !"kk899I
83
>	?  g;r    c                 $   t        d| d|      j                         }dj                  |j                         dd       j                         }|9d|v r-t	        |j                         D cg c]
  } ||       c}      S  ||      S |S c c}w )zCurrently not used, but available just in case. Usage:

    >>> wmic("Win32_OperatingSystem", "FreePhysicalMemory")
    2134124534
    z
wmic path z get     N,)r   stripjoin
splitlinestuplesplit)pathwhat	converteroutdataxs         r!   wmicr6   T   s     dD1
2
8
8
:C773>>#AB'(..0D$;

=1)A,=>>T?"	 >s   -Bc                       e Zd Zej                  j                  dej                  vd      d        Zd Z	d Z
d Zd Zd	 Zy
)TestCpuAPIsNUMBER_OF_PROCESSORSz-NUMBER_OF_PROCESSORS env var is not availabler   c                 n    t        t        j                  d         }|t        j                         k(  sJ y )Nr9   )intosenvironpsutil	cpu_count)selfnum_cpuss     r!   &test_cpu_count_vs_NUMBER_OF_PROCESSORSz2TestCpuAPIs.test_cpu_count_vs_NUMBER_OF_PROCESSORSk   s/     rzz"89:6++----r    c                 h    t        j                         d   }t        j                         }||k(  sJ y )N   )win32apiGetSystemInfor>   r?   r@   	sys_valuepsutil_values      r!   test_cpu_count_vs_GetSystemInfoz+TestCpuAPIs.test_cpu_count_vs_GetSystemInfou   s3     **,Q/	'')L(((r    c                     t        j                         }t        d |j                         D              }t	        j
                         |k(  sJ y )Nc              3   4   K   | ]  }|j                     y wN)NumberOfLogicalProcessors.0procs     r!   	<genexpr>z<TestCpuAPIs.test_cpu_count_logical_vs_wmi.<locals>.<genexpr>~   s      
7JtD**7J   wmiWMIsumWin32_Processorr>   r?   )r@   wprocss      r!   test_cpu_count_logical_vs_wmiz)TestCpuAPIs.test_cpu_count_logical_vs_wmi|   sF    GGI 
787H7H7J
 
 !U***r    c                     t        j                         }t        d |j                         D              }t	        j
                  d      |k(  sJ y )Nc              3   4   K   | ]  }|j                     y wrM   )NumberOfCoresrO   s     r!   rR   z:TestCpuAPIs.test_cpu_count_cores_vs_wmi.<locals>.<genexpr>   s     G3F4D&&3FrS   F)logicalrT   )r@   rY   coress      r!   test_cpu_count_cores_vs_wmiz'TestCpuAPIs.test_cpu_count_cores_vs_wmi   s?    GGIG13D3D3FGG.%777r    c                 p    t        j                         t        t        j                  d            k(  sJ y )NT)percpu)r>   r?   len	cpu_timesr@   s    r!   test_cpu_count_vs_cpu_timesz'TestCpuAPIs.test_cpu_count_vs_cpu_times   s)    !S)9)9)F%GGGGr    c                    t        j                         }|j                         d   }|j                  t	        j
                         j                  k(  sJ |j                  t	        j
                         j                  k(  sJ y Nr   )	rU   rV   rX   CurrentClockSpeedr>   cpu_freqcurrentMaxClockSpeedmax)r@   rY   rQ   s      r!   test_cpu_freqzTestCpuAPIs.test_cpu_freq   sb    GGI  "1%%%):)B)BBBB!!V__%6%:%::::r    N)r   r   r   r   markskipifr<   r=   rB   rJ   r[   ra   rg   ro   r   r    r!   r8   r8   j   sQ    [[bjj0>  .	.)+8
H;r    r8   c                       e Zd Zd Zd Zd Zd Zd Zej                  j                  ed       e       d               Z e       d	        Z e       d
        Zd Zd Zd Zd Zy)TestSystemAPIsc                     t        d      }t        j                  d      j                         }|D ]=  }d|j	                  dd      j                         v r&||vs+| j                  d|z         y )Nzipconfig /allT)perniczpseudo-interface -z-%r nic wasn't found in 'ipconfig /all' output)r   r>   net_io_counterskeysreplacelowerfail)r@   r3   nicsnics       r!   test_nic_nameszTestSystemAPIs.test_nic_names   sn    !%%T2779C!S[[c%:%@%@%BB#~iiCcI 	 r    c                     t        j                         j                         d   }t        |j                        t        j                         j                  k(  sJ y ri   )rU   rV   Win32_ComputerSystemr;   TotalPhysicalMemoryr>   virtual_memorytotalr@   rY   s     r!   test_total_phymemz TestSystemAPIs.test_total_phymem   sC    GGI**,Q/1(()V-B-B-D-J-JJJJr    c                     t        j                         j                         d   }t        t	        |j
                        t        j                         j                  z
        t        k  sJ y ri   )
rU   rV   Win32_PerfRawData_PerfOS_Memoryabsr;   AvailableBytesr>   r   freer   r   s     r!   test_free_phymemzTestSystemAPIs.test_free_phymem   sT    GGI557:A$$%(=(=(?(D(DDE 	
 r    c                    t        j                         j                         d   }t        |j                        t        j                         j                  z
  t        j                         j                  k(  sJ t        j                         j                  dk(  rGt        j                         j                  dk(  sJ t        j                         j                  dk(  sJ y y ri   )rU   rV   r   r;   CommitLimitr>   r   r   swap_memoryr   usedr   s     r!   test_total_swapmemz!TestSystemAPIs.test_total_swapmem   s    GGI557:!6!6!8!>!>>!!#))*	
* %%*%%',,111%%',,111 +r    c                    t        j                         j                  dkD  rt        j                         j                  d      d   }t        |j                        dz  t        |j                        z  }t        j                         j                  dk\  sJ t        t        j                         j                  |z
        dk  sJ t        j                         j                  dk  sJ y y )Nr   _Total)Named   rD   )r>   r   r   rU   rV   #Win32_PerfRawData_PerfOS_PagingFiler;   PercentUsagePercentUsage_Basepercentr   )r@   rY   percentSwaps      r!   test_percent_swapmemz#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    ztest not relieable on appveyorr   c                     t        j                         j                         }t        |D cg c]  }|j                   c}      }t        t        j                               }||k(  sJ y c c}w rM   )rU   rV   Win32_Processset	ProcessIdr>   pids)r@   rY   r5   wmi_pidspsutil_pidss        r!   	test_pidszTestSystemAPIs.test_pids   sX    
 GGI##%Q/QQ/0&++-(;&&& 0s   A+c                    t        j                  d      }t        j                         j	                         }|D ]3  }|D ]  }|j
                  j                  dd      |j                  k(  s.|j                  s Bd|j                  v r R|j                  j                  d      r o	 t        j                  |j                        }|j                  t        |j                        k(  sJ t        |j                         }|j"                  |k(  sJ t%        |j"                  |z
        dkD  r!| j'                  d|j"                  d	|        | j'                  d
t)        |      z         y # t        $ r Y  Ew xY w)NTall\r(   cdromA:i   zpsutil=z, wmi=zcan't find partition %s)r>   disk_partitionsrU   rV   Win32_LogicalDiskdevicerz   DeviceID
mountpointopts
startswith
disk_usager   r   r;   Size	FreeSpacer   r   r|   repr)r@   ps_parts	wmi_partsps_partwmi_partusagewmi_frees          r!   
test_diskszTestSystemAPIs.test_disks   sM   ))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"ii38::xH  - &0 ii 9DM IJJ3   - s   +E33	F Fc                    t        j                         D ]  }d|j                  v rt        j                  |j
                        }t        j                  |j
                        }t        |d   |j                  z
        t        k  sJ t        |d   |j                  z
        t        k  sJ |j                  |j                  |j                  z
  k(  rJ  y )Nr   r   r)   )r>   r   r   rE   GetDiskFreeSpaceExr   r   r   r   r   r   r   )r@   diskrH   rI   s       r!   test_disk_usagez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                 B   t        j                         j                  d      D cg c]  }|r|j                  d      s|dz    }}t	        j
                  d      D cg c])  }|j                  j                  d      s|j                  + }}||k(  sJ y c c}w c c}w )Nz\ r   r   Tr   )rE   GetLogicalDriveStringsr/   r   r>   r   r   )r@   r5   rH   rI   s       r!   test_disk_partitionsz#TestSystemAPIs.test_disk_partitions   s     446<<XF
Fd+ HF 	 
 ++5
5<<**40 LL5 	 

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


s   B.Bc                 4   t        t        j                               }t        j                         j                         }t               }|D ]8  }|j                  |j                         |j                  |j                         : ||z  sJ d|d|       y )Nzno common entries in z, )	r   cextnet_if_statsrU   rV   Win32_NetworkAdapteraddr   NetConnectionID)r@   ps_nameswmi_adapters	wmi_nameswmi_adapters        r!   test_net_if_statsz TestSystemAPIs.test_net_if_stats  s    t((*+wwy557E	'KMM+**+MM+556 ( )# 	
&
 	
#r    c                 r   t        j                         j                         }|d   j                  j	                  d      d   }t
        j
                  j                  |d      }t
        j
                  j                  t        j                               }t        ||z
  j                               }|dk  sJ y )Nr   .%Y%m%d%H%M%SrD   )rU   rV   Win32_OperatingSystemLastBootUpTimer/   datetimestrptimefromtimestampr>   	boot_timer   total_seconds)r@   wmi_oswmi_btime_strwmi_btime_dt	psutil_dtdiffs         r!   test_boot_timezTestSystemAPIs.test_boot_time  s    002q	0066s;A>((11>
 %%33F4D4D4FG	L9,;;=>qyyr    c                 4   t        j                  dd      5  t        j                         dk(  sJ 	 d d d        t        j                  dd      5  t        j                         dk(  sJ 	 d d d        t        j                  dd      5  t        j                         dk(  sJ 	 d d d        t        j                  dd      5  t        j                         dk(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   y xY w)Nz psutil._pswindows.cext.boot_timerD   return_value      iM  )r   patchr>   r   rf   s    r!   test_boot_time_fluctuationz)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*C6DD*C36C?DDN)r   r   r   r   r   r   r   r   r   rp   rq   r   r   r   r   r   r   r   r   r   r   r    r!   rs   rs      s    	K
2	7. [[)IJ'  K' K K< 
O 
O)

	-r    rs   c                       e Zd Zd Zej
                  j                  e d      d        Zej
                  j                  e d      d        Z	d Z
d Zd Zd	 Zy
)TestSensorsBatteryc                     t        j                         d   rt        j                         J y t        j                         J y )NSystemBatteriesPresent)rE   GetPwrCapabilitiesr>   sensors_batteryrf   s    r!   test_has_batteryz#TestSensorsBattery.test_has_battery5  s>    &&()AB))+777))+333r    z
no batteryr   c                     t        j                         }|j                  d      d   }t        j                         }t        |j                  |j                  z
        dk  sJ y )Nselect * from Win32_Batteryr   r)   )rU   rV   queryr>   r   r   r   EstimatedChargeRemainingr@   rY   battery_wmibattery_psutils       r!   test_percentzTestSensorsBattery.test_percent;  sZ    GGIgg;<Q?//1&&)M)MMN	
r    c                     t        j                         }|j                  d      d   }t        j                         }|j
                  |j                  dk(  k(  sJ y )Nr   r      )rU   rV   r   r>   r   power_pluggedBatteryStatusr   s       r!   test_power_pluggedz%TestSensorsBattery.test_power_pluggedE  sP    GGIgg;<Q?//1 ++0I0IQ0NOOOr    c                     t        j                  dd      5 }t        j                         J |j                  sJ 	 d d d        y # 1 sw Y   y xY w)N&psutil._pswindows.cext.sensors_battery)r      r   r   r   )r   r   r>   r   calledr@   ms     r!   test_emulate_no_batteryz*TestSensorsBattery.test_emulate_no_batteryN  sI    ZZ4'
 ))+33388O8
 
 
s   %AAc                     t        j                  dd      5 }t        j                         j                  t        j
                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )r)   r   r   r   r   r   r   r>   r   secsleftPOWER_TIME_UNLIMITEDr   r   s     r!   test_emulate_power_connectedz/TestSensorsBattery.test_emulate_power_connectedV  ]    ZZ4<
&&(11..// 88O8
 
 
   A A""A+c                     t        j                  dd      5 }t        j                         j                  t        j
                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )r      r   r   r   r  r   s     r!   test_emulate_power_chargingz.TestSensorsBattery.test_emulate_power_charging`  r  r  c                     t        j                  dd      5 }t        j                         j                  t        j
                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )r   r   r   r   )r   r   r>   r   r  POWER_TIME_UNKNOWNr   r   s     r!   test_emulate_secs_left_unknownz1TestSensorsBattery.test_emulate_secs_left_unknownj  sY    ZZ4&
 &&(11V5N5NNN88O8
 
 
r  N)r   r   r   r   r   rp   rq   r	   r   r   r   r  r	  r  r   r    r!   r   r   4  sq    4 [[K=
 >
 [[K=P >Pr    r   c                       e Zd Zed        Zed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestProcessc                 6    t               j                  | _        y rM   r   pidclss    r!   
setUpClasszTestProcess.setUpClass{       "&&r    c                 .    t        | j                         y rM   r   r  r  s    r!   tearDownClasszTestProcess.tearDownClass      #''r    c                     t        j                  d      }t        j                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY wri   )r>   Processr   raisesAccessDeniedkillr@   ps     r!   test_issue_24zTestProcess.test_issue_24  s7    NN1]]6../FFH 0//s   AAc                 Z   t        j                  d      }|j                         dk(  sJ t        |       |j	                          |j                         dk\  sJ 	 |j                         d d \  }}|dkD  sJ y # t         j                  $ r t        j                         d   dvr Y y w xY w)Nr   Systemg        r   r   r)   >   win-7win7vista)
r>   r  namestrusernamecreate_timememory_infor  platformuname)r@   r!  rss_vmss       r!   test_special_pidzTestProcess.test_special_pid  s    NN1vvx8### 	A	

}}#%%%	+IC 7N7 "" 	~~"*DD E	s   A: :-B*)B*c                     t        j                  | j                        }t        j                  t
              5  |j                  t        j                         d d d        y # 1 sw Y   y xY wrM   )	r>   r  r  r   r  
ValueErrorsend_signalsignalSIGINTr   s     r!   test_send_signalzTestProcess.test_send_signal  s<    NN488$]]:&MM&--( '&&s    A""A+c                    t        j                  t        j                               }|j	                         }t        j                  t        j                  t        j                  t        j                               }|j	                         }||dz   k(  sJ t        j                  |       |j	                         |k(  sJ y )Nr)   )r>   r  r<   getpidnum_handlesrE   OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSECloseHandle)r@   r!  beforehandleafters        r!   test_num_handles_incrementz&TestProcess.test_num_handles_increment  s    NN299;'%%..		
 
"""V$}}&(((r    c                 v   t        j                  | j                         j                        }|j	                  t
        j                         |j	                  t
        j                         |j                          |j                          t        j                  t         j                        5  |j	                  t
        j                         d d d        t        j                  t         j                        5  |j	                  t
        j                         d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY wrM   )r>   r  r   r  r4  r5  CTRL_C_EVENTCTRL_BREAK_EVENTr  waitr   r  NoSuchProcessr   s     r!   test_ctrl_signalsz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   / D#: D/#D,/D8c                     t        j                  t        j                        }|j	                  d      rt        j                  d      t        j                         j                         |k(  sJ y )N$zrunning as service account)
rE   GetUserNameExr<  NameSamCompatibleendswithr   r#   r>   r  r*  )r@   r(  s     r!   test_usernamezTestProcess.test_username  sT    %%h&@&@A== ++:;;~~((*d222r    c                 0   t        j                  ddt        j                               j	                         }dj                  t        j                         j                               }|d   dcxk(  r|d   k7  rn n|j                  ddd      }||k(  sJ y )Nz[ ]+rv   r   "r(   r   )
resubrE   GetCommandLiner+   r,   r>   r  r%   rz   rG   s      r!   test_cmdlinezTestProcess.test_cmdline  s}    FF63(?(?(ABHHJ	xx 0 8 8 :;Q<31,q/1
 "))#r15IL(((r    c                 J   t        j                  t        j                  t        j                  t        j                               }| j                  t         j                  |       t        j                  |      }t        j                         j                         }||k(  sJ y rM   )rE   r;  r<  r=  r>  r<   r9  
addCleanupr?  win32processGetPriorityClassr>   r  nicer@   rA  rH   rI   s       r!   	test_nicezTestProcess.test_nice  sr    %%..		
 	,,f5 11&9	~~',,.y(((r    c                    t        j                  t        j                  t        j                  | j
                        }| j                  t         j                  |       t        j                  |      }t        j                  | j
                        j                         }|d   |j                  k(  sJ |d   |j                  k(  sJ |d   |j                  k(  sJ |d   |j                   k(  sJ |d   |j"                  k(  sJ |d   |j$                  k(  sJ |d   |j&                  k(  sJ |d   |j(                  k(  sJ |j*                  |j                  k(  sJ |j,                  |j&                  k(  sJ y )	NPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsage)rE   r;  r<  r=  r>  r  rW  r?  rX  GetProcessMemoryInfor>   r  r,  	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpagefilepeak_pagefiler/  vmsr[  s       r!   test_memory_infoz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                 t   t        j                  t        j                  t        j                  | j
                        }| j                  t         j                  |       t        j                  | j
                        }|j                          |j                         }t        j                  |      }||k(  sJ y rM   )rE   r;  r<  r=  r>  r  rW  r?  r>   r  r   rG  rX  GetExitCodeProcess)r@   rA  r!  rI   rH   s        r!   	test_waitzTestProcess.test_wait  s    %%..
 	,,f5NN488$	vvx 33F;	y(((r    c                 h   d }t        j                  t        j                  t        j                  | j
                        }| j                  t         j                  |        |t        j                  |      d         }t        j                  | j
                        j                         }||k(  sJ y )Nc                 P    t        d      D cg c]  }d|z  | z  s| c}S c c}w )N@   r)   )range)r5   is     r!   from_bitmaskz3TestProcess.test_cpu_affinity.<locals>.from_bitmask  s(    $Ry9y!Q!VqLAy999s   ##r   )rE   r;  r<  r=  r>  r  rW  r?  rX  GetProcessAffinityMaskr>   r  cpu_affinity)r@   ry  rA  rH   rI   s        r!   test_cpu_affinityzTestProcess.test_cpu_affinity  s    	: %%..
 	,,f5 //7:
	 ~~dhh/<<>y(((r    c                 ,   t        j                  t        j                  t        j                  t        j                               }| j                  t         j                  |       t        j                  |      }t        j                         j                         }|j                  |d   k(  sJ |j                  |d   k(  sJ |j                   |d   k(  sJ |j"                  |d   k(  sJ |j$                  |d   k(  sJ |j&                  |d   k(  sJ y )NReadOperationCountWriteOperationCountReadTransferCountWriteTransferCountOtherOperationCountOtherTransferCount)rE   r;  r<  r=  r>  r<   r9  rW  r?  rX  GetProcessIoCountersr>   r  io_counters
read_countwrite_count
read_byteswrite_bytesother_countother_bytesr[  s       r!   test_io_countersz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                    dd l }dd l}d}|j                  j                  j	                  |d| j
                        }| j                  |j                  j                  j                  |       |j                  j                         }|j                  j                  j                  ||j                  |             |j                  }t        j                  | j
                        j                         }||k(  sJ y )Nr      )ctypesctypes.wintypeswindllkernel32r;  r  rW  r?  wintypesDWORDGetProcessHandleCountbyrefvaluer>   r  r:  )r@   r  r=  rA  hndcntrH   rI   s          r!   test_num_handleszTestProcess.test_num_handles"  s    $)!''33%q$((
 	..::FC&&(44FLL(	
 LL	~~dhh/;;=y(((r    c                    t               }d|_        t        j                  d|      5  t        j                  d      5 }t	        j
                         }t        j                  t        j                        5  |j                          d d d        d d d        d d d        j                  dk\  sJ y # 1 sw Y   +xY w# 1 sw Y   /xY w# 1 sw Y   3xY w)Ni+  z psutil._psplatform.cext.proc_cwdside_effectz
time.sleeprD   )WindowsErrorwinerrorr   r   r>   r  r   r  r  cwd
call_count)r@   excr   r!  s       r!   test_error_partial_copyz#TestProcess.test_error_partial_copy4  s    nZZ:LL)QNN$]]6#6#67EEG 8 * M
 ||q    87 *) MLs:   C
8B>7B2B>C
2B;7B>>C	C

Cc                    t        j                         d   dz   }t         j                  j                  |      }t	        j
                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY w)Nr  i )r>   r   _psplatformr  r   r  rH  exe)r@   r  rQ   s      r!   test_exezTestProcess.test_exe?  sV     kkmB%'!!))#.]]6//0HHJ 100s   A77B N)r   r   r   classmethodr  r  r"  r1  r7  rC  rI  rO  rU  r\  rp  rs  r|  r  r  r  r  r   r    r!   r  r  z  st    ' '  
")
	)	33	)4)96	))K)$	!r    r  c                       e Zd ZdZed        Zed        Zd Zej                  j                  ed      d        Zd Zd	 Z e       d
        Z e       d        Zd Zy)TestProcessWMIz%Compare Process API results with WMI.c                 6    t               j                  | _        y rM   r  r  s    r!   r  zTestProcessWMI.setUpClassK  r  r    c                 .    t        | j                         y rM   r  r  s    r!   r  zTestProcessWMI.tearDownClassO  r  r    c                     t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         |j                  k(  sJ y Nr   r   )rU   rV   r   r  r>   r  r(  Captionr@   rY   r!  s      r!   	test_namezTestProcessWMI.test_nameS  sN    GGI##dhh#7:NN488$vvx199$$$r    z!unreliable path on GITHUB_ACTIONSr   c                    t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         j                         |j                  j                         k(  sJ y r  )	rU   rV   r   r  r>   r  r  r{   ExecutablePathr  s      r!   r  zTestProcessWMI.test_exeY  sc     GGI##dhh#7:NN488$ uuw}}!"2"2"8"8"::::r    c                     t        j                         j                  | j                        d   }t	        j
                  | j                        }dj                  |j                               |j                  j                  dd      k(  sJ y )Nr  r   rv   rQ  r(   )
rU   rV   r   r  r>   r  r,   r%   CommandLinerz   r  s      r!   rU  zTestProcessWMI.test_cmdlinec  sd    GGI##dhh#7:NN488$xx		$(=(=c2(FFFFr    c                    t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         \  }}}|d|}|j                         |k(  sJ y )Nr  r   r   )rU   rV   r   r  r>   r  GetOwnerr*  )r@   rY   r!  domain_r*  s         r!   rO  zTestProcessWMI.test_usernameh  sf    GGI##dhh#7:NN488$jjl8%x0zz|x'''r    c                    t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         j                  }|t        |j                        k(  sJ y r  )
rU   rV   r   r  r>   r  r,  r/  r;   r_  )r@   rY   r!  r/  s       r!   test_memory_rsszTestProcessWMI.test_memory_rsso  s`    GGI##dhh#7:NN488$mmo!!c!**++++r    c                 B   t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         j                  }t        |j                        }|||dz  hvr| j                  d|d|      y )Nr  r   r  zwmi=z	, psutil=)rU   rV   r   r  r>   r  r,  ro  r;   PageFileUsager|   )r@   rY   r!  ro  	wmi_usages        r!   test_memory_vmszTestProcessWMI.test_memory_vmsv  s    GGI##dhh#7:NN488$mmo!!
 (	y)d"233))9cBCC 4r    c                 n   t        j                         j                  | j                        d   }t	        j
                  | j                        }t        |j                  j                  d      d         }t        j                  dt        j                  |j                                     }||k(  sJ y )Nr  r   r   r   )rU   rV   r   r  r>   r  r)  CreationDater/   timestrftime	localtimer+  )r@   rY   r!  wmic_createpsutil_creates        r!   test_create_timezTestProcessWMI.test_create_time  s    GGI##dhh#7:NN488$!....s3A67DNN1==?;
 m+++r    N)r   r   r   __doc__r  r  r  r  r   rp   rq   r   r  rU  rO  r   r  r  r  r   r    r!   r  r  H  s    /' '  % [[B  ;;G
( , , 
D 
D,r    r  c                   T    e Zd ZdZed        Zed        Zd Zd Zd Z	d Z
d Zd	 Zy
)TestDualProcessImplementationaw  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    t               j                  | _        y rM   r  r  s    r!   r  z(TestDualProcessImplementation.setUpClass  r  r    c                 .    t        | j                         y rM   r  r  s    r!   r  z+TestDualProcessImplementation.tearDownClass  r  r    c                    t        j                  | j                        j                         }t	        j
                  dt        t        j                  d            5 }t        j                  | j                        j                         }t        |      t        |      k(  sJ t        t        |            D ]/  }||   dk\  sJ ||   dk\  sJ t        ||   ||   z
        dk  r/J  |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz(psutil._psplatform.cext.proc_memory_infomsgr  r   i   )r>   r  r  r,  r   r   OSErrorerrnoEPERMrd   rw  r   r   )r@   mem_1funmem_2rx  s        r!   rp  z.TestDualProcessImplementation.test_memory_info  s    txx(446ZZ6U3
 NN488,88:Eu:U+++3u:&Qx1}$}Qx1}$}58eAh./#555 ' :::
 
 
s   B	D'DDc                 h   t        j                  | j                        j                         }t	        j
                  dt        t        j                  d            5 }t        j                  | j                        j                         |k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)N"psutil._psplatform.cext.proc_timesr  r  )
r>   r  r  r+  r   r   r  r  r  r   )r@   ctimer  s      r!   r  z.TestDualProcessImplementation.test_create_time  s    txx(446ZZ0U3
 >>$((+779UBBB:::
 
 
   AB((B1c                    t        j                  | j                        j                         }t	        j
                  dt        t        j                  d            5 }t        j                  | j                        j                         }|j                  sJ t        |j                  |j                  z
        dk  sJ t        |j                  |j                  z
        dk  sJ 	 d d d        y # 1 sw Y   y xY w)Nr  r  r  g{Gz?)r>   r  r  re   r   r   r  r  r  r   r   usersystem)r@   cpu_times_1r  cpu_times_2s       r!   test_cpu_timesz,TestDualProcessImplementation.test_cpu_times  s    nnTXX.88:ZZ0U3
  ..2<<>K:::{''+*:*::;dBBB{))K,>,>>?$FFF
 
 
s   B
C11C:c                    t        j                  | j                        j                         }t	        j
                  dt        t        j                  d            5 }t        j                  | j                        j                         }t        t        |            D ]  }t        ||   ||   z
        dk  rJ  |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz(psutil._psplatform.cext.proc_io_countersr  r  rD   )r>   r  r  r  r   r   r  r  r  rw  rd   r   r   )r@   io_counters_1r  io_counters_2rx  s        r!   r  z.TestDualProcessImplementation.test_io_counters  s    txx0<<>ZZ6U3
 "NN4884@@BM3}-.=+mA.>>?!CCC /:::
 
 
s   AC:CCc                 h   t        j                  | j                        j                         }t	        j
                  dt        t        j                  d            5 }t        j                  | j                        j                         |k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz(psutil._psplatform.cext.proc_num_handlesr  r  )
r>   r  r  r:  r   r   r  r  r  r   )r@   r:  r  s      r!   r  z.TestDualProcessImplementation.test_num_handles  s    nnTXX.::<ZZ6U3
 >>$((+779[HHH:::
 
 
r  c                 :   t        j                         D ]8  }	 t        j                  |d      }t        j                  |d      }||k(  r8J  y # t        $ r@}t        |      }t        |t         j                  t         j                  f      s Y d }~d }~ww xY w)NT)use_pebF)	r>   r   r   proc_cmdliner  r   
isinstancer  rH  )r@   r  aberrs        r!   rU  z*TestDualProcessImplementation.test_cmdline  s    ;;=C
%%c4%8%%c5%9 Avv !  %c*!&--v/C/CD s   .A	B6BBN)r   r   r   r  r  r  r  rp  r  r  r  r  rU  r   r    r!   r  r    sN     ' '  	G	r    r  c                   h     e Zd ZdZed        ZddgZ fdZ fdZd Z	d Z
d	 Zd
 Zd Zd Z xZS )RemoteProcessTestCasezCertain 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                     d} t        j                   d      D ]s  }t        j                  |d| gt        j                  t        j                        }|j                         \  }}|j                          |t        t               k(  sq|c S  y )Nz6import sys; sys.stdout.write(str(sys.maxsize > 2**32))zC:\Python*\python.exe-c)argsstdoutstderr)	glob
subprocessPopenPIPESTDOUTcommunicaterG  r)  r
   )codefilenamerQ   outputr  s        r!   find_other_interpreterz,RemoteProcessTestCase.find_other_interpreter  s{     H 		":;H##d+!!((D
 ((*IFAIIK\** <r    r  zimport sys; sys.stdin.read()c                 z   t               j                          | j                         }|t        j                  d      t
        rt        j                  | _        || _	        n|| _        t        j                  | _	        t        j                  j                         }t        t        j                               |d<   | j                  | j                  g| j                   z   |t"        j$                        | _        | j                  | j                  g| j                   z   |t"        j$                        | _        y )Nz0could not find interpreter with opposite bitnessTHINK_OF_A_NUMBER)envstdin)r   setUpr  r   r#   r
   sys
executablepython64python32r<   r=   copyr)  r9  r   	test_argsr  r  proc32proc64)r@   other_pythonr  	__class__s      r!   r  zRemoteProcessTestCase.setUp  s    224++B  NNDM(DM(DMNNDMjjoo#&ryy{#3 ))]]Odnn,#Z__ * 
 ))]]Odnn,#Z__ * 
r    c                     t               j                          | j                  j                          | j                  j                          y rM   )r   tearDownr  r  r  )r@   r	  s    r!   r  zRemoteProcessTestCase.tearDown  s1    !!r    c                     t        j                  | j                  j                        }t	        |j                               dk(  sJ |j                         dd  | j                  k(  sJ y N   r)   )r>   r  r  r  rd   r%   r  r   s     r!   test_cmdline_32z%RemoteProcessTestCase.test_cmdline_32!  O    NN4;;??+199;1$$$yy{12$..000r    c                     t        j                  | j                  j                        }t	        |j                               dk(  sJ |j                         dd  | j                  k(  sJ y r  )r>   r  r  r  rd   r%   r  r   s     r!   test_cmdline_64z%RemoteProcessTestCase.test_cmdline_64&  r  r    c                     t        j                  | j                  j                        }|j	                         t        j                         k(  sJ y rM   )r>   r  r  r  r  r<   getcwdr   s     r!   test_cwd_32z!RemoteProcessTestCase.test_cwd_32+  2    NN4;;??+uuw"))+%%%r    c                     t        j                  | j                  j                        }|j	                         t        j                         k(  sJ y rM   )r>   r  r  r  r  r<   r  r   s     r!   test_cwd_64z!RemoteProcessTestCase.test_cwd_64/  r  r    c                     t        j                  | j                  j                        }|j	                         }d|v sJ |d   t        t        j                               k(  sJ y )Nr  )r>   r  r  r  r=   r)  r<   r9  )r@   r!  es      r!   test_environ_32z%RemoteProcessTestCase.test_environ_323  sP    NN4;;??+IIK"a'''$%RYY[)9999r    c                     t        j                  | j                  j                        }	 |j	                          y # t         j
                  $ r Y y w xY wrM   )r>   r  r  r  r=   r  r   s     r!   test_environ_64z%RemoteProcessTestCase.test_environ_649  s>    NN4;;??+	IIK"" 		s   < AA)r   r   r   r  staticmethodr  r  r  r  r  r  r  r  r  r  __classcell__)r	  s   @r!   r  r    sQ        " 56I
0"
1
1
&&:r    r  c                       e Zd Zd Zd Zy)TestServicesc                 .   t        g d      }t        g d      }t        g d      }t        j                         D ]V  }|j                         }t	        |d   t
              sJ |d   j                         sJ t	        |d   t
              sJ t	        |d   t
              sJ |d   |v sJ |d   t        j                  |d          t	        |d	   t
              sJ t	        |d   t
              sJ t	        |d
   t
              sJ |d
   |v sJ |d   |v sJ t	        |d   t
              sJ |j                         }|'t        j                  |      }|j                         sJ t        j                  |j                               }||k(  rWJ  y )N)runningpausedstartpausecontinuestopstopped)	automaticmanualdisabled)r#  r$  start_pendingpause_pendingcontinue_pendingstop_pendingr)  r(  display_namer*  statusr  binpath
start_typedescription)r   r>   win_service_iteras_dictr  r)  r+   r  r  
is_runningwin_service_getr(  )r@   valid_statusesvalid_start_typesservr4   r  r!  ss           r!   test_win_service_iterz"TestServices.test_win_service_iterH  s    
    CD 
  ++-D<<>Dd6lC000<%%'''d>2C888d:.444>^333E{&tE{+d9os333d:.444d<0#666%)::::>^333d=13777((*CNN3'||~%~&&tyy{3A199- .r    c                    t         j                  j                  j                  }t         j                  j                  j                  }t        t        j                               j                         }t        j                  t         j                        5 }t        j                  |dz          d d d        j                  j                  |dz   k(  sJ t        j                  |      }t        rddd|f}n|df}t        | }t        j                   d|      5  t        j                  t         j                        5  |j#                          d d d        d d d        t        j                   d|      5  t        j                  t         j                        5  |j%                          d d d        d d d        t        rddd|f}n|df}t        | }t        j                   d|      5  t        j                  t         j&                        5  |j#                          d d d        d d d        t        j                   d|      5  t        j                  t         j&                        5  |j%                          d d d        d d d        |j                         t)        |      v sJ |j+                         t)        |      v sJ |j                         t-        |      v sJ |j+                         t-        |      v sJ y # 1 sw Y   TxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   $xY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nz???r   r  z/psutil._psplatform.cext.winservice_query_statusr  z/psutil._psplatform.cext.winservice_query_config)r>   r  r   ERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextr6  r(  r   r  rH  r9  r  r   r  r   r   r2  r*  r  r)  r1  r   )r@   r@  rA  r(  cmservicer  r  s           r!   test_win_service_getz!TestServices.test_win_service_gett  s   ##@@ 	% %0055IIF++-.335]]6//0B""4%<0 1xx}}u,,, ((.ua!=>D0%8DD!ZZ=3
 v334  5

 ZZ=3
 v334  " 5
 ua!45D'/DD!ZZ=3
 v223  4

 ZZ=3
 v223  " 4
 ||~W---##%W555||~g...##%g666W 10 54
 
 54
 
 43
 
 43
 
s   L$L?LL7$L6L),L6,$MM!M$M),M=M)LL	LL&)L3	.L66M M	MMM&	"M))M2N)r   r   r   r>  rE  r   r    r!   r!  r!  F  s    *X27r    r!  ):r  r   r  r  r<   r-  rR  r5  r  r   r  warningsr>   r   psutil._compatr   r   r   psutil.testsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   catch_warningssimplefilterrE   r<  rX  rU   psutil._pswindowsr   r  r   rp   rq   r   r&   r;   r6   r8   rs   r   r  r  r  r  r!  r   r    r!   <module>rL     s.       	  	   
     ,     ! ' $ !   - * '   )  ' " 4	 	 	 	"h' 
# 1  K7D!@A3w'G  	n 	 B 8	  # ,%;/ %;PZ-_ Z-D> >LK/ K\B,_ B,P K7TN T 8Tn K7UN U 8Uz K7_7> _7 8_7u 
#	"s   :#H88I