
    ɧd}                     D   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 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+ G d de+          Z, G d de+          Z- G d d e+          Z. G d! d"e+          Z/ G d# d$e+          Z0 ej*        e d           G d% d&e                      Z1 ej*        e d           G d' d(e                      Z2 ej*        e d           G d) d*e                      Z3e4d+k    rdd,l5m6Z6  e6e7           dS dS )-zWindows specific tests.    N)WINDOWS)FileNotFoundError)super)APPVEYOR)GITHUB_ACTIONS)HAS_BATTERY)IS_64BIT)PY3)PYPY)TOLERANCE_DISK_USAGE)PsutilTestCase)mock)retry_on_failure)sh)spawn_testproc)	terminate)unittestignore)convert_oserrorzWINDOWS onlyzpywin32 not available on PYPYzpywin32 broken on GITHUB + PY2c                       e Zd ZdS )WindowsTestCaseN)__name__
__module____qualname__     9lib/python3.11/site-packages/psutil/tests/test_windows.pyr   r   9   s        
 	Dr   r   c                   n    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 availablec                     t          t          j        d                   }|                     |t	          j                               d S )Nr    )intosenvironassertEqualpsutil	cpu_count)selfnum_cpuss     r   &test_cpu_count_vs_NUMBER_OF_PROCESSORSz2TestCpuAPIs.test_cpu_count_vs_NUMBER_OF_PROCESSORSH   s>    
 rz"89::6#3#5#566666r   c                     t          j                    d         }t          j                    }|                     ||           d S )N   )win32apiGetSystemInfor&   r'   r%   r(   	sys_valuepsutil_values      r   test_cpu_count_vs_GetSystemInfoz+TestCpuAPIs.test_cpu_count_vs_GetSystemInfoP   sA     *,,Q/	'))L11111r   c                     t          j                    }|                                d         }|                     t	          j                    |j                   d S Nr   )wmiWMIWin32_Processorr%   r&   r'   NumberOfLogicalProcessorsr(   wprocs      r   test_cpu_count_logical_vs_wmiz)TestCpuAPIs.test_cpu_count_logical_vs_wmiW   sK    GII  ""1%)++T-KLLLLLr   c                     t          j                    }|                                d         }|                     t	          j        d          |j                   d S )Nr   F)logical)r5   r6   r7   r%   r&   r'   NumberOfCoresr9   s      r   test_cpu_count_cores_vs_wmiz'TestCpuAPIs.test_cpu_count_cores_vs_wmi\   sP    GII  ""1%)%888$:LMMMMMr   c                     |                      t          j                    t          t          j        d                               d S )NT)percpu)r%   r&   r'   len	cpu_timesr(   s    r   test_cpu_count_vs_cpu_timesz'TestCpuAPIs.test_cpu_count_vs_cpu_timesa   sH    )++V-T:::;;	= 	= 	= 	= 	=r   c                 $   t          j                    }|                                d         }|                     |j        t          j                    j                   |                     |j        t          j                    j	                   d S r4   )
