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

    >>> powershell(
        "Get-CIMInstance Win32_PageFileUsage | Select AllocatedBaseSize")
    zpowershell.exezpowershell.exe not availablezhpowershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -Command "")shutilwhichr   skipr   )cmdcmdlines     r   
powershellr$   ;   sC     <<()kk899	558E	=  g;r   c                    t        d|  d|       j                         }dj                  |j                         dd       j                         }.d|v r"t	        fd|j                         D              S  |      S |S )zCurrently not used, but available just in case. Usage:

    >>> wmic("Win32_OperatingSystem", "FreePhysicalMemory")
    2134124534
    z
wmic path z get     N,c              3   .   K   | ]  } |        y wNr   ).0x	converters     r   	<genexpr>zwmic.<locals>.<genexpr>T   s     <!1<s   )r   stripjoin
splitlinestuplesplit)pathwhatr-   outdatas     `  r   wmicr8   J   s}     z$uTF+
,
2
2
4C773>>#AB'(..0D$;<tzz|<<<T?"r   c                       e Zd Zej                  j                  dej                  vd      d        Zd Z	d Z
d Zd Zd	 Zy
)TestCpuAPIsNUMBER_OF_PROCESSORSz-NUMBER_OF_PROCESSORS env var is not availabler   c                 n    t        t        j                  d         }|t        j                         k(  sJ y )Nr;   )intosenvironpsutil	cpu_count)selfnum_cpuss     r   &test_cpu_count_vs_NUMBER_OF_PROCESSORSz2TestCpuAPIs.test_cpu_count_vs_NUMBER_OF_PROCESSORSa   s/     rzz"89:6++----r   c                 h    t        j                         d   }t        j                         }||k(  sJ y )N   )win32apiGetSystemInfor@   rA   rB   	sys_valuepsutil_values      r   test_cpu_count_vs_GetSystemInfoz+TestCpuAPIs.test_cpu_count_vs_GetSystemInfok   s3     **,Q/	'')L(((r   c                     t        j                         }t        d |j                         D              }t	        j
                         |k(  sJ y )Nc              3   4   K   | ]  }|j                     y wr*   )NumberOfLogicalProcessorsr+   procs     r   r.   z<TestCpuAPIs.test_cpu_count_logical_vs_wmi.<locals>.<genexpr>t   s      
/3D**
   wmiWMIsumWin32_Processorr@   rA   )rB   wprocss      r   test_cpu_count_logical_vs_wmiz)TestCpuAPIs.test_cpu_count_logical_vs_wmir   sF    GGI 
787H7H7J
 
 !U***r   c                     t        j                         }t        d |j                         D              }t	        j
                  d      |k(  sJ y )Nc              3   4   K   | ]  }|j                     y wr*   )NumberOfCoresrP   s     r   r.   z:TestCpuAPIs.test_cpu_count_cores_vs_wmi.<locals>.<genexpr>{   s     G4D&&GrR   F)logicalrS   )rB   rX   coress      r   test_cpu_count_cores_vs_wmiz'TestCpuAPIs.test_cpu_count_cores_vs_wmiy   s?    GGIG13D3D3FGG.%777r   c                 p    t        j                         t        t        j                  d            k(  sJ y )NT)percpu)r@   rA   len	cpu_timesrB   s    r   test_cpu_count_vs_cpu_timesz'TestCpuAPIs.test_cpu_count_vs_cpu_times~   s)    !S)9)9)F%GGGGr   c                    t        j                         }|j                         d   }|j                  t	        j
                         j                  k(  sJ |j                  t	        j
                         j                  k(  sJ y Nr   )	rT   rU   rW   CurrentClockSpeedr@   cpu_freqcurrentMaxClockSpeedmax)rB   rX   rQ   s      r   test_cpu_freqzTestCpuAPIs.test_cpu_freq   sb    GGI  "1%%%):)B)BBBB!!V__%6%:%::::r   N)r   r   r   r   markskipifr>   r?   rD   rL   rZ   r`   rf   rn   r   r   r   r:   r:   `   sQ    [[bjj0>  .	.)+8
H;r   r:   c                       e Zd Zd Zd Zd Zd Zd Z e       d        Z	 e       d        Z
 e       d        Zd	 Zd
 Zd Zd Zy)TestSystemAPIsc                     t        d      }t        j                  d      j                         }|D ]=  }d|j	                  dd      j                         v r&||vs+| j                  |d       y )Nzipconfig /allT)perniczpseudo-interface -z+ nic wasn't found in 'ipconfig /all' output)r   r@   net_io_counterskeysreplacelowerfail)rB   r6   nicsnics       r   test_nic_nameszTestSystemAPIs.test_nic_names   sv    !%%T2779 	C!S[[c%:%@%@%BB#~iigHI 		r   c                     t        j                         j                         d   }t        |j                        t        j                         j                  k(  sJ y rh   )rT   rU   Win32_ComputerSystemr=   TotalPhysicalMemoryr@   virtual_memorytotalrB   rX   s     r   test_total_phymemz TestSystemAPIs.test_total_phymem   sC    GGI**,Q/1(()V-B-B-D-J-JJJJr   c                     t        j                         j                         d   }t        t	        |j
                        t        j                         j                  z
        t        k  sJ y rh   )
rT   rU   Win32_PerfRawData_PerfOS_Memoryabsr=   AvailableBytesr@   r   freer
   r   s     r   test_free_phymemzTestSystemAPIs.test_free_phymem   sT    GGI557:A$$%(=(=(?(D(DDE 	
 r   c                    t        j                         j                         d   }t        |j                        t        j                         j                  z
  t        j                         j                  k(  sJ t        j                         j                  dk(  rGt        j                         j                  dk(  sJ t        j                         j                  dk(  sJ y y rh   )rT   rU   r   r=   CommitLimitr@   r   r   swap_memoryr   usedr   s     r   test_total_swapmemz!TestSystemAPIs.test_total_swapmem   s    GGI557:!6!6!8!>!>>!!#))*	
* %%*%%',,111%%',,111 +r   c                    t        j                         j                  dkD  rt        j                         j                  d      d   }t        |j                        dz  t        |j                        z  }t        j                         j                  dk\  sJ t        t        j                         j                  |z
        dk  sJ t        j                         j                  dk  sJ y y )Nr   _Total)Named   rF   )r@   r   r   rT   rU   #Win32_PerfRawData_PerfOS_PagingFiler=   PercentUsagePercentUsage_Basepercentr   )rB   rX   percentSwaps      r   test_percent_swapmemz#TestSystemAPIs.test_percent_swapmem   s    %%)	==8=LQOAann-3c!:M:M6NNK %%'//1444v))+33kABQFFF%%'//3666 *r   c                     t        j                         j                         }|D ch c]  }|j                   }}t	        t        j                               }||k(  sJ y c c}w r*   )rT   rU   Win32_Process	ProcessIdsetr@   pids)rB   rX   r,   wmi_pidspsutil_pidss        r   	test_pidszTestSystemAPIs.test_pids   sR     GGI##%)*+AAKK++&++-(;&&& ,s   A!c                    t        j                  d      }t        j                         j	                         }|D ]*  }|D ]  }|j
                  j                  dd      |j                  k(  s.|j                  s Bd|j                  v r R|j                  j                  d      r o	 t        j                  |j                        }|j                  t        |j                        k(  sJ t        |j                         }|j"                  |k(  sJ t%        |j"                  |z
        dkD  r!| j'                  d|j"                   d	|         | j'                  d
|       y # t        $ r Y  <w xY w)NTall\r&   cdromA:i   zpsutil=z, wmi=zcan't find partition )r@   disk_partitionsrT   rU   Win32_LogicalDiskdevicery   DeviceID
mountpointopts
startswith
disk_usageFileNotFoundErrorr   r=   Size	FreeSpacer   r   r{   )rB   ps_parts	wmi_partsps_partwmi_partusagewmi_frees          r   
test_diskszTestSystemAPIs.test_disks   sZ   ))d3GGI//1	 	EG% E>>))$3x7H7HH"--',,.))44T: & 1 1'2D2D E !;;#hmm*<<<<"8#5#56H ::1115::014DD"ii'%**VH:(NOO)E, ii"7{ CDD/	E - s   +E**	E87E8c                    t        j                         D ]  }d|j                  v rt        j                  |j
                        }t        j                  |j
                        }t        |d   |j                  z
        t        k  sJ t        |d   |j                  z
        t        k  sJ |j                  |j                  |j                  z
  k(  rJ  y )Nr   r   r'   )r@   r   r   rG   GetDiskFreeSpaceExr   r   r   r   r	   r   r   )rB   diskrJ   rK   s       r   test_disk_usagezTestSystemAPIs.test_disk_usage   s    **, 		OD$))# 33DOODI!,,T__=Ly|l&7&778;OOOOIaL<#5#5569MMM$$(:(:\=N=N(NNNN		Or   c                 B   t        j                         j                  d      D cg c]  }|r|j                  d      s|dz    }}t	        j
                  d      D cg c])  }|j                  j                  d      s|j                  + }}||k(  sJ y c c}w c c}w )Nz\ r   r   Tr   )rG   GetLogicalDriveStringsr3   r   r@   r   r   )rB   r,   rJ   rK   s       r   test_disk_partitionsz#TestSystemAPIs.test_disk_partitions   s     446<<XF
d+ H
	 
 ++5
<<**40 LL
 

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


s   B.Bc                 4   t        t        j                               }t        j                         j                         }t               }|D ]8  }|j                  |j                         |j                  |j                         : ||z  sJ d| d|        y )Nzno common entries in z, )	r   cextnet_if_statsrT   rU   Win32_NetworkAdapteraddr   NetConnectionID)rB   ps_nameswmi_adapters	wmi_nameswmi_adapters        r   test_net_if_statsz TestSystemAPIs.test_net_if_stats   s    t((*+wwy557E	' 	7KMM+**+MM+556	7 y 	;"8*Byk:	; r   c                 r   t        j                         j                         }|d   j                  j	                  d      d   }t
        j
                  j                  |d      }t
        j
                  j                  t        j                               }t        ||z
  j                               }|dk  sJ y )Nr   .%Y%m%d%H%M%SrF   )rT   rU   Win32_OperatingSystemLastBootUpTimer3   datetimestrptimefromtimestampr@   	boot_timer   total_seconds)rB   wmi_oswmi_btime_strwmi_btime_dt	psutil_dtdiffs         r   test_boot_timezTestSystemAPIs.test_boot_time  s    002q	0066s;A>((11>
 %%33F4D4D4FG	L9,;;=>qyyr   c                 4   t        j                  dd      5  t        j                         dk(  sJ 	 d d d        t        j                  dd      5  t        j                         dk(  sJ 	 d d d        t        j                  dd      5  t        j                         dk(  sJ 	 d d d        t        j                  dd      5  t        j                         dk(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   y xY w)Nz psutil._pswindows.cext.boot_timerF   return_value      iM  )r   patchr@   r   re   s    r   test_boot_time_fluctuationz)TestSystemAPIs.test_boot_time_fluctuation  s    ZZ:K 	+##%***	+ZZ:K 	+##%***	+ZZ:K 	+##%***	+ZZ:M 	-##%,,,	- 	-	+ 	+	+ 	+	+ 	+	- 	-s/   C*C6DD*C36C?DDN)r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   rr      sy    	K
2	7. ' ' E E8 
O 
O)	;	-r   rr   c                       e Zd Zd Zej
                  j                  e d      d        Zej
                  j                  e d      d        Z	d Z
d Zd Zd	 Zy
)TestSensorsBatteryc                     t        j                         d   rt        j                         J y t        j                         J y )NSystemBatteriesPresent)rG   GetPwrCapabilitiesr@   sensors_batteryre   s    r   test_has_batteryz#TestSensorsBattery.test_has_battery'  s>    &&()AB))+777))+333r   z
no batteryr   c                     t        j                         }|j                  d      d   }t        j                         }t        |j                  |j                  z
        dk  sJ y )Nselect * from Win32_Batteryr   r'   )rT   rU   queryr@   r   r   r   EstimatedChargeRemainingrB   rX   battery_wmibattery_psutils       r   test_percentzTestSensorsBattery.test_percent-  sZ    GGIgg;<Q?//1&&)M)MMN	
r   c                     t        j                         }|j                  d      d   }t        j                         }|j
                  |j                  dk(  k(  sJ y )Nr   r      )rT   rU   r   r@   r   power_pluggedBatteryStatusr   s       r   test_power_pluggedz%TestSensorsBattery.test_power_plugged7  sP    GGIgg;<Q?//1 ++0I0IQ0NOOOr   c                     t        j                  dd      5 }t        j                         J |j                  sJ 	 d d d        y # 1 sw Y   y xY w)N&psutil._pswindows.cext.sensors_battery)r      r   r   r   )r   r   r@   r   calledrB   ms     r   test_emulate_no_batteryz*TestSensorsBattery.test_emulate_no_battery@  sN    ZZ4'
 	 ))+33388O8	 	 	s   %AAc                     t        j                  dd      5 }t        j                         j                  t        j
                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )r'   r   r   r   r   r   r   r@   r   secsleftPOWER_TIME_UNLIMITEDr   r   s     r   test_emulate_power_connectedz/TestSensorsBattery.test_emulate_power_connectedH  b    ZZ4<
 	&&(11..// 88O8	 	 	   A A""A+c                     t        j                  dd      5 }t        j                         j                  t        j
                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )r      r   r   r   r   r   s     r   test_emulate_power_chargingz.TestSensorsBattery.test_emulate_power_chargingR  r  r  c                     t        j                  dd      5 }t        j                         j                  t        j
                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )r   r   r   r   )r   r   r@   r   r  POWER_TIME_UNKNOWNr   r   s     r   test_emulate_secs_left_unknownz1TestSensorsBattery.test_emulate_secs_left_unknown\  s^    ZZ4&
 	 &&(11V5N5NNN88O8	 	 	r  N)r   r   r   r   r   ro   rp   r   r   r   r   r  r  r  r   r   r   r   r   &  sq    4 [[K=
 >
 [[K=P >Pr   r   c                       e Zd Zed        Zed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestProcessc                 6    t               j                  | _        y r*   r   pidclss    r   
setUpClasszTestProcess.setUpClassm       "&&r   c                 .    t        | j                         y r*   r   r  r  s    r   tearDownClasszTestProcess.tearDownClassq      #''r   c                     t        j                  d      }t        j                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY wrh   )r@   Processr   raisesAccessDeniedkillrB   ps     r   test_issue_24zTestProcess.test_issue_24u  s@    NN1]]6../ 	FFH	 	 	s   AAc                 Z   t        j                  d      }|j                         dk(  sJ t        |       |j	                          |j                         dk\  sJ 	 |j                         d d \  }}|dkD  sJ y # t         j                  $ r t        j                         d   dvr Y y w xY w)Nr   Systemg        r   r   r'   >   win-7win7vista)
r@   r  namestrusernamecreate_timememory_infor  platformuname)rB   r   rss_vmss       r   test_special_pidzTestProcess.test_special_pidz  s    NN1vvx8### 	A	

}}#%%%	+IC 7N7 "" 	~~"*DD E	s   A: :-B*)B*c                     t        j                  | j                        }t        j                  t
              5  |j                  t        j                         d d d        y # 1 sw Y   y xY wr*   )	r@   r  r  r   r  
ValueErrorsend_signalsignalSIGINTr  s     r   test_send_signalzTestProcess.test_send_signal  sE    NN488$]]:& 	)MM&--(	) 	) 	)s    A""A+c                    t        j                  t        j                               }|j	                         }t        j                  t        j                  t        j                  t        j                               }|j	                         }||dz   k(  sJ t        j                  |       |j	                         |k(  sJ y )Nr'   )r@   r  r>   getpidnum_handlesrG   OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSECloseHandle)rB   r   beforehandleafters        r   test_num_handles_incrementz&TestProcess.test_num_handles_increment  s    NN299;'%%..		
 
"""V$}}&(((r   c                 v   t        j                  | j                         j                        }|j	                  t
        j                         |j	                  t
        j                         |j                          |j                          t        j                  t         j                        5  |j	                  t
        j                         d d d        t        j                  t         j                        5  |j	                  t
        j                         d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY wr*   )r@   r  r   r  r3  r4  CTRL_C_EVENTCTRL_BREAK_EVENTr  waitr   r  NoSuchProcessr  s     r   test_ctrl_signalszTestProcess.test_ctrl_signals  s    NN4..0445	f))*	f--.		]]6//0 	/MM&--.	/]]6//0 	3MM&112	3 	3	/ 	/	3 	3s   / D#: D/#D,/D8c                     t        j                  t        j                        }|j	                  d      rt        j                  d      t        j                         j                         |k(  sJ y )N$zrunning as service account)
rG   GetUserNameExr;  NameSamCompatibleendswithr   r!   r@   r  r)  )rB   r'  s     r   test_usernamezTestProcess.test_username  sT    %%h&@&@A== ++:;;~~((*d222r   c                 0   t        j                  ddt        j                               j	                         }dj                  t        j                         j                               }|d   dcxk(  r|d   k7  rn n|j                  ddd      }||k(  sJ y )Nz[ ]+ru   r   r   r&   r   )
resubrG   GetCommandLiner/   r0   r@   r  r#   ry   rI   s      r   test_cmdlinezTestProcess.test_cmdline  s}    FF7C)@)@)BCIIK	xx 0 8 8 :;Q<31,q/1
 "))#r15IL(((r   c                 J   t        j                  t        j                  t        j                  t        j                               }| j                  t         j                  |       t        j                  |      }t        j                         j                         }||k(  sJ y r*   )rG   r:  r;  r<  r=  r>   r8  
addCleanupr>  win32processGetPriorityClassr@   r  nicerB   r@  rJ   rK   s       r   	test_nicezTestProcess.test_nice  sr    %%..		
 	,,f5 11&9	~~',,.y(((r   c                    t        j                  t        j                  t        j                  | j
                        }| j                  t         j                  |       t        j                  |      }t        j                  | j
                        j                         }|d   |j                  k(  sJ |d   |j                  k(  sJ |d   |j                  k(  sJ |d   |j                   k(  sJ |d   |j"                  k(  sJ |d   |j$                  k(  sJ |d   |j&                  k(  sJ |d   |j(                  k(  sJ |j*                  |j                  k(  sJ |j,                  |j&                  k(  sJ y )	NPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsage)rG   r:  r;  r<  r=  r  rU  r>  rV  GetProcessMemoryInfor@   r  r+  	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpagefilepeak_pagefiler.  vmsrY  s       r   test_memory_infozTestProcess.test_memory_info  s   %%..
 	,,f5 55f=	~~dhh/;;=-.,2H2HHHH)*l.?.????/0++,	
, ./<3J3JJJJ23../	
/ ./<3M3MM	
M)\-B-BBBB,-1K1KKKK<#4#4444<#8#8888r   c                 t   t        j                  t        j                  t        j                  | j
                        }| j                  t         j                  |       t        j                  | j
                        }|j                          |j                         }t        j                  |      }||k(  sJ y r*   )rG   r:  r;  r<  r=  r  rU  r>  r@   r  r   rF  rV  GetExitCodeProcess)rB   r@  r   rK   rJ   s        r   	test_waitzTestProcess.test_wait  s    %%..
 	,,f5NN488$	vvx 33F;	y(((r   c                 h   d }t        j                  t        j                  t        j                  | j
                        }| j                  t         j                  |        |t        j                  |      d         }t        j                  | j
                        j                         }||k(  sJ y )Nc                 P    t        d      D cg c]  }d|z  | z  s| c}S c c}w )N@   r'   )range)r,   is     r   from_bitmaskz3TestProcess.test_cpu_affinity.<locals>.from_bitmask  s$    $Ry9!Q!VqLA999s   ##r   )rG   r:  r;  r<  r=  r  rU  r>  rV  GetProcessAffinityMaskr@   r  cpu_affinity)rB   rw  r@  rJ   rK   s        r   test_cpu_affinityzTestProcess.test_cpu_affinity  s    	: %%..
 	,,f5 //7:
	 ~~dhh/<<>y(((r   c                 ,   t        j                  t        j                  t        j                  t        j                               }| j                  t         j                  |       t        j                  |      }t        j                         j                         }|j                  |d   k(  sJ |j                  |d   k(  sJ |j                   |d   k(  sJ |j"                  |d   k(  sJ |j$                  |d   k(  sJ |j&                  |d   k(  sJ y )NReadOperationCountWriteOperationCountReadTransferCountWriteTransferCountOtherOperationCountOtherTransferCount)rG   r:  r;  r<  r=  r>   r8  rU  r>  rV  GetProcessIoCountersr@   r  io_counters
read_countwrite_count
read_byteswrite_bytesother_countother_bytesrY  s       r   test_io_counterszTestProcess.test_io_counters  s    %%..		
 	,,f5 55f=	~~'335&&)4H*IIII''95J+KKKK&&)4G*HHHH''95I+JJJJ''95J+KKKK''95I+JJJJr   c                    dd l }dd l}d}|j                  j                  j	                  |d| j
                        }| j                  |j                  j                  j                  |       |j                  j                         }|j                  j                  j                  ||j                  |             |j                  }t        j                  | j
                        j                         }||k(  sJ y )Nr      )ctypesctypes.wintypeswindllkernel32r:  r  rU  r>  wintypesDWORDGetProcessHandleCountbyrefvaluer@   r  r9  )rB   r  r<  r@  hndcntrJ   rK   s          r   test_num_handleszTestProcess.test_num_handles  s    $)!''33%q$((
 	..::FC&&(44FLL(	
 LL	~~dhh/;;=y(((r   c                    t               }d|_        t        j                  d|      5  t        j                  d      5 }t	        j
                         }t        j                  t        j                        5  |j                          d d d        d d d        d d d        j                  dk\  sJ y # 1 sw Y   +xY w# 1 sw Y   /xY w# 1 sw Y   3xY w)Ni+  z psutil._psplatform.cext.proc_cwdside_effectz
time.sleeprF   )OSErrorwinerrorr   r   r@   r  r   r  r  cwd
call_count)rB   excr   r   s       r   test_error_partial_copyz#TestProcess.test_error_partial_copy&  s    iZZ:L 	L) QNN$]]6#6#67 EEG	
 ||q     	 	s:   C
8B>7B2B>C
2B;7B>>C	C

Cc                    t        j                         d   dz   }t         j                  j                  |      }t	        j
                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY w)Nr
  i )r@   r   _psplatformr  r   r  rG  exe)rB   r  rQ   s      r   test_exezTestProcess.test_exe1  s_     kkmB%'!!))#.]]6//0 	HHJ	 	 	s   A77B N)r   r   r   classmethodr  r  r!  r0  r6  rB  rH  rN  rS  rZ  rn  rq  rz  r  r  r  r  r   r   r   r  r  l  st    ' '  
")
	)	33	)4)96	))K)$	!r   r  c                       e Zd ZdZed        Zed        Zd Zej                  j                  ed      d        Zd Zd	 Z e       d
        Z e       d        Zd Zy)TestProcessWMIz%Compare Process API results with WMI.c                 6    t               j                  | _        y r*   r  r  s    r   r  zTestProcessWMI.setUpClass=  r  r   c                 .    t        | j                         y r*   r  r  s    r   r  zTestProcessWMI.tearDownClassA  r  r   c                     t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         |j                  k(  sJ y Nr   r   )rT   rU   r   r  r@   r  r'  CaptionrB   rX   r   s      r   	test_namezTestProcessWMI.test_nameE  sN    GGI##dhh#7:NN488$vvx199$$$r   z!unreliable path on GITHUB_ACTIONSr   c                    t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         j                         |j                  j                         k(  sJ y r  )	rT   rU   r   r  r@   r  r  rz   ExecutablePathr  s      r   r  zTestProcessWMI.test_exeK  sc     GGI##dhh#7:NN488$ uuw}}!"2"2"8"8"::::r   c                     t        j                         j                  | j                        d   }t	        j
                  | j                        }dj                  |j                               |j                  j                  dd      k(  sJ y )Nr  r   ru   r   r&   )
rT   rU   r   r  r@   r  r0   r#   CommandLinery   r  s      r   rS  zTestProcessWMI.test_cmdlineU  sd    GGI##dhh#7:NN488$xx		$(=(=c2(FFFFr   c                    t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         \  }}}| d| }|j                         |k(  sJ y )Nr  r   r   )rT   rU   r   r  r@   r  GetOwnerr)  )rB   rX   r   domain_r)  s         r   rN  zTestProcessWMI.test_usernameZ  sl    GGI##dhh#7:NN488$jjl8XRz*zz|x'''r   c                    t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         j                  }|t        |j                        k(  sJ y r  )
rT   rU   r   r  r@   r  r+  r.  r=   r]  )rB   rX   r   r.  s       r   test_memory_rsszTestProcessWMI.test_memory_rssa  s`    GGI##dhh#7:NN488$mmo!!c!**++++r   c                 B   t        j                         j                  | j                        d   }t	        j
                  | j                        }|j                         j                  }t        |j                        }|||dz  hvr| j                  d| d|       y )Nr  r   r  zwmi=z	, psutil=)rT   rU   r   r  r@   r  r+  rm  r=   PageFileUsager{   )rB   rX   r   rm  	wmi_usages        r   test_memory_vmszTestProcessWMI.test_memory_vmsh  s    GGI##dhh#7:NN488$mmo!!
 (	y)d"233))d9+Yse<== 4r   c                 n   t        j                         j                  | j                        d   }t	        j
                  | j                        }t        |j                  j                  d      d         }t        j                  dt        j                  |j                                     }||k(  sJ y )Nr  r   r   r   )rT   rU   r   r  r@   r  r(  CreationDater3   timestrftime	localtimer*  )rB   rX   r   wmic_createpsutil_creates        r   test_create_timezTestProcessWMI.test_create_timeu  s    GGI##dhh#7:NN488$!....s3A67DNN1==?;
 m+++r   N)r   r   r   __doc__r  r  r  r  r   ro   rp   r   r  rS  rN  r   r  r  r  r   r   r   r  r  :  s    /' '  % [[B  ;;G
( , , 
> 
>,r   r  c                   T    e Zd ZdZed        Zed        Zd Zd Zd Z	d Z
d Zd	 Zy
)TestDualProcessImplementationaw  Certain APIs on Windows have 2 internal implementations, one
    based on documented Windows APIs, another one based
    NtQuerySystemInformation() which gets called as fallback in
    case the first fails because of limited permission error.
    Here we test that the two methods return the exact same value,
    see:
    https://github.com/giampaolo/psutil/issues/304.
    c                 6    t               j                  | _        y r*   r  r  s    r   r  z(TestDualProcessImplementation.setUpClass  r  r   c                 .    t        | j                         y r*   r  r  s    r   r  z+TestDualProcessImplementation.tearDownClass  r  r   c                    t        j                  | j                        j                         }t	        j
                  dt              5 }t        j                  | j                        j                         }t        |      t        |      k(  sJ t        t        |            D ]/  }||   dk\  sJ ||   dk\  sJ t        ||   ||   z
        dk  r/J  |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz(psutil._psplatform.cext.proc_memory_infor  r   i   )r@   r  r  r+  r   r   PermissionErrorrc   ru  r   r   )rB   mem_1funmem_2rv  s        r   rn  z.TestDualProcessImplementation.test_memory_info  s    txx(446ZZ6'
 
	 NN488,88:Eu:U+++3u:& 6Qx1}$}Qx1}$}58eAh./#5556 :::
	 
	 
	s   	B	C.C..C7c                 @   t        j                  | j                        j                         }t	        j
                  dt              5 }t        j                  | j                        j                         |k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)N"psutil._psplatform.cext.proc_timesr  )r@   r  r  r*  r   r   r  r   )rB   ctimer  s      r   r  z.TestDualProcessImplementation.test_create_time  sy    txx(446ZZ0'
 	 >>$((+779UBBB:::	 	 	   	ABBc                    t        j                  | j                        j                         }t	        j
                  dt              5 }t        j                  | j                        j                         }|j                  sJ t        |j                  |j                  z
        dk  sJ t        |j                  |j                  z
        dk  sJ 	 d d d        y # 1 sw Y   y xY w)Nr  r  g{Gz?)r@   r  r  rd   r   r   r  r   r   usersystem)rB   cpu_times_1r  cpu_times_2s       r   test_cpu_timesz,TestDualProcessImplementation.test_cpu_times  s    nnTXX.88:ZZ0'
 	G  ..2<<>K:::{''+*:*::;dBBB{))K,>,>>?$FFF	G 	G 	Gs   	B
