
    g؄                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! e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          ej,        -                    eoe d           G d de                                              Z.d Z/e0fdZ1 G d  d!e.          Z2 G d" d#e.          Z3 G d$ d%e.          Z4 G d& d'e.          Z5 G d( d)e.          Z6ej,        -                    e d           G d* d+e                      Z7ej,        -                    e d           G d, d-e                      Z8ej,        -                    e d           G d. d/e                      Z9dS )0zWindows specific tests.    N)WINDOWS)FileNotFoundError)super)which)APPVEYOR)GITHUB_ACTIONS)HAS_BATTERY)IS_64BIT)PY3)PYPY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)mock)pytest)retry_on_failure)sh)spawn_testproc)	terminateignore)convert_oserrorzWINDOWS onlyreasonzpywin32 not available on PYPYzpywin32 broken on GITHUB + PY2c                       e Zd ZdS )WindowsTestCaseN)__name__
__module____qualname__     U/var/www/html/ai-engine/env/lib/python3.11/site-packages/psutil/tests/test_windows.pyr   r   ;   s         	Dr    r   c                 v    t          d          st          j        d          dd| z  z   }t          |          S )zCurrently not used, but available just in case. Usage:

    >>> powershell(
        "Get-CIMInstance Win32_PageFileUsage | Select AllocatedBaseSize")
    zpowershell.exezpowershell.exe not availablez?powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive z,-NoProfile -WindowStyle Hidden -Command "%s")r   r   skipr   )cmdcmdlines     r!   
