
    /h                     8   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m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 erIesG ej                    5   ej        d           ddlZddl Z ddl!Z!ddl"Z"ddd           n# 1 swxY w Y   erddl#m$Z$ ej%        j&        Z&ej'        (                    e d          ej'        (                    ed           G d de                                  Z)d Z*e+fdZ, G d de)          Z- G d de)          Z. G d de)          Z/ G d  d!e)          Z0 G d" d#e)          Z1ej'        (                    e d           G d$ d%e                      Z2ej'        (                    e d           G d& d'e                      Z3ej'        (                    e d           G d( d)e                      Z4dS )*zWindows specific tests.    N)mock)WINDOWS)GITHUB_ACTIONS)HAS_BATTERY)IS_64BIT)PYPY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)pytest)retry_on_failure)sh)spawn_testproc)	terminateignore)convert_oserrorzWINDOWS onlyreasonzpywin32 not available on PYPYc                       e Zd ZdS )WindowsTestCaseN)__name__
__module____qualname__     L/var/www/html/venv/lib/python3.11/site-packages/psutil/tests/test_windows.pyr   r   5   s         	Dr   r   c                 |    t          j        d          st          j        d          d|  d}t	          |          S )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$   ;   sR     <()) :k8999	=58	= 	= 	=  g;;r   c                 T   t          d|  d|                                           }d                    |                                dd                                                   }<d|v r-t	          fd|                                D                       S  |          S |S )zCurrently not used, but available just in case. Usage:

    >>> wmic("Win32_OperatingSystem", "FreePhysicalMemory")
    2134124534
    z
wmic path z get     N,c              3   .   K   | ]} |          V  d S Nr   ).0x	converters     r   	<genexpr>zwmic.<locals>.<genexpr>T   s+      <<!1<<<<<<r   )r   stripjoin
splitlinestuplesplit)pathwhatr-   outdatas     `  r   wmicr8   J   s     +$++T++
,
,
2
2
4
4C773>>##ABB'((..00D$;;<<<<tzz||<<<<<<9T??"r   c                       e Zd Zej                            dej        vd          d             Zd Z	d Z
d Zd Zd	 Zd
S )TestCpuAPIsNUMBER_OF_PROCESSORSz-NUMBER_OF_PROCESSORS env var is not availabler   c                 v    t          t          j        d                   }|t          j                    k    sJ d S )Nr;   )intosenvironpsutil	cpu_count)selfnum_cpuss     r   &test_cpu_count_vs_NUMBER_OF_PROCESSORSz2TestCpuAPIs.test_cpu_count_vs_NUMBER_OF_PROCESSORSa   s9     rz"89::6+--------r   c                 n    t          j                    d         }t          j                    }||k    sJ d S )N   )win32apiGetSystemInfor@   rA   rB   	sys_valuepsutil_values      r   test_cpu_count_vs_GetSystemInfoz+TestCpuAPIs.test_cpu_count_vs_GetSystemInfok   s<     *,,Q/	'))L((((((r   c                     t          j                    }t          d |                                D                       }t	          j                    |k    sJ d S )Nc              3   $   K   | ]}|j         V  d S r*   )NumberOfLogicalProcessorsr+   procs     r   r.   z<TestCpuAPIs.test_cpu_count_logical_vs_wmi.<locals>.<genexpr>t   s6       
 
/3D*
 
 
 
 
 
r   wmiWMIsumWin32_Processorr@   rA   )rB   wprocss      r   test_cpu_count_logical_vs_wmiz)TestCpuAPIs.test_cpu_count_logical_vs_wmir   sf    GII 
 
787H7H7J7J
 
 
 
 
 !!U******r   c                     t          j                    }t          d |                                D                       }t	          j        d          |k    sJ d S )Nc              3   $   K   | ]}|j         V  d S r*   )NumberOfCoresrP   s     r   r.   z:TestCpuAPIs.test_cpu_count_cores_vs_wmi.<locals>.<genexpr>{   s%      GG4D&GGGGGGr   F)logicalrR   )rB   rW   coress      r   test_cpu_count_cores_vs_wmiz'TestCpuAPIs.test_cpu_count_cores_vs_wmiy   sZ    GIIGG13D3D3F3FGGGGG...%777777r   c                 x    t          j                    t          t          j        d                    k    sJ d S )NT)percpu)r@   rA   len	cpu_timesrB   s    r   test_cpu_count_vs_cpu_timesz'TestCpuAPIs.test_cpu_count_vs_cpu_times~   s8    !!S)9)F)F)F%G%GGGGGGGr   c                     t          j                    }|                                d         }|j        t	          j                    j        k    sJ |j        t	          j                    j        k    sJ d S Nr   )	rS   rT   rV   CurrentClockSpeedr@   cpu_freqcurrentMaxClockSpeedmax)rB   rW   rQ   s      r   test_cpu_freqzTestCpuAPIs.test_cpu_freq   sg    GII  ""1%%):):)BBBBB!V_%6%6%:::::::r   N)r   r   r   r   markskipifr>   r?   rD   rL   rY   r_   re   rm   r   r   r   r:   r:   `   s        [bj0>   . .	 .) ) )+ + +8 8 8