CC&c                    t        j                  | j                        j                         }t	        j
                  dt              5 }t        j                  | j                        j                         }t        t        |            D ]  }t        ||   ||   z
        dk  rJ  |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz(psutil._psplatform.cext.proc_io_countersr  rF   )r@   r  r  r  r   r   r  ru  rc   r   r   )rB   io_counters_1r  io_counters_2rv  s        r   r  z.TestDualProcessImplementation.test_io_counters  s    txx0<<>ZZ6'
 	 "NN4884@@BM3}-. D=+mA.>>?!CCCD:::	 	 	s   	AC&CC
c                 @   t        j                  | j                        j                         }t	        j
                  dt              5 }t        j                  | j                        j                         |k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz(psutil._psplatform.cext.proc_num_handlesr  )r@   r  r  r9  r   r   r  r   )rB   r9  r  s      r   r  z.TestDualProcessImplementation.test_num_handles  sy    nnTXX.::<ZZ6'
 	 >>$((+779[HHH:::	 	 	r  c                 :   t        j                         D ]8  }	 t        j                  |d      }t        j                  |d      }||k(  r8J  y # t        $ r@}t        |      }t        |t         j                  t         j                  f      s Y d }~d }~ww xY w)NT)use_pebF)	r@   r   r   proc_cmdliner  r   
isinstancer  rG  )rB   r  aberrs        r   rS  z*TestDualProcessImplementation.test_cmdline  s    ;;= 	C
%%c4%8%%c5%9 Avv	  %c*!&--v/C/CD s   .A	B6BBN)r   r   r   r  r  r  r  rn  r  r  r  r  rS  r   r   r   r  r    sN     ' '  	G	r   r  c                   h     e Zd ZdZed        ZddgZ fdZ fdZd Z	d Z
d	 Zd
 Zd Zd Z xZS )RemoteProcessTestCasezCertain functions require calling ReadProcessMemory.
    This trivially works when called on the current process.
    Check that this works on other processes, especially when they
    have a different bitness.
    c                     d} t        j                   d      D ]s  }t        j                  |d| gt        j                  t        j                        }|j                         \  }}|j                          |t        t               k(  sq|c S  y )Nz6import sys; sys.stdout.write(str(sys.maxsize > 2**32))zC:\Python*\python.exe-c)argsstdoutstderr)	glob