r5   r6   r7   r%   CurrentClockSpeedr&   cpu_freqcurrentMaxClockSpeedmaxr9   s      r   test_cpu_freqzTestCpuAPIs.test_cpu_freqe   sq    GII  ""1%/1B1B1JKKK+V_->->-BCCCCCr   N)r   r   r   r   skipIfr#   r$   r*   r2   r<   r@   rF   rM   r   r   r   r   r   F   s        X_+2:=DF F7 7F F72 2 2M M M
N N N
= = =D D D D Dr   r   c                       e 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   r&   net_io_counterskeysreplacelowerfail)r(   outnicsnics       r   test_nic_nameszTestSystemAPIs.test_nic_namesn   s    !!%T2227799 	K 	KC!S[[c%:%:%@%@%B%BB #~ K		CcIK K K		K 	Kr   c                     t          j                                                    d         }|                     t	          |j                  t          j                    j                   d S r4   )	r5   r6   Win32_ComputerSystemr%   r"   TotalPhysicalMemoryr&   virtual_memorytotal)r(   r:   s     r   test_total_phymemz TestSystemAPIs.test_total_phymemx   s\    GII**,,Q/Q233.006	8 	8 	8 	8 	8r   ztest not relieable on appveyorc                     t          j                                                    }t          d |D                       }t          t	          j                              }|                     ||           d S )Nc                     g | ]	}|j         
S r   	ProcessId.0xs     r   
<listcomp>z,TestSystemAPIs.test_pids.<locals>.<listcomp>   s    //////r   )r5   r6   Win32_Processsetr&   pidsr%   )r(   r:   wmi_pidspsutil_pidss       r   	test_pidszTestSystemAPIs.test_pids   sf    
 GII##%%//Q///00&+--((;/////r   c                    t          j        d          }t          j                                                    }|D ]J}|D ]}|j                            dd          |j        k    r|j        s nd|j	        v r n|j        
                    d          r n	 t          j        |j                  }n# t          $ r Y  nw xY w|                     |j        t          |j                             t          |j                  }|                     |j        |           t'          |j        |z
            dk    r |                     d|j        d	|            n' |                     d
t+          |          z             Ld S )NTall\ cdromA:i   zpsutil=z, wmi=zcan't find partition %s)r&   disk_partitionsr5   r6   Win32_LogicalDiskdevicerW   DeviceID
mountpointopts
startswith
disk_usager   r%   rb   r"   Size	FreeSpacefreeabsrY   repr)r(   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 "- ',. )44T::  & 1'2D E E,    $$U[#hm2D2DEEE"8#566H$$UZ:::5:0114DD 3			!JJJ#2 3 3 3E), 		3d7mmCDDD1	E 	Es   B66
CCc                    t          j                    D ]}d|j        v rt          j        |j                  }t          j        |j                  }|                     |d         |j        t                     |                     |d         |j
        t                     |                     |j        |j
        |j        z
             d S )Nrw   r   delta   )r&   ry   r~   r-   GetDiskFreeSpaceExr}   r   assertAlmostEqualr   r   rb   r%   used)r(   diskr0   r1   s       r   test_disk_usagezTestSystemAPIs.test_disk_usage   s    *,, 
	E 
	ED$)#  3DODDI!,T_==L""9Q<1B)= # ? ? ?""9Q<1C)= # ? ? ?\.)/,2CCE E E E
	E 
	Er   c                     d t          j                                        d          D             }d t          j        d          D             }|                     ||           d S )Nc                 F    g | ]}||                     d           |dz   S )rx   ru   )r   rh   s     r   rk   z7TestSystemAPIs.test_disk_partitions.<locals>.<listcomp>   sF     - - --d++-H- - -r   z\ c                 P    g | ]#}|j                             d           |j         $S )rx   )r}   r   rh   s     r   rk   z7TestSystemAPIs.test_disk_partitions.<locals>.<listcomp>   s>     > > > |66t<<> > > >r   Trs   )r-   GetLogicalDriveStringssplitr&   ry   r%   r/   s      r   test_disk_partitionsz#TestSystemAPIs.test_disk_partitions   s~    - -&=??EEhOO- - -	> >f.D.N.N.N > > >L11111r   c                 h   t          t                                                    }t          j                                                    }t                      }|D ]6}|                    |j                   |                    |j                   7| 	                    ||z  d|d|           d S )Nzno common entries in z, )