H H H; ; ; ; ;r   r:   c                       e Zd Zd Zd Zd Zd Zd Z e            d             Z	 e            d             Z
 e            d             Zd	 Zd
 Zd Zd ZdS )TestSystemAPIsc                 
   t          d          }t          j        d                                          }|D ]I}d|                    dd                                          v r-||vr|                     |d          Jd S )Nzipconfig /allT)perniczpseudo-interface -z+ nic wasn't found in 'ipconfig /all' output)r   r@   net_io_counterskeysreplacelowerfail)rB   r6   nicsnics       r   test_nic_nameszTestSystemAPIs.test_nic_names   s    !!%T2227799 	 	C!S[[c%:%:%@%@%B%BBB#~~iiIII   	 	r   c                     t          j                                                    d         }t          |j                  t          j                    j        k    sJ d S rg   )rS   rT   Win32_ComputerSystemr=   TotalPhysicalMemoryr@   virtual_memorytotalrB   rW   s     r   test_total_phymemz TestSystemAPIs.test_total_phymem   sL    GII**,,Q/1())V-B-D-D-JJJJJJJr   c                     t          j                                                    d         }t          t	          |j                  t          j                    j        z
            t          k     sJ d S rg   )
rS   rT   Win32_PerfRawData_PerfOS_Memoryabsr=   AvailableBytesr@   r   freer
   r   s     r   test_free_phymemzTestSystemAPIs.test_free_phymem   sf    GII5577:A$%%(=(?(?(DDEE           r   c                    t          j                                                    d         }t          |j                  t          j                    j        z
  t          j                    j        k    sJ t          j                    j        dk    r<t          j                    j	        dk    sJ t          j                    j
        dk    sJ d S d S rg   )rS   rT   r   r=   CommitLimitr@   r   r   swap_memoryr   usedr   s     r   test_total_swapmemz!TestSystemAPIs.test_total_swapmem   s    GII5577:!6!8!8!>>!##)* * * * %**%'',1111%'',1111 +*11r   c                    t          j                    j        dk    rt          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 d S d S )Nr   _Total)Named   rF   )r@   r   r   rS   rT   #Win32_PerfRawData_PerfOS_PagingFiler=   PercentUsagePercentUsage_Basepercentr   )rB   rW   percentSwaps      r   test_percent_swapmemz#TestSystemAPIs.test_percent_swapmem   s    %))		==8=LLQOAan--3c!:M6N6NNK %''/14444v)++3kABBQFFFF%''/36666 *) 76r   c                     t          j                                                    }d |D             }t          t	          j                              }||k    sJ d S )Nc                     h | ]	}|j         
S r   	ProcessIdr+   r,   s     r   	<setcomp>z+TestSystemAPIs.test_pids.<locals>.<setcomp>   s    +++AAK+++r   )rS   rT   Win32_Processsetr@   pids)rB   rW   wmi_pidspsutil_pidss       r   	test_pidszTestSystemAPIs.test_pids   sX     GII##%%+++++&+--((;&&&&&&r   c                    t          j        d          }t          j                                                    }|D ]}|D ] }|j                            dd          |j        k    r|j        s nd|j	        v r n|j        
                    d          r n	 t          j        |j                  }n# t          $ r Y  nw xY w|j        t          |j                  k    sJ t          |j                  }|j        |k    sJ t%          |j        |z
            dk    r |                     d|j         d	|            n|                     d
|          !d S )NTall\r&   cdromA:i   zpsutil=z, wmi=zcan't find partition )r@   disk_partitionsrS   rT   Win32_LogicalDiskdevicerx   DeviceID
mountpointopts
startswith
disk_usageFileNotFoundErrorr   r=   Size	FreeSpacer   r   rz   )rB   ps_parts	wmi_partsps_partwmi_partusagewmi_frees          r   
test_diskszTestSystemAPIs.test_disks   s   )d333GII//11	 	E 	EG% E E>))$33x7HHH"- ',..)44T::  & 1'2D E E,    !;#hm*<*<<<<<"8#566H :11115:0114DDD"ii(N%*(N(NH(N(NOOOE' I* ii C C CDDD/	E 	Es   B44
CC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    sJ d S )Nr   r   r'   )r@   r   r   rG   GetDiskFreeSpaceExr   r   r   r   r	   r   r   )rB   diskrJ   rK   s       r   test_disk_usagezTestSystemAPIs.test_disk_usage   s    *,, 		O 		OD$)## 3DODDI!,T_==Ly|l&7788;OOOOOIaL<#55669MMMMM$(:\=N(NNNNNN		O 		Or   c                     d t          j                                        d          D             }d t          j        d          D             }||k    sJ d S )Nc                 F    g | ]}||                     d           |dz   S )r   r   )r   r   s     r   
<listcomp>z7TestSystemAPIs.test_disk_partitions.<locals>.<listcomp>   sH     
 
 

 d++