subprocessPopenPIPESTDOUTcommunicaterF  r(  r   )codefilenamerQ   outputr  s        r   find_other_interpreterz,RemoteProcessTestCase.find_other_interpreter  s     H 		":; 		 H##d+!!((D
 ((*IFAIIK\**		 r   r  zimport sys; sys.stdin.read()c                 f   t         |           | j                         }|t        j                  d      t
        rt        j                  | _        || _	        n|| _        t        j                  | _	        t        j                  j                         }t        t        j                               |d<   | j                  | j                  g| j                   z   |t"        j$                        | _        | j                  | j                  g| j                   z   |t"        j$                        | _        y )Nz0could not find interpreter with opposite bitnessTHINK_OF_A_NUMBER)envstdin)supersetUpr  r   r!   r   sys
executablepython64python32r>   r?   copyr(  r8  r   	test_argsr  r  proc32proc64)rB   other_pythonr  	__class__s      r   r  zRemoteProcessTestCase.setUp  s    224++B  NNDM(DM(DMNNDMjjoo#&ryy{#3 ))]]Odnn,#Z__ * 
 ))]]Odnn,#Z__ * 
r   c                     t         |           | j                  j                          | j                  j                          y r*   )r  tearDownr  r  r  )rB   r  s    r   r  zRemoteProcessTestCase.tearDown  s.    !!r   c                     t        j                  | j                  j                        }t	        |j                               dk(  sJ |j                         dd  | j                  k(  sJ y N   r'   )r@   r  r  r  rc   r#   r  r  s     r   test_cmdline_32z%RemoteProcessTestCase.test_cmdline_32  O    NN4;;??+199;1$$$yy{12$..000r   c                     t        j                  | j                  j                        }t	        |j                               dk(  sJ |j                         dd  | j                  k(  sJ y r	  )r@   r  r  r  rc   r#   r  r  s     r   test_cmdline_64z%RemoteProcessTestCase.test_cmdline_64  r  r   c                     t        j                  | j                  j                        }|j	                         t        j                         k(  sJ y r*   )r@   r  r  r  r  r>   getcwdr  s     r   test_cwd_32z!RemoteProcessTestCase.test_cwd_32  2    NN4;;??+uuw"))+%%%r   c                     t        j                  | j                  j                        }|j	                         t        j                         k(  sJ y 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                        }|j	                         }d|v sJ |d   t        t        j                               k(  sJ y )Nr  )r@   r  r  r  r?   r(  r>   r8  )rB   r   es      r   test_environ_32z%RemoteProcessTestCase.test_environ_32%  sP    NN4;;??+IIK"a'''$%RYY[)9999r   c                     t        j                  | j                  j                        }	 |j	                          y # t         j
                  $ r Y y w xY wr*   )r@   r  r  r  r?   r  r  s     r   test_environ_64z%RemoteProcessTestCase.test_environ_64+  s>    NN4;;??+	IIK"" 		s   < AA)r   r   r   r  staticmethodr  r  r  r  r  r  r  r  r  r  __classcell__)r  s   @r   r  r    sQ        " 56I
