B ëLÝ_Ùiã@sfdZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(dd lm)Z)dd!lm*Z*dd"lm+Z+dd#lm,Z,ddl Z Gd$d%„d%e'ƒZ-Gd&d'„d'e'ƒZ.Gd(d)„d)e'ƒZ/Gd*d+„d+e'ƒZ0Gd,d-„d-e'ƒZ1d.d/„Z2e)Gd0d1„d1e'ƒƒZ3e4d2krbdd3l5m6Z6e6e7ƒdS)4z°Contracts tests. These tests mainly check API sanity in terms of returned types and APIs availability. Some of these are duplicates of tests test_system.py and test_process.py éN)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚOSX)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚFileNotFoundError)Úlong)Úrange)ÚAPPVEYOR)Úcheck_connection_ntuple)Ú CI_TESTING)Úcreate_sockets)Úenum)ÚGITHUB_ACTIONS)Ú HAS_CPU_FREQ)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)Ú is_namedtuple)Úkernel_version)Úprocess_namespace)ÚPsutilTestCase)ÚPYPY)Ú serialrun)Ú SKIP_SYSCONS)Úunittest)ÚVALID_PROC_STATUSESc@sDeZdZdd„Zdd„Zdd„Zdd„Ze e o2e d ¡d d „ƒZ d S) ÚTestAvailConstantsAPIscCs| ttdƒtptpt¡dS)NZ PROCFS_PATH)Ú assertEqualÚhasattrÚpsutilrr r)Úself©r(úN/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_contracts.pyÚtest_PROCFS_PATHBs z'TestAvailConstantsAPIs.test_PROCFS_PATHcCsj|j}|ttdƒtƒ|ttdƒtƒ|ttdƒtƒ|ttdƒtƒ|ttdƒtƒ|ttdƒtƒdS)NZABOVE_NORMAL_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASS)r$r%r&r )r'Úaer(r(r)Útest_win_priorityFsz(TestAvailConstantsAPIs.test_win_prioritycCsJ|j}|ttdƒtƒ|ttdƒtƒ|ttdƒtƒ|ttdƒtƒdS)NZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLE)r$r%r&r)r'r+r(r(r)Útest_linux_ioprio_linuxOs z.TestAvailConstantsAPIs.test_linux_ioprio_linuxcCsJ|j}|ttdƒtƒ|ttdƒtƒ|ttdƒtƒ|ttdƒtƒdS)NÚ IOPRIO_HIGHÚ IOPRIO_NORMALÚ IOPRIO_LOWÚIOPRIO_VERYLOW)r$r%r&r )r'r+r(r(r)Útest_linux_ioprio_windowsVs z0TestAvailConstantsAPIs.test_linux_ioprio_windowsz%unsupported on GITHUB_ACTIONS + LINUXcCs¸|j}|ttdƒtptƒ|ttdƒtp*tƒ|ttdƒtp>tƒ|ttdƒtpRtƒ|ttdƒtpftƒ|ttdƒtpztƒ|ttdƒtpŽtƒ|ttdƒtp¢tƒ|ttd ƒtp¶tƒ|ttd ƒtpÊtƒ|ttd ƒtpÞtƒ|ttd ƒtƒtr„tƒd kr|ttdƒtƒtƒdkr0|ttdƒtƒtƒdkrL|ttdƒtƒtƒdkrh|ttdƒtƒtƒd kr„|ttdƒtƒ|ttdƒtƒ|ttdƒtƒ|ttdƒtƒdS)NZ RLIM_INFINITYZ RLIMIT_ASZ RLIMIT_COREZ RLIMIT_CPUZ RLIMIT_DATAZ RLIMIT_FSIZEZRLIMIT_MEMLOCKZ RLIMIT_NOFILEZ RLIMIT_NPROCZ RLIMIT_RSSZ RLIMIT_STACKZ RLIMIT_LOCKS)éééZRLIMIT_MSGQUEUE)r3r4é Z RLIMIT_NICEZ RLIMIT_RTPRIO)r3r4éZ RLIMIT_RTTIMEZRLIMIT_SIGPENDINGZ RLIMIT_SWAPZ RLIMIT_SBSIZEZ RLIMIT_NPTS)r$r%r&rrr r)r'r+r(r(r)Ú test_rlimit]s6     z"TestAvailConstantsAPIs.test_rlimitN) Ú__name__Ú __module__Ú __qualname__r*r,r-r2r!ÚskipIfrrr8r(r(r(r)r#@s   r#c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚTestAvailSystemAPIscCs| ttdƒt¡dS)NZwin_service_iter)r$r%r&r )r'r(r(r)Útest_win_service_itersz)TestAvailSystemAPIs.test_win_service_itercCs| ttdƒt¡dS)NZwin_service_get)r$r%r&r )r'r(r(r)Útest_win_service_get„sz(TestAvailSystemAPIs.test_win_service_getcCs"| ttdƒtptptpt¡dS)NÚcpu_freq)r$r%r&rrr r)r'r(r(r)Ú test_cpu_freq‡s z!TestAvailSystemAPIs.test_cpu_freqcCs| ttdƒtpt¡dS)NÚsensors_temperatures)r$r%r&rr)r'r(r(r)Útest_sensors_temperatures‹sz-TestAvailSystemAPIs.test_sensors_temperaturescCs| ttdƒt¡dS)NÚ sensors_fans)r$r%r&r)r'r(r(r)Útest_sensors_fanssz%TestAvailSystemAPIs.test_sensors_fanscCs"| ttdƒtptptpt¡dS)NZsensors_battery)r$r%r&rr rr)r'r(r(r)Ú test_battery’s z TestAvailSystemAPIs.test_batteryN) r9r:r;r>r?rArCrErFr(r(r(r)r=s r=c@s|eZdZdd„Zdd„Zdd„Zdd„Zd d „Ze  e o:e d ¡d d „ƒZ dd„Z dd„Zdd„Zdd„Zdd„Zdd„ZdS)ÚTestAvailProcessAPIscCs4| ttjdƒtp,tp,tp,tp,tp,t p,t p,t ¡dS)NÚenviron) r$r%r&ÚProcessrrr rr rrr)r'r(r(r)Ú test_environ™sz!TestAvailProcessAPIs.test_environcCs| ttjdƒt¡dS)NÚuids)r$r%r&rIr )r'r(r(r)Ú test_uidsžszTestAvailProcessAPIs.test_uidscCs| ttjdƒt¡dS)NrK)r$r%r&rIr )r'r(r(r)Ú test_gids¡szTestAvailProcessAPIs.test_gidscCs| ttjdƒt¡dS)NÚterminal)r$r%r&rIr )r'r(r(r)Ú test_terminal¤sz"TestAvailProcessAPIs.test_terminalcCs| ttjdƒtpt¡dS)NÚionice)r$r%r&rIrr )r'r(r(r)Ú test_ionice§sz TestAvailProcessAPIs.test_ionicez%unsupported on GITHUB_ACTIONS + LINUXcCs| ttjdƒtpt¡dS)NÚrlimit)r$r%r&rIrr)r'r(r(r)r8ªsz TestAvailProcessAPIs.test_rlimitcCs(ttjdƒ}| |tstrdnd¡dS)NÚ io_countersFT)r%r&rIr$rr )r'Úhasitr(r(r)Útest_io_counters¯s z%TestAvailProcessAPIs.test_io_counterscCs| ttjdƒt¡dS)NÚnum_fds)r$r%r&rIr )r'r(r(r)Ú test_num_fds³sz!TestAvailProcessAPIs.test_num_fdscCs| ttjdƒt¡dS)NÚ num_handles)r$r%r&rIr )r'r(r(r)Útest_num_handles¶sz%TestAvailProcessAPIs.test_num_handlescCs | ttjdƒtptpt¡dS)NÚ cpu_affinity)r$r%r&rIrr r)r'r(r(r)Útest_cpu_affinity¹sz&TestAvailProcessAPIs.test_cpu_affinitycCs | ttjdƒtptpt¡dS)NÚcpu_num)r$r%r&rIrrr )r'r(r(r)Ú test_cpu_num½sz!TestAvailProcessAPIs.test_cpu_numcCs0ttjdƒ}| |ts"ts"ts"tr&dnd¡dS)NÚ memory_mapsFT)r%r&rIr$rrrr)r'rTr(r(r)Útest_memory_mapsÁs z%TestAvailProcessAPIs.test_memory_mapsN)r9r:r;rJrLrMrOrQr!r<rrr8rUrWrYr[r]r_r(r(r(r)rG—s rGc@sæeZdZdZedd„ƒZedfdd„Zdd„Zd d „Z d d „Z d d„Z e   e d¡dd„ƒZdd„Zdd„Ze   ed¡dd„ƒZdd„Zdd„Ze   e d¡dd„ƒZe   e d¡dd „ƒZe   e d¡d!d"„ƒZd#d$„Zd%d&„Zd'S)(ÚTestSystemAPITypesz¬Check the return types of system related APIs. Mainly we want to test we never return unicode on Python 2, see: https://github.com/giampaolo/psutil/issues/1039 cCst ¡|_dS)N)r&rIÚproc)Úclsr(r(r)Ú setUpClassÒszTestSystemAPITypes.setUpClassTcCs.x(|D] }| ||¡|r| |d¡qWdS)Nr)ÚassertIsInstanceÚassertGreaterEqual)r'ÚntÚtype_ZgezeroÚnr(r(r)Úassert_ntuple_of_numsÖs  z(TestSystemAPITypes.assert_ntuple_of_numscCs2| t ¡¡xtjddD]}| |¡qWdS)NT)Zpercpu)rir&Ú cpu_times)r'rfr(r(r)Útest_cpu_timesÝsz!TestSystemAPITypes.test_cpu_timescCs,| tjddt¡| tjddt¡dS)N)Úintervalgñh㈵øä>)rdr&Ú cpu_percentÚfloat)r'r(r(r)Útest_cpu_percentâsz#TestSystemAPITypes.test_cpu_percentcCs(| tjdd¡| tjdd¡dS)N)rlg-Cëâ6?)rir&Zcpu_times_percent)r'r(r(r)Útest_cpu_times_percentæsz)TestSystemAPITypes.test_cpu_times_percentcCs| t ¡t¡dS)N)rdr&Ú cpu_countÚint)r'r(r(r)Útest_cpu_countêsz!TestSystemAPITypes.test_cpu_countz not supportedcCs2t ¡dkr| d¡‚|jt ¡tttfddS)Nzcpu_freq() returns None)rg)r&r@ZskipTestrirnrrr)r'r(r(r)rAís  z TestSystemAPITypes.test_cpu_freqcCs@x:tjdd ¡D]&\}}| |t¡|j|ttfdqWdS)NT)Zperdisk)rg)r&Zdisk_io_countersÚitemsrdÚstrrirrr)r'ÚkÚvr(r(r)Útest_disk_io_countersós z(TestSystemAPITypes.test_disk_io_counterscCsjxdt ¡D]X}| |jt¡| |jt¡| |jt¡| |jt¡| |jt ¡| |j t ¡q WdS)N) r&Zdisk_partitionsrdZdeviceruZ mountpointZfstypeZoptsZmaxfilerrZmaxpath)r'Zdiskr(r(r)Útest_disk_partitionsùsz'TestSystemAPITypes.test_disk_partitionsz requires rootc CsFtƒ6t d¡}| t|ƒtt|ƒƒ¡x |D]}q0WWdQRXdS)NÚall)rr&Znet_connectionsr$ÚlenÚset)r'ÚretÚconnr(r(r)Útest_net_connectionss   z'TestSystemAPITypes.test_net_connectionscCsžx˜t ¡ ¡D]ˆ\}}| |t¡xr|D]j}tdk rJtsJ| |jtj¡n| |jt ¡| |j t¡| |j tt dƒf¡| |j tt dƒf¡q(WqWdS)N)r&Z net_if_addrsrtrdrurrZfamilyÚIntEnumrrZaddressZnetmaskÚtypeZ broadcast)r'ÚifnameZaddrsÚaddrr(r(r)Útest_net_if_addrs s   z$TestSystemAPITypes.test_net_if_addrscCs|xvt ¡ ¡D]f\}}| |t¡| |jt¡tdk rJ| |jtj ¡n| |jt ¡| |j t ¡| |j t ¡qWdS)N) r&Z net_if_statsrtrdruZisupÚboolrZduplexr€rrZspeedZmtu)r'r‚Úinfor(r(r)Útest_net_if_statss z$TestSystemAPITypes.test_net_if_statscCs.x(tjdd ¡D]\}}| |t¡qWdS)NT)Zpernic)r&Znet_io_countersrtrdru)r'r‚Ú_r(r(r)Útest_net_io_counters$sz'TestSystemAPITypes.test_net_io_countersc Cs^xXt ¡ ¡D]H\}}| |t¡x2|D]*}| |jt¡| |jttt dƒf¡q(WqWdS)N) r&rDrtrdruÚlabelÚcurrentrnrrr)r'ÚnameÚunitsÚunitr(r(r)rE*s   z$TestSystemAPITypes.test_sensors_fansc CsŽxˆt ¡ ¡D]x\}}| |t¡xb|D]Z}| |jt¡| |jttt dƒf¡| |j ttt dƒf¡| |j ttt dƒf¡q(WqWdS)N) r&rBrtrdrurŠr‹rnrrrZhighZcritical)r'rŒrrŽr(r(r)rC3s  z,TestSystemAPITypes.test_sensors_temperaturescCs| t ¡t¡dS)N)rdr&Z boot_timern)r'r(r(r)Útest_boot_time>sz!TestSystemAPITypes.test_boot_timecCsfx`t ¡D]T}| |jt¡| |jttdƒf¡| |jttdƒf¡| |jt tdƒf¡q WdS)N) r&ZusersrdrŒrurNrZhostÚpidrr)r'Úuserr(r(r)Ú test_usersBs zTestSystemAPITypes.test_usersN)r9r:r;Ú__doc__Ú classmethodrcrnrirkrorprsr!r<rrArxryr rr„r‡rr‰rrErrCrr’r(r(r(r)r`Ìs$      r`c@s"eZdZe e d¡dd„ƒZdS)ÚTestProcessWaitTypez not POSIXcCsXt | ¡j¡}| ¡| ¡}| |tj ¡t dk rH|  |t j ¡n |  |t ¡dS)N) r&rIZspawn_testprocrÚ terminateÚwaitr$ÚsignalÚSIGTERMrrdr€rr)r'ÚpÚcoder(r(r)Útest_negative_signalMsz(TestProcessWaitType.test_negative_signalN)r9r:r;r!r<r rœr(r(r(r)r•Ksr•c sìtƒ‰‡‡fdd„‰‡‡‡‡‡fdd„}yt ˆ¡‰ˆ ddg¡}Wntjk rZiSX|d|d‰‰dˆji}tˆƒ}x`|j|jdd D]L\}}y|ƒ||<Wq’tj k rÜ}zˆ|ˆˆˆƒw’Wdd}~XYq’Xq’W|ƒ|S) Ncsrˆ |jˆ¡ˆ |j|¡t|tjƒrP|jdk rfˆ |jd¡ˆ |j|¡nt|tjƒrfˆ  |¡t |ƒdS)Nr) r$rrŒÚ isinstancer&Z ZombieProcessÚppidreÚ NoSuchProcessZassertProcessGoneru)ÚexcrarŒrž)rÚtcaser(r)Úcheck_exceptionas    z"proc_info..check_exceptionc sNˆdkrJyˆ d¡Wn2tjk rH}zˆ|ˆˆˆƒWdd}~XYnXdS)Nr)r—r&ÚError)r )r¢rŒrržrar(r)Údo_waitms zproc_info..do_waitržrŒrF)Z clear_cache) rr&rIZas_dictrŸrrÚiterZgettersr£)rr¤Údr†ÚnsZfunZfun_namer r()r¢rŒrržrar¡r)Ú proc_info^s&   r¨c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Z dd?„Z"d@dA„Z#dBdC„Z$dDdE„Z%dFdG„Z&dHdI„Z'dJdK„Z(dLS)MÚTestFetchAllProcessesz·Test which iterates over all running processes and performs some sanity checks against Process API's returned values. Uses a process pool to get info about all processes. cCst ¡|_dS)N)ÚmultiprocessingZPoolÚpool)r'r(r(r)ÚsetUpszTestFetchAllProcesses.setUpcCs|j ¡|j ¡dS)N)r«r–Újoin)r'r(r(r)ÚtearDown“s zTestFetchAllProcesses.tearDowncCsddlm}|j |t ¡¡S)Nr)r¨)Zpsutil.tests.test_contractsr¨r«Zimap_unorderedr&Zpids)r'r¨r(r(r)Úiter_proc_info—s z$TestFetchAllProcesses.iter_proc_infoc Csæg}xÈ| ¡D]¼}x¶| ¡D]ª\}}t||ƒ}y|||ƒWnttk r°d}|d||dt|ƒf7}|d7}|dt ¡7}d dd„| ¡Dƒ¡}|d7}|  |¡YqX|d d gdd ifkrqWqW|râ|  d  |¡¡‚dS) NzH ====================================================================== zFAIL: test_%s pid=%s, ret=%s rzF----------------------------------------------------------------------z %sÚ css|]}d|VqdS)z Nr()Ú.0Úir(r(r)ú ªsz1TestFetchAllProcesses.test_all..rgÚ) r¯rtÚgetattrÚAssertionErrorÚreprÚ tracebackÚ format_excr­Ú splitlinesÚappendZfail)r'Zfailuresr†rŒÚvalueZmethÚsr(r(r)Útest_alls& zTestFetchAllProcesses.test_allcCs*| |t¡x|D]}| |t¡qWdS)N)rdÚlistru)r'r}r†Úpartr(r(r)Úcmdline³s  zTestFetchAllProcesses.cmdlinecCsŒ| |ttdƒf¡|s&| |d¡nbtr8| d¡s8dStrˆtj  |¡rˆt tdƒrˆt tdƒrˆyWn&t k r†tj  |¡r‚t s‚‚YnXdS)Nr´z.exeÚaccessÚX_OK)rdrurr$r Úendswithr ÚosÚpathÚisfiler%r¶Úexistsr)r'r}r†r(r(r)Úexe¸szTestFetchAllProcesses.execCs| |t¡| |d¡dS)Nr)rdrrre)r'r}r†r(r(r)rÌs zTestFetchAllProcesses.pidcCs | |ttf¡| |d¡dS)Nr)rdrrrre)r'r}r†r(r(r)ržÐszTestFetchAllProcesses.ppidcCs,| |t¡tr$|s$|ddkr$dSts(dS)NÚstatusÚstopped)rdrurr)r'r}r†r(r(r)rŒÔs  zTestFetchAllProcesses.namecCs^| |t¡y| |d¡Wn*tk rFtr@|dtjkr@n‚YnXt dt  |¡¡dS)NrrÊz%Y %m %d %H:%M:%S) rdrnrer¶rr&Z STATUS_ZOMBIEÚtimeZstrftimeZ localtime)r'r}r†r(r(r)Ú create_timeÜs z!TestFetchAllProcesses.create_timecCs*x$|D]}| |t¡| |d¡qWdS)Nr)rdrrre)r'r}r†Zuidr(r(r)rKìs  zTestFetchAllProcesses.uidscCs2x,|D]$}| |t¡tsts| |d¡qWdS)Nr)rdrrrrre)r'r}r†Úgidr(r(r)Úgidsòs  zTestFetchAllProcesses.gidscCs| |t¡dS)N)rdru)r'r}r†r(r(r)Úusernameûs zTestFetchAllProcesses.usernamecCs(| |t¡| |d¡| |t¡dS)Nú?)rdruZassertNotEqualÚassertInr")r'r}r†r(r(r)rÊÿs  zTestFetchAllProcesses.statuscCs6x0|D](}| |ttf¡|dkr| |d¡qWdS)Néÿÿÿÿr)rdrrrre)r'r}r†Úfieldr(r(r)rSs z!TestFetchAllProcesses.io_counterscCsztr>| |jt¡| |jt¡| |jd¡| |jd¡n8tjtjtj tj g}| |t¡| |d¡|  ||¡dS)Nr) rrdZioclassrrr¼rer&r1r0r/r.rÒ)r'r}r†Úchoicesr(r(r)rP s  zTestFetchAllProcesses.ionicecCs4| |t¡tr$|s$|ddkr$dS| |d¡dS)NrÊrËé)rdrrrre)r'r}r†r(r(r)Ú num_threadss z!TestFetchAllProcesses.num_threadscCsf| |t¡xT|D]L}| |jd¡| |jd¡| |jd¡x|D]}| |ttf¡qFWqWdS)Nr)rdr¿reÚidZ user_timeZ system_timerrrn)r'r}r†ÚtrÔr(r(r)Úthreads"s   zTestFetchAllProcesses.threadscCs*x$|D]}| |t¡| |d¡qWdS)Nr)rdrnre)r'r}r†rhr(r(r)rj,s  zTestFetchAllProcesses.cpu_timescCs| |t¡dS)N)rdrn)r'r}r†r(r(r)rm3s z!TestFetchAllProcesses.cpu_percentcCs\| |t¡tr|dkrdS| |d¡t ¡dkr@| |d¡| |tt t ¡ƒƒ¡dS)NrÓrrÖ) rdrrrrer&rqr$rÒr¿r)r'r}r†r(r(r)r\7s     zTestFetchAllProcesses.cpu_numcCsrx(|D] }| |ttf¡| |d¡qWtrn| |j|j¡| |j|j¡| |j |j ¡| |j |j ¡dS)Nr) rdrrrrer Z peak_wsetZwsetZpeak_paged_poolZ paged_poolZpeak_nonpaged_poolZ nonpaged_poolZ peak_pagefileZpagefile)r'r}r†r¼r(r(r)Ú memory_info@s z!TestFetchAllProcesses.memory_infocCsˆt ¡j}xd|jD]Z}t||ƒ}| |ttf¡|j|d||fdt st rV|dkrVq|j |||||fdqWt r„| |j |j ¡dS)Nr)Úmsg)ZvmsÚdata)r&Zvirtual_memoryÚtotalÚ_fieldsrµrdrrrrerr ZassertLessEqualZpssZuss)r'r}r†rÞrŒr¼r(r(r)Úmemory_full_infoKs   z&TestFetchAllProcesses.memory_full_infoc CsÚ| |t¡xÈ|D]À}| |jt¡| |jt¡trF| |jd¡nftr | |j t¡| |j t¡| |j t¡|  |j d¡|  |j d¡| |j d¡n tr¬|js¬qyt |j¡}Wqtk rÐYqXqWdS)NrÓr)ÚrÚwÚazr+za+)rdr¿ÚfdrrrÆrur r$rZpositionÚmodeÚflagsrerÒZ assertGreaterrrÅÚstatr )r'r}r†ÚfÚstr(r(r)Ú open_files[s(   z TestFetchAllProcesses.open_filescCs| |t¡| |d¡dS)Nr)rdrrre)r'r}r†r(r(r)rVts zTestFetchAllProcesses.num_fdsc CsDtƒ4| t|ƒtt|ƒƒ¡x|D] }t|ƒq&WWdQRXdS)N)rr$r{r|r)r'r}r†r~r(r(r)Ú connectionsxs z!TestFetchAllProcesses.connectionsc Csh|rd| |t¡yt |¡}WnDtk rb}z&trD|jtjj krDn|jtj krR‚Wdd}~XYnXdS)N) rdrurÅrçÚOSErrorr Úerrnor&Z _psplatformZACCESS_DENIED_SETZENOENT)r'r}r†réÚerrr(r(r)Úcwds   zTestFetchAllProcesses.cwdcCs| |t¡dS)N)rdrn)r'r}r†r(r(r)Úmemory_percents z$TestFetchAllProcesses.memory_percentcCs| |t¡dS)N)rdr…)r'r}r†r(r(r)Ú is_running“sz TestFetchAllProcesses.is_runningcCsF| |t¡ttt ¡ƒƒ}x$|D]}| |t¡| ||¡q"WdS)N)rdr¿rr&rqrrrÒ)r'r}r†Zcpusrhr(r(r)rZ–s    z"TestFetchAllProcesses.cpu_affinitycCs | |ttdƒf¡|dk rdS)N)rdrur)r'r}r†r(r(r)rNžszTestFetchAllProcesses.terminalcCsžx˜|D]}| |jt¡| |jt¡| |jt¡x`|jD]V}t||ƒ}|dkr^| d¡s’q<|dkrhq<|dkrvts’q<| |t t f¡|  |d¡qÃsz.TestFetchAllProcesses.nice..)éé) rdrrr Údirr&rÒÚsysÚ version_inforr€)r'r}r†Z prioritiesr(r(r)Únice¾s   zTestFetchAllProcesses.nicecCs.x(|D] }| |ttf¡| |d¡qWdS)Nr)rdrrrre)r'r}r†r¼r(r(r)Únum_ctx_switchesËs z&TestFetchAllProcesses.num_ctx_switchescCs@| |t¡| t|ƒd¡| |dd¡| |dd¡dS)Nr3rrÓrÖ)rdÚtupler$r{re)r'r}r†r(r(r)rRÑs zTestFetchAllProcesses.rlimitcCs>| |t¡x,| ¡D] \}}| |t¡| |t¡qWdS)N)rdÚdictrtru)r'r}r†rvrwr(r(r)rH×s  zTestFetchAllProcesses.environN))r9r:r;r“r¬r®r¯r¾rÁrÉrržrŒrÍrKrÏrÐrÊrSrPr×rÚrjrmr\rÛràrêrVrërïrðrñrZrNr^rXrürýrRrHr(r(r(r)r©‰sL     r©Ú__main__)Ú run_from_name)8r“rírªrÅr˜rçrúrÌr¸r&rrrrrrrr r r r Zpsutil._compatr rrZ psutil.testsrrrrrrrrrrrrrrrrr r!r"r#r=rGr`r•r¨r©r9Zpsutil.tests.runnerrÚ__file__r(r(r(r)Ú sn                                  ?5+ V