H
 
 
r   z\ c                 P    g | ]#}|j                             d           |j         $S )r   )r   r   r   s     r   r   z7TestSystemAPIs.test_disk_partitions.<locals>.<listcomp>   s@     
 
 
<**400
L
 
 
r   Tr   )rG   GetLogicalDriveStringsr3   r@   r   rI   s      r   test_disk_partitionsz#TestSystemAPIs.test_disk_partitions   s|    
 
466<<XFF
 
 
	

 
+555
 
 

 L((((((r   c                 T   t          t                                                    }t          j                                                    }t                      }|D ]6}|                    |j                   |                    |j                   7||z  sJ d| d|             d S )Nzno common entries in z, )	r   cextnet_if_statsrS   rT   Win32_NetworkAdapteraddr   NetConnectionID)rB   ps_nameswmi_adapters	wmi_nameswmi_adapters        r   test_net_if_statsz TestSystemAPIs.test_net_if_stats   s    t((**++wyy5577EE	' 	7 	7KMM+*+++MM+56666y 	; 	;:8::y::	; 	; 	; 	; 	;r   c                    t          j                                                    }|d         j                            d          d         }t
          j                            |d          }t
          j                            t          j	                              }t          ||z
                                            }|dk    sJ d S )Nr   .%Y%m%d%H%M%SrF   )rS   rT   Win32_OperatingSystemLastBootUpTimer3   datetimestrptimefromtimestampr@   	boot_timer   total_seconds)rB   wmi_oswmi_btime_strwmi_btime_dt	psutil_dtdiffs         r   test_boot_timezTestSystemAPIs.test_boot_time  s    0022q	066s;;A>(11>
 
 %33F4D4F4FGG	L9,;;==>>qyyyyyyr   c                 H   t          j        dd          5  t          j                    dk    sJ 	 d d d            n# 1 swxY w Y   t          j        dd          5  t          j                    dk    sJ 	 d d d            n# 1 swxY w Y   t          j        dd          5  t          j                    dk    sJ 	 d d d            n# 1 swxY w Y   t          j        dd          5  t          j                    dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nz psutil._pswindows.cext.boot_timerF   return_value      iM  )r   patchr@   r   rd   s    r   test_boot_time_fluctuationz)TestSystemAPIs.test_boot_time_fluctuation  s1   Z:KKK 	+ 	+#%%*****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+Z:KKK 	+ 	+#%%*****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+Z:KKK 	+ 	+#%%*****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+Z:MMM 	- 	-#%%,,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-sE   >AABB
B
'CCC/DDDN)r   r   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   rq      s       	 	 	K K K
 
 
2 2 2	7 	7 	7. ' ' ' E E E8 
O 
O 
O) ) )	; 	; 	;  	- 	- 	- 	- 	-r   rq   c                       e Zd Zd Zej                            e d          d             Zej                            e d          d             Z	d Z
d Zd Zd	 Zd
S )TestSensorsBatteryc                     t          j                    d         rt          j                    J d S t          j                    J d S )NSystemBatteriesPresent)rG   GetPwrCapabilitiesr@   sensors_batteryrd   s    r   test_has_batteryz#TestSensorsBattery.test_has_battery'  sO    &(()AB 	4)++77777)++33333r   z
no batteryr   c                     t          j                    }|                    d          d         }t          j                    }t          |j        |j        z
            dk     sJ d S )Nselect * from Win32_Batteryr   r'   )rS   rT   queryr@   r   r   r   EstimatedChargeRemainingrB   rW   battery_wmibattery_psutils       r   test_percentzTestSensorsBattery.test_percent-  si    GIIgg;<<Q?/11&)MMNN     r   c                     t          j                    }|                    d          d         }t          j                    }|j        |j        dk    k    sJ d S )Nr   r      )rS   rT   r   r@   r   power_pluggedBatteryStatusr   s       r   test_power_pluggedz%TestSensorsBattery.test_power_plugged7  sV    GIIgg;<<Q?/11 +0IQ0NOOOOOOr   c                     t          j        dd          5 }t          j                    J |j        sJ 	 d d d            d S # 1 swxY w Y   d S )N&psutil._pswindows.cext.sensors_battery)r      r   r   r   )r   r   r@   r   calledrB   ms     r   test_emulate_no_batteryz*TestSensorsBattery.test_emulate_no_battery@  s    Z4'
 
 
 	 )++3338OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     t          j        dd          5 }t          j                    j        t          j        k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )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_connectedH      Z4<
 
 
 	&((1./ / / / 8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   2AAAc                     t          j        dd          5 }t          j                    j        t          j        k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   )r      r   r   r   r  r  s     r   test_emulate_power_chargingz.TestSensorsBattery.test_emulate_power_chargingR  r
  r  c                     t          j        dd          5 }t          j                    j        t          j        k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )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_unknown\  s    Z4&
 
 
 	 &((1V5NNNNN8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  N)r   r   r   r   r   rn   ro   r   r   r   r  r	  r  r  r   r   r   r   r   &  s        4 4 4 [K==
 
 >=
 [K==P 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dS )TestProcessc                 6    t                      j        | _        d S r*   r   pidclss    r   
setUpClasszTestProcess.setUpClassm       ""&r   c                 .    t          | j                   d S r*   r   r  r  s    r   tearDownClasszTestProcess.tearDownClassq      #'r   c                     t          j        d          }t          j        t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S rg   )r@   Processr   raisesAccessDeniedkillrB   ps     r   test_issue_24zTestProcess.test_issue_24u  s    N1]6.// 	 	FFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                    t          j        d          }|                                dk    sJ t          |           |                                 |                                dk    sJ 	 |                                d d         \  }}|dk    sJ d S # t           j        $ r  t          j	                    d         dvr Y d S w xY w)Nr   Systemg        r   r   r'   >   win-7win7vista)
r@   r!  namestrusernamecreate_timememory_infor#  platformuname)rB   r&  rss_vmss       r   test_special_pidzTestProcess.test_special_pidz  s    N1vvxx8#### 	A	

}}#%%%%	+IC 777777 " 	 	 	~"*DDD EDD	s   -B +CCc                     t          j        | j                  }t          j        t
                    5  |                    t          j                   d d d            d S # 1 swxY w Y   d S r*   )	r@   r!  r  r   r"  
