bg_hdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddl mZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!erIesGe j"5e j#dddl$Z$ddl%Z%ddl&Z&ddl'Z'dddn #1swxYwYerddl(m)Z)e j*j+Z+e j,e de j,ede j,eoe dGddeZ-dZ.e/fdZ0Gdde-Z1Gd d!e-Z2Gd"d#e-Z3Gd$d%e-Z4Gd&d'e-Z5e j,e dGd(d)eZ6e j,e dGd*d+eZ7e j,e dGd,d-eZ8e9d.krdd/l:m;Z;e;e<dSdS)0zWindows specific tests.N)WINDOWS)FileNotFoundError)super)which)APPVEYOR)GITHUB_ACTIONS) HAS_BATTERY)IS_64BIT)PY3)PYPY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)mock)retry_on_failure)sh)spawn_testproc) terminateignore)convert_oserrorz WINDOWS onlyzpywin32 not available on PYPYzpywin32 broken on GITHUB + PY2ceZdZdS)WindowsTestCaseN)__name__ __module__ __qualname__l/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib64/python3.11/site-packages/psutil/tests/test_windows.pyrr;s  Drrcvtdstjddd|zz}t|S)zCurrently not used, but avalable just in case. Usage: >>> powershell( "Get-CIMInstance Win32_PageFileUsage | Select AllocatedBaseSize") zpowershell.exezpowershell.exe not availablez?powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive z,-NoProfile -WindowStyle Hidden -Command "%s")runittestSkipTestr)cmdcmdlines r powershellr$CsK ! " "@ >???I6< =  g;;rcTtd|d|}d|dd}>> wmic("Win32_OperatingSystem", "FreePhysicalMemory") 2134124534 z wmic path z get N,c&g|] }|Srr).0x converters r zwmic..[s!===1))A,,===r)rstripjoin splitlinestuplesplit)pathwhatr,outdatas ` rwmicr7Qs "dddDD 1 2 2 8 8 : :C 773>>##ABB' ( ( . . 0 0D $;;==== ===>> >9T?? " rcneZdZejdejvddZdZdZ dZ dZ dZ d S) TestCpuAPIsNUMBER_OF_PROCESSORSz-NUMBER_OF_PROCESSORS env var is not availablecttjd}||t jdS)Nr:)intosenviron assertEqualpsutil cpu_count)selfnum_cpuss r&test_cpu_count_vs_NUMBER_OF_PROCESSORSz2TestCpuAPIs.test_cpu_count_vs_NUMBER_OF_PROCESSORSis> rz"89:: 6#3#5#566666rctjd}tj}|||dS)N)win32api GetSystemInfor@rAr?rB sys_value psutil_values rtest_cpu_count_vs_GetSystemInfoz+TestCpuAPIs.test_cpu_count_vs_GetSystemInfoqsA*,,Q/ '))  L11111rctj}td|D}|t j|dS)Nc3$K|] }|jV dSN)NumberOfLogicalProcessorsr*procs r z.zs9552555555rwmiWMIsumWin32_Processorr?r@rA)rBwprocss rtest_cpu_count_logical_vs_wmiz)TestCpuAPIs.test_cpu_count_logical_vs_wmixsi GII55 ! 1 1 3 355555 )++U33333rctj}td|D}|t jd|dS)Nc3$K|] }|jV dSrO) NumberOfCoresrQs rrSz:TestCpuAPIs.test_cpu_count_cores_vs_wmi..s%GG4D&GGGGGGrF)logicalrT)rBrYcoress rtest_cpu_count_cores_vs_wmiz'TestCpuAPIs.test_cpu_count_cores_vs_wmi~s_ GIIGG13D3D3F3FGGGGG )%888%@@@@@rc|tjttjddS)NT)percpu)r?r@rAlen cpu_timesrBs rtest_cpu_count_vs_cpu_timesz'TestCpuAPIs.test_cpu_count_vs_cpu_timessH )++V-T:::;; = = = = =rc$tj}|d}||jt jj||jt jj dSNr) rUrVrXr?CurrentClockSpeedr@cpu_freqcurrent MaxClockSpeedmax)rBrYrRs r test_cpu_freqzTestCpuAPIs.test_cpu_freqsq GII  ""1% /1B1B1JKKK +V_->->-BCCCCCrN) rrrr skipIfr=r>rDrLr[rargrorrrr9r9gsX_+2:=DFF77FF7 222444 AAA ===DDDDDrr9ceZdZdZdZdZdZdZej e de dZ e dZ e d Zd Zd Zd Zd ZdS)TestSystemAPIsc td}tjd}|D]I}d|ddvr-||vr|d|zJdS)Nz ipconfig /allT)perniczpseudo-interface -z-%r nic wasn't found in 'ipconfig /all' output)rr@net_io_counterskeysreplacelowerfail)rBr5nicsnics rtest_nic_nameszTestSystemAPIs.test_nic_namess!!%T2227799 K KC!S[[c%:%:%@%@%B%BBB#~~iiCcIKKK K Krctjd}|t |jt jjdSri) rUrVWin32_ComputerSystemr?r<TotalPhysicalMemoryr@virtual_memorytotalrBrYs rtest_total_phymemz TestSystemAPIs.test_total_phymems\ GII * * , ,Q / Q233.006 8 8 8 8 8rctjd}|t |jt jjtdS)Nrdelta) rUrVWin32_PerfRawData_PerfOS_MemoryassertAlmostEqualr<AvailableBytesr@rfreerrs rtest_free_phymemzTestSystemAPIs.test_free_phymemsd GII 5 5 7 7 :   ! !6#8#:#:#?#  % % % % %rctjd}|t |jt jjz t j jt j jdkrZ|dt j j |dt j j dSdSri) rUrVrr?r< CommitLimitr@rr swap_memoryrusedrs rtest_total_swapmemz!TestSystemAPIs.test_total_swapmems GII 5 5 7 7 : Q]++f.C.E.E.KK+--3 5 5 5   &! + +   Q 2 4 4 9 : : :   Q 2 4 4 9 : : : : : , +rctjjdkrtjdd}t |jdzt |jz }| tjj d| tjj |d| tjj ddSdS)Nr_Total)NamedrFr) r@rrrUrV#Win32_PerfRawData_PerfOS_PagingFiler< PercentUsagePercentUsage_BaseassertGreaterEqualpercentrassertLessEqual)rBrY percentSwaps rtest_percent_swapmemz#TestSystemAPIs.test_percent_swapmems   & * * ==> "Aan--3c!:M6N6NNK  # #F$6$8$8$@! D D D  " "6#5#7#7#?)* # , , ,  !3!5!5!=s C C C C C + *rztest not relieable on appveyorctj}td|D}tt j}|||dS)Ncg|] }|j Sr ProcessIdr*r+s rr-z,TestSystemAPIs.test_pids..s/// ///r)rUrV Win32_Processsetr@pidsr?)rBrYwmi_pids psutil_pidss r test_pidszTestSystemAPIs.test_pidssf GII # # % %//Q///00&+--((  ;/////rctjd}tj}|D]J}|D]}|jdd|jkr|jsnd|j vrn|j drn tj |j}n#t$rYnwxYw| |jt|jt|j}| |j|t'|j|z dkr |d|jd |n' |d t+|zLdS) NTall\r&cdromA:izpsutil=z, wmi=zcan't find partition %s)r@disk_partitionsrUrVWin32_LogicalDiskdeviceryDeviceID mountpointopts startswith disk_usagerr?rr<Size FreeSpacerabsr{repr)rBps_parts wmi_partsps_partwmi_partusagewmi_frees r test_diskszTestSystemAPIs.test_diskss)d333GII//11  K KG% K K>))$33x7HHH"-',..)44T:: & 1'2D E E,$$U[#hm2D2DEEE"8#566H$$UZ:::5:0114DDD"iii!JJJ)2333E)I,ii 9DMM IJJJ1 K KsB66 CCctjD]}d|jvr tj|j}tj|j}||d|jt||d|j t| |j |j |jz dS)Nrrrr') r@rrrGGetDiskFreeSpaceExrrrrr rr?r)rBdiskrJrKs rtest_disk_usagezTestSystemAPIs.test_disk_usages*,, E ED$)## 3DODDI!,T_==L  " "9Q<1B)= # ? ? ?  " "9Q<1C)= # ? ? ?   \.)/,2CC E E E E E ErcdtjdD}dtjdD}|||dS)NcFg|]}||d|dzS)rr)rrs rr-z7TestSystemAPIs.test_disk_partitions..sF----d++- H---rz\cPg|]#}|jd|j$S)r)rrrs rr-z7TestSystemAPIs.test_disk_partitions..s>>>> |66t<<> >>>rTr)rGGetLogicalDriveStringsr2r@rr?rIs rtest_disk_partitionsz#TestSystemAPIs.test_disk_partitionss~--&=??EEhOO--- >>f.D.N.N.N>>>  L11111rchtt}tj}t}|D]6}||j||j7| ||zd|d|dS)Nzno common entries in z, ) rcext net_if_statsrUrVWin32_NetworkAdapteraddrNetConnectionID assertTrue)rBps_names wmi_adapters wmi_names wmi_adapters rtest_net_if_statsz TestSystemAPIs.test_net_if_statsst((**++wyy5577 EE ' 7 7K MM+* + + + MM+5 6 6 6 6 9,,9A99M O O O O Orctj}|djdd}t j|d}t jtj }t||z }| |ddS)Nr. %Y%m%d%H%M%SrF) rUrVWin32_OperatingSystemLastBootUpTimer2datetimestrptime fromtimestampr@ boot_timer total_secondsr)rBwmi_os wmi_btime_str wmi_btime_dt psutil_dtdiffs rtest_boot_timezTestSystemAPIs.test_boot_times0022q 066s;;A> (11 >++ %33F4D4F4FGG L9,;;==>> T1%%%%%rctjdd5|tjddddn #1swxYwYtjdd5|tjddddn #1swxYwYtjdd5|tjddddn #1swxYwYtjdd5|tjdddddS#1swxYwYdS)Nz psutil._pswindows.cext.boot_timerF return_valueiM)rpatchr?r@rrfs rtest_boot_time_fluctuationz)TestSystemAPIs.test_boot_time_fluctuations9 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  AA,(B  B$'B$(C55C9<C9(E  EEN)rrrr~rrrrr rprrrrrrrrrrrrrrrrs4KKK888 %%% ;;; D D D2X_X?@@00A@0KKK: E E E222OOO&&& 6 6 6 6 6rrrceZdZdZeje ddZeje ddZdZ dZ dZ dZ d S) TestSensorsBatteryctjdr(|tjdS|tjdS)NSystemBatteriesPresent)rGGetPwrCapabilitiesassertIsNotNoner@sensors_battery assertIsNonerfs rtest_has_batteryz#TestSensorsBattery.test_has_battery*s_  & ( ()A B 8  !7!9!9 : : : : :   f466 7 7 7 7 7rz no batteryctj}|dd}tj}||j|jddS)Nselect * from Win32_Batteryrr'r)rUrVqueryr@rrrEstimatedChargeRemainingrBrY battery_wmibattery_psutils r test_percentzTestSensorsBattery.test_percent0sg GIIgg;<#8 : : :8OO8O                   AA%%A),A)ctjdd5}|tjjtj|jsJ ddddS#1swxYwYdS)Nr)rrrrr r s rtest_emulate_power_chargingz.TestSensorsBattery.test_emulate_power_chargingPrrctjdd5}|tjjtj|jsJ ddddS#1swxYwYdS)Nr)rrrr)rrr?r@rrPOWER_TIME_UNKNOWNrr s rtest_emulate_secs_left_unknownz1TestSensorsBattery.test_emulate_secs_left_unknownWs Z@%2444 78   V355>#6 8 8 88OO8O                   rN) rrrrr rpr rrr rrrrrrrr(s888 X__l3343X__l3399439 rrceZdZedZedZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdS) TestProcessc6tj|_dSrOrpidclss r setUpClasszTestProcess.setUpClassf ""&rc.t|jdSrOrrrs r tearDownClasszTestProcess.tearDownClassj#'rcxtjd}|tj|jdSri)r@Process assertRaises AccessDeniedkillrBps r test_issue_24zTestProcess.test_issue_24ns2 N1   &-qv66666rctjd}||dt ||||dk |dd\}}||dkdS#tj $r tj ddvrYdSwxYw)NrSystemgrrr')vistazwin-7win7) r@r(r?namestrusernamer create_time memory_infor*platformuname)rBr-rssvmss rtest_special_pidzTestProcess.test_special_pidrs N1   8,,, A   3./// %}}rr*HC OOC!G $ $ $ $ $ "   >##A&*DDDEDD s C+C54C5ctj|j}|t|jt jdSrO)r@r(rr) ValueError send_signalsignalSIGINTr,s rtest_send_signalzTestProcess.test_send_signals5 N48 $ $ *amV]CCCCCrctjtj}|}t jtjtj tj}|}| ||dzt j || ||dS)Nr') r@r(r=getpid num_handlesrG OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSEr? CloseHandle)rBr-beforehandleafters rtest_num_handles_incrementz&TestProcess.test_num_handles_increments N29;; ' '%h&H&.nbikkCC   +++V$$$ &11111rctj|j}|t j|t j|| | tj |jt j| tj |jt jdSrO) r@r(rrr?r@ CTRL_C_EVENTCTRL_BREAK_EVENTr+waitr) NoSuchProcessr,s rtest_ctrl_signalszTestProcess.test_ctrl_signalss N4..004 5 5 f)*** f-...   &.-)< > > > &.-)@ B B B B Brctjtj}|drt jd|tj |dS)N$zrunning as service account) rG GetUserNameExrGNameSamCompatibleendswithr r!r?r@r(r5)rBr3s r test_usernamezTestProcess.test_usernamesn%h&@AA ==   B#$@AA A ))2244d;;;;;rcztjddtj}dt j}|ddcxkr |dkrnn| ddd}| ||dS)Nz[ ]+rur"r&r) resubrGGetCommandLiner.r/r@r(r#ryr?rIs r test_cmdlinezTestProcess.test_cmdlinesF63(?(A(ABBHHJJ xx 0 0 8 8 : :;; Q<3 1 1 1 1,q/ 1 1 1 1 1 "))#r155I L11111rcZtjtjtjt j}|tj|tj |}tj }|||dSrO)rGrFrGrHrIr=rD addCleanuprJ win32processGetPriorityClassr@r(nicer?rBrLrJrKs r test_nicezTestProcess.test_nices%h&H&.nbikkCC ,f555 1&99 ~'',,..  y11111rctjtjtj|j}|tj|tj |}tj |j }| |d|j| |d|j| |d|j| |d|j| |d|j| |d|j| |d|j| |d|j| |j|j| |j|jdS) NPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsage PagefileUsagePeakPagefileUsage)rGrFrGrHrIrrbrJrcGetProcessMemoryInfor@r(r7r? peak_wsetwsetpeak_paged_pool paged_poolpeak_nonpaged_pool nonpaged_poolpagefile peak_pagefiler:r;rfs rtest_memory_infozTestProcess.test_memory_infos%h&H&.ndh@@ ,f555 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 )<+<=== )<+@AAAAArcztjtjtj|j}|tj|tj |j}| | }tj |}|||dSrO)rGrFrGrHrIrrbrJr@r(rrRrcGetExitCodeProcessr?)rBrLr-rKrJs r test_waitzTestProcess.test_waits%h&H&.ndh@@ ,f555 N48 $ $ vvxx  3F;;  y11111rcrd}tjtjtj|j}|tj||tj |d}tj |j }| ||dS)Nc:fdtdDS)Nc$g|] }d|zz | S)r'r)r*ir+s rr-zGTestProcess.test_cpu_affinity..from_bitmask..s&999!Q!VqL9A999r@)range)r+s`r from_bitmaskz3TestProcess.test_cpu_affinity..from_bitmasks#9999uRyy999 9rr)rGrFrGrHrIrrbrJrcGetProcessAffinityMaskr@r( cpu_affinityr?)rBrrLrJrKs rtest_cpu_affinityzTestProcess.test_cpu_affinitys : : :%h&H&.ndh@@ ,f555 L  / 7 7 :<< ~dh//<<>>  y11111rctjtjtjt j}|tj|tj |}tj }||j|d||j|d||j|d||j|d||j|d||j|ddS)NReadOperationCountWriteOperationCountReadTransferCountWriteTransferCountOtherOperationCountOtherTransferCount)rGrFrGrHrIr=rDrbrJrcGetProcessIoCountersr@r( io_countersr? read_count write_count read_bytes write_bytes other_count other_bytesrfs rtest_io_counterszTestProcess.test_io_counterssj%h&H&.nbikkCC ,f555 5f== ~''3355    #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 Grcddl}ddl}d}|jj|d|j}||jjj||j }|jj || ||j }tj|j}|||dS)Nr)ctypesctypes.wintypeswindllkernel32rFrrbrJwintypesDWORDGetProcessHandleCountbyrefvaluer@r(rEr?)rBrrHrLhndcntrJrKs rtest_num_handleszTestProcess.test_num_handles s $)!'33 %q$(44  .:FCCC&&(( 44 FLL(( * * *L ~dh//;;==  y11111rct}d|_tjd|5tjd5}t j}|tj|jdddn #1swxYwYdddn #1swxYwY| |j ddS)Ni+z psutil._psplatform.cext.proc_cwd side_effectz time.sleeprF) WindowsErrorwinerrorrrr@r(r)r*cwdr call_count)rBexcr r-s rtest_error_partial_copyz#TestProcess.test_error_partial_copys'nn Z: L L L > >L)) >QN$$!!&"5qu=== > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >  a00000s5B9B: BB B B BB!$B!ctjddz}tj|}|tj|jdS)Nri)r@r _psplatformr(r)rSexe)rBrrRs rtest_exezTestProcess.test_exe$sPkmmB%'!))#.. &.99999rN)rrr classmethodr!r%r.r<rBrNrTrZr`rgrzr}rrrrrrrrrrds5''['[777%%%"DDD222 B B B<<< 2 2 24222BBB6222 2 2 2GGG& 2 2 2111:::::rrceZdZdZedZedZdZej e ddZ dZ dZ ed Zed Zd Zd S) TestProcessWMIz%Compare Process API results with WMI.c6tj|_dSrOrrs rr!zTestProcessWMI.setUpClass/r"rc.t|jdSrOr$rs rr%zTestProcessWMI.tearDownClass3r&rctj|jd}t j|j}|||jdSNrr) rUrVrrr@r(r?r3CaptionrBrYr-s r test_namezTestProcessWMI.test_name7s\ GII # #dh # 7 7 : N48 $ $ 19-----rz!unreliable path on GITHUB_ACTIONSc>tj|jd}t j|j}|||j dSr) rUrVrrr@r(r?rrzExecutablePathrs rrzTestProcessWMI.test_exe=ss GII # #dh # 7 7 : N48 $ $ !*:*@*@*B*BCCCCCrcDtj|jd}t j|j}|d||j dddS)Nrrrur\r&) rUrVrrr@r(r?r/r# CommandLineryrs rr`zTestProcessWMI.test_cmdlineEs GII # #dh # 7 7 : N48 $ $ !))++....sB77 9 9 9 9 9rc*tj|jd}t j|j}|\}}}|d|}|||dS)Nrrr) rUrVrrr@r(GetOwnerr?r5)rBrYr-domain_r5s rrZzTestProcessWMI.test_usernameKs~ GII # #dh # 7 7 : N48 $ $jjll8%vvxx0 x00000rctj|jd}t j|j}|j}||t|j dSr) rUrVrrr@r(r7r:r?r<rj)rBrYr-r:s rtest_memory_rsszTestProcessWMI.test_memory_rssRsm GII # #dh # 7 7 : N48 $ $mmoo! c!"23344444rcNtj|jd}t j|j}|j}t|j }||kr$||dzkr| d|d|dSdS)Nrrrzwmi=z , psutil=) rUrVrrr@r(r7r;r< PageFileUsager{)rBrYr-r; wmi_usages rtest_memory_vmszTestProcessWMI.test_memory_vmsYs GII # #dh # 7 7 : N48 $ $mmoo! (( 9  3)d*:#:#:)))999ccBCC C  #:#:rctj|jd}t j|j}t |jdd}tj dtj | }| ||dS)Nrrrr)rUrVrrr@r(r4 CreationDater2timestrftime localtimer6r?)rBrYr- wmic_create psutil_creates rtest_create_timezTestProcessWMI.test_create_timefs GII # #dh # 7 7 : N48 $ $!...s33A677  n&*nQ]]__&E&EGG  m44444rN)rrr__doc__rr!r%rr rprrr`rZrrrrrrrrr,s//''['[... X_^%HIIDDJID999 111555  D D D55555rrcbeZdZdZedZedZdZdZdZ dZ dZ 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 c6tj|_dSrOrrs rr!z(TestDualProcessImplementation.setUpClass~r"rc.t|jdSrOr$rs rr%z+TestDualProcessImplementation.tearDownClassr&rctj|j}t jdt tjd5}tj|j}| t|t|tt|D]^}| ||d| ||d| ||||d_|jsJ ddddS#1swxYwYdS)Nz(psutil._psplatform.cext.proc_memory_infomsgrrir)r@r(rr7rrOSErrorerrnoEPERMr?rdrrrr)rBmem_1funmem_2rs rrzz.TestDualProcessImplementation.test_memory_infosutx((4466 ZB$+EK$?$?AAA DGN48,,88::E   SZZU 4 4 43u::&& F F''a!444''a!444&&uQxq&EEEE:  :                   sC EE E c|tj|j}t jdt tjd5}| tj|j||j sJ ddddS#1swxYwYdS)N"psutil._psplatform.cext.proc_timesrr) r@r(rr6rrrrrr?r)rBctimers rrz.TestDualProcessImplementation.test_create_timestx((4466 Z<$+EK$?$?AAA DG   V^DH55AACCU K K K:  :                   A B11B58B5ctj|j}t jdt tjd5}tj|j}|j sJ| |j |j d| |j |j dddddS#1swxYwYdS)Nrrrg{Gz?r) r@r(rrerrrrrrrusersystem)rB cpu_times_1r cpu_times_2s rtest_cpu_timesz,TestDualProcessImplementation.test_cpu_timessDnTX..88:: Z<$+EK$?$?AAA DDG .22<<>>K:  :  " " +"2$ # @ @ @  " ""K$6d # D D D  D D D D D D D D D D D D D D D D D DsA9C  C$'C$ctj|j}t jdt tjd5}tj|j}tt|D]&}| ||||d'|j sJ ddddS#1swxYwYdS)Nz(psutil._psplatform.cext.proc_io_countersrrrFr) r@r(rrrrrrrrrdrr)rB io_counters_1r io_counters_2rs rrz.TestDualProcessImplementation.test_io_counterss2tx00<<>> ZB$+EK$?$?AAA DG"N4844@@BBM3}--.. A A&&!!$mA&6a'AAAA:  :                    sA8C  C$'C$c|tj|j}t jdt tjd5}| tj|j||j sJ ddddS#1swxYwYdS)Nz(psutil._psplatform.cext.proc_num_handlesrr) r@r(rrErrrrrr?r)rBrErs rrz.TestDualProcessImplementation.test_num_handlessnTX..::<< ZB$+EK$?$?AAA DG   V^DH55AACC( * * *:  :                    rcjtjD]} t|d}t|d}|||R#t $r@}t |}t|tjtj fsYd}~d}~wwxYwdS)NT)use_pebF) r@rr proc_cmdliner?rr isinstancer*rS)rBraberrs rr`z*TestDualProcessImplementation.test_cmdlines;== ' 'C '%%c4%88%%c5%99  A&&&&    %c**!#(;(.(<(>??  ' 's8A&& B006B++B0N) rrrrrr!r%rzrrrrr`rrrrrrs''['[    D D D ' ' ' ' 'rrcneZdZdZedZddgZfdZfdZdZ dZ d Z d Z d Z d ZxZS) 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}tjdD]x}tj|d|gtjtj}|\}}||tt kr|cSydS)Nz6import sys; sys.stdout.write(str(sys.maxsize > 2**32))zC:\Python*\python.exe-c)argsstdoutstderr) glob subprocessPopenPIPESTDOUT communicaterRr4r )codefilenamerRoutputrs rfind_other_interpreterz,RemoteProcessTestCase.find_other_interpretersH ":;;  H#(D$)?+5?+5+<>>>D((**IFA IIKKK\****+   rrzimport sys; sys.stdin.read()cbt|}|tjdt rt j|_||_ n||_t j|_ tj }ttj|d<||j g|jz|t"j|_||jg|jz|t"j|_dS)Nz0could not find interpreter with opposite bitnessTHINK_OF_A_NUMBER)envstdin)rsetUprr r!r sys executablepython64python32r=r>copyr4rDr test_argsrrproc32proc64)rB other_pythonr __class__s rr zRemoteProcessTestCase.setUps  2244  #BDD D  +NDM(DMM(DMNDMjoo#&ry{{#3#3  )) ]Odn ,/*## )) ]Odn ,/*## rct|j|jdSrO)rtearDownrrr)rBrs rrzRemoteProcessTestCase.tearDownsG  !!! !!!!!rctj|jj}|t |d||dd|jdSNr')r@r(rrr?rdr#rr,s rtest_cmdline_32z%RemoteProcessTestCase.test_cmdline_32i N4;? + + QYY[[))1--- QRR$.99999rctj|jj}|t |d||dd|jdSr)r@r(rrr?rdr#rr,s rtest_cmdline_64z%RemoteProcessTestCase.test_cmdline_64rrctj|jj}||t jdSrO)r@r(rrr?rr=getcwdr,s r test_cwd_32z!RemoteProcessTestCase.test_cwd_32? N4;? + + ")++.....rctj|jj}||t jdSrO)r@r(rrr?rr=rr,s r test_cwd_64z!RemoteProcessTestCase.test_cwd_64 r rc tj|jj}|}|d|||dttj dS)Nr) r@r(rrr>assertInr?r4r=rD)rBr-es rtest_environ_32z%RemoteProcessTestCase.test_environ_32sg N4;? + + IIKK )1--- ./RY[[1A1ABBBBBrctj|jj} |dS#tj$rYdSwxYwrO)r@r(rrr>r*r,s rtest_environ_64z%RemoteProcessTestCase.test_environ_64sP N4;? + +  IIKKKKK"    DD s6A A )rrrr staticmethodrrr rrrrr"r&r( __classcell__)rs@rrrs    \  56I#####2""""" ::: ::: //////CCC rrceZdZdZdZdS) TestServicesctgd}tgd}tgd}tjD]/}|}||dt ||dd||dt ||dt ||d||d tj |d ||d t ||dt ||d t ||d |||d|||d t | }|;tj |}| | tj |}|||1dS) N)runningpausedstartpausecontinuestopstopped) automaticmanualdisabled)r.r/ start_pending pause_pendingcontinue_pending stop_pendingr4r3r& display_namer5statusrbinpath start_type description)rr@win_service_iteras_dictassertIsInstancer4assertNotEqualr.r$r(rr is_runningwin_service_getr3r?)rBvalid_statusesvalid_start_typesservr6rr-ss rtest_win_service_iterz"TestServices.test_win_service_iter$sG      ! ! !         +-- & &D<<>>D  ! !$v, 4 4 4   V 2 2 4 4b 9 9 9  ! !$~"6 < < <  ! !$z"2C 8 8 8 MM$x.. 9 9 9E{&tE{+++  ! !$y/3 7 7 7  ! !$z"2C 8 8 8  ! !$|"4c : : : MM$|,.? @ @ @ MM$x.. 9 9 9  ! !$}"5s ; ; ;((**CN3'' ///&tyy{{33A   T1 % % % %- & &rcxtjjj}tjjj}t tj}|tj 5}tj |dzdddn #1swxYwY| |j j|dztj |}trddd|f}n|df}t|}tjd|5|tj |jdddn #1swxYwYtjd|5|tj |jdddn #1swxYwYtrddd|f}n|df}t|}tjd|5|tj|jdddn #1swxYwYtjd|5|tj|jdddn #1swxYwY||t+|||t+|||t/|||t/|dS)Nz???rrz/psutil._psplatform.cext.winservice_query_statusrz/psutil._psplatform.cext.winservice_query_config)r@rrERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextrAr3r)rSrFr? exceptionr rrrr=r5r*r$r4r<r)rBrMrNr3cmservicerrs rtest_win_service_getz!TestServices.test_win_service_getTse   # @ %$05IF+--..3355   v3 4 4 1  "4%< 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 *D5L999(..  9ua!=>DD0%8DD! ZI$'))) D D   f2GN C C C D D D D D D D D D D D D D D DZI$'))) F F   f2G4D E E E F F F F F F F F F F F F F F F  0ua!45DD'/DD! ZI$'))) C C   f17> B B B C C C C C C C C C C C C C C CZI$'))) E E   f173C D D D E E E E E E E E E E E E E E E gllnnc'll333 g**,,c'll;;; gllnnd7mm444 g**,,d7mm<<<<B""B&)B&&EE E (&FF!F&HH H )&II"IN)rrrrKrSrrrr,r,!s3.&.&.&`)=)=)=)=)=rr,__main__) run_from_name)=rrrrr=r8r]r@rr rr warningsr@rpsutil._compatrrr psutil.testsrrr r r r r rrrrrrrcatch_warnings simplefilterrGrGrcrUpsutil._pswindowsrrrrprr$r<r7r9rrrrrrrr,rpsutil.tests.runnerrU__file__rrrr^sr    ,,,,,, !!!!!!''''''$$$$$$!!!!!!------******''''''))))))''''''"""""" 4  " "h'''  2111111Wn--677+G-MNN     n  ON87.-     #,$D$D$D$D$D/$D$D$DNR6R6R6R6R6_R6R6R6t44444444xE:E:E:E:E:/E:E:E:P@5@5@5@5@5_@5@5@5LWn--N'N'N'N'N'NN'N'.-N'bWn--TTTTTNTT.-TxWn--[=[=[=[=[=>[=[=.-[=| z111111M(s6!C##C'*C'