U 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)Gd0d1d1e'Z3e4d2krbdd3l5m6Z6e6e7dS)4zContracts 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@sDeZdZddZddZddZddZee o2e d d d Z d S) TestAvailConstantsAPIscCs|ttdtptptdS)NZ PROCFS_PATH) assertEqualhasattrpsutilrr rselfr)N/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATHBs  z'TestAvailConstantsAPIs.test_PROCFS_PATHcCsj|j}|ttdt|ttdt|ttdt|ttdt|ttdt|ttdtdS)NZABOVE_NORMAL_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSr$r%r&r r(Zaer)r)r*test_win_priorityFsz(TestAvailConstantsAPIs.test_win_prioritycCsJ|j}|ttdt|ttdt|ttdt|ttdtdS)NZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEr$r%r&rr-r)r)r*test_linux_ioprio_linuxOs z.TestAvailConstantsAPIs.test_linux_ioprio_linuxcCsJ|j}|ttdt|ttdt|ttdt|ttdtdS)N IOPRIO_HIGH IOPRIO_NORMAL IOPRIO_LOWIOPRIO_VERYLOWr,r-r)r)r*test_linux_ioprio_windowsVs z0TestAvailConstantsAPIs.test_linux_ioprio_windows%unsupported on GITHUB_ACTIONS + LINUXcCs|j}|ttdtpt|ttdtp*t|ttdtp>t|ttdtpRt|ttdtpft|ttdtpzt|ttdtpt|ttdtpt|ttd tpt|ttd tpt|ttd tpt|ttd ttrtd kr|ttdttdkr0|ttdttdkrL|ttdttdkrh|ttdttd kr|ttdt|ttdt|ttdt|ttdtdS)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)r7r8 Z RLIMIT_NICEZ RLIMIT_RTPRIO)r7r8Z RLIMIT_RTTIMEZRLIMIT_SIGPENDINGZ RLIMIT_SWAPZ RLIMIT_SBSIZEZ RLIMIT_NPTS)r$r%r&rrr rr-r)r)r* test_rlimit]s6     z"TestAvailConstantsAPIs.test_rlimitN) __name__ __module__ __qualname__r+r.r0r5r!skipIfrrr<r)r)r)r*r#@s  r#c@s<eZdZddZddZddZddZd d Zd d Zd S)TestAvailSystemAPIscCs|ttdtdS)NZwin_service_iterr,r'r)r)r*test_win_service_itersz)TestAvailSystemAPIs.test_win_service_itercCs|ttdtdS)NZwin_service_getr,r'r)r)r*test_win_service_getsz(TestAvailSystemAPIs.test_win_service_getcCs"|ttdtptptptdS)Ncpu_freq)r$r%r&rrr rr'r)r)r* test_cpu_freqs z!TestAvailSystemAPIs.test_cpu_freqcCs|ttdtptdS)Nsensors_temperatures)r$r%r&rrr'r)r)r*test_sensors_temperaturessz-TestAvailSystemAPIs.test_sensors_temperaturescCs|ttdtdS)N sensors_fansr/r'r)r)r*test_sensors_fanssz%TestAvailSystemAPIs.test_sensors_fanscCs"|ttdtptptptdS)NZsensors_battery)r$r%r&rr rrr'r)r)r* test_batterys z TestAvailSystemAPIs.test_batteryN) r=r>r?rBrCrErGrIrJr)r)r)r*rAs rAc@s|eZdZddZddZddZddZd d Ze e o:e d d d Z ddZ ddZddZddZddZddZdS)TestAvailProcessAPIscCs4|ttjdtp,tp,tp,tp,tp,t p,t p,t dS)Nenviron) r$r%r&Processrrr rr rrrr'r)r)r* test_environsz!TestAvailProcessAPIs.test_environcCs|ttjdtdSNuidsr$r%r&rMr r'r)r)r* test_uidsszTestAvailProcessAPIs.test_uidscCs|ttjdtdSrOrQr'r)r)r* test_gidsszTestAvailProcessAPIs.test_gidscCs|ttjdtdS)NterminalrQr'r)r)r* test_terminalsz"TestAvailProcessAPIs.test_terminalcCs|ttjdtptdS)Nionice)r$r%r&rMrr r'r)r)r* test_ionicesz TestAvailProcessAPIs.test_ionicer6cCs|ttjdtptdS)Nrlimit)r$r%r&rMrrr'r)r)r*r<sz TestAvailProcessAPIs.test_rlimitcCs(ttjd}||tstrdnddS)N io_countersFT)r%r&rMr$rr r(Zhasitr)r)r*test_io_counterss z%TestAvailProcessAPIs.test_io_counterscCs|ttjdtdS)Nnum_fdsrQr'r)r)r* test_num_fdssz!TestAvailProcessAPIs.test_num_fdscCs|ttjdtdS)N num_handles)r$r%r&rMr r'r)r)r*test_num_handlessz%TestAvailProcessAPIs.test_num_handlescCs |ttjdtptptdS)N cpu_affinity)r$r%r&rMrr rr'r)r)r*test_cpu_affinitys z&TestAvailProcessAPIs.test_cpu_affinitycCs |ttjdtptptdS)Ncpu_num)r$r%r&rMrrr r'r)r)r* test_cpu_nums z!TestAvailProcessAPIs.test_cpu_numcCs0ttjd}||ts"ts"ts"tr&dnddS)N memory_mapsFT)r%r&rMr$rrrrrZr)r)r*test_memory_mapss  z%TestAvailProcessAPIs.test_memory_mapsN)r=r>r?rNrRrSrUrWr!r@rrr<r[r]r_rarcrer)r)r)r*rKs  rKc@seZdZdZeddZedfddZddZd d Z d d Z d dZ e e dddZddZddZe edddZddZddZe e dddZe e ddd Ze e dd!d"Zd#d$Zd%d&Zd'S)(TestSystemAPITypeszCheck 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|_dSN)r&rMproc)clsr)r)r* setUpClassszTestSystemAPITypes.setUpClassTcCs*|D] }||||r||dqdSNr)assertIsInstanceassertGreaterEqual)r(nttype_Zgezeronr)r)r*assert_ntuple_of_numss z(TestSystemAPITypes.assert_ntuple_of_numscCs.|ttjddD]}||qdS)NT)Zpercpu)rqr& cpu_times)r(rnr)r)r*test_cpu_timessz!TestSystemAPITypes.test_cpu_timescCs,|tjddt|tjddtdS)NZintervalgh㈵>)rlr& cpu_percentfloatr'r)r)r*test_cpu_percentsz#TestSystemAPITypes.test_cpu_percentcCs(|tjdd|tjdddS)Nrtg-C6?)rqr&Zcpu_times_percentr'r)r)r*test_cpu_times_percentsz)TestSystemAPITypes.test_cpu_times_percentcCs|ttdSrg)rlr& cpu_countintr'r)r)r*test_cpu_countsz!TestSystemAPITypes.test_cpu_countz not supportedcCs2tdkr|d|jttttfddS)Nzcpu_freq() returns Nonero)r&rDZskipTestrqrvrzrr'r)r)r*rEs  z TestSystemAPITypes.test_cpu_freqcCs<tjddD]&\}}||t|j|ttfdqdS)NT)Zperdiskr|)r&Zdisk_io_countersitemsrlstrrqrzr)r(kvr)r)r*test_disk_io_counterss z(TestSystemAPITypes.test_disk_io_counterscCsftD]X}||jt||jt||jt||jt||jt ||j t qdSrg) r&Zdisk_partitionsrlZdevicer~Z mountpointZfstypeZoptsZmaxfilerzZmaxpath)r(Zdiskr)r)r*test_disk_partitionss z'TestSystemAPITypes.test_disk_partitionsz requires rootc CsBt2td}|t|tt||D]}q.W5QRXdS)Nall)rr&Znet_connectionsr$lenset)r(retconnr)r)r*test_net_connectionss  z'TestSystemAPITypes.test_net_connectionscCstD]\}}||t|D]j}tdk rFtsF||jtjn||jt ||j t||j tt df||j tt dfq$q dSrg)r&Z net_if_addrsr}rlr~rrZfamilyIntEnumrzZaddressZnetmasktypeZ broadcast)r(ifnameZaddrsaddrr)r)r*test_net_if_addrs s  z$TestSystemAPITypes.test_net_if_addrscCsxtD]f\}}||t||jttdk rH||jtj n||jt ||j t ||j t q dSrg) r&Z net_if_statsr}rlr~ZisupboolrZduplexrrzZspeedZmtu)r(rinfor)r)r*test_net_if_statss z$TestSystemAPITypes.test_net_if_statscCs*tjddD]\}}||tqdS)NT)Zpernic)r&Znet_io_countersr}rlr~)r(r_r)r)r*test_net_io_counters$sz'TestSystemAPITypes.test_net_io_countersc CsVtD]D\}}||t|D]*}||jt||jttt dfq$q dSrg) r&rHr}rlr~labelcurrentrvrzrr(nameZunitsZunitr)r)r*rI*s  z$TestSystemAPITypes.test_sensors_fansc CstD]t\}}||t|D]Z}||jt||jttt df||j ttt df||j ttt dfq$q dSrg) r&rFr}rlr~rrrvrzrZhighZcriticalrr)r)r*rG3s z,TestSystemAPITypes.test_sensors_temperaturescCs|ttdSrg)rlr&Z boot_timervr'r)r)r*test_boot_time>sz!TestSystemAPITypes.test_boot_timecCsbtD]T}||jt||jttdf||jttdf||jt tdfqdSrg) r&Zusersrlrr~rTrZhostpidrz)r(userr)r)r* test_usersBs  zTestSystemAPITypes.test_usersN)r=r>r?__doc__ classmethodrjrvrqrsrwrxr{r!r@rrErrr rrrrrrrIrrGrrr)r)r)r*rfs0            rfc@s"eZdZee dddZdS)TestProcessWaitTypez not POSIXcCsXt|j}||}||tj t dk rH| |t j n | |t dSrg) r&rMZspawn_testprocr terminatewaitr$signalSIGTERMrrlrrz)r(pcoder)r)r*test_negative_signalMsz(TestProcessWaitType.test_negative_signalN)r=r>r?r!r@r rr)r)r)r*rKs rc stfddfdd}ztddg}Wntjk r^iYSX|d|ddji}t}|j|jdd D]R\}}z|||<Wqtj k r}z|WYqW5d}~XYqXq||S) Ncsr|j|j|t|tjrP|jdk rf|jd|j|nt|tjrf |t |dSrk) r$rr isinstancer&Z ZombieProcessppidrm NoSuchProcessZassertProcessGoner~)excrhrr)rtcaser)r*check_exceptionas    z"proc_info..check_exceptionc sNdkrJzdWn2tjk rH}z|W5d}~XYnXdSrk)rr&Error)r)rrrrrhr)r*do_waitms zproc_info..do_waitrrrF)Z clear_cache) rr&rMZas_dictrrriterZgettersr)rrdrnsZfunZfun_namerr))rrrrrhrr* proc_info^s&    rc@s8eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#dBdCZ$dDdEZ%dFdGZ&dHdIZ'dJdKZ(dLS)MTestFetchAllProcesseszTest 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|_dSrg)multiprocessingZPoolpoolr'r)r)r*setUpszTestFetchAllProcesses.setUpcCs|j|jdSrg)rrjoinr'r)r)r*tearDowns zTestFetchAllProcesses.tearDowncCsddlm}|j|tS)Nr)r)Zpsutil.tests.test_contractsrrZimap_unorderedr&Zpids)r(rr)r)r*iter_proc_infos z$TestFetchAllProcesses.iter_proc_infoc Csg}|D]}|D]\}}t||}z|||Wnttk rd}|d||dt|f7}|d7}|dt7}ddd|D}|d7}| |YqX|d d gdd ifkrqq |r| d |dS) NzH ====================================================================== zFAIL: test_%s pid=%s, ret=%s rzF----------------------------------------------------------------------z %s css|]}d|VqdS)z Nr)).0ir)r)r* sz1TestFetchAllProcesses.test_all..rg) rr}getattrAssertionErrorrepr traceback format_excr splitlinesappendZfail)r(ZfailuresrrvalueZmethsr)r)r*test_alls,  zTestFetchAllProcesses.test_allcCs&||t|D]}||tqdSrg)rllistr~)r(rrpartr)r)r*cmdlines zTestFetchAllProcesses.cmdlinecCs||ttdf|s&||dnbtr8|ds8dStrtj |rt tdrt tdrzWn&t k rtj |rt sYnXdS)Nrz.exeaccessX_OK)rlr~rr$r endswithr ospathisfiler%rexistsrr(rrr)r)r*exeszTestFetchAllProcesses.execCs||t||ddSrkrlrzrmrr)r)r*rs zTestFetchAllProcesses.pidcCs ||ttf||ddSrkrlrzrrmrr)r)r*rszTestFetchAllProcesses.ppidcCs,||ttr$|s$|ddkr$dSts(dS)Nstatusstopped)rlr~rrrr)r)r*rs  zTestFetchAllProcesses.namecCs^||tz||dWn*tk rFtr@|dtjkr@nYnXtdt |dS)Nrrz%Y %m %d %H:%M:%S) rlrvrmrrr&Z STATUS_ZOMBIEtimestrftime localtimerr)r)r* create_times z!TestFetchAllProcesses.create_timecCs&|D]}||t||dqdSrkr)r(rrZuidr)r)r*rPs zTestFetchAllProcesses.uidscCs.|D]$}||ttsts||dqdSrk)rlrzrrrm)r(rrgidr)r)r*gidss zTestFetchAllProcesses.gidscCs||tdSrg)rlr~rr)r)r*usernames zTestFetchAllProcesses.usernamecCs(||t||d||tdS)N?)rlr~ZassertNotEqualassertInr"rr)r)r*rs  zTestFetchAllProcesses.statuscCs2|D](}||ttf|dkr||dqdS)Nrr)r(rrfieldr)r)r*rYsz!TestFetchAllProcesses.io_counterscCsztr>||jt||jt||jd||jdn8tjtjtj tj g}||t||d| ||dSrk) rrlZioclassrzrrmr&r4r3r2r1r)r(rrchoicesr)r)r*rV s  zTestFetchAllProcesses.ionicecCs4||ttr$|s$|ddkr$dS||ddS)Nrr)rlrzrrmrr)r)r* num_threadss z!TestFetchAllProcesses.num_threadscCs^||t|D]H}||jd||jd||jd|D]}||ttfqBqdSrk)rlrrmidZ user_timeZ system_timerzrv)r(rrtrr)r)r*threads"s zTestFetchAllProcesses.threadscCs&|D]}||t||dqdSrk)rlrvrm)r(rrrpr)r)r*rr,s zTestFetchAllProcesses.cpu_timescCs||tdSrgrlrvrr)r)r*ru3s z!TestFetchAllProcesses.cpu_percentcCs\||ttr|dkrdS||dtdkr@||d||tt tdS)Nrrr) rlrzrrmr&ryr$rrrrr)r)r*rb7s     zTestFetchAllProcesses.cpu_numcCsn|D] }||ttf||dqtrj||j|j||j|j||j |j ||j |j dSrk) rlrzrrmr Z peak_wsetZwsetZpeak_paged_poolZ paged_poolZpeak_nonpaged_poolZ nonpaged_poolZ peak_pagefileZpagefiler(rrrr)r)r* memory_info@sz!TestFetchAllProcesses.memory_infocCstj}|jD]Z}t||}||ttf|j|d||fdt st rT|dkrTq|j |||||fdqt r||j |j dS)Nr)msg)Zvmsdata)r&Zvirtual_memorytotal_fieldsrrlrzrrmrr ZassertLessEqualZpssZuss)r(rrrrrr)r)r*memory_full_infoKs   z&TestFetchAllProcesses.memory_full_infoc Cs||t|D]}||jt||jttrD||jdnftr||j t||j t||j t| |j d| |j d||j dn tr|jsqzt|j}Wqtk rYqXqdS)Nrr)rwazr+za+)rlrfdrzrr~r r$rZpositionmodeflagsrmrZ assertGreaterrrstatr )r(rrfstr)r)r* open_files[s(  z TestFetchAllProcesses.open_filescCs||t||ddSrkrrr)r)r*r\ts zTestFetchAllProcesses.num_fdsc Cs@t0|t|tt||D] }t|q$W5QRXdSrg)rr$rrr)r(rrrr)r)r* connectionsxsz!TestFetchAllProcesses.connectionsc Csh|rd||tzt|}WnDtk rb}z&trD|jtjj krDn|jtj krRW5d}~XYnXdSrg) rlr~rrOSErrorr errnor&Z _psplatformZACCESS_DENIED_SETZENOENT)r(rrrerrr)r)r*cwds  zTestFetchAllProcesses.cwdcCs||tdSrgrrr)r)r*memory_percents z$TestFetchAllProcesses.memory_percentcCs||tdSrg)rlrrr)r)r* is_runningsz TestFetchAllProcesses.is_runningcCsB||tttt}|D]}||t|||q dSrg)rlrrr&ryrzr)r(rrZcpusrpr)r)r*r`s   z"TestFetchAllProcesses.cpu_affinitycCs ||ttdf|dk rdSrg)rlr~rrr)r)r*rTszTestFetchAllProcesses.terminalcCs|D]}||jt||jt||jt|jD]V}t||}|dkrZ|dsq8|dkrdq8|dkrrtsq8||t t f| |dq8qdS)Nr[rpermsr) rlrr~rrrr startswithr rzrrm)r(rrrnZfnamerr)r)r*rds    z!TestFetchAllProcesses.memory_mapscCs||t||ddSrkrrr)r)r*r^s z!TestFetchAllProcesses.num_handlescCsZ||ttrnDddttD}|||tjdkrJ||tj n ||tdS)NcSs g|]}|drtt|qS)Z_PRIORITY_CLASS)rrr&)rxr)r)r* s z.TestFetchAllProcesses.nice..)) rlrzr dirr&rsys version_inforr)r(rrZ prioritiesr)r)r*nices   zTestFetchAllProcesses.nicecCs*|D] }||ttf||dqdSrkrrr)r)r*num_ctx_switchessz&TestFetchAllProcesses.num_ctx_switchescCs@||t|t|d||dd||dddS)Nr7rrr)rltupler$rrmrr)r)r*rXs zTestFetchAllProcesses.rlimitcCs:||t|D] \}}||t||tqdSrg)rldictr}r~)r(rrrrr)r)r*rLs  zTestFetchAllProcesses.environN))r=r>r?rrrrrrrrrrrrPrrrrYrVrrrrrurbrrrr\rrrrr`rTrdr^r r rXrLr)r)r)r*rsL     r__main__) run_from_name)8rrrrrrr rrr&rrrrrrrr r r r Zpsutil._compatr rrZ psutil.testsrrrrrrrrrrrrrrrrr r!r"r#rArKrfrrrr=Zpsutil.tests.runnerr__file__r)r)r)r*sn                                  ?5+V