0"
1
1
&&:r   r  c                       e Zd Zd Zd Zy)TestServicesc                    h d}h d}h d}t        j                         D ]V  }|j                         }t        |d   t              sJ |d   j                         sJ t        |d   t              sJ t        |d   t              sJ |d   |v sJ |d   t        j                  |d          t        |d	   t              sJ t        |d   t              sJ t        |d
   t              sJ |d
   |v sJ |d   |v sJ t        |d   t              sJ |j                         }|'t        j                  |      }|j                         sJ t        j                  |j                               }||k(  rWJ  y )N>   stoppausestartpausedrunningstoppedcontinue>   manualdisabled	automatic>   r"  r#  r$  stop_pendingpause_pendingstart_pendingcontinue_pendingr'  display_namer)  statusr  binpath
start_typedescription)r@   win_service_iteras_dictr  r(  r/   r  r  
is_runningwin_service_getr'  )rB   valid_statusesvalid_start_typesservr7   r  r   ss           r   test_win_service_iterz"TestServices.test_win_service_iter:  s   
 @
 ++- 	D<<>Dd6lC000<%%'''d>2C888d:.444>^333E{&tE{+d9os333d:.444d<0#666%)::::>^333d=13777((*CNN3'||~%~&&tyy{3A199-	r   c                    t         j                  j                  j                  }t         j                  j                  j                  }t        t        j                               j                         }t        j                  t         j                        5 }t        j                  |dz          d d d        j                  j                  |dz   k(  sJ t        j                  |      }t        ddd      }||_        t        j                   d|      5  t        j                  t         j                        5  |j#                          d d d        d d d        t        j                   d|      5  t        j                  t         j                        5  |j%                          d d d        d d d        t        ddd      }||_        t        j                   d|      5  t        j                  t         j&                        5  |j#                          d d d        d d d        t        j                   d|      5  t        j                  t         j&                        5  |j%                          d d d        d d d        |j                         t)        |      v sJ |j+                         t)        |      v sJ |j                         t-        |      v sJ |j+                         t-        |      v sJ y # 1 sw Y   JxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   xY w# 1 sw Y   $xY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nz???r   msgz/psutil._psplatform.cext.winservice_query_statusr  z/psutil._psplatform.cext.winservice_query_config)r@   r  r   ERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextr2  r'  r   r  rG  r5  r  r  r  r   r   r.  r)  r  r(  r-  repr)rB   r=  r>  r'  cmservicer  s          r   test_win_service_getz!TestServices.test_win_service_getf  s   ##@@ 	% %0055IIF++-.335]]6//0 	1B""4%<0	1xx}}u,,, ((.a"3ZZ=3
 	! v334 ! !	!
 ZZ=3
 	# v334 #  "#	# a"*ZZ=3
 	! v223 ! !	!
 ZZ=3
 	# v223 #  "#	# ||~W---##%W555||~g...##%g666K	1 	1! !	! 	!# #	# 	#! !	! 	!# #	# 	#s   K8$L:LL2$L,L'L,"$ML9M>$M"M3M8LL	
LLL)	$L,,L69M	>MMM	MM(N)r   r   r   r:  rC  r   r   r   r  r  8  s    *X,7r   r  )5r  r   r  r>   r,  rP  r   r4  r  r  r  warningsunittestr   r@   r   psutil.testsr   r   r   r   r	   r
   r   r   r   r   r   r   catch_warningssimplefilterrG   r;  rV  rT   psutil._pswindowsr   r  r   ro   rp   r   r$   r=   r8   r:   rr   r   r  r  r  r  r  r   r   r   <module>rJ     s      	  	    
      ' $ !  - * '  )  ' " 4	 	 	 	" h' 1  K7D!@A	n 	 B 8	  # ,%;/ %;PV-_ V-|> >LK/ K\B,_ B,P K7TN T 8Tn K7UN U 8Uz K7Y7> Y7 8Y7e s   #G55G?