bg:dZddlmZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ej'j(Z(ej)Z*d Z+d!Z,Gd"d#eZ-Gd$d%e-Z.ej/e d&Gd'd(eZ0Gd)d*eZ1e2d+krdd,l3m4Z4e4e5dSdS)-a Tests for detecting function memory leaks (typically the ones implemented in C). It does so by calling a function many times and checking whether process memory usage keeps increasing between calls or over time. Note that this may produce false positives (especially on Windows for some reason). PyPy appears to be completely unstable for this framework, probably because of how its JIT handles memory, so tests are skipped. )print_functionN)LINUX)MACOS)OPENBSD)POSIX)SUNOS)WINDOWS)ProcessLookupError)super)HAS_CPU_AFFINITY) HAS_CPU_FREQ) HAS_ENVIRON) HAS_IONICE)HAS_MEMORY_MAPS)HAS_NET_IO_COUNTERS)HAS_PROC_CPU_NUM)HAS_PROC_IO_COUNTERS) HAS_RLIMIT)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)TestMemoryLeak)create_sockets) get_testfn)process_namespace)skip_on_access_denied)spawn_testproc)system_namespace) terminatec d}|S)zsDecorator for those Linux functions which are implemented in pure Python, and which we want to run faster. cFtjfd}|S)NctrG|jj} t|j_|g|Ri|||j_S#||j_wxYw|g|Ri|SN)r __class__times FEW_TIMES)selfargskwargsbeforefuns m/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib64/python3.11/site-packages/psutil/tests/test_memleaks.pywrapperz5fewtimes_if_linux..decorator..wrapperCs 2-2+4DN(3t5d555f55+1DN((6DN(1111s41$111&111s ?A ) functoolswraps)r,r.s` r- decoratorz$fewtimes_if_linux..decoratorBs8    2 2 2 2   2)r1s r-fewtimes_if_linuxr4>s    r2ceZdZdZeZdZedZedZ edZ edZ e j e dedZe j e ded Zed Zd Zd Ze j e d dZe j e d dZe j e d edZe j eddZedZeeedZe j e ddZe j e dedZ edZ!eeedZ"edZ#ee j e$ d dZ%edZ&edZ'e j e dedZ(d Z)ed!Z*e j e+ d d"Z,e j e+ d d#Z-ed$Z.e j e/ d ed%Z0e j e1 d&e j e2 d d'Z3e j e1 d&e j e2 d d(Z4ee j ed)d*Z5e j e6 d d+Z7e j e dd,Z8d-S).TestProcessObjectLeaksz$Test leaks of Process class methods.cjtd}|||j|jzdSr$)rtest_class_coveragegetterssettersr(nss r- test_coveragez$TestProcessObjectLeaks.test_coverage\s4 t $ $ tRZ"*%<=====r2cD||jjdSr$)executeprocnamer(s r- test_namez TestProcessObjectLeaks.test_name` TY^$$$$$r2cD||jjdSr$)r?r@cmdlinerBs r- test_cmdlinez#TestProcessObjectLeaks.test_cmdlined TY&'''''r2cD||jjdSr$)r?r@exerBs r-test_exezTestProcessObjectLeaks.test_exeh TY]#####r2cD||jjdSr$)r?r@ppidrBs r- test_ppidz TestProcessObjectLeaks.test_ppidlrDr2z POSIX onlycD||jjdSr$)r?r@uidsrBs r- test_uidsz TestProcessObjectLeaks.test_uidsp  TY^$$$$$r2cD||jjdSr$)r?r@gidsrBs r- test_gidsz TestProcessObjectLeaks.test_gidsurSr2cD||jjdSr$)r?r@statusrBs r- test_statusz"TestProcessObjectLeaks.test_statusz TY%&&&&&r2cD||jjdSr$)r?r@nicerBs r- test_nicez TestProcessObjectLeaks.test_nice~s TY^$$$$$r2cntfddS)Nc8jSr$)r@r\)nicenessr(sr-z6TestProcessObjectLeaks.test_nice_set..sTY^^H55r2)thisprocr\r?)r(r`s`@r- test_nice_setz$TestProcessObjectLeaks.test_nice_sets6==?? 5555566666r2 not supportedcD||jjdSr$)r?r@ionicerBs r- test_ionicez"TestProcessObjectLeaks.test_ionicerZr2cJtr4tfddSfdt jt jtj dd} t|dS)Nc8jSr$)r@rf)r(valuesr-raz8TestProcessObjectLeaks.test_ionice_set..s!1!1%!8!8r2cLjtjSr$)r@rfpsutilIOPRIO_CLASS_NONErBsr-raz8TestProcessObjectLeaks.test_ionice_set..s!1!1&2J!K!Kr2r) r rbrfr?r/partialcextproc_ioprio_setosgetpid execute_w_excOSError)r(r,rjs` @r-test_ionice_setz&TestProcessObjectLeaks.test_ionice_sets  -OO%%E LL88888 9 9 9 9 9 LLKKKK L L L#D$8")++r1MMC   w , , , , ,r2cD||jjdSr$)r?r@ io_countersrBs r-test_io_countersz'TestProcessObjectLeaks.test_io_counters! TY*+++++r2zworthless on POSIXctj||jjdSr$)rlProcessusernamer?r@rBs r- test_usernamez$TestProcessObjectLeaks.test_usernames; !!### TY'(((((r2cD||jjdSr$)r?r@ create_timerBs r-test_create_timez'TestProcessObjectLeaks.test_create_time TY*+++++r2)only_ifcD||jjdSr$)r?r@ num_threadsrBs r-test_num_threadsz'TestProcessObjectLeaks.test_num_threadsrzr2 WINDOWS onlycD||jjdSr$)r?r@ num_handlesrBs r-test_num_handlesz'TestProcessObjectLeaks.test_num_handlesrr2cD||jjdSr$)r?r@num_fdsrBs r- test_num_fdsz#TestProcessObjectLeaks.test_num_fds! TY&'''''r2cD||jjdSr$)r?r@num_ctx_switchesrBs r-test_num_ctx_switchesz,TestProcessObjectLeaks.test_num_ctx_switches TY/00000r2cD||jjdSr$)r?r@threadsrBs r- test_threadsz#TestProcessObjectLeaks.test_threadsrr2cD||jjdSr$)r?r@ cpu_timesrBs r-test_cpu_timesz%TestProcessObjectLeaks.test_cpu_timess TY()))))r2cD||jjdSr$)r?r@cpu_numrBs r- test_cpu_numz#TestProcessObjectLeaks.test_cpu_numrr2cD||jjdSr$)r?r@ memory_inforBs r-test_memory_infoz'TestProcessObjectLeaks.test_memory_inforr2cD||jjdSr$)r?r@memory_full_inforBs r-test_memory_full_infoz,TestProcessObjectLeaks.test_memory_full_inforr2cD||jjdSr$)r?r@terminalrBs r- test_terminalz$TestProcessObjectLeaks.test_terminals! TY'(((((r2crtrtn|j}||jj|dS)Nr&)rr'r&r?r@resumer(r&s r- test_resumez"TestProcessObjectLeaks.test_resumes3"2   TY%U 33333r2cD||jjdSr$)r?r@cwdrBs r-test_cwdzTestProcessObjectLeaks.test_cwdrLr2cD||jjdSr$)r?r@ cpu_affinityrBs r-test_cpu_affinityz(TestProcessObjectLeaks.test_cpu_affinitys TY+,,,,,r2ctfdtfddS)Nc8jSr$r@r)affinityr(sr-raz>TestProcessObjectLeaks.test_cpu_affinity_set..sTY33H==r2c:jdgSNrnrrBsr-raz>TestProcessObjectLeaks.test_cpu_affinity_set..s 6 6t < <r2)rbrr?rt ValueError)r(rs`@r-test_cpu_affinity_setz,TestProcessObjectLeaks.test_cpu_affinity_setse((** =====>>>  <<<< > > > > >r2cttd5||jjddddS#1swxYwYdS)Nw)openrr?r@ open_filesrBs r-test_open_filesz&TestProcessObjectLeaks.test_open_filess *,, $ $ / / LL- . . . / / / / / / / / / / / / / / / / / /s A  AAcD||jjdSr$)r?r@ memory_mapsrBs r-test_memory_mapsz'TestProcessObjectLeaks.test_memory_mapsrzr2z LINUX onlyc8fddS)NcLjtjSr$r@rlimitrl RLIMIT_NOFILErBsr-raz4TestProcessObjectLeaks.test_rlimit..sTY--f.BCCr2r?rBs`r- test_rlimitz"TestProcessObjectLeaks.test_rlimits' CCCCDDDDDr2cttjfdt tffddS)NcNjtjSr$r)limitr(sr-raz8TestProcessObjectLeaks.test_rlimit_set..sTY--f.BEJJr2c8jdSr)r@rrBsr-raz8TestProcessObjectLeaks.test_rlimit_set..s$):J:J2:N:Nr2)rbrrlrr?rtrur)r(rs`@r-test_rlimit_setz&TestProcessObjectLeaks.test_rlimit_setsd 455 JJJJJKKK GZ02N2N2N2NOOOOOr2zworthless on WINDOWSct5trdndfdddddS#1swxYwYdS)Ninetallc8jSr$)r@ connections)kindr(sr-raz9TestProcessObjectLeaks.test_connections..s!6!6t! >"-66D LL<<<<< = = = > > > > > > > > > > > > > > > > > >s%AA AcD||jjdSr$)r?r@environrBs r- test_environz#TestProcessObjectLeaks.test_environrHr2c2|ddS)NcXttjSr$)rp proc_inforrrsr3r2r-raz7TestProcessObjectLeaks.test_proc_info.. sT^^BIKK88r2rrBs r-test_proc_infoz%TestProcessObjectLeaks.test_proc_infos 8899999r2N)9__name__ __module__ __qualname____doc__rbr@r=r4rCrGrKrOunittestskipIfrrRrVrYr]rcrrgrvrryr~rrrrr rrrrrrrrrrrrr rrrrrrrrrrrrrr3r2r-r6r6Ws.. D>>>%%%((($$$%%%X_Y --%%.-%X_Y --%%.-%'''%%%777X_^_55''65'X_^_55--65-X_--??,,@?,X_U011))21) ,,,7+++,,,+,X_[.11,,21,X_Y --((.-(1117+++((,+(***X_))?;;((<;(,,,111X_Y --)).-)444$$$X_))?;;--<;-X_))?;;>><;> ///X_(/::,,;:,X_Y --X_^_55EE65.-EX_Y --X_^_55PP65.-P X_W455>>65>X__o66((76(X_[.11::21:::r2r6ceZdZdZefdZefdZdZerdZ dZ dZ dZ d Z d ZxZSxZS) TestTerminatedProcessLeakszRepeat the tests above looking for leaks occurring when dealing with terminated processes raising NoSuchProcess exception. The C functions are still invoked but will follow different code paths. We'll check those code paths. ctt|_t j|jj|_|j|j dSr$) r setUpClassrsubprlr|pidr@killwaitclsr%s r-rz%TestTerminatedProcessLeaks.setUpClasss] !##>#(,//    r2cptt|jdSr$)r tearDownClassrrrs r-rz(TestTerminatedProcessLeaks.tearDownClasss/ #(r2cH |dS#tj$rYdSwxYwr$)rl NoSuchProcess)r(r,s r-callzTestTerminatedProcessLeaks.call!s;  CEEEEE#    DD s !!cD||jjdSr$)r?r@rrBs r- test_killz$TestTerminatedProcessLeaks.test_kill) LL ( ( ( ( (r2cD||jjdSr$)r?r@rrBs r-test_terminatez)TestTerminatedProcessLeaks.test_terminate,s LL, - - - - -r2cD||jjdSr$)r?r@suspendrBs r- test_suspendz'TestTerminatedProcessLeaks.test_suspend/s LL* + + + + +r2cD||jjdSr$)r?r@rrBs r-rz&TestTerminatedProcessLeaks.test_resume2s LL) * * * * *r2cD||jjdSr$)r?r@rrBs r- test_waitz$TestTerminatedProcessLeaks.test_wait5rr2c<fd}|dS)Ncp tjjS#t$rYdSwxYwr$)rprr@rr rBsr-rz7TestTerminatedProcessLeaks.test_proc_info..call:s@>>$)-888)DDs #' 55r)r(rs` r-rz)TestTerminatedProcessLeaks.test_proc_info8s6      LL     r2)rrrr classmethodrrrr rrrrrr __classcell__)r%s@r-rr s [[  ) ) ) . . . , , , + + + ) ) )       #r2rrceZdZdZdZdS)TestProcessDualImplementationc2|ddS)Nc\ttjdS)NTuse_pebrp proc_cmdlinerrrsr3r2r-razETestProcessDualImplementation.test_cmdline_peb_true..GsT..ry{{D.IIr2rrBs r-test_cmdline_peb_truez3TestProcessDualImplementation.test_cmdline_peb_trueFs IIJJJJJr2c2|ddS)Nc\ttjdS)NFrrr3r2r-razFTestProcessDualImplementation.test_cmdline_peb_false..JsT..ry{{E.JJr2rrBs r-test_cmdline_peb_falsez4TestProcessDualImplementation.test_cmdline_peb_falseIs JJKKKKKr2N)rrrrr r3r2r-rrCs:KKKLLLLLr2rceZdZdZdZedZedZedZedZ edZ ee j e oejdkd e j e d d Ze j e d d ZdZe j eddZdZdZdZe j eoejd dedZedZee j e d dZ!ee j e oej"dkddZ#dZ$dZ%ee j e& d dZ'ee j e( d dZ)ee j e* d d Z+ed!Z,d"Z-d#Z.erd$Z/d%Z0d&Z1d'Z2d(Z3d)Sd)S)*TestModuleFunctionsLeaksz&Test leaks of psutil module functions.cXt}|||jdSr$)rr8rr;s r-r=z&TestModuleFunctionsLeaks.test_coverageUs+    tRV,,,,,r2c2|ddS)Nc,tjdS)NTlogicalrl cpu_countr3r2r-raz9TestModuleFunctionsLeaks.test_cpu_count..]sV-d;;;r2rrBs r-test_cpu_countz'TestModuleFunctionsLeaks.test_cpu_count[s ;;<<<<.asV-e<<<r2rrBs r-test_cpu_count_coresz-TestModuleFunctionsLeaks.test_cpu_count_cores_s <<=====r2cD|tjdSr$)r?rlrrBs r-rz'TestModuleFunctionsLeaks.test_cpu_timesc V%&&&&&r2c2|ddS)Nc,tjdS)NT)percpu)rlrr3r2r-raz=TestModuleFunctionsLeaks.test_per_cpu_times..isV-T:::r2rrBs r-test_per_cpu_timesz+TestModuleFunctionsLeaks.test_per_cpu_timesgs ::;;;;;r2cD|tjdSr$)r?rl cpu_statsrBs r-test_cpu_statsz'TestModuleFunctionsLeaks.test_cpu_statskrr2arm64zskipped due to #1892rdcD|tjdSr$)r?rlcpu_freqrBs r- test_cpu_freqz&TestModuleFunctionsLeaks.test_cpu_freqos V_%%%%%r2rcjtj|tjdSr$)rl getloadavgr?rBs r-test_getloadavgz(TestModuleFunctionsLeaks.test_getloadavgws, V&'''''r2cD|tjdSr$)r?rlvirtual_memoryrBs r-test_virtual_memoryz,TestModuleFunctionsLeaks.test_virtual_memory~s V*+++++r2z&worthless on SUNOS (uses a subprocess)cD|tjdSr$)r?rl swap_memoryrBs r-test_swap_memoryz)TestModuleFunctionsLeaks.test_swap_memorys V'(((((r2c`trtn|j}|d|dS)NcLtjtjSr$)rl pid_existsrrrsr3r2r-raz:TestModuleFunctionsLeaks.test_pid_exists..sV.ry{{;;r2rrr'r&r?rs r-test_pid_existsz(TestModuleFunctionsLeaks.test_pid_existss2"2   ;;5 IIIIIr2c`trtn|j}|d|dS)Nc*tjdS)N.)rl disk_usager3r2r-raz:TestModuleFunctionsLeaks.test_disk_usage..sV.s33r2rr0rs r-test_disk_usagez(TestModuleFunctionsLeaks.test_disk_usages2"2   335 AAAAAr2cD|tjdSr$)r?rldisk_partitionsrBs r-test_disk_partitionsz-TestModuleFunctionsLeaks.test_disk_partitionss V+,,,,,r2z/proc/diskstatsz3/proc/diskstats not available on this Linux versionc2|ddS)Nc,tjdSNF)nowrap)rldisk_io_countersr3r2r-raz@TestModuleFunctionsLeaks.test_disk_io_counters..sV4EBBBr2rrBs r-test_disk_io_countersz.TestModuleFunctionsLeaks.test_disk_io_counterss  BBCCCCCr2cD|tjdSr$)r?rlpidsrBs r- test_pidsz"TestModuleFunctionsLeaks.test_pidss V[!!!!!r2c2|ddS)Nc,tjdSr<)rlnet_io_countersr3r2r-raz?TestModuleFunctionsLeaks.test_net_io_counters..sV35AAAr2rrBs r-test_net_io_countersz-TestModuleFunctionsLeaks.test_net_io_counterss  AABBBBBr2rzneed root accessctjdt5|dddddS#1swxYwYdS)Nrrc,tjdS)NrrH)rlnet_connectionsr3r2r-raz?TestModuleFunctionsLeaks.test_net_connections..s!7U!C!C!Cr2)rlrJrr?rBs r-test_net_connectionsz-TestModuleFunctionsLeaks.test_net_connectionss E****    E E LLCC D D D E E E E E E E E E E E E E E E E E EsAA A chtrdn|j}|tj|dS)Ni@) tolerance)r rMr?rl net_if_addrs)r(rMs r-test_net_if_addrsz*TestModuleFunctionsLeaks.test_net_if_addrss1!(>>>>r2cD|tjdSr$)r?rl net_if_statsrBs r-test_net_if_statsz*TestModuleFunctionsLeaks.test_net_if_statss V()))))r2cD|tjdSr$)r?rlsensors_batteryrBs r-test_sensors_batteryz-TestModuleFunctionsLeaks.test_sensors_batterys V+,,,,,r2cD|tjdSr$)r?rlsensors_temperaturesrBs r-test_sensors_temperaturesz2TestModuleFunctionsLeaks.test_sensors_temperaturess V011111r2cD|tjdSr$)r?rl sensors_fansrBs r-test_sensors_fansz*TestModuleFunctionsLeaks.test_sensors_fanss V()))))r2cD|tjdSr$)r?rl boot_timerBs r-test_boot_timez'TestModuleFunctionsLeaks.test_boot_timerr2cD|tjdSr$)r?rlusersrBs r- test_usersz#TestModuleFunctionsLeaks.test_userss V\"""""r2c2|ddS)Nc*tjdS)NF)rl _set_debugr3r2r-raz9TestModuleFunctionsLeaks.test_set_debug..sV.u55r2rrBs r-test_set_debugz'TestModuleFunctionsLeaks.test_set_debugs 5566666r2cD|tjdSr$)r?rpwinservice_enumeraterBs r-test_win_service_iterz.TestModuleFunctionsLeaks.test_win_service_iters LL2 3 3 3 3 3r2cdSr$r3rBs r-test_win_service_getz-TestModuleFunctionsLeaks.test_win_service_gets Dr2cttj|fddS)Nc8tSr$)rpwinservice_query_configrAsr-razFTestModuleFunctionsLeaks.test_win_service_get_config..!=!=d!C!Cr2nextrlwin_service_iterrAr?r(rAs @r-test_win_service_get_configz4TestModuleFunctionsLeaks.test_win_service_get_configG/11227799D LLCCCC D D D D Dr2cttj|fddS)Nc8tSr$)rpwinservice_query_statusrnsr-razFTestModuleFunctionsLeaks.test_win_service_get_status..ror2rprss @r-test_win_service_get_statusz4TestModuleFunctionsLeaks.test_win_service_get_statusrur2cttj|fddS)Nc8tSr$)rpwinservice_query_descrrnsr-razKTestModuleFunctionsLeaks.test_win_service_get_description..s!>>'''<<<'''X_U</x/11W<+--X_%77&&87-- &X_[.11((21( ,,,X_UDEE))FE)JJJ BBB---X_UD27>>2C#D#DDJLLDDLLD """ X_,,o>>CC?>CX_U/yry{{a/1CDDEEEDE ??? *** X_,,o>>--?>-X_11?CC22DC2X_))?;;**<;* '''###777D 4 4 4    E E E E E E D D D D D%DDr2r __main__) run_from_name)6r __future__rr/rrr~rrlpsutil._commonrrrrrr psutil._compatr r psutil.testsr r rrrrrrrrrrrrrrrrrr _psplatformrpr|rbr'r4r6rrrr rpsutil.tests.runnerr__file__r3r2r-rs  &%%%%%  ------ ))))))%%%%%%$$$$$$######((((((,,,,,,))))))------######,,,,,,))))))111111''''''''''''######******......''''''))))))"""""" 6>   2s:s:s:s:s:^s:s:s:l33333!7333lWn--LLLLLNLL.-LUDUDUDUDUD~UDUDUDp z111111M(r2