rm   cextnet_if_statsr5   r6   Win32_NetworkAdapteraddNameNetConnectionID
assertTrue)r(   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9,,9A99M	O 	O 	O 	O 	Or   c                    t          j                                                    }|d         j                            d          d         }t
          j                            |d          }t
          j                            t          j	                              }t          ||z
                                            }|                     |d           d S )Nr   .%Y%m%d%H%M%S   )r5   r6   Win32_OperatingSystemLastBootUpTimer   datetimestrptimefromtimestampr&   	boot_timer   total_secondsassertLessEqual)r(   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,;;==>>T1%%%%%r   c                    t          j        dd          5  |                     t          j                    d           d d d            n# 1 swxY w Y   t          j        dd          5  |                     t          j                    d           d d d            n# 1 swxY w Y   t          j        dd          5  |                     t          j                    d           d d d            n# 1 swxY w Y   t          j        dd          5  |                     t          j                    d           d d d            d S # 1 swxY w Y   d S )Nz psutil._pswindows.cext.boot_timer,   return_value      iM  )r   patchr%   r&   r   rE   s    r   test_boot_time_fluctuationz)TestSystemAPIs.test_boot_time_fluctuation   s9   Z:KKK 	4 	4V-//333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4Z:KKK 	4 	4V-//333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4Z:KKK 	4 	4V-//333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4Z:MMM 	6 	6V-//555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6sG   (AAA,(B  B$'B$(C55C9<C9(EEEN)r   r   r   r]   rc   r   rN   r   r   rq   r   r   r   r   r   r   r   r   r   rP   rP   l   s       K K K8 8 8" X_X?@@0 0  A@0 E E E: E E E2 2 2O O O& & &	6 	6 	6 	6 	6r   rP   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                               d S |                     t          j                               d S )NSystemBatteriesPresent)r-   GetPwrCapabilitiesassertIsNotNoner&   sensors_batteryassertIsNonerE   s    r   test_has_batteryz#TestSensorsBattery.test_has_battery   s_    &(()AB 	8  !7!9!9:::::f46677777r   z
no batteryc                     t          j                    }|                    d          d         }t          j                    }|                     |j        |j        d           d S )Nselect * from Win32_Batteryr   r   r   )r5   r6   queryr&   r   r   percentEstimatedChargeRemainingr(   r:   battery_wmibattery_psutils       r   test_percentzTestSensorsBattery.test_percent   sg    GIIgg;<<Q?/11"K$H 	 	 	 	 	 	r   c                     t          j                    }|                    d          d         }t          j                    }|                     |j        |j        dk               d S )Nr   r      )r5   r6   r   r&   r   r%   power_pluggedBatteryStatusr   s       r   test_power_pluggedz%TestSensorsBattery.test_power_plugged   sf    GIIgg;<<Q?/11 	5$2a7	9 	9 	9 	9 	9r   c                     t          j        dd          5 }|                     t          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&   r   calledr(   ms     r   test_emulate_no_batteryz*TestSensorsBattery.test_emulate_no_battery  s    Z@%35 5 5 	89f4667778OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   0AAAc                     t          j        dd          5 }|                     t          j                    j        t          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&   r   secsleftPOWER_TIME_UNLIMITEDr   r   s     r   test_emulate_power_connectedz/TestSensorsBattery.test_emulate_power_connected      Z@%13 3 3 	67V355>#8: : :8OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A A%%A),A)c                     t          j        dd          5 }|                     t          j                    j        t          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                   |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   r   POWER_TIME_UNKNOWNr   r   s     r   test_emulate_secs_left_unknownz1TestSensorsBattery.test_emulate_secs_left_unknown  s    Z@%24 4 4 	78V355>#68 8 88OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   N)r   r   r   r   r   rN   r   r   r   r   r   r   r   r   r   r   r   r      s        8 8 8 X__l33  43 X__l339 9 439          r   r   c                       e Zd Zed             Zed             Zd Zd Zd Zd Z	 e
j        ej        dk     d          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 Nr   pidclss    r   
setUpClasszTestProcess.setUpClass)       ""&r   c                 .    t          | j                   d S r   r   r   r   s    r   tearDownClasszTestProcess.tearDownClass-      #'r   c                 x    t          j        d          }|                     t           j        |j                   d S r4   )r&   ProcessassertRaisesAccessDeniedkillr(   ps     r   test_issue_24zTestProcess.test_issue_241  s2    N1&-qv66666r   c                    t          j        d          }|                     |                                d           t	          |           |                                 |                     |                                dk               	 |                                d d         \  }}|                     |dk               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)r&   r   r%   namestrusernamer   create_timememory_infor   platformuname)r(   r  rssvmss       r   test_special_pidzTestProcess.test_special_pid5  s    N18,,, 	A	

