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)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)N PROCFS_PATH) assertEqualhasattrpsutilrr r)selfr)N/opt/alt/python37/lib64/python3.7/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_CLASS)r%r&r'r )r(aer)r)r*test_win_priorityFsz(TestAvailConstantsAPIs.test_win_prioritycCsJ|j}|ttdt|ttdt|ttdt|ttdtdS)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}|ttdt|ttdt|ttdt|ttdtdS)N IOPRIO_HIGH IOPRIO_NORMAL IOPRIO_LOWIOPRIO_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}|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)r4r5 Z RLIMIT_NICEZ RLIMIT_RTPRIO)r4r5Z 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<eZdZddZddZddZddZd d Zd d Zd S)TestAvailSystemAPIscCs|ttdtdS)NZwin_service_iter)r%r&r'r )r(r)r)r*test_win_service_itersz)TestAvailSystemAPIs.test_win_service_itercCs|ttdtdS)NZwin_service_get)r%r&r'r )r(r)r)r*test_win_service_getsz(TestAvailSystemAPIs.test_win_service_getcCs"|ttdtptptptdS)Ncpu_freq)r%r&r'rrr r)r(r)r)r* test_cpu_freqs z!TestAvailSystemAPIs.test_cpu_freqcCs|ttdtptdS)Nsensors_temperatures)r%r&r'rr)r(r)r)r*test_sensors_temperaturessz-TestAvailSystemAPIs.test_sensors_temperaturescCs|ttdtdS)N sensors_fans)r%r&r'r)r(r)r)r*test_sensors_fanssz%TestAvailSystemAPIs.test_sensors_fanscCs"|ttdtptptptdS)NZsensors_battery)r%r&r'rr rr)r(r)r)r* test_batterys z TestAvailSystemAPIs.test_batteryN) r:r;r<r?r@rBrDrFrGr)r)r)r*r>s r>c@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 rrr)r(r)r)r* test_environsz!TestAvailProcessAPIs.test_environcCs|ttjdtdS)Nuids)r%r&r'rJr )r(r)r)r* test_uidsszTestAvailProcessAPIs.test_uidscCs|ttjdtdS)NrL)r%r&r'rJr )r(r)r)r* test_gidsszTestAvailProcessAPIs.test_gidscCs|ttjdtdS)Nterminal)r%r&r'rJr )r(r)r)r* test_terminalsz"TestAvailProcessAPIs.test_terminalcCs|ttjdtptdS)Nionice)r%r&r'rJrr )r(r)r)r* test_ionicesz TestAvailProcessAPIs.test_ionicez%unsupported on GITHUB_ACTIONS + LINUXcCs|ttjdtptdS)Nrlimit)r%r&r'rJrr)r(r)r)r*r9sz TestAvailProcessAPIs.test_rlimitcCs(ttjd}||tstrdnddS)N io_countersFT)r&r'rJr%rr )r(hasitr)r)r*test_io_counterss z%TestAvailProcessAPIs.test_io_counterscCs|ttjdtdS)Nnum_fds)r%r&r'rJr )r(r)r)r* test_num_fdssz!TestAvailProcessAPIs.test_num_fdscCs|ttjdtdS)N num_handles)r%r&r'rJr )r(r)r)r*test_num_handlessz%TestAvailProcessAPIs.test_num_handlescCs |ttjdtptptdS)N cpu_affinity)r%r&r'rJrr r)r(r)r)r*test_cpu_affinitysz&TestAvailProcessAPIs.test_cpu_affinitycCs |ttjdtptptdS)Ncpu_num)r%r&r'rJrrr )r(r)r)r* test_cpu_numsz!TestAvailProcessAPIs.test_cpu_numcCs0ttjd}||ts"ts"ts"tr&dnddS)N memory_mapsFT)r&r'rJr%rrrr)r(rUr)r)r*test_memory_mapss z%TestAvailProcessAPIs.test_memory_mapsN)r:r;r<rKrMrNrPrRr!r=rrr9rVrXrZr\r^r`r)r)r)r*rHs rHc@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|_dS)N)r'rJproc)clsr)r)r* setUpClassszTestSystemAPITypes.setUpClassTcCs:t|s tx(|D] }||||r||dqWdS)Nr)rAssertionErrorassertIsInstanceassertGreaterEqual)r(nttype_Zgezeronr)r)r*assert_ntuple_of_numss    z(TestSystemAPITypes.assert_ntuple_of_numscCs2|txtjddD]}||qWdS)NT)Zpercpu)rkr' cpu_times)r(rhr)r)r*test_cpu_timessz!TestSystemAPITypes.test_cpu_timescCs,|tjddt|tjddtdS)N)intervalgh㈵>)rfr' cpu_percentfloat)r(r)r)r*test_cpu_percentsz#TestSystemAPITypes.test_cpu_percentcCs(|tjdd|tjdddS)N)rng-C6?)rkr'Zcpu_times_percent)r(r)r)r*test_cpu_times_percentsz)TestSystemAPITypes.test_cpu_times_percentcCs|ttdS)N)rfr' cpu_countint)r(r)r)r*test_cpu_countsz!TestSystemAPITypes.test_cpu_countz not supportedcCs2tdkr|d|jttttfddS)Nzcpu_freq() returns None)ri)r'rAZskipTestrkrprtr)r(r)r)r*rBs  z TestSystemAPITypes.test_cpu_freqcCs@x:tjddD]&\}}||t|j|ttfdqWdS)NT)Zperdisk)ri)r'Zdisk_io_countersitemsrfstrrkrtr)r(kvr)r)r*test_disk_io_counterss z(TestSystemAPITypes.test_disk_io_counterscCsjxdtD]X}||jt||jt||jt||jt||jt ||j t q WdS)N) r'Zdisk_partitionsrfdevicerw mountpointfstypeoptsmaxfilertmaxpath)r(Zdiskr)r)r*test_disk_partitionssz'TestSystemAPITypes.test_disk_partitionsz requires rootc CsRtBtd}|t|tt|x|D]}t|s0tq0WWdQRXdS)Nall)rr'Znet_connectionsr%lensetrre)r(retconnr)r)r*test_net_connectionss   z'TestSystemAPITypes.test_net_connectionscCsxtD]\}}||txr|D]j}tdk rJtsJ||jtjn||jt ||j t||j tt df||j tt dfq(WqWdS)N)r'Z net_if_addrsrvrfrwrrfamilyIntEnumrtaddressnetmasktype broadcast)r(ifnameaddrsaddrr)r)r*test_net_if_addrs s   z$TestSystemAPITypes.test_net_if_addrscCs|xvtD]f\}}||t||jttdk rJ||jtj n||jt ||j t ||j t qWdS)N) r'Z net_if_statsrvrfrwisupboolrduplexrrtspeedmtu)r(rinfor)r)r*test_net_if_statss z$TestSystemAPITypes.test_net_if_statscCs.x(tjddD]\}}||tqWdS)NT)Zpernic)r'Znet_io_countersrvrfrw)r(r_r)r)r*test_net_io_counters$sz'TestSystemAPITypes.test_net_io_countersc Cs^xXtD]H\}}||tx2|D]*}||jt||jttt dfq(WqWdS)N) r'rErvrfrwlabelcurrentrprtr)r(nameunitsunitr)r)r*rF*s   z$TestSystemAPITypes.test_sensors_fansc CsxtD]x\}}||txb|D]Z}||jt||jttt df||j ttt df||j ttt dfq(WqWdS)N) r'rCrvrfrwrrrprtrhighcritical)r(rrrr)r)r*rD3s  z,TestSystemAPITypes.test_sensors_temperaturescCs|ttdS)N)rfr'Z boot_timerp)r(r)r)r*test_boot_time>sz!TestSystemAPITypes.test_boot_timecCsfx`tD]T}||jt||jttdf||jttdf||jt tdfq WdS)N) r'ZusersrfrrwrOrhostpidrt)r(userr)r)r* test_usersBs zTestSystemAPITypes.test_usersN)r:r;r<__doc__ classmethodrdrprkrmrqrrrur!r=rrBrzrr rrrrrrrFrrDrrr)r)r)r*ras$      rac@s"eZdZee dddZdS)TestProcessWaitTypez not POSIXcCsXt|j}||}||tj t dk rH| |t j n | |t dS)N) r'rJZspawn_testprocr terminatewaitr%signalSIGTERMrrfrrt)r(pcoder)r)r*test_negative_signalMsz(TestProcessWaitType.test_negative_signalN)r:r;r<r!r=r rr)r)r)r*rKsrc stfddfdd}ytddg}Wntjk rZiSX|d|ddji}t}x`|j|jdd D]L\}}y|||<Wqtj k r}z|wWdd}~XYqXqW||S) Ncs||j|j|t|tjrP|jdk rf|jd|j|nt|tjrf |t ||j sxt dS)Nr) r%rr isinstancer' ZombieProcessppidrg NoSuchProcessZassertProcessGonerwmsgre)excrbrr)rtcaser)r*check_exceptionas    z"proc_info..check_exceptionc sNdkrJydWn2tjk rH}z|Wdd}~XYnXdS)Nr)rr'Error)r)rrrrrbr)r*do_waitms zproc_info..do_waitrrrF) clear_cache) rr'rJZas_dictrrritergettersr)rrdrnsfunZfun_namerr))rrrrrbrr* 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|_dS)N)multiprocessingZPoolpool)r(r)r)r*setUpszTestFetchAllProcesses.setUpcCs|j|jdS)N)rrjoin)r(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}x|D]}x|D]\}}t||}y|||Wnttk rd}|d||dt|f7}|d7}|dt7}ddd|D}|d7}| |YqX|d d gdd ifkr|st|qWqW|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) rrvgetattrrerepr traceback format_excr splitlinesappendZfail)r(Zfailuresrrvaluemethsr)r)r*test_alls& zTestFetchAllProcesses.test_allcCs*||tx|D]}||tqWdS)N)rflistrw)r(rrpartr)r)r*cmdlines  zTestFetchAllProcesses.cmdlinecCs||ttdf|s&||dntr8|ds8dStj|sLt |t rtj |rt tdrt tdryt |tjst Wn&t k rtj|rtsYnXdS)Nrz.exeaccessX_OK)rfrwrr%r endswithospathisabsrer isfiler&rrexistsr)r(rrr)r)r*exeszTestFetchAllProcesses.execCs||t||ddS)Nr)rfrtrg)r(rrr)r)r*rs zTestFetchAllProcesses.pidcCs ||ttf||ddS)Nr)rfrtrrg)r(rrr)r)r*rszTestFetchAllProcesses.ppidcCs4||ttr$|s$|ddkr$dSts0|s0tdS)Nstatusstopped)rfrwrrre)r(rrr)r)r*rs  zTestFetchAllProcesses.namecCs^||ty||dWn*tk rFtr@|dtjkr@nYnXtdt |dS)Nrrz%Y %m %d %H:%M:%S) rfrprgrerr' STATUS_ZOMBIEtimestrftime localtime)r(rrr)r)r* create_times z!TestFetchAllProcesses.create_timecCs6t|s tx$|D]}||t||dqWdS)Nr)rrerfrtrg)r(rruidr)r)r*rLs   zTestFetchAllProcesses.uidscCs>t|s tx,|D]$}||ttsts||dqWdS)Nr)rrerfrtrrrg)r(rrgidr)r)r*gidss    zTestFetchAllProcesses.gidscCs||t|stdS)N)rfrwre)r(rrr)r)r*usernames zTestFetchAllProcesses.usernamecCs0||t|st||d||tdS)N?)rfrwreZassertNotEqualassertInr")r(rrr)r)r*rs  zTestFetchAllProcesses.statuscCsBt|s tx0|D](}||ttf|dkr||dqWdS)Nr)rrerfrtrrg)r(rrfieldr)r)r*rTs   z!TestFetchAllProcesses.io_counterscCsztr>||jt||jt||jd||jdn8tjtjtj tj g}||t||d| ||dS)Nr) rrfioclassrtrrgr'r2r1r0r/r)r(rrchoicesr)r)r*rQ s  zTestFetchAllProcesses.ionicecCs4||ttr$|s$|ddkr$dS||ddS)Nrr)rfrtrrg)r(rrr)r)r* num_threadss z!TestFetchAllProcesses.num_threadscCsr||tx`|D]X}t|s"t||jd||jd||jdx|D]}||tt fqRWqWdS)Nr) rfrrrergid user_time system_timertrp)r(rrtrr)r)r*threads"s    zTestFetchAllProcesses.threadscCs6t|s tx$|D]}||t||dqWdS)Nr)rrerfrprg)r(rrrjr)r)r*rl,s   zTestFetchAllProcesses.cpu_timescCs.||td|kr dks*nt|dS)NggY@)rfrpre)r(rrr)r)r*ro3s z!TestFetchAllProcesses.cpu_percentcCs\||ttr|dkrdS||dtdkr@||d||tt tdS)Nrrr) rfrtrrgr'rsr%rrr)r(rrr)r)r*r]7s     zTestFetchAllProcesses.cpu_numcCs~t|s tx(|D] }||ttf||dqWtrz||j|j||j |j ||j |j ||j |jdS)Nr)rrerfrtrrgr Z peak_wsetZwsetZpeak_paged_poolZ paged_poolZpeak_nonpaged_poolZ nonpaged_poolZ peak_pagefileZpagefile)r(rrrr)r)r* memory_info@s  z!TestFetchAllProcesses.memory_infocCst|s ttj}xd|jD]Z}t||}||tt f|j |d||fdt st rb|dkrbq|j |||||fdqWt r| |j|jdS)Nr)r)Zvmsdata)rrer'Zvirtual_memorytotal_fieldsrrfrtrrgrr ZassertLessEqualZpssZuss)r(rrrrrr)r)r*memory_full_infoKs    z&TestFetchAllProcesses.memory_full_infoc Cs||tx|D]}||jt||jttrF||jdnftr||j t||j t||j t| |j d| |j d||j dn tr|jsqtj|jst|yt|j}Wntk rYqXt|jst|qWdS)Nrr)rwazr+za+)rfrfdrtrrwr r%rpositionmodeflagsrgrZ assertGreaterrrrrestatr S_ISREGst_mode)r(rrfstr)r)r* open_files[s*   z TestFetchAllProcesses.open_filescCs||t||ddS)Nr)rfrtrg)r(rrr)r)r*rWts zTestFetchAllProcesses.num_fdsc CsPt@|t|tt|x |D]}t|s6tt|q&WWdQRXdS)N)rr%rrrrer)r(rrrr)r)r* connectionsxs   z!TestFetchAllProcesses.connectionsc Cs|r||ttj|s$t|yt|}WnDtk rv}z&trX|j t j j krXn|j t j krfWdd}~XYnXt|jstdS)N)rfrwrrrrerOSErrorr errnor'Z _psplatformZACCESS_DENIED_SETENOENTS_ISDIRr )r(rrr errr)r)r*cwds   zTestFetchAllProcesses.cwdcCs.||td|kr dks*nt|dS)Nrd)rfrpre)r(rrr)r)r*memory_percents z$TestFetchAllProcesses.memory_percentcCs||tdS)N)rfr)r(rrr)r)r* is_runningsz TestFetchAllProcesses.is_runningcCsV||t|gkst|ttt}x$|D]}||t|||q2WdS)N)rfrrerr'rsrtr)r(rrZcpusrjr)r)r*r[s    z"TestFetchAllProcesses.cpu_affinitycCsH||ttdf|dk rDtj|s0t|tj|sDt|dS)N)rfrwrrrrrer)r(rrr)r)r*rOszTestFetchAllProcesses.terminalcCsx|D]}||jt||jt||jtx|jD]}t||}|dkrv|dstj |jst |jq<|dkr|st t |q<|dkrt s|st t |q<||t tf||dqsz.TestFetchAllProcesses.nice..)) rfrtr redirr'rsys version_inforr)r(rrZ prioritiesr)r)r*nices    zTestFetchAllProcesses.nicecCs:t|s tx(|D] }||ttf||dqWdS)Nr)rrerfrtrrg)r(rrrr)r)r*num_ctx_switchess  z&TestFetchAllProcesses.num_ctx_switchescCs@||t|t|d||dd||dddS)Nr4rrr)rftupler%rrg)r(rrr)r)r*rSs zTestFetchAllProcesses.rlimitcCs>||tx,|D] \}}||t||tqWdS)N)rfdictrvrw)r(rrrxryr)r)r*rIs  zTestFetchAllProcesses.environN))r:r;r<rrrrrrrrrrrrLrrrrTrQrrrlror]rrr rWrrrrr[rOr_rYr$r%rSrIr)r)r)r*rsL     r__main__) run_from_name)8rrrrrrr"rrr'rrrrrrrr r r r Zpsutil._compatr rrZ psutil.testsrrrrrrrrrrrrrrrrr r!r"r#r>rHrarrrr:Zpsutil.tests.runnerr)__file__r)r)r)r* sn                                  ?5+ V