
    9iu                     8   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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%  \RL                  RN                  r'\RP                  RS                  \(       + SS9\RP                  RS                  \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      r0 " S  S!\*5      r1 " S" S#\*5      r2\RP                  RS                  \(       + SS9 " S$ S%\5      5       r3\RP                  RS                  \(       + SS9 " S& S'\5      5       r4\RP                  RS                  \(       + SS9 " S( S)\5      5       r5g! , (       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_subproc)	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       Y/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/psutil/tests/test_windows.pyr   r   5   s     	r   r   c                     [         R                  " S5      (       d  [        R                  " S5      $ 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     <<()){{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S rSrg)TestSystemAPIs   c                     [        S5      n[        R                  " SS9R                  5       nU HJ  nSUR	                  SS5      R                  5       ;   a  M)  X1;  d  M0  [        R                  " U< S35      s  $    g )Nzipconfig /allT)perniczpseudo-interface -z+ nic wasn't found in 'ipconfig /all' output)r   rE   net_io_counterskeysreplacelowerr   fail)rG   r:   nicsnics       r   test_nic_namesTestSystemAPIs.test_nic_names   so    !%%T2779C!S[[c%:%@%@%BB~{{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                 J   [         R                  " SS9n[        R                  " 5       R	                  5       nU GHR  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*  [&        R(                  " SUR"                   S	U 35      s  s  $   GM7     [&        R(                  " S
U< 35      s  $    g ! [         a       GMg  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   r   )rG   ps_parts	wmi_partsps_partwmi_partusagewmi_frees          r   
test_disksTestSystemAPIs.test_disks   sV   ))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%{{%ejj\zB   - &0 {{%:7+#FGG3   - 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                 L   SnSnSnSnSnX20n[         R                  " SUR                  S9 n[        R                  R                  U5      U:X  d   e[        R                  R                  U5      U:X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)NzC:\Windows\TempzC:z\Device\HarddiskVolume1z\??\C:\Windows\Tempz$\Device\HarddiskVolume1\Windows\Tempz%psutil._pswindows.cext.QueryDosDeviceside_effect)r   patchgetrE   
_pswindowsconvert_dos_pathcalled)rG   winpathdriveletter
devicepathntpath1ntpath2devicesms           r   test_convert_dos_path_drive*TestSystemAPIs.test_convert_dos_path_drive  s    %0
 ,<+ZZ3
$$55g>'III$$55g>'III88O8
 
 
s   AB
B#c                     SnSnSn[         R                  R                  U5      U:X  d   e[         R                  R                  U5      U:X  d   e[         R                  R                  U5      U:X  d   eg )Nz\\localhost\C$\Windows\Tempz!\??\UNC\localhost\C$\Windows\Tempz%\Device\Mup\localhost\C$\Windows\Temp)rE   r   r   )rG   r   r   r   s       r   test_convert_dos_path_unc(TestSystemAPIs.test_convert_dos_path_unc  sn    4;?  11':gEEE  11':gEEE  11':gEEEr   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                    [         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   XC45       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3933yr   c                     [         R                  R                  R                  5       nUS-  n[	        [
        R                  5       U-
  5      S:  d   eg )Ng     @@g      ?)ctypeswindllkernel32GetTickCount64r   r   uptime)rG   mssecss      r   test_uptimeTestSystemAPIs.test_uptime7  sC     ]]##224F{4;;=4'(3...r   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   r   r      s    	K
