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)NÚ 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)r4r5é Z RLIMIT_NICEZ RLIMIT_RTPRIO)r4r5é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.r3r!ÚskipIfrrr9r)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) r:r;r<r?r@rBrDrFrGr)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'rJr )r(r)r)r*Ú test_uidsžszTestAvailProcessAPIs.test_uidscCs| ttjdƒt¡dS)NrL)r%r&r'rJr )r(r)r)r*Ú test_gids¡szTestAvailProcessAPIs.test_gidscCs| ttjdƒt¡dS)NÚterminal)r%r&r'rJr )r(r)r)r*Ú test_terminal¤sz"TestAvailProcessAPIs.test_terminalcCs| ttjdƒtpt¡dS)NÚionice)r%r&r'rJrr )r(r)r)r*Ú test_ionice§sz TestAvailProcessAPIs.test_ionicez%unsupported on GITHUB_ACTIONS + LINUXcCs| ttjdƒtpt¡dS)NÚrlimit)r%r&r'rJrr)r(r)r)r*r9ªsz TestAvailProcessAPIs.test_rlimitcCs(ttjdƒ}| |tstrdnd¡dS)NÚ io_countersFT)r&r'rJr%rr )r(Úhasitr)r)r*Útest_io_counters¯s z%TestAvailProcessAPIs.test_io_counterscCs| ttjdƒt¡dS)NÚnum_fds)r%r&r'rJr )r(r)r)r*Ú test_num_fds³sz!TestAvailProcessAPIs.test_num_fdscCs| ttjdƒt¡dS)NÚ num_handles)r%r&r'rJr )r(r)r)r*Útest_num_handles¶sz%TestAvailProcessAPIs.test_num_handlescCs | ttjdƒtptpt¡dS)NÚ cpu_affinity)r%r&r'rJrr r)r(r)r)r*Útest_cpu_affinity¹sz&TestAvailProcessAPIs.test_cpu_affinitycCs | ttjdƒtptpt¡dS)NÚcpu_num)r%r&r'rJrrr )r(r)r)r*Ú test_cpu_num½sz!TestAvailProcessAPIs.test_cpu_numcCs0ttjdƒ}| |ts"ts"ts"tr&dnd¡dS)NÚ memory_mapsFT)r&r'rJr%rrrr)r(rUr)r)r*Útest_memory_mapsÁs z%TestAvailProcessAPIs.test_memory_mapsN)r:r;r<rKrMrNrPrRr!r=rrr9rVrXrZr\r^r`r)r)r)r*rH—s rHc@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'rJÚproc)Úclsr)r)r*Ú setUpClassÒszTestSystemAPITypes.setUpClassTcCs:t|ƒs t‚x(|D] }| ||¡|r| |d¡qWdS)Nr)rÚAssertionErrorÚ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)rkr'Ú cpu_times)r(rhr)r)r*Útest_cpu_timesÝsz!TestSystemAPITypes.test_cpu_timescCs,| tjddt¡| tjddt¡dS)N)Úintervalgñh㈵øä>)rfr'Ú cpu_percentÚfloat)r(r)r)r*Útest_cpu_percentâsz#TestSystemAPITypes.test_cpu_percentcCs(| tjdd¡| tjdd¡dS)N)rng-Cëâ6?)rkr'Zcpu_times_percent)r(r)r)r*Útest_cpu_times_percentæsz)TestSystemAPITypes.test_cpu_times_percentcCs| t ¡t¡dS)N)rfr'Ú 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)ri)r'rAZskipTestrkrprtr)r(r)r)r*rBís  z TestSystemAPITypes.test_cpu_freqcCs@x:tjdd ¡D]&\}}| |t¡|j|ttfdqWdS)NT)Zperdisk)ri)r'Zdisk_io_countersÚitemsrfÚstrrkrtr)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_partitionsrfÚdevicerwÚ mountpointÚfstypeÚoptsÚmaxfilertÚmaxpath)r(Zdiskr)r)r*Útest_disk_partitionsùsz'TestSystemAPITypes.test_disk_partitionsz requires rootc CsRtƒBt d¡}| t|ƒtt|ƒƒ¡x|D]}t|ƒs0t‚q0WWdQRXdS)NÚall)rr'Znet_connectionsr%ÚlenÚsetrre)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_addrsrvrfrwrrÚfamilyÚIntEnumrtÚaddressÚnetmaskÚtypeÚ broadcast)r(ÚifnameÚaddrsÚ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_statsrvrfrwÚisupÚboolrÚduplexr‰rtÚspeedÚmtu)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_countersrvrfrw)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'rErvrfrwÚlabelÚcurrentrprtrŒ)r(ÚnameÚunitsÚunitr)r)r*rF*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'rCrvrfrwr›rœrprtrŒÚhighÚcritical)r(rržrŸr)r)r*rD3s  z,TestSystemAPITypes.test_sensors_temperaturescCs| t ¡t¡dS)N)rfr'Z boot_timerp)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'ZusersrfrrwrOrŒÚhostÚpidrt)r(Úuserr)r)r*Ú test_usersBs zTestSystemAPITypes.test_usersN)r:r;r<Ú__doc__Ú classmethodrdrprkrmrqrrrur!r=rrBrzrr r‡r‘r˜rršrrFrrDr¢r¦r)r)r)r*raÌs$      rac@s"eZdZe e d¡dd„ƒZdS)ÚTestProcessWaitTypez not POSIXcCsXt | ¡j¡}| ¡| ¡}| |tj ¡t dk rH|  |t j ¡n |  |t ¡dS)N) r'rJZspawn_testprocr¤Ú terminateÚwaitr%ÚsignalÚSIGTERMrrfr‰rt)r(ÚpÚcoder)r)r*Útest_negative_signalMsz(TestProcessWaitType.test_negative_signalN)r:r;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) Ncs|ˆ |jˆ¡ˆ |j|¡t|tjƒrP|jdk rfˆ |jd¡ˆ |j|¡nt|tjƒrfˆ  |¡t |ƒ|j sxt ‚dS)Nr) r%r¤rÚ isinstancer'Ú ZombieProcessÚppidrgÚ NoSuchProcessZassertProcessGonerwÚmsgre)Úexcrbrr³)r¤Útcaser)r*Úcheck_exceptionas    z"proc_info..check_exceptionc sNˆdkrJyˆ d¡Wn2tjk rH}zˆ|ˆˆˆƒWdd}~XYnXdS)Nr)r«r'ÚError)r¶)r¸rr¤r³rbr)r*Údo_waitms zproc_info..do_waitr³rr¤F)Ú clear_cache) rr'rJZas_dictr´r¤rÚiterÚgettersr¹)r¤rºÚdr—ÚnsÚfunZfun_namer¶r))r¸rr¤r³rbr·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 ifkr|st|ƒ‚qWqW|rî|  d  |¡¡‚dS) NzH ====================================================================== zFAIL: test_%s pid=%s, ret=%s r¤zF----------------------------------------------------------------------z %sÚ css|]}d|VqdS)z Nr))Ú.0Úir)r)r*ú ªsz1TestFetchAllProcesses.test_all..rgÚ) rÈrvÚgetattrreÚreprÚ tracebackÚ format_excrÆÚ splitlinesÚappendZfail)r(Zfailuresr—rÚvalueÚmethÚsr)r)r*Útest_alls& zTestFetchAllProcesses.test_allcCs*| |t¡x|D]}| |t¡qWdS)N)rfÚlistrw)r(r…r—Úpartr)r)r*Úcmdline³s  zTestFetchAllProcesses.cmdlinecCs²| |ttdƒf¡|s&| |d¡nˆtr8| d¡s8dStj |¡sLt |ƒ‚t r®tj  |¡r®t tdƒr®t tdƒr®yt  |tj¡s„t ‚Wn&t k r¬tj |¡r¨ts¨‚YnXdS)NrÍz.exeÚaccessÚX_OK)rfrwrŒr%r ÚendswithÚosÚpathÚisabsrer Úisfiler&rÛrÜÚexistsr)r(r…r—r)r)r*Úexe¸szTestFetchAllProcesses.execCs| |t¡| |d¡dS)Nr)rfrtrg)r(r…r—r)r)r*r¤Ìs zTestFetchAllProcesses.pidcCs | |ttf¡| |d¡dS)Nr)rfrtrrg)r(r…r—r)r)r*r³ÐszTestFetchAllProcesses.ppidcCs4| |t¡tr$|s$|ddkr$dSts0|s0t‚dS)NÚstatusÚstopped)rfrwrrre)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) rfrprgrerr'Ú STATUS_ZOMBIEÚtimeÚstrftimeÚ localtime)r(r…r—r)r)r*Ú create_timeÜs z!TestFetchAllProcesses.create_timecCs6t|ƒs t‚x$|D]}| |t¡| |d¡qWdS)Nr)rrerfrtrg)r(r…r—Úuidr)r)r*rLìs   zTestFetchAllProcesses.uidscCs>t|ƒs t‚x,|D]$}| |t¡tsts| |d¡qWdS)Nr)rrerfrtrrrg)r(r…r—Úgidr)r)r*Úgidsòs    zTestFetchAllProcesses.gidscCs| |t¡|st‚dS)N)rfrwre)r(r…r—r)r)r*Úusernameûs zTestFetchAllProcesses.usernamecCs0| |t¡|st‚| |d¡| |t¡dS)Nú?)rfrwreZassertNotEqualÚassertInr")r(r…r—r)r)r*räÿs  zTestFetchAllProcesses.statuscCsBt|ƒs t‚x0|D](}| |ttf¡|dkr| |d¡qWdS)Néÿÿÿÿr)rrerfrtrrg)r(r…r—Úfieldr)r)r*rTs   z!TestFetchAllProcesses.io_counterscCsztr>| |jt¡| |jt¡| |jd¡| |jd¡n8tjtjtj tj g}| |t¡| |d¡|  ||¡dS)Nr) rrfÚioclassrtrÔrgr'r2r1r0r/rð)r(r…r—Úchoicesr)r)r*rQ s  zTestFetchAllProcesses.ionicecCs4| |t¡tr$|s$|ddkr$dS| |d¡dS)Nräråé)rfrtrrg)r(r…r—r)r)r*Ú num_threadss z!TestFetchAllProcesses.num_threadscCsr| |t¡x`|D]X}t|ƒs"t‚| |jd¡| |jd¡| |jd¡x|D]}| |tt f¡qRWqWdS)Nr) rfrØrrergÚidÚ user_timeÚ system_timertrp)r(r…r—Útròr)r)r*Úthreads"s    zTestFetchAllProcesses.threadscCs6t|ƒs t‚x$|D]}| |t¡| |d¡qWdS)Nr)rrerfrprg)r(r…r—rjr)r)r*rl,s   zTestFetchAllProcesses.cpu_timescCs.| |t¡d|kr dks*nt|ƒ‚dS)NggY@)rfrpre)r(r…r—r)r)r*ro3s z!TestFetchAllProcesses.cpu_percentcCs\| |t¡tr|dkrdS| |d¡t ¡dkr@| |d¡| |tt t ¡ƒƒ¡dS)Nrñrrõ) rfrtrrgr'rsr%rðrØr)r(r…r—r)r)r*r]7s     zTestFetchAllProcesses.cpu_numcCs~t|ƒs t‚x(|D] }| |ttf¡| |d¡qWtrz| |j|j¡| |j |j ¡| |j |j ¡| |j |j¡dS)Nr)rrerfrtrrgr 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|ƒs t‚t ¡j}xd|jD]Z}t||ƒ}| |tt f¡|j |d||fdt st rb|dkrbq|j |||||fdqWt r|  |j|j¡dS)Nr)rµ)ZvmsÚdata)rrer'Zvirtual_memoryÚtotalÚ_fieldsrÎrfrtrrgrr ZassertLessEqualZpssZuss)r(r…r—rþrrÔ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¬qtj |j¡sÂt|ƒ‚yt |j¡}Wntk ræYqXt |j¡st|ƒ‚qWdS)Nrñr)ÚrÚwÚazr+za+)rfrØÚfdrtrßrwr r%rÚpositionÚmodeÚflagsrgrðZ assertGreaterrrÞràreÚstatr ÚS_ISREGÚst_mode)r(r…r—ÚfÚstr)r)r*Ú open_files[s*   z TestFetchAllProcesses.open_filescCs| |t¡| |d¡dS)Nr)rfrtrg)r(r…r—r)r)r*rWts zTestFetchAllProcesses.num_fdsc CsPtƒ@| t|ƒtt|ƒƒ¡x |D]}t|ƒs6t‚t|ƒq&WWdQRXdS)N)rr%rƒr„rrer)r(r…r—r†r)r)r*Ú connectionsxs   z!TestFetchAllProcesses.connectionsc CsŒ|rˆ| |t¡tj |¡s$t|ƒ‚yt |¡}WnDtk rv}z&trX|j t j j krXn|j t j krf‚Wdd}~XYnXt |j¡sˆt‚dS)N)rfrwrÞrßràrerÚOSErrorr Úerrnor'Z _psplatformZACCESS_DENIED_SETÚENOENTÚS_ISDIRr )r(r…r—r Úerrr)r)r*Úcwds   zTestFetchAllProcesses.cwdcCs.| |t¡d|kr dks*nt|ƒ‚dS)Nréd)rfrpre)r(r…r—r)r)r*Úmemory_percents z$TestFetchAllProcesses.memory_percentcCs| |t¡dS)N)rfr“)r(r…r—r)r)r*Ú is_running“sz TestFetchAllProcesses.is_runningcCsV| |t¡|gkst|ƒ‚ttt ¡ƒƒ}x$|D]}| |t¡| ||¡q2WdS)N)rfrØrerr'rsrtrð)r(r…r—Zcpusrjr)r)r*r[–s    z"TestFetchAllProcesses.cpu_affinitycCsH| |ttdƒf¡|dk rDtj |¡s0t|ƒ‚tj |¡sDt|ƒ‚dS)N)rfrwrŒrÞrßràrerâ)r(r…r—r)r)r*rOžszTestFetchAllProcesses.terminalcCsÖxÐ|D]È}| |jt¡| |jt¡| |jt¡x˜|jD]Ž}t||ƒ}|dkrv| d¡sÊtj  |j¡sÊt |jƒ‚q<|dkr|sÊt t |ƒƒ‚q<|dkr®t sÊ|sÊt t |ƒƒ‚q<| |t tf¡| |d¡qÃsz.TestFetchAllProcesses.nice..)éé) rfrtr reÚdirr'rðÚsysÚ version_inforr‰)r(r…r—Z prioritiesr)r)r*Únice¾s    zTestFetchAllProcesses.nicecCs:t|ƒs t‚x(|D] }| |ttf¡| |d¡qWdS)Nr)rrerfrtrrg)r(r…r—rÔr)r)r*Únum_ctx_switchesËs  z&TestFetchAllProcesses.num_ctx_switchescCs@| |t¡| t|ƒd¡| |dd¡| |dd¡dS)Nr4rrñrõ)rfÚtupler%rƒrg)r(r…r—r)r)r*rSÑs zTestFetchAllProcesses.rlimitcCs>| |t¡x,| ¡D] \}}| |t¡| |t¡qWdS)N)rfÚdictrvrw)r(r…r—rxryr)r)r*rI×s  zTestFetchAllProcesses.environN))r:r;r<r§rÅrÇrÈr×rÚrãr¤r³rrêrLrírîrärTrQrörûrlror]rürr rWrrrrr[rOr_rYr$r%rSrIr)r)r)r*r‰sL     rÂÚ__main__)Ú run_from_name)8r§rrÃrÞr¬rr"rçrÐr'rrrrrrrr r r r Zpsutil._compatr rrZ psutil.testsrrrrrrrrrrrrrrrrr r!r"r#r>rHrar©rÁrÂr:Zpsutil.tests.runnerr)Ú__file__r)r)r)r*Ú sn                                  ?5+ V