powershellr&   E   sI     !"" :k8999I
83
>	?  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                 &    g | ]} |          S r   r   ).0x	converters     r!   
<listcomp>zwmic.<locals>.<listcomp>^   s!    ===1))A,,===r    )r   stripjoin
splitlinestuplesplit)pathwhatr.   outdatas     `  r!   wmicr9   T   s     "dddDD1
2
2
8
8
:
:C773>>##ABB'((..00D$;;====

===>>>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_PROCESSORSk   s9     rz"89::6+--------r    c                 n    t          j                    d         }t          j                    }||k    sJ d S )N   )win32apiGetSystemInforA   rB   rC   	sys_valuepsutil_values      r!   test_cpu_count_vs_GetSystemInfoz+TestCpuAPIs.test_cpu_count_vs_GetSystemInfou   s<     *,,Q/	'))L((((((r    c                     t          j                    }t          d |                                D                       }t	          j                    |k    sJ d S )Nc              3   $   K   | ]}|j         V  d S N)NumberOfLogicalProcessorsr,   procs     r!   	<genexpr>z<TestCpuAPIs.test_cpu_count_logical_vs_wmi.<locals>.<genexpr>~   s6       
 
/3D*
 
 
 
 
 
r    wmiWMIsumWin32_ProcessorrA   rB   )rC   wprocss      r!   test_cpu_count_logical_vs_wmiz)TestCpuAPIs.test_cpu_count_logical_vs_wmi|   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 rP   )NumberOfCoresrR   s     r!   rT   z:TestCpuAPIs.test_cpu_count_cores_vs_wmi.<locals>.<genexpr>   s%      GG4D&GGGGGGr    F)logicalrU   )rC   rZ   coress      r!   test_cpu_count_cores_vs_wmiz'TestCpuAPIs.test_cpu_count_cores_vs_wmi   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)rA   rB   len	cpu_timesrC   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   )	rV   rW   rY   CurrentClockSpeedrA   cpu_freqcurrentMaxClockSpeedmax)rC   rZ   rS   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@   rE   rM   r\   rb   rh   rp   r   r    r!   r;   r;   j   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j	        
                    ed           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|z            Jd S )Nzipconfig /allT)perniczpseudo-interface -z-%r nic wasn't found in 'ipconfig /all' output)r   rA   net_io_counterskeysreplacelowerfail)rC   r7   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CcI   	 	r    c                     t          j                                                    d         }t          |j                  t          j                    j        k    sJ d S rj   )rV   rW   Win32_ComputerSystemr>   TotalPhysicalMemoryrA   virtual_memorytotalrC   rZ   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 rj   )
rV   rW   Win32_PerfRawData_PerfOS_Memoryabsr>   AvailableBytesrA   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 rj   )rV   rW   r   r>   CommitLimitrA   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   rG   )rA   r   r   rV   rW   #Win32_PerfRawData_PerfOS_PagingFiler>   PercentUsagePercentUsage_Basepercentr   )rC   rZ   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    ztest not relieable on appveyorr   c                     t          j                                                    }t          d |D                       }t          t	          j                              }||k    sJ d S )Nc                     g | ]	}|j         
S r   	ProcessIdr,   r-   s     r!   r/   z,TestSystemAPIs.test_pids.<locals>.<listcomp>   s    //////r    )rV   rW   Win32_ProcesssetrA   pids)rC   rZ   wmi_pidspsutil_pidss       r!   	test_pidszTestSystemAPIs.test_pids   sa    
 GII##%%//Q///00&+--((;&&&&&&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
t)          |          z            .d S )NTall\r(   cdromA:i   zpsutil=z, wmi=zcan't find partition %s)rA   disk_partitionsrV   rW   Win32_LogicalDiskdevicer{   DeviceID
mountpointopts
startswith
disk_usager   r   r>   Size	FreeSpacer   r   r}   repr)rC   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	 	K 	KG% K K>))$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"iii38:::xxH   E+ I. ii 9DMM IJJJ3	K 	K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)   )rA   r   r   rH   GetDiskFreeSpaceExr   r   r   r   r   r   r   )rC   diskrK   rL   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!   r/   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   )rH   GetLogicalDriveStringsr4   rA   r   rJ   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_statsrV   rW   Win32_NetworkAdapteraddr   NetConnectionID)rC   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)# 	
 	
 	
HHI&
 	
 	
 	
 	
 	
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%SrG   )rV   rW   Win32_OperatingSystemLastBootUpTimer4   datetimestrptimefromtimestamprA   	boot_timer   total_seconds)rC   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_timerG   return_value      iM  )r   patchrA   r   rg   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   rq   rr   r   r   r   r   r   r   r   r   r   r   r    r!   rt   rt      s5       	 	 	K K K
 
 
2 2 2	7 	7 	7. [)IJJ' '  KJ' K K K< 
O 
O 
O) ) )

 

 

  	- 	- 	- 	- 	-r    rt   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)rH   GetPwrCapabilitiesrA   sensors_batteryrg   s    r!   test_has_batteryz#TestSensorsBattery.test_has_battery5  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)   )rV   rW   queryrA   r   r   r   EstimatedChargeRemainingrC   rZ   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      )rV   rW   r   rA   r   power_pluggedBatteryStatusr   s       r!   test_power_pluggedz%TestSensorsBattery.test_power_pluggedE  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   rA   r   calledrC   ms     r!   test_emulate_no_batteryz*TestSensorsBattery.test_emulate_no_batteryN  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   rA   r   secsleftPOWER_TIME_UNLIMITEDr  r  s     r!   test_emulate_power_connectedz/TestSensorsBattery.test_emulate_power_connectedV      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_charging`  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   rA   r   r  POWER_TIME_UNKNOWNr  r  s     r!   test_emulate_secs_left_unknownz1TestSensorsBattery.test_emulate_secs_left_unknownj  s    Z4&
 
 
 	 &((1V5NNNNN8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  N)r   r   r   r   r   rq   rr   r	   r   r   r  r
  r  r  r   r    r!   r   r   4  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 rP   r   pidclss    r!   
setUpClasszTestProcess.setUpClass{       ""&r    c                 .    t          | j                   d S rP   r   r  r  s    r!   tearDownClasszTestProcess.tearDownClass      #'r    c                     t          j        d          }t          j        t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S rj   )rA   Processr   raisesAccessDeniedkillrC   ps     r!   test_issue_24zTestProcess.test_issue_24  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)   )vistazwin-7win7)
rA   r"  namestrusernamecreate_timememory_infor$  platformuname)rC   r'  rss_vmss       r!   test_special_pidzTestProcess.test_special_pid  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 rP   )	rA   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)   )rA   r"  r?   getpidnum_handlesrH   OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSECloseHandle)rC   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 rP   )rA   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)
rH   GetUserNameExrA  NameSamCompatibleendswithr   r#   rA   r"  r/  )rC   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[ ]+rw   r   "r(   r   )
resubrH   GetCommandLiner0   r1   rA   r"  r%   r{   rJ   s      r!   test_cmdlinezTestProcess.test_cmdline  s    F63(?(A(ABBHHJJ	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 rP   )rH   r@  rA  rB  rC  r?   r>  
addCleanuprD  win32processGetPriorityClassrA   r"  nicerC   rF  rK   rL   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)rH   r@  rA  rB  rC  r  r\  rD  r]  GetProcessMemoryInforA   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 rP   )rH   r@  rA  rB  rC  r  r\  rD  rA   r"  r   rL  r]  GetExitCodeProcess)rC   rF  r'  rL   rK   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   )rH   r@  rA  rB  rC  r  r\  rD  r]  GetProcessAffinityMaskrA   r"  cpu_affinity)rC   r  rF  rK   rL   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)rH   r@  rA  rB  rC  r?   r>  r\  rD  r]  GetProcessIoCountersrA   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valuerA   r"  r?  )rC   r  rB  rF  hndcntrK   rL   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.sleeprG   )WindowsErrorwinerrorr   r   rA   r"  r   r#  r$  cwd
call_count)rC   excr  r'  s       r!   test_error_partial_copyz#TestProcess.test_error_partial_copy4  s|   nn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 )rA   r   _psplatformr"  r   r#  rM  exe)rC   r  rS   s      r!   test_exezTestProcess.test_exe?  s     kmmB%'!))#..]6/00 	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A<<B B N)r   r   r   classmethodr  r  r(  r6  r<  rH  rN  rT  rZ  ra  ru  rx  r  r  r  r  r  r   r    r!   r  r  z  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 rP   r  r  s    r!   r  zTestProcessWMI.setUpClassK  r  r    c                 .    t          | j                   d S rP   r  r  s    r!   r  zTestProcessWMI.tearDownClassO  r   r    c                     t          j                                        | j                  d         }t	          j        | j                  }|                                |j        k    sJ d S Nr   r   )rV   rW   r   r  rA   r"  r-  CaptionrC   rZ   r'  s      r!   	test_namezTestProcessWMI.test_nameS  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  )	rV   rW   r   r  rA   r"  r  r|   ExecutablePathr  s      r!   r  zTestProcessWMI.test_exeY  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   rw   rV  r(   )
rV   rW   r   r  rA   r"  r1   r%   CommandLiner{   r  s      r!   rZ  zTestProcessWMI.test_cmdlinec  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   )rV   rW   r   r  rA   r"  GetOwnerr/  )rC   rZ   r'  domain_r/  s         r!   rT  zTestProcessWMI.test_usernameh  sy    GII##dh#77:N48$$jjll8%vvxx0zz||x''''''r    c                    t          j                                        | j                  d         }t	          j        | j                  }|                                j        }|t          |j	                  k    sJ d S r  )
rV   rW   r   r  rA   r"  r1  r4  r>   rd  )rC   rZ   r'  r4  s       r!   test_memory_rsszTestProcessWMI.test_memory_rsso  sh    GII##dh#77:N48$$mmoo!c!*++++++++r    c                 >   t          j                                        | j                  d         }t	          j        | j                  }|                                j        }t          |j	                  }|||dz  fvr| 
                    d|d|          d S )Nr   r   r  zwmi=z	, psutil=)rV   rW   r   r  rA   r"  r1  rt  r>   PageFileUsager}   )rC   rZ   r'  rt  	wmi_usages        r!   test_memory_vmszTestProcessWMI.test_memory_vmsv  s    GII##dh#77:N48$$mmoo!
 ((	y)d"2333)))999ccBCCC 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   )rV   rW   r   r  rA   r"  r.  CreationDater4   timestrftime	localtimer0  )rC   rZ   r'  wmic_createpsutil_creates        r!   test_create_timezTestProcessWMI.test_create_time  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   rq   rr   r   r  rZ  rT  r   r  r  r  r   r    r!   r  r  H  s       //' ' ['   [% % % [B   ; ; ;G G G
( ( ( , , , 
D 
D 
D, , , , ,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 rP   r  r  s    r!   r  z(TestDualProcessImplementation.setUpClass  r  r    c                 .    t          | j                   d S rP   r  r  s    r!   r  z+TestDualProcessImplementation.tearDownClass  r   r    c                 V   t          j        | j                                                  }t	          j        dt          t          j        d                    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_infomsgr  r   i   )rA   r"  r  r1  r   r   OSErrorerrnoEPERMre   r~  r   r  )rC   mem_1funmem_2r|  s        r!   ru  z.TestDualProcessImplementation.test_memory_info  s_   tx((4466Z6U33
 
 
 
	 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          t          j        d                    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  )
rA   r"  r  r0  r   r   r  r  r  r  )rC   ctimer  s      r!   r  z.TestDualProcessImplementation.test_create_time  s    tx((4466Z0U33
 
 
 	 >$(++7799UBBBB:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   ;B##B'*B'c                    t          j        | j                                                  }t	          j        dt          t          j        d                    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  r  g{Gz?)rA   r"  r  rf   r   r   r  r  r  r  r   usersystem)rC   cpu_times_1r  cpu_times_2s       r!   test_cpu_timesz,TestDualProcessImplementation.test_cpu_times  s5   nTX..88::Z0U33
 
 
 	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          t          j        d                    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  r  rG   )rA   r"  r  r  r   r   r  r  r  r~  re   r   r  )rC   io_counters_1r  io_counters_2r|  s        r!   r  z.TestDualProcessImplementation.test_io_counters  s&   tx00<<>>Z6U33
 
 
 	 "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          t          j        d                    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  )
rA   r"  r  r?  r   r   r  r  r  r  )rC   r?  r  s      r!   r  z.TestDualProcessImplementation.test_num_handles  s    nTX..::<<Z6U33
 
 
 	 >$(++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)	rA   r   r   proc_cmdliner  r   
isinstancer$  rM  )rC   r  aberrs        r!   rZ  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  ru  r  r  r  r  rZ  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filenamerS   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)r   setUpr  r   r#   r
   sys
executablepython64python32r?   r@   copyr.  r>  r   	test_argsr  r  proc32proc64)rC   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 rP   )r   tearDownr  r  r  )rC   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)   )rA   r"  r  r  re   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  )rA   r"  r  r  re   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 rP   )rA   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 rP   )rA   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  )rA   r"  r  r  r@   r.  r?   r>  )rC   r'  es      r!   test_environ_32z%RemoteProcessTestCase.test_environ_323  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rP   )rA   r"  r  r  r@   r$  r&  s     r!   test_environ_64z%RemoteProcessTestCase.test_environ_649  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                    t          g d          }t          g d          }t          g 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)runningpausedstartpausecontinuestopstopped)	automaticmanualdisabled)r(  r)  start_pendingpause_pendingcontinue_pendingstop_pendingr.  r-  display_namer/  statusr  binpath
start_typedescription)r   rA   win_service_iteras_dictr  r.  r0   r"  r  
is_runningwin_service_getr-  )rC   valid_statusesvalid_start_typesservr8   r  r'  ss           r!   test_win_service_iterz"TestServices.test_win_service_iterH  s    
 
 
     C C CDD 
 
 
   +-- 	 	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          rddd|f}n|df}t          | }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          rddd|f}n|df}t          | }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   r  z/psutil._psplatform.cext.winservice_query_statusr  z/psutil._psplatform.cext.winservice_query_config)rA   r  r   ERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextr;  r-  r   r#  rM  r>  r  r   r  r   r   r7  r/  r$  r.  r6  r   )rC   rE  rF  r-  cmservicer  r  s           r!   test_win_service_getz!TestServices.test_win_service_gett  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,,,, (.. 	9ua!=>DD0%8DD!Z=3
 
 
 	! 	! v344 ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!
 Z=3
 
 
 	# 	# v344 # #  """# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#  	0ua!45DD'/DD!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:EE
	
EE
	EE!$E!>GF>2G>G	GG	GGGI(0II(I	I(I	I((I,/I,	K (K	=K 	K	K K	K  K$'K$N)r   r   r   rC  rJ  r   r    r!   r&  r&  F  s3        * * *X27 27 27 27 27r    r&  ):r  r   r  r  r?   r2  rW  r:  r  r  r  warningsrA   r   psutil._compatr   r   r   psutil.testsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   catch_warningssimplefilterrH   rA  r]  rV   psutil._pswindowsr   r  r   rq   rr   r   r&   r>   r9   r;   rt   r   r  r  r  r  r&  r   r    r!   <module>rQ     st        				  				      



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


                2111111  K77D!@AA3w'G   	 	 	 	 	n 	 	  BA 87	    #    ,%; %; %; %; %;/ %; %; %;PZ- Z- Z- Z- Z-_ Z- Z- Z-D> > > > > > > >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_7 _7 _7 _7 _7> _7 _7 87_7 _7 _7s   8!C%%C),C)