2	7. ' ' H H< 
O 
O)(
F	;4/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)TestSensorsBatteryiD  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_batteryE  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_percentK  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_pluggedU  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   return_value)r   r   rE   r  r   rG   r   s     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   r0  s     r   test_emulate_power_connected/TestSensorsBattery.test_emulate_power_connectedf  ]    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.  r4  r0  s     r   test_emulate_power_charging.TestSensorsBattery.test_emulate_power_chargingp  r9  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  r5  POWER_TIME_UNKNOWNr   r0  s     r   test_emulate_secs_left_unknown1TestSensorsBattery.test_emulate_secs_left_unknownz  sY    ZZ4&
 &&(11V5N5NNN88O8
 
 
r:  r   N)r   r   r   r   r  r   r|   r}   r   r#  r)  r1  r7  r=  rB  r   r   r   r   r  r  D  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)TestProcessi  c                 6    [        5       R                  U l        g r-   r   pidclss    r   
setUpClassTestProcess.setUpClass      /%%r   c                 .    [        U R                  5        g r-   r   rH  rI  s    r   tearDownClassTestProcess.tearDownClass      #''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_24  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)N   Systemg        r&  r   r*   >   win7vistawin-7)
rE   rT  namestrusernamecreate_timememory_inforV  platformuname)rG   rY  rss_vmss       r   test_special_pidTestProcess.test_special_pid  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   rT  rH  r   rU  
ValueErrorsend_signalsignalSIGINTrX  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   rT  rC   getpidnum_handlesrM   OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSECloseHandle)rG   rY  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   rT  r   rH  ro  rp  CTRL_C_EVENTCTRL_BREAK_EVENTrW  waitr   rU  NoSuchProcessrX  s     r   test_ctrl_signalsTestProcess.test_ctrl_signals  s    NN4--/334	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      $ [        R                  " 5       R                  5       U:X  d   eg )N$zrunning as service account)
rM   GetUserNameExrx  NameSamCompatibleendswithr   r$   rE   rT  rd  )rG   rb  s     r   test_usernameTestProcess.test_username  sW    %%h&@&@A== ;;;<<~~((*d222r   c                 0   [         R                  " SS[        R                  " 5       5      R	                  5       nSR                  [        R                  " 5       R                  5       5      nUR                  SS5      nUR                  SS5      nX:X  d   eg )Nz[ ]+r   r!   r)   )
resubrM   GetCommandLiner3   r4   rE   rT  r&   r   rO   s      r   test_cmdlineTestProcess.test_cmdline  sv    FF7C)@)@)BCIIK	xx 0 8 8 :;
 %%c2.	#++C4(((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   rw  rx  ry  rz  rC   ru  
addCleanupr{  win32processGetPriorityClassrE   rT  nicerG   r}  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   rw  rx  ry  rz  rH  r  r{  r  GetProcessMemoryInforE   rT  rf  	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpagefilepeak_pagefileri  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   rw  rx  ry  rz  rH  r  r{  rE   rT  r   r  r  GetExitCodeProcess)rG   r}  rY  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   rw  rx  ry  rz  rH  r  r{  r  GetProcessAffinityMaskrE   rT  cpu_affinity)rG   r  r}  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   rw  rx  ry  rz  rC   ru  r  r{  r  GetProcessIoCountersrE   rT  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      )r  ctypes.wintypesr  r  rw  rH  r  r{  wintypesDWORDGetProcessHandleCountbyrefvaluerE   rT  rv  )rG   r  ry  r}  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_cwdr   z
time.sleeprL   )OSErrorwinerrorr   r   rE   rT  r   rU  rV  cwd
call_count)rG   excr   rY  s       r   test_error_partial_copy#TestProcess.test_error_partial_copyA  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   _psplatformrT  r   rU  r  exe)rG   rH  rX   s      r   test_exeTestProcess.test_exeL  sV     kkmB%'!!))#.]]6//0HHJ 100s   A99
Br   N)r   r   r   r   classmethodrK  rP  rZ  rk  rr  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rE  rE    st    & &  
")
	)	33	).)96	))K)$	!r   rE  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)TestProcessWMIiU  z%Compare Process API results with WMI.c                 6    [        5       R                  U l        g r-   rG  rI  s    r   rK  TestProcessWMI.setUpClassX  rM  r   c                 .    [        U R                  5        g r-   rO  rI  s    r   rP  TestProcessWMI.tearDownClass\  rR  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   rH  rE   rT  rb  CaptionrG   r`   rY  s      r   	test_nameTestProcessWMI.test_name`  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   rH  rE   rT  r  r   ExecutablePathr  s      r   r  TestProcessWMI.test_exef  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   rH  rE   rT  r4   r&   CommandLiner   r  s      r   r  TestProcessWMI.test_cmdlinep  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   rH  rE   rT  GetOwnerrd  )rG   r`   rY  domain_rd  s         r   r  TestProcessWMI.test_usernameu  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   rH  rE   rT  rf  ri  rB   r  )rG   r`   rY  ri  s       r   test_memory_rssTestProcessWMI.test_memory_rss|  s`    GGI##dhh#7:NN488$mmo!!c!**++++r   c                 L   [         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  [        R                  " SU SU 35      $ g )Nr  r   r  zwmi=z	, psutil=)r\   r]   r   rH  rE   rT  rf  r  rB   PageFileUsager   r   )rG   r`   rY  r  	wmi_usages        r   test_memory_vmsTestProcessWMI.test_memory_vms  s    GGI##dhh#7:NN488$mmo!!
 (	)d"233;;i[	#?@@ 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   rH  rE   rT  rc  CreationDater7   timestrftime	localtimere  )rG   r`   rY  wmic_createpsutil_creates        r   test_create_timeTestProcessWMI.test_create_time  s    GGI##dhh#7:NN488$!....s3A67DNN1==?;
 +++r   r   N)r   r   r   r   __doc__r  rK  rP  r  r   r|   r}   r   r  r  r  r   r  r	  r  r   r   r   r   r  r  U  s    /& &  % [[B  ;;G
( , , 
A 
A,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-   rG  rI  s    r   rK  (TestDualProcessImplementation.setUpClass  rM  r   c                 .    [        U R                  5        g r-   rO  rI  s    r   rP  +TestDualProcessImplementation.tearDownClass  rR  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   rT  rH  rf  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   rT  rH  re  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   rT  rH  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   rT  rH  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   rT  rH  rv  r   r   r  r   )rG   rv  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   
isinstancerV  r  )rG   rH  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  rK  rP  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communicater  rc  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      $ [
        (       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setUprK  r   r$   r   sys
executablepython64python32rC   rD   copyrc  ru  r   	test_argsrC  rE  proc32proc64)rG   other_pythonrO  	__class__s      r   rR  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-   )rQ  tearDownrY  rG  rZ  )rG   r\  s    r   r_  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   rT  rY  rH  rn   r&   rX  rX  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 rb  )rE   rT  rZ  rH  rn   r&   rX  rX  s     r   test_cmdline_64%RemoteProcessTestCase.test_cmdline_643  rf  r   c                     [         R                  " U R                  R                  5      nUR	                  5       [
        R                  " 5       :X  d   eg r-   )rE   rT  rY  rH  r  rC   getcwdrX  s     r   test_cwd_32!RemoteProcessTestCase.test_cwd_328  2    NN4;;??+uuw"))+%%%r   c                     [         R                  " U R                  R                  5      nUR	                  5       [
        R                  " 5       :X  d   eg r-   )rE   rT  rZ  rH  r  rC   rk  rX  s     r   test_cwd_64!RemoteProcessTestCase.test_cwd_64<  rn  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 )NrN  )rE   rT  rY  rH  rD   rc  rC   ru  )rG   rY  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   rT  rZ  rH  rD   rV  rX  s     r   test_environ_64%RemoteProcessTestCase.test_environ_64F  s>    NN4;;??+	IIK"" 		s   = AA)rY  rZ  rV  rU  )r   r   r   r   r  staticmethodrK  rX  rR  r_  rd  rh  rl  rp  rt  rw  r   __classcell__)r\  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)TestServicesiS  c                    1 Skn1 Skn1 Skn[         R                  " 5        GH  nUR                  5       S:X  a  M  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>   r  r  r  stop_pendingpause_pendingstart_pendingcontinue_pendingWaaSMedicSvcrb  display_namerd  statusrH  binpath
start_typedescription)rE   win_service_iterrb  as_dictr6  rc  r3   rT  rH  
is_runningwin_service_get)rG   valid_statusesvalid_start_typesservr;   rH  rY  ss           r   test_win_service_iter"TestServices.test_win_service_iterU  s   
 @
 ++-Dyy{n, <<>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97 .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  rb  r   rU  r  r  r  r  r  r   r   r  rd  rV  rc  r  repr)rG   r  r  rb  cmservicer  s          r   test_win_service_get!TestServices.test_win_service_get  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   r|  r|  S  s    /b,7r   r|  )6r  r  r   rB  rC   rg  r  r"   rp  rC  rS  r  warningsunittestr   rE   r   psutil.testsr   r   r   r   r	   r
   r   r   r   r   r   r   catch_warningssimplefilterrM   rx  r  r\   psutil._pswindowsr   r  r   r|   r}   r   r'   rB   r<   r>   r   r  rE  r  r  r<  r|  r   r   r   <module>r     s       	  	    
      ' $ !  - * '  )  & "
4		 	 	"h' 
# 1  K7D!@A	n 	 B 8	  # ,%;/ %;Pt/_ t/x> >LH/ HVB,_ B,P K7TN T 8Tn K7UN U 8Uz K7^7> ^7 8^7[ 
#	"s   *#H


H