ValueErrorsend_signalsignalSIGINTr%  s     r   test_send_signalzTestProcess.test_send_signal  s    N48$$]:&& 	) 	)MM&-(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s    A  A$'A$c                    t          j        t          j                              }|                                }t          j        t          j        t          j	        t          j                              }|                                }||dz   k    sJ t          j
        |           |                                |k    sJ d S )Nr'   )r@   r!  r>   getpidnum_handlesrG   OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSECloseHandle)rB   r&  beforehandleafters        r   test_num_handles_incrementz&TestProcess.test_num_handles_increment  s    N29;;''%.	
 
 
""""V$$$}}&((((((r   c                 ~   t          j        |                                 j                  }|                    t
          j                   |                    t
          j                   |                                 |	                                 t          j        t           j                  5  |                    t
          j                   d d d            n# 1 swxY w Y   t          j        t           j                  5  |                    t
          j                   d d d            d S # 1 swxY w Y   d S r*   )r@   r!  r   r  r9  r:  CTRL_C_EVENTCTRL_BREAK_EVENTr$  waitr   r"  NoSuchProcessr%  s     r   test_ctrl_signalszTestProcess.test_ctrl_signals  sm   N4..00455	f)***	f-...		]6/00 	/ 	/MM&-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/]6/00 	3 	3MM&1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s$   0 CC #C  D22D69D6c                     t          j        t          j                  }|                    d          rt          j        d          t          j                    	                                |k    sJ d S )N$zrunning as service account)
rG   GetUserNameExrA  NameSamCompatibleendswithr   r!   r@   r!  r/  )rB   r-  s     r   test_usernamezTestProcess.test_username  sg    %h&@AA== 	< +:;;;~((**d222222r   c                 ^   t          j        ddt          j                                                              }d                    t          j                                                              }|d         dcxk    r|d         k    rn n|	                    ddd          }||k    sJ d S )Nz[ ]+rt   r   r   r&   r   )
resubrG   GetCommandLiner/   r0   r@   r!  r#   rx   rI   s      r   test_cmdlinezTestProcess.test_cmdline  s    F7C)@)B)BCCIIKK	xx 0 0 8 8 : :;;Q<31111,q/11111
 "))#r155IL((((((r   c                 >   t          j        t          j        t          j        t          j                              }|                     t           j        |           t          j
        |          }t          j                                                    }||k    sJ d S r*   )rG   r@  rA  rB  rC  r>   r>  
addCleanuprD  win32processGetPriorityClassr@   r!  nicerB   rF  rJ   rK   s       r   	test_nicezTestProcess.test_nice  s    %.	
 
 	,f555 1&99	~'',,..y((((((r   c                    t          j        t          j        t          j        | j                  }|                     t           j        |           t          j	        |          }t          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 d S )	NPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsage)rG   r@  rA  rB  rC  r  r[  rD  r\  GetProcessMemoryInfor@   r!  r1  	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpagefilepeak_pagefiler4  vmsr_  s       r   test_memory_infozTestProcess.test_memory_info  s   %.
 
 	,f555 5f==	~dh//;;==-.,2HHHHH)*l.?????/0+, , , , ./<3JJJJJ23./ / / / ./<3MMMMM)\-BBBBB,-1KKKKK<#44444<#8888888r   c                 ^   t          j        t          j        t          j        | j                  }|                     t           j        |           t          j	        | j                  }|
                                 |                                }t          j        |          }||k    sJ d S r*   )rG   r@  rA  rB  rC  r  r[  rD  r@   r!  r   rL  r\  GetExitCodeProcess)rB   rF  r&  rK   rJ   s        r   	test_waitzTestProcess.test_wait  s    %.
 
 	,f555N48$$	vvxx 3F;;	y((((((r   c                 V   d }t          j        t          j        t          j        | j                  }|                     t           j        |            |t          j	        |          d                   }t          j        | j                                                  }||k    sJ d S )Nc                 :      fdt          d          D             S )Nc                 $    g | ]}d |z  z  
|S )r'   r   )r+   ir,   s     r   r   zGTestProcess.test_cpu_affinity.<locals>.from_bitmask.<locals>.<listcomp>  s&    999!Q!VqL9A999r   @   )range)r,   s   `r   from_bitmaskz3TestProcess.test_cpu_affinity.<locals>.from_bitmask  s#    9999uRyy9999r   r   )rG   r@  rA  rB  rC  r  r[  rD  r\  GetProcessAffinityMaskr@   r!  cpu_affinity)rB   r~  rF  rJ   rK   s        r   test_cpu_affinityzTestProcess.test_cpu_affinity  s    	: 	: 	: %.
 
 	,f555 L/77:
 
	 ~dh//<<>>y((((((r   c                    t          j        t          j        t          j        t          j                              }|                     t           j        |           t          j
        |          }t          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 d S )NReadOperationCountWriteOperationCountReadTransferCountWriteTransferCountOtherOperationCountOtherTransferCount)rG   r@  rA  rB  rC  r>   r>  r[  rD  r\  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5 5f==	~''3355&)4H*IIIII'95J+KKKKK&)4G*HHHHH'95I+JJJJJ'95J+KKKKK'95I+JJJJJJJr   c                    dd l }dd l}d}|j        j                            |d| j                  }|                     |j        j        j        |           |j        	                                }|j        j        
                    ||                    |                     |j        }t          j        | j                                                  }||k    sJ d S )Nr      )ctypesctypes.wintypeswindllkernel32r@  r  r[  rD  wintypesDWORDGetProcessHandleCountbyrefvaluer@   r!  r?  )rB   r  rB  rF  hndcntrJ   rK   s          r   test_num_handleszTestProcess.test_num_handles  s    $)!'33%q$(
 
 	.:FCCC&&((44FLL((	
 	
 	
 L	~dh//;;==y((((((r   c                    t                      }d|_        t          j        d|          5  t          j        d          5 }t	          j                    }t          j        t          j                  5  |	                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j
        dk    sJ d S )Ni+  z psutil._psplatform.cext.proc_cwdside_effectz
time.sleeprF   )OSErrorwinerrorr   r   r@   r!  r   r"  r#  cwd
call_count)rB   excr  r&  s       r   test_error_partial_copyz#TestProcess.test_error_partial_copy&  s|   iiZ:LLL 	 	L)) QN$$]6#677  EEGGG                            	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 |q      sY   C2B+3BB+BB+BB+C+B/	/C2B/	3CC	Cc                    t          j                    d         dz   }t           j                            |          }t	          j        t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S )Nr  i )r@   r   _psplatformr!  r   r"  rM  exe)rB   r  rQ   s      r   test_exezTestProcess.test_exe1  s     kmmB%'!))#..]6/00 	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A<<B B N)r   r   r   classmethodr  r  r'  r6  r<  rH  rN  rT  rY  r`  rt  rw  r  r  r  r  r  r   r   r   r  r  l  s,       ' ' ['   [  
  ") ) )
	) 	) 	)	3 	3 	33 3 3	) 	) 	)4) ) )9 9 96	) 	) 	)) ) )K K K) ) )$	! 	! 	!    r   r  c                       e Zd ZdZed             Zed             Zd Zej	        
                    ed          d             Zd Zd	 Z e            d
             Z e            d             Zd ZdS )TestProcessWMIz%Compare Process API results with WMI.c                 6    t                      j        | _        d S r*   r  r  s    r   r  zTestProcessWMI.setUpClass=  r  r   c                 .    t          | j                   d S r*   r  r  s    r   r  zTestProcessWMI.tearDownClassA  r  r   c                     t          j                                        | j                  d         }t	          j        | j                  }|                                |j        k    sJ d S Nr   r   )rS   rT   r   r  r@   r!  r-  CaptionrB   rW   r&  s      r   	test_namezTestProcessWMI.test_nameE  sW    GII##dh#77:N48$$vvxx19$$$$$$r   z!unreliable path on GITHUB_ACTIONSr   c                 "   t          j                                        | j                  d         }t	          j        | j                  }|                                                                |j                                        k    sJ d S r  )	rS   rT   r   r  r@   r!  r  ry   ExecutablePathr  s      r   r  zTestProcessWMI.test_exeK  sp     GII##dh#77:N48$$ uuww}}!"2"8"8":":::::::r   c                 (   t          j                                        | j                  d         }t	          j        | j                  }d                    |                                          |j        	                    dd          k    sJ d S )Nr   r   rt   r   r&   )
rS   rT   r   r  r@   r!  r0   r#   CommandLinerx   r  s      r   rY  zTestProcessWMI.test_cmdlineU  ss    GII##dh#77:N48$$xx		$$(=(=c2(F(FFFFFFFr   c                    t          j                                        | j                  d         }t	          j        | j                  }|                                \  }}}| d| }|                                |k    sJ d S )Nr   r   r   )rS   rT   r   r  r@   r!  GetOwnerr/  )rB   rW   r&  domain_r/  s         r   rT  zTestProcessWMI.test_usernameZ  s|    GII##dh#77:N48$$jjll8****zz||x''''''r   c                    t          j                                        | j                  d         }t	          j        | j                  }|                                j        }|t          |j	                  k    sJ d S r  )
rS   rT   r   r  r@   r!  r1  r4  r=   rc  )rB   rW   r&  r4  s       r   test_memory_rsszTestProcessWMI.test_memory_rssa  sh    GII##dh#77:N48$$mmoo!c!*++++++++r   c                 >   t          j                                        | j                  d         }t	          j        | j                  }|                                j        }t          |j	                  }|||dz  hvr| 
                    d| d|           d S )Nr   r   r  zwmi=z	, psutil=)rS   rT   r   r  r@   r!  r1  rs  r=   PageFileUsagerz   )rB   rW   r&  rs  	wmi_usages        r   test_memory_vmszTestProcessWMI.test_memory_vmsh  s    GII##dh#77:N48$$mmoo!
 ((	y)d"2333))<9<<s<<=== 43r   c                 x   t          j                                        | j                  d         }t	          j        | j                  }t          |j                            d          d                   }t          j
        dt          j        |                                                    }||k    sJ d S )Nr   r   r   r   )rS   rT   r   r  r@   r!  r.  CreationDater3   timestrftime	localtimer0  )rB   rW   r&  wmic_createpsutil_creates        r   test_create_timezTestProcessWMI.test_create_timeu  s    GII##dh#77:N48$$!...s33A677DN1==??;;
 
 m++++++r   N)r   r   r   __doc__r  r  r  r  r   rn   ro   r   r  rY  rT  r   r  r  r  r   r   r   r  r  :  s       //' ' ['   [% % % [B   ; ; ;G G G
( ( ( , , , 
> 
> 
>, , , , ,r   r  c                   b    e Zd ZdZed             Zed             Zd Zd Zd Z	d Z
d Zd	 Zd
S )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        | _        d S r*   r  r  s    r   r  z(TestDualProcessImplementation.setUpClass  r  r   c                 .    t          | j                   d S r*   r  r  s    r   r  z+TestDualProcessImplementation.tearDownClass  r  r   c                 0   t          j        | j                                                  }t	          j        dt                    5 }t          j        | j                                                  }t          |          t          |          k    sJ t          t          |                    D ]B}||         dk    sJ ||         dk    sJ t          ||         ||         z
            dk     sJ C|j
        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz(psutil._psplatform.cext.proc_memory_infor  r   i   )r@   r!  r  r1  r   r   PermissionErrorrb   r}  r   r  )rB   mem_1funmem_2r{  s        r   rt  z.TestDualProcessImplementation.test_memory_info  sS   tx((4466Z6'
 
 
 
	 N48,,88::Eu::U++++3u::&& 6 6Qx1}}}}Qx1}}}}58eAh.//#55555:
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   B6DDDc                 :   t          j        | j                                                  }t	          j        dt                    5 }t          j        | j                                                  |k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )N"psutil._psplatform.cext.proc_timesr  )r@   r!  r  r0  r   r   r  r  )rB   ctimer  s      r   r  z.TestDualProcessImplementation.test_create_time  s    tx((4466Z0'
 
 
 	 >$(++7799UBBBB:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   ;BBBc                    t          j        | j                                                  }t	          j        dt                    5 }t          j        | j                                                  }|j        sJ t          |j	        |j	        z
            dk     sJ t          |j
        |j
        z
            dk     sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  g{Gz?)r@   r!  r  rc   r   r   r  r  r   usersystem)rB   cpu_times_1r  cpu_times_2s       r   test_cpu_timesz,TestDualProcessImplementation.test_cpu_times  s)   nTX..88::Z0'
 
 
 	G  .22<<>>K:{'+*::;;dBBBB{)K,>>??$FFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   A9CCCc                    t          j        | j                                                  }t	          j        dt                    5 }t          j        | j                                                  }t          t          |                    D ]&}t          ||         ||         z
            dk     sJ '|j
        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz(psutil._psplatform.cext.proc_io_countersr  rF   )r@   r!  r  r  r   r   r  r}  rb   r   r  )rB   io_counters_1r  io_counters_2r{  s        r   r  z.TestDualProcessImplementation.test_io_counters  s   tx00<<>>Z6'
 
 
 	 "N4844@@BBM3}--.. D D=+mA.>>??!CCCCC:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A8CCCc                 :   t          j        | j                                                  }t	          j        dt                    5 }t          j        | j                                                  |k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz(psutil._psplatform.cext.proc_num_handlesr  )r@   r!  r  r?  r   r   r  r  )rB   r?  r  s      r   r  z.TestDualProcessImplementation.test_num_handles  s    nTX..::<<Z6'
 
 
 	 >$(++7799[HHHH:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                 N   t          j                    D ]}	 t                              |d          }t                              |d          }||k    sJ D# t          $ r@}t          |          }t          |t           j        t           j        f          s Y d }~d }~ww xY wd S )NT)use_pebF)	r@   r   r   proc_cmdliner  r   
isinstancer#  rM  )rB   r  aberrs        r   rY  z*TestDualProcessImplementation.test_cmdline  s    ;== 	 	C
%%c4%88%%c5%99 Avvvvv    %c**!&-v/CD       		 	s   8A
B""6BB"N)r   r   r   r  r  r  r  rt  r  r  r  r  rY  r   r   r   r  r    s          ' ' ['   [    	G 	G 	G	 	 	      r   r  c                   n     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 ]x}t          j        |d| gt          j        t          j                  }|                                \  }}|                                 |t          t                     k    r|c S yd S )Nz6import sys; sys.stdout.write(str(sys.maxsize > 2**32))zC:\Python*\python.exe-c)argsstdoutstderr)	glob
subprocessPopenPIPESTDOUTcommunicaterL  r.  r   )codefilenamerQ   outputr  s        r   find_other_interpreterz,RemoteProcessTestCase.find_other_interpreter  s     H 	":;; 		  		 H#d+!!(  D
 ((**IFAIIKKK\**** +		  		 r   r  zimport sys; sys.stdin.read()c                 b   t                                                       |                                 }|t          j        d          t
          rt          j        | _        || _	        n|| _        t          j        | _	        t          j                                        }t          t          j                              |d<   |                     | j	        g| j        z   |t"          j                  | _        |                     | j        g| j        z   |t"          j                  | _        d S )Nz0could not find interpreter with opposite bitnessTHINK_OF_A_NUMBER)envstdin)supersetUpr  r   r!   r   sys
executablepython64python32r>   r?   copyr.  r>  r   	test_argsr  r  proc32proc64)rB   other_pythonr  	__class__s      r   r  zRemoteProcessTestCase.setUp  s    2244+B    	+NDM(DMM(DMNDMjoo#&ry{{#3#3 ))]Odn,#Z_ * 
 
 ))]Odn,#Z_ * 
 
r   c                     t                                                       | j                                         | j                                         d S r*   )r   tearDownr  r  r	  )rB   r  s    r   r  zRemoteProcessTestCase.tearDown  sG    !!!!!!!!r   c                     t          j        | j        j                  }t	          |                                          dk    sJ |                                dd          | j        k    sJ d S N   r'   )r@   r!  r  r  rb   r#   r  r%  s     r   test_cmdline_32z%RemoteProcessTestCase.test_cmdline_32  _    N4;?++199;;1$$$$yy{{122$.000000r   c                     t          j        | j        j                  }t	          |                                          dk    sJ |                                dd          | j        k    sJ d S r  )r@   r!  r	  r  rb   r#   r  r%  s     r   test_cmdline_64z%RemoteProcessTestCase.test_cmdline_64  r  r   c                     t          j        | j        j                  }|                                t          j                    k    sJ d S r*   )r@   r!  r  r  r  r>   getcwdr%  s     r   test_cwd_32z!RemoteProcessTestCase.test_cwd_32  :    N4;?++uuww")++%%%%%%r   c                     t          j        | j        j                  }|                                t          j                    k    sJ d S r*   )r@   r!  r	  r  r  r>   r  r%  s     r   test_cwd_64z!RemoteProcessTestCase.test_cwd_64!  r  r   c                     t          j        | j        j                  }|                                }d|v sJ |d         t          t          j                              k    sJ d S )Nr  )r@   r!  r  r  r?   r.  r>   r>  )rB   r&  es      r   test_environ_32z%RemoteProcessTestCase.test_environ_32%  s^    N4;?++IIKK"a''''$%RY[[)9)9999999r   c                     t          j        | j        j                  }	 |                                 d S # t           j        $ r Y d S w xY wr*   )r@   r!  r	  r  r?   r#  r%  s     r   test_environ_64z%RemoteProcessTestCase.test_environ_64+  sP    N4;?++	IIKKKKK" 	 	 	DD	s   6 A	A	)r   r   r   r  staticmethodr  r  r  r  r  r  r  r  r  r  __classcell__)r  s   @r   r  r    s              \ " 56I
 
 
 
 
0" " " " "
1 1 1
1 1 1
& & && & &: : :      r   r  c                       e Zd Zd Zd ZdS )TestServicesc                    h d}h d}h d}t          j                    D ]}|                                }t          |d         t                    sJ |d                                         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 |                                }|*t          j        |          }|                                sJ t          j	        |
                                          }||k    sJ d S )N>   stoppausestartpausedrunningstoppedcontinue>   manualdisabled	automatic>   r(  r)  r*  stop_pendingpause_pendingstart_pendingcontinue_pendingr-  display_namer/  statusr  binpath
start_typedescription)r@   win_service_iteras_dictr  r.  r/   r!  r  
is_runningwin_service_getr-  )rB   valid_statusesvalid_start_typesservr7   r  r&  ss           r   test_win_service_iterz"TestServices.test_win_service_iter:  s   
 
 
 @??
 
 
 +-- 	 	D<<>>Dd6lC00000<%%'''''d>2C88888d:.44444>^3333E{&tE{+++d9os33333d:.44444d<0#66666%):::::>^3333d=1377777((**CN3''||~~%%%&tyy{{33A199999-	 	r   c                    t           j        j        j        }t           j        j        j        }t          t          j                                                              }t          j	        t           j
                  5 }t          j        |dz              d d d            n# 1 swxY w Y   |j        j        |dz   k    sJ t          j        |          }t          ddd          }||_        t          j        d|          5  t          j	        t           j
                  5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        d|          5  t          j	        t           j
                  5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          ddd          }||_        t          j        d|          5  t          j	        t           j                  5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        d|          5  t          j	        t           j                  5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                t)          |          v sJ |                                t)          |          v sJ |                                t-          |          v sJ |                                t-          |          v sJ d S )Nz???r   msgz/psutil._psplatform.cext.winservice_query_statusr  z/psutil._psplatform.cext.winservice_query_config)r@   r  r   ERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextr8  r-  r   r"  rM  r;  r  r  r  r   r   r4  r/  r#  r.  r3  repr)rB   rC  rD  r-  cmservicer  s          r   test_win_service_getz!TestServices.test_win_service_getf  s]   #@ 	% %05IF+--..3355]6/00 	1B"4%<000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1x}u,,,, (..a""3Z=3
 
 
 	! 	! v344 ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!
 Z=3
 
 
 	# 	# v344 # #  """# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# a""*Z=3
 
 
 	! 	! v233 ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!
 Z=3
 
 
 	# 	# v233 # #  """# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ||~~W----##%%W5555||~~g....##%%g666666s   =B!!B%(B%E"E7EE	E