3.///	%}}rr*HC OOC!G$$$$$ " 	 	 	>##A&*DD   	s   C +C54C5c                     t          j        | j                  }|                     t          |j        t          j                   d S r   )r&   r   r   r   
ValueErrorsend_signalsignalSIGINTr  s     r   test_send_signalzTestProcess.test_send_signalF  s5    N48$$*amV]CCCCCr   c                    t          j        t          j                              }|                                }t          j        t          j        t          j	        t          j                              }|                                }| 
                    ||dz              t          j        |           | 
                    |                                |           d S )Nr   )r&   r   r#   getpidnum_handlesr-   OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSEr%   CloseHandle)r(   r  beforehandleafters        r   test_num_handles_incrementz&TestProcess.test_num_handles_incrementJ  s    N29;;''%h&H&.nbikkC C
+++V$$$&11111r   )r      zCTRL_* signals not supportedc                    t          j        |                                 j                  }|                    t
          j                   |                    t
          j                   |                                 |	                                 | 
                    t           j        |j        t
          j                   | 
                    t           j        |j        t
          j                   d S r   )r&   r   r   r   r  r  CTRL_C_EVENTCTRL_BREAK_EVENTr   waitr   NoSuchProcessr  s     r   test_ctrl_signalszTestProcess.test_ctrl_signalsT  s     N4..00455	f)***	f-...		&.-)<	> 	> 	>&.-)@	B 	B 	B 	B 	Br   c                     |                      t          j                                                    t	          j        t          j                             d S r   )r%   r&   r   r
  r-   GetUserNameExr  NameSamCompatiblerE   s    r   test_usernamezTestProcess.test_usernamea  sP    ))2244!/0JKK	M 	M 	M 	M 	Mr   c                    t          j        ddt          j                                                              }d                    t          j                                                              }| 	                    ||           d S )Nz +rS   )
resubr-   GetCommandLinestripjoinr&   r   cmdliner%   r/   s      r   test_cmdlinezTestProcess.test_cmdlinee  sk    F4h&=&?&?@@FFHH	xx 0 0 8 8 : :;;L11111r   c                 Z   t          j        t          j        t          j        t          j                              }|                     t           j        |           t          j
        |          }t          j                                                    }|                     ||           d S r   )r-   r  r  r  r  r#   r  
addCleanupr  win32processGetPriorityClassr&   r   nicer%   r(   r!  r0   r1   s       r   	test_nicezTestProcess.test_nicey  s    %h&H&.nbikkC C,f555 1&99	~'',,..y11111r   c                    t          j        t          j        t          j        | j                  }|                     t           j        |           t          j	        |          }t          j        | j                                                  }|                     |d         |j                   |                     |d         |j                   |                     |d         |j                   |                     |d         |j                   |                     |d         |j                   |                     |d         |j                   |                     |d         |j                   |                     |d         |j                   |                     |j        |j                   |                     |j        |j                   d S )	NPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsage)r-   r  r  r  r  r   r8  r  r9  GetProcessMemoryInfor&   r   r  r%   	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpagefilepeak_pagefiler  r  r<  s       r   test_memory_infozTestProcess.test_memory_info  s   %h&H&.ndh@ @,f555 5f==	~dh//;;==*+\-C	E 	E 	E&'):	< 	< 	</0,2N	P 	P 	P+,l.E	G 	G 	G23+	- 	- 	- 	./1K	M 	M 	Mo&(=	? 	? 	?)*L,F	H 	H 	H 	)<+<===)<+@AAAAAr   c                 z   t          j        t          j        t          j        | j                  }|                     t           j        |           t          j	        | j                  }|
                                 |                                }t          j        |          }|                     ||           d S r   )r-   r  r  r  r  r   r8  r  r&   r   r   r(  r9  GetExitCodeProcessr%   )r(   r!  r  r1   r0   s        r   	test_waitzTestProcess.test_wait  s    %h&H&.ndh@ @,f555N48$$	vvxx 3F;;	y11111r   c                 r   d }t          j        t          j        t          j        | j                  }|                     t           j        |            |t          j	        |          d                   }t          j        | j                                                  }|                     ||           d S )Nc                 :      fdt          d          D             S )Nc                 $    g | ]}d |z  z  