E	EE!E;GF;/G;F?	?GF?	GGGI"*I?I"I	I"I	I""I&)I&K"K7KK	K
K	KK!KN)r   r   r   r@  rI  r   r   r   r#  r#  8  s3        * * *X,7 ,7 ,7 ,7 ,7r   r#  )5r  r   r  r>   r2  rV  r   r:  r  r  r  warningsunittestr   r@   r   psutil.testsr   r   r   r   r	   r
   r   r   r   r   r   r   catch_warningssimplefilterrG   rA  r\  rS   psutil._pswindowsr   r  r   rn   ro   r   r$   r=   r8   r:   rq   r   r  r  r  r  r#  r   r   r   <module>rP     s       				  				       



                ' ' ' ' ' ' $ $ $ $ $ $ ! ! ! ! ! !       - - - - - - * * * * * * ' ' ' ' ' '       ) ) ) ) ) )       ' ' ' ' ' ' " " " " " "  4 	 	 	"	"  h'''


                2111111  K77D!@AA	 	 	 	 	n 	 	 BA 87	    #    ,%; %; %; %; %;/ %; %; %;PV- V- V- V- V-_ V- V- V-|> > > > > > > >LK K K K K/ K K K\B, B, B, B, B,_ B, B, B,P K77T T T T TN T T 87Tn K77U U U U UN U U 87Uz K77Y7 Y7 Y7 Y7 Y7> Y7 Y7 87Y7 Y7 Y7s   !CCC