|S )r   r   )ri   irj   s     r   rk   zGTestProcess.test_cpu_affinity.<locals>.from_bitmask.<locals>.<listcomp>  s&    999!Q!VqL9A999r   @   )range)rj   s   `r   from_bitmaskz3TestProcess.test_cpu_affinity.<locals>.from_bitmask  s#    9999uRyy9999r   r   )r-   r  r  r  r  r   r8  r  r9  GetProcessAffinityMaskr&   r   cpu_affinityr%   )r(   rZ  r!  r0   r1   s        r   test_cpu_affinityzTestProcess.test_cpu_affinity  s    	: 	: 	: %h&H&.ndh@ @,f555 L/77:< <	~dh//<<>>y11111r   c                    t          j        t          j        t          j        t          j                              }|                     t           j        |           t          j
        |          }t          j                                                    }|                     |j        |d                    |                     |j        |d                    |                     |j        |d                    |                     |j        |d                    |                     |j        |d                    |                     |j        |d                    d S )NReadOperationCountWriteOperationCountReadTransferCountWriteTransferCountOtherOperationCountOtherTransferCount)r-   r  r  r  r  r#   r  r8  r  r9  GetProcessIoCountersr&   r   io_countersr%   
read_countwrite_count
read_byteswrite_bytesother_countother_bytesr<  s       r   test_io_counterszTestProcess.test_io_counters  sj   %h&H&.nbikkC C,f555 5f==	~''3355#Y/C%D	F 	F 	F$i0E&F	H 	H 	H#Y/B%C	E 	E 	E$i0D&E	G 	G 	G$i0E&F	H 	H 	H$i0D&E	G 	G 	G 	G 	Gr   c                    dd l }dd l}d}|j        j                            |d| j                  }|                     |j        j        j        |           |j        	                                }|j        j        
                    ||                    |                     |j        }t          j        | j                                                  }|                     ||           d S )Nr      )ctypesctypes.wintypeswindllkernel32r  r   r8  r  wintypesDWORDGetProcessHandleCountbyrefvaluer&   r   r  r%   )r(   rp  r  r!  hndcntr0   r1   s          r   test_num_handleszTestProcess.test_num_handles  s    $)!'33%q$(4 4.:FCCC&&((44FLL((	* 	* 	*L	~dh//;;==y11111r   c                    t                      }d|_        t          j        d|          5  t          j        d          5 }t	          j                    }|                     t          j        |j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | 	                    |j
        d           d S )Ni+  z psutil._psplatform.cext.proc_cwdside_effectz
time.sleepr,   )WindowsErrorwinerrorr   r   r&   r   r   r   cwdassertGreaterEqual
call_count)r(   excr   r  s       r   test_error_partial_copyz#TestProcess.test_error_partial_copy  s'   nnZ:LLL 	> 	>L)) >QN$$!!&"5qu===> > > > > > > > > > > > > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	a00000s5   B9B:BB
	
BB
	BB!$B!c                     t          j                    d         dz   }t           j                            |          }|                     t           j        |j                   d S )Nr   i )r&   rn   _psplatformr   r   r)  exe)r(   r   r;   s      r   test_exezTestProcess.test_exe  sP     kmmB%'!))#..&.99999r   N)r   r   r   classmethodr   r   r  r  r  r#  r   rN   sysversion_infor*  r.  r6  r=  rP  rS  r]  rm  rz  r  r  r   r   r   r   r   '  se       ' ' ['   [7 7 7% % %"D D D2 2 2 X_)V3335 5	B 	B5 5	BM M M2 2 2(2 2 2B B B62 2 2
2 
2 
2G G G&2 2 21 1 1: : : : :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.tearDownClass  r   r   c                     t          j                                        | j                  d         }t	          j        | j                  }|                     |                                |j                   d S Nrf   r   )	r5   r6   rl   r   r&   r   r%   r  Captionr(   r:   r  s      r   	test_namezTestProcessWMI.test_name  s\    GII##dh#77:N48$$19-----r   z!unreliable path on GITHUB_ACTIONSc                 >   t          j                                        | j                  d         }t	          j        | j                  }|                     |                                                                |j	                                                   d S r  )
r5   r6   rl   r   r&   r   r%   r  rX   ExecutablePathr  s      r   r  zTestProcessWMI.test_exe  ss    GII##dh#77:N48$$ 	!*:*@*@*B*BCCCCCr   c                 D   t          j                                        | j                  d         }t	          j        | j                  }|                     d                    |                                          |j	        
                    dd                     d S )Nrf   r   rS   "rv   )r5   r6   rl   r   r&   r   r%   r4  r5  CommandLinerW   r  s      r   r6  zTestProcessWMI.test_cmdline  s    GII##dh#77:N48$$!))++....sB77	9 	9 	9 	9 	9r   c                 *   t          j                                        | j                  d         }t	          j        | j                  }|                                \  }}}|d|}|                     |                                |           d S )Nrf   r   ru   )	r5   r6   rl   r   r&   r   GetOwnerr%   r
  )r(   r:   r  domain_r
  s         r   r.  zTestProcessWMI.test_username  s~    GII##dh#77:N48$$jjll8%vvxx0x00000r   c                    t          j                                        | j                  d         }t	          j        | j                  }|                                j        }|                     |t          |j
                             d S r  )r5   r6   rl   r   r&   r   r  r  r%   r"   r@  )r(   r:   r  r  s       r   test_memory_rsszTestProcessWMI.test_memory_rss  sm    GII##dh#77:N48$$mmoo!c!"23344444r   c                 R   t          j                                        | j                  d         }t	          j        | j                  }|                                j        }t          |j	                  }||k    r&||dz  k    r| 
                    d|d|           d S d S d S )Nrf   r   ro  zwmi=z	, psutil=)r5   r6   rl   r   r&   r   r  r  r"   PageFileUsagerY   )r(   r:   r  r  	wmi_usages        r   test_memory_vmszTestProcessWMI.test_memory_vms  s    GII##dh#77:N48$$mmoo!
 ((	9 	>3)d*:#: 	>IIIYYY<=====	> 	> 	> 	>r   c                    t          j                                        | j                  d         }t	          j        | j                  }t          |j                            d          d                   }t          j
        dt          j        |                                                    }|                     ||           d S )Nrf   r   r   r   )r5   r6   rl   r   r&   r   r	  CreationDater   timestrftime	localtimer  r%   )r(   r:   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n&*nQ]]__&E&EG Gm44444r   N)r   r   r   __doc__r  r   r   r  r   rN   r   r  r6  r.  r   r  r  r  r   r   r   r  r    s       //' ' ['   [. . . X_^%HIID D JID9 9 91 1 1 5 5 5 
> 
> 
>5 5 5 5 5r   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 )TestDualProcessImplementationa{  
    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.setUpClass8  r   r   c                 .    t          | j                   d S r   r   r   s    r   r   z+TestDualProcessImplementation.tearDownClass<  r   r   c                    t          j        | j                                                  }t	          j        dt          t          j        d                    5 }t          j        | j                                                  }| 	                    t          |          t          |                     t          t          |                    D ]^}|                     ||         d           |                     ||         d           |                     ||         ||         d           _|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   r   )r&   r   r   r  r   r   OSErrorerrnoEPERMr%   rC   rY  r  r   r   )r(   mem_1funmem_2rW  s        r   rP  z.TestDualProcessImplementation.test_memory_info@  sv   tx((4466ZB$+EK$?$?A A A 	DGN48,,88::ESZZU4443u::&& F F''a!444''a!444&&uQxq&EEEE:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   C EEEc                 |   t          j        | j                                                  }t	          j        dt          t          j        d                    5 }| 	                    t          j        | 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   r   r  r   r   r  r  r  r%   r   )r(   ctimer  s      r   r  z.TestDualProcessImplementation.test_create_timeL  s    tx((4466Z<$+EK$?$?A A A 	DGV^DH55AACCUKKK:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A	B11B58B5c                    t          j        | j                                                  }t	          j        dt          t          j        d                    5 }t          j        | j                                                  }|j	        sJ | 
                    |j        |j        d           | 
                    |j        |j        d           d d d            d S # 1 swxY w Y   d S )Nr  r  r|  g{Gz?r   )r&   r   r   rD   r   r   r  r  r  r   r   usersystem)r(   cpu_times_1r  cpu_times_2s       r   test_cpu_timesz,TestDualProcessImplementation.test_cpu_timesS  sE   nTX..88::Z<$+EK$?$?A A A 	DDG .22<<>>K:"" +"2$ # @ @ @"""K$6d # D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   A9C  C$'C$c                    t          j        | j                                                  }t	          j        dt          t          j        d                    5 }t          j        | j                                                  }t          t          |                    D ]&}|                     ||         ||         d           '|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|  r,   r   )r&   r   r   rf  r   r   r  r  r  rY  rC   r   r   )r(   io_counters_1r  io_counters_2rW  s        r   rm  z.TestDualProcessImplementation.test_io_counters^  s3   tx00<<>>ZB$+EK$?$?A A A 	DG"N4844@@BBM3}--.. A A&&!!$mA&6a ' A A A A:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A8C  C$'C$c                 |   t          j        | j                                                  }t	          j        dt          t          j        d                    5 }| 	                    t          j        | 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  r  r  r%   r   )r(   r  r  s      r   rz  z.TestDualProcessImplementation.test_num_handlesh  s    nTX..::<<ZB$+EK$?$?A A A 	DGV^DH55AACC(* * *:		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                 j   t          j                    D ]}	 t                              |d          }t                              |d          }|                     ||           R# t
          $ r@}t          |          }t          |t           j        t           j	        f          s Y d }~d }~ww xY wd S )NT)use_pebF)
r&   rn   r   proc_cmdliner%   r  r   
isinstancer   r)  )r(   r   aberrs        r   r6  z*TestDualProcessImplementation.test_cmdlinep  s    ;== 
	' 
	'C	'%%c4%88%%c5%99   A&&&&    %c**!#(;(.(<(> ? ?     	
	' 
	's   8A&&
B006B++B0N)r   r   r   r  r  r   r   rP  r  r  rm  rz  r6  r   r   r   r  r  ,  s          ' ' ['   [
 
 
  	D 	D 	D    ' ' ' ' '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communicater(  r	  r	   )codefilenamer;   outputr  s        r   find_other_interpreterz,RemoteProcessTestCase.find_other_interpreter  s     H 	":;; 	  	 H#(D$)?+5?+5+<> > >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   SkipTestr	   r  
executablepython64python32r#   r$   copyr	  r  r   	test_argsr  r  proc32proc64)r(   other_pythonr  	__class__s      r   r  zRemoteProcessTestCase.setUp  s   2244 	D#BD D D 	+NDM(DMM(DMNDMjoo#&ry{{#3#3 ))]Odn,/ * # # ))]Odn,/ * # #r   c                     t                                                       | j                                         | j                                         d S r   )r   tearDownr  r  r  )r(   r  s    r   r  zRemoteProcessTestCase.tearDown  sG    !!!!!!!!r   c                    t          j        | j        j                  }|                     t          |                                          d           |                     |                                dd          | j                   d S Nr   r   )r&   r   r  r   r%   rC   r5  r  r  s     r   test_cmdline_32z%RemoteProcessTestCase.test_cmdline_32  i    N4;?++QYY[[))1---QRR$.99999r   c                    t          j        | j        j                  }|                     t          |                                          d           |                     |                                dd          | j                   d S r  )r&   r   r  r   r%   rC   r5  r  r  s     r   test_cmdline_64z%RemoteProcessTestCase.test_cmdline_64  r  r   c                     t          j        | j        j                  }|                     |                                t          j                               d S r   )r&   r   r  r   r%   r  r#   getcwdr  s     r   test_cwd_32z!RemoteProcessTestCase.test_cwd_32  ?    N4;?++")++.....r   c                     t          j        | j        j                  }|                     |                                t          j                               d S r   )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|           |                     |d         t          t          j	                                         d S )Nr  )
r&   r   r  r   r$   assertInr%   r	  r#   r  )r(   r  es      r   test_environ_32z%RemoteProcessTestCase.test_environ_32  sg    N4;?++IIKK)1---./RY[[1A1ABBBBBr   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# # # # #2" " " " "
: : :
: : :
/ / // / /C C C      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 ]/}|                                }|                     |d         t
                     |                     |d                                         d           |                     |d         t
                     |                     |d         t
                     |                     |d         |           |d	         t          j	        |d	                    |                     |d
         t
                     |                     |d         t
                     |                     |d         t
                     |                     |d         |           |                     |d         |           |                     |d         t
                     |
                                }|;t          j	        |          }|                     |                                           t          j        |                                          }|                     ||           1d S )N)runningpausedstartpausecontinuestopstopped)	automaticmanualdisabled)r  r  start_pendingpause_pendingcontinue_pendingstop_pendingr  r  rv   display_namer
  statusr   binpath
start_typedescription)rm   r&   win_service_iteras_dictassertIsInstancer	  assertNotEqualr3  r  r   r   r   
is_runningwin_service_getr  r%   )r(   valid_statusesvalid_start_typesservdatar   r  ss           r   test_win_service_iterz"TestServices.test_win_service_iter  sL    
 
 
     !
 !
 !
  
  
 
 
   +-- 	& 	&D<<>>D!!$v,444V 2 2 4 4b999!!$~"6<<<!!$z"2C888MM$x..999E{ ,tE{+++!!$y/3777!!$z"2C888!!$|"4c:::MM$|,.?@@@MM$x..999!!$}"5s;;;((**C 0N3''///&tyy{{33AT1%%%%-	& 	&r   c                 x   t           j        j        j        }t           j        j        j        }t          t          j                                                              }|                     t           j	                  5 }t          j
        |dz              d d d            n# 1 swxY w Y   |                     |j        j        |dz              t          j
        |          }t          rddd|f}n|df}t          | }t          j        d|          5  |                     t           j	        |j                   d d d            n# 1 swxY w Y   t          j        d|          5  |                     t           j	        |j                   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        |j                   d d d            n# 1 swxY w Y   t          j        d|          5  |                     t           j        |j                   d d d            n# 1 swxY w Y   |                     |                                t+          |                     |                     |                                t+          |                     |                     |                                t/          |                     |                     |                                t/          |                     d S )Nz???r   r  z/psutil._psplatform.cext.winservice_query_statusr|  z/psutil._psplatform.cext.winservice_query_config)r&   r  r   ERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextr  r  r   r)  r  r%   	exceptionr
   r~  r   r   r  r
  r   r  r	  r  r   )r(   r'  r(  r  cmservicer  r  s           r   test_win_service_getz!TestServices.test_win_service_get  se   #@ 	%$05IF+--..3355v344 	1"4%<000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1*D5L999 (.. 	9ua!=>DD0%8DD!ZI$') ) ) 	D 	Df2GNCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D ZI$') ) ) 	F 	Ff2G4DEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F
  	0ua!45DD'/DD!ZI$') ) ) 	C 	Cf17>BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C ZI$') ) ) 	E 	Ef173CDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E
 	gllnnc'll333g**,,c'll;;;gllnnd7mm444g**,,d7mm<<<<<sZ   >B""B&)B&&EEE(&FF!F&HHH)&II"IN)r   r   r   r%  r-  r   r   r   r  r    s3        .& .& .&`)= )= )= )= )=r   r  __main__)run_from_name)8r  r   r  r  r#   r  r0  r  r  r  r  warningsr&   r   psutil._compatr   r   psutil.testsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   catch_warningssimplefilterr-   r  r9  r5   psutil._pswindowsr   r  r   rN   r   r   rP   r   r   r  r  r  r  r   psutil.tests.runnerr/  __file__r   r   r   <module>r8     s3        				  				      



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


                2111111  Wn--677+G-MNN	 	 	 	 	n 	 	 ON 87 .-	#D #D #D #D #D/ #D #D #DLw6 w6 w6 w6 w6_ w6 w6 w6~4 4 4 4 4 4 4 4x|: |: |: |: |:/ |: |: |:~@5 @5 @5 @5 @5_ @5 @5 @5L Wn--N' N' N' N' N'N N' N' .-N'b Wn--T T T T TN T T .-Tx Wn--[= [= [= [= [=> [= [= .-[=| z 111111M( s   ,!CC C