B =_ @szdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl m Z ddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"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.Gd$d%d%e)Z/Gd&d'd'e)Z0Gd(d)d)e)Z1Gd*d+d+e)Z2Gd,d-d-e)Z3Gd.d/d/e)Z4Gd0d1d1e)Z5e6d2krvdd3l7m8Z8e8e9dS)4zTests for system APIS.N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)FileNotFoundError)long)ASCII_FS)check_net_address) CI_TESTING)DEVNULL)enum)GLOBAL_TIMEOUT) HAS_BATTERY) HAS_CPU_FREQ)HAS_GETLOADAVG)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)IS_64BIT)mock)PsutilTestCase)PYPY)retry_on_failure)GITHUB_ACTIONS)UNICODE_SUFFIX)unittestc@s\eZdZddZddZeeo"edddZ eeo:eddd Z d d Z d d Z dS)TestProcessAPIsc Cs|tddtD|}||jddtDt|j}|| | |jddtDt j dt td|ttgWdQRXt j dttd*|tjttWdQRXWdQRXdS)NcSsg|] }|jqS)pid).0xr$r$K/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_system.py @sz5TestProcessAPIs.test_process_iter..cSsg|] }|jqSr$)r%)r&r'r$r$r(r)BscSsg|] }|jqSr$)r%)r&r'r$r$r(r)Fszpsutil.Process) side_effect)assertInosgetpidpsutil process_iterspawn_testprocr%ProcesskillwaitZ assertNotInrpatch NoSuchProcess assertEquallist AccessDenied assertRaises)selfsprocpr$r$r(test_process_iter?s z!TestProcessAPIs.test_process_iterc Cs8x.tjdgdD]}|t|jdgqW|tttjdgdWdQRXtj dt dddL}x:tjddgdD]&}| |jd| |jddqW|j stWdQRXtj dt dddX}t}x>tjddg|d D](}||jd|| |jddqW|j s*tWdQRXdS) Nr%)attrsZfooz$psutil._psplatform.Process.cpu_timesr)r* cpu_times)r>Zad_value)r.r/r6r7infokeysr9 ValueErrorrr4r8 assertIsNoneassertGreaterEqualcalledAssertionErrorobjectassertIs)r:r<mflagr$r$r(test_prcess_iter_w_attrsPs$ z(TestProcessAPIs.test_prcess_iter_w_attrsz-spawn_testproc() unreliable on PYPY + WINDOWSc sfdd}g}}}dd|||fD}jttj|ddjttj|ddt}tj|d |d \}}t|d |gt |d gx|D]}  t | d qWt dfdd} | | ||\}}|jdd|Dtr:|jtj n|jd|jgx|D]}  t | d qbWt dfdd} | | | ||\}}tt|j|j|jgx|D]} t | d qWdS)Ncs|jdS)N)appendr%)r<)pidsr$r(callbackgsz1TestProcessAPIs.test_wait_procs..callbackcSsg|]}t|jqSr$)r.r1r%)r&r'r$r$r(r)nsz3TestProcessAPIs.test_wait_procs..)timeout)rOg{Gz?)rQrOg? returncodecs<tj|d|d\}}t|dt|d||fS)NgQ?)rQrOrR)r. wait_procsr6len)procsrOgonealive)r:r$r(test{s  z-TestProcessAPIs.test_wait_procs..testcSsg|] }|jqSr$)r%)r&r'r$r$r(r)scs<tj|d|d\}}t|dt|d||fS)NgQ?)rQrOrSr)r.rWr6rX)rYrOrZr[)r:r$r(r\s  )r0r9rCr.rW TypeErrortime assertLessr6rX assertFalsehasattrr terminater+r%r poprTsignalSIGTERMset assertTrue) r:rOsproc1sproc2sproc3rYtrZr[r<r\r$)rNr:r(test_wait_procsdsB       zTestProcessAPIs.test_wait_procscCsT|}|}|}dd|||fD}x|D] }|q2Wt|\}}dS)NcSsg|]}t|jqSr$)r.r1r%)r&r'r$r$r(r)sz>TestProcessAPIs.test_wait_procs_no_timeout..)r0rbr.rW)r:rhrirjrYr<rZr[r$r$r(test_wait_procs_no_timeouts  z*TestProcessAPIs.test_wait_procs_no_timeoutcCsv|}|t|jt|j}|||t|j|td| tddt kdS)NrPr) r0rgr. pid_existsr%r1r2r3r`r6rN)r:r;r<r$r$r(test_pid_existss zTestProcessAPIs.test_pid_existsc Cst}xT|D]L}yt|s"tWqtk rXtd|tkrT||YqXqWtt|dt|d}x |D]}|j t||dq~WdS)Ng?iip)msg) r.rNrnrGr^sleepfailrangemaxr`)r:rNr%r$r$r(test_pid_exists_2s    z!TestProcessAPIs.test_pid_exists_2N) __name__ __module__ __qualname__r=rLr"skipIfrr rlrmrorur$r$r$r(r#=s 8   r#c@sBeZdZddZeeo e dddZ ddZ dd Z d S) TestMiscAPIscCs4t}||t||d||tdS)Nr)r.Z boot_timeassertIsInstancefloat assertGreaterr_r^)r:Zbtr$r$r(test_boot_times  zTestMiscAPIs.test_boot_timezunreliable on CIcCst}||gx|D]}|js,t|||jt||jttdf|j dk rp||j ttdf|j|j |j dkst|t j |j t str||jqt|jqWdS)Ng)r.usersassertNotEqualnamerGr{strterminaltypehoststarteddatetime fromtimestampr rrDr%r1)r:ruserr$r$r( test_userss   zTestMiscAPIs.test_userscCs&tj}tt_z tWd|t_XdS)N)sysstdoutrr.r\)r:rr$r$r( test_tests  zTestMiscAPIs.test_testc Csddddddddd g }x"|D]}|jtt|t|d qWtjd krHtjsPttjrZt| dd t j krtj s|t| dnd t j krtjst|tjtjtjgdd| d| d| d| dn^dt j ksdt j kr tjst| d n&dt j krjtjs                       zTestMiscAPIs.test_os_constantsN) rvrwrxr~r"ryrr.rrrrr$r$r$r(rzs rzc@seZdZddZddZdS)TestMemoryAPIscCst}|jdkst||jdks,t|d|jkrBdksLnt||jdks^t||jdkspt|xt|jD]j}t ||}|dkr| |t t f|dkrx|dks| d||f||jkrx| d||j||fqxWdS)Nrdpercenttotalz %r < 0 (%s)z%r > total (total=%s, %s=%s))r.Zvirtual_memoryrrGZ availablerusedfree_fieldsrr{intr rr)r:memrvaluer$r$r(test_virtual_memorys     z"TestMemoryAPIs.test_virtual_memorycCst}||jd|jdks(t||jdks:t||jdkrX|jdksjt|n|jdksjt|d|jkrdksnt||j dkst||j dkst|dS)N)rrrrsinsoutrr) r.Z swap_memoryr6rrrGrrrrr)r:rr$r$r(test_swap_memory s   zTestMemoryAPIs.test_swap_memoryN)rvrwrxrrr$r$r$r(r src@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZee dd d!Zee d"d#d$Zd%S)& TestCpuAPIsc Cstt}||||ttjdd||dtj drpt d}| }WdQRXd|krpt ddS)NT)percpurRz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical id)r. cpu_countZassertIsNotNoner6rXr@rEr,pathexistsopenreadr"ZSkipTest)r:logicalfdZ cpuinfo_datar$r$r(test_cpu_count_logical3s    z"TestCpuAPIs.test_cpu_count_logicalcCsft}tjdd}|dkr&|dtrJtdddkrJ||n||d|||dS)NF)rzphysical cpu_count() is NonerV)rRrR)r.rskipTestr rgetwindowsversionrDrE)r:rZphysicalr$r$r(test_cpu_count_physical?s    z#TestCpuAPIs.test_cpu_count_physicalc CszxtdD]l}tjd|d}|t|js2tWdQRXtjd|d"}|tjdd|jshtWdQRXqWdS)N)rPrNz$psutil._psplatform.cpu_count_logical) return_valuez%psutil._psplatform.cpu_count_physicalF)r)rr4rDr.rrFrG)r:valrJr$r$r(test_cpu_count_noneJs   zTestCpuAPIs.test_cpu_count_nonecCs^d}t}t|x,|D]$}||t||d||7}qW||t|t|dS)Nrg)r.r@sumr{r|rEr6r)r:rtimescp_timer$r$r(test_cpu_timesVs    zTestCpuAPIs.test_cpu_timescCsPtt}tt}x(t|kr@tt}||krdSqW|ddS)Nztime remained the same)rr.r@r^rrr)r:t1Zstop_att2r$r$r(test_cpu_times_time_increasesss   z)TestCpuAPIs.test_cpu_times_time_increasescCsxftjddD]V}d}t|x,|D]$}||t||d||7}q$W||t|t|qW|ttjdddttjdddS)NT)rrgF) r.r@rr{r|rEr6rrX)r:rrrr$r$r(test_per_cpu_times}s     zTestCpuAPIs.test_per_cpu_timescCstjdd}tt}xht|kr0|dStjdd}x@t||D]2\}}t|t|}}||}|dkrHdSqHWqWdS)NT)rrQg?)r.r@r^rrrzipZ_cpu_busy_time)r:Ztot1Z giveup_atZtot2rr differencer$r$r(test_per_cpu_times_2s     z TestCpuAPIs.test_per_cpu_times_2cCs\t}tjdd}|ddt|D}x*|jD] }|jt||t||ddq4WdS)NT)rcSsg|] }t|qSr$)r)r&numr$r$r(r)sz9TestCpuAPIs.test_cpu_times_comparison..rR)delta)r.r@_makerrassertAlmostEqualr)r:baseZper_cpuZ summed_valuesfieldr$r$r(test_cpu_times_comparisons   z%TestCpuAPIs.test_cpu_times_comparisonc Csy<||t||d||d||dtWn@tk r|}z"td|t |t |fWdd}~XYnXdS)NgggY@z %s last=%s new=%s) r{r|rEZ assertIsNotassertLessEqualr.rrGpprintpformat)r:rZlast_retZnew_reterrr$r$r(_test_cpu_percents   zTestCpuAPIs._test_cpu_percentc Csbtjdd}x.tdD]"}tjdd}|||||}qW|ttjddWdQRXdS)NgMbP?)intervalrrP)r. cpu_percentrsrr9rC)r:lastr'newr$r$r(test_cpu_percents   zTestCpuAPIs.test_cpu_percentc Cstjddd}|t|tx>tdD]2}tjddd}x|D]}||||qDW|}q,W|ttjdddWdQRXdS)NgMbP?T)rrrrP) r.rr6rXrrsrr9rC)r:rr'rrr$r$r(test_per_cpu_percents  z TestCpuAPIs.test_per_cpu_percentc Cstjdd}xNtdD]B}tjdd}x|D]}||||q,W|t||||}qW|ttjddWdQRXdS)NgMbP?)rrrP)r.cpu_times_percentrsrrr9rC)r:rr'rrr$r$r(test_cpu_times_percents    z"TestCpuAPIs.test_cpu_times_percentcCstjddd}|t|tx^tdD]R}tjddd}x:|D]2}x|D]}||||qNW|t|||qDW|}q,WdS)NgMbP?T)rrr)r.rr6rXrrsrr)r:rr'rcpurr$r$r(test_per_cpu_times_percents  z&TestCpuAPIs.test_per_cpu_times_percentc CsrtjddddtjddD}tjd|d8x0tjddD] }x|D]}||ddqJWq@WWdQRXdS)NT)rcSs*g|]"}|ddtt|jDqS)cSsg|]}dqS)rr$)r&r'r$r$r(r)szNTestCpuAPIs.test_per_cpu_times_percent_negative...)rrsrXr)r&r'r$r$r(r)szCTestCpuAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_times)r)r.rr@rr4r)r:Z zero_timesrrr$r$r(#test_per_cpu_times_percent_negatives  z/TestCpuAPIs.test_per_cpu_times_percent_negativecCsXt}||jdx<|jD]2}t||}||dts|dkr||dqWdS)N) ctx_switches interruptssoft_interruptssyscallsr)rr)r.Z cpu_statsr6rrrErr})r:Zinfosrrr$r$r(test_cpu_statss    zTestCpuAPIs.test_cpu_statsz not suportedcsdfdd}tjdd}tr*|s*d|s6t||tjddgtr`t|tdS)Ncsrxl|D]d}|jd|jdkr2|j|jx6|jD],}t||}|ttt f |dq:WqWdS)N)currentminrtgr) r6rrtrrrr{rr r|rE)lsntrr)r:r$r(check_lss    z+TestCpuAPIs.test_cpu_freq..check_lsT)rzreturns empty list on FreeBSDF) r.Zcpu_freqrrrGrr6rXr)r:rrr$)r:r( test_cpu_freqs   zTestCpuAPIs.test_cpu_freqz not supportedcCsBt}|t|dx$|D]}||t||dqWdS)NrSg)r. getloadavgr6rXr{r|rE)r:Zloadavgloadr$r$r(test_getloadavgs   zTestCpuAPIs.test_getloadavgN)rvrwrxrrrrrrrrrrrrrrrr"ryrrrrr$r$r$r(r1s"    !        rc@seZdZeeoe dddZee dddZ ddZ d d Z ee o\e jd  d eeope d ddZddZdS) TestDiskAPIszunreliable on PYPY32 + 32BITc Cstt}||jd|jdks.t||jdks@t||j dksRt||j|jksft||j|j kszt|d|j krdksnt|j t t drt t}d}||j|j|j |j |j |d|j |j|j|d|}|tt|WdQRXdS)N)rrrrrr disk_usageiP)r)r.rr,getcwdr6rrrGrrrrashutilrZ get_testfnr9r )r:usageZ shutil_usageZ tolerancefnamer$r$r(test_disk_usage#s&"    zTestDiskAPIs.test_disk_usageznot an ASCII fsc Cs$|tttWdQRXdS)N)r9UnicodeEncodeErrorr.rr!)r:r$r$r(test_disk_usage_unicode>s z$TestDiskAPIs.test_disk_usage_unicodecCstddS)N.)r.r)r:r$r$r(test_disk_usage_bytesDsz"TestDiskAPIs.test_disk_usage_bytesc sfdd}tjdd}j||dxj|D]b}||trHd|jkrHq,tsdtj|j sjt |n|j tj|j st ||j s,t |q,Wtjdd}j||dxtjddD]}||ts|j ryt |j WnVtk r6}z6trtr|jtjkrw|jtjtjfkr&Wdd}~XYqXtj|j st |qWdd }|t}d d tjddD}||dS) Ncs|jt|jt|jt|jt|jttdf|j ttdf|jdk rt s |jd|j dk r |j ddS)Nr) r{devicer mountpointfstypeoptsmaxfilerrmaxpathr r})r)r:r$r( check_ntupleHs z7TestDiskAPIs.test_disk_partitions..check_ntupleF)all)rpZcdromTcSs2tj|}xtj|s(tj|}qW|S)N)r,rabspathismountdirnamer)rr$r$r(find_mount_pointys z;TestDiskAPIs.test_disk_partitions..find_mount_pointcSsg|]}|jr|jqSr$)rr)r&r'r$r$r(r)sz5TestDiskAPIs.test_disk_partitions..)r.Zdisk_partitionsrgr rr r,rrrrGrrstatOSErrorr rerrnoZEIOEPERMEACCES__file__r+)r:rrZdiskrrZmountZmountsr$)r:r(test_disk_partitionsGs<    z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionzunreliable on CIcs~fdd}tjdd}|dk s(td||tjdd}t|tt|x$|D]}|sjt||||qZWdS)Ncs|d|j|d|j|d|j|d|jtstsƈ|d|j|d|jt r|d|j |d|j |d |j nt rƈ|d|j x$|jD]}t||dkst|qWdS) NrrRrVrSr)r6 read_count write_count read_bytes write_bytesrr read_time write_timerZread_merged_countZwrite_merged_countZ busy_timerrrrG)rr)r:r$r(rs z8TestDiskAPIs.test_disk_io_counters..check_ntupleF)perdiskzno disks on this system?T)r.disk_io_countersrGr6rXrf)r:rretkeyr$)r:r(test_disk_io_counterss     z"TestDiskAPIs.test_disk_io_countersc CsNtjdid6}|tjdd|tjddi|js@tWdQRXdS)Nz#psutil._psplatform.disk_io_counters)rF)rT)rr4rDr.rr6rFrG)r:rJr$r$r(test_disk_io_counters_no_diskss  z+TestDiskAPIs.test_disk_io_counters_no_disksN)rvrwrxr"ryrrrrrrrrr,rrrr.rrrr$r$r$r(r!s=rc@sneZdZee dddZee dddZddZdd Z d d Z ee pZe pZe d d dZdS) TestNetAPIsz not supportedcslfdd}tjdd}||tjdd}|gx.|D]&}||t|||q>WdS)Ncs(|d|j|d|j|d|j|d|j|d|j|d|j|d|j|d|j|jdkst ||jdkst ||jdkst ||jdkst ||jdkst ||jdkst ||jdkst ||jdks$t |dS) NrrRrVrSrr rr ) r6 bytes_sent bytes_recv packets_sent packets_recverrinerroutdropindropoutrG)r)r:r$r(rs z6TestNetAPIs.test_net_io_counters..check_ntupleF)pernicT)r.net_io_countersrrgr{r)r:rrrr$)r:r(test_net_io_counterss       z TestNetAPIs.test_net_io_countersc CsNtjdid6}|tjdd|tjddi|js@tWdQRXdS)Nz"psutil._psplatform.net_io_counters)rF)r!T)rr4rDr.r"r6rFrG)r:rJr$r$r(test_net_io_counters_no_nicss  z(TestNetAPIs.test_net_io_counters_no_nicsc Csxt}|st|t}ttjtjtjg}x| D]\}}| |t | t t|t |x|D]}| |jt| |jt | |jt tdf| |jt tdf||j|tjdkrts| |jtj||jr|jtjkr:t|j}t|||jdfWdQRXnj|jtjkrt|jdtjtjdtj d}|\} } } } } t| | | }t||| WdQRXxB|j|j|j|j!fD]*}|dk r|jtjkrt"||jqW|jr|#|j!qr|j!rr|#|jqrWqs   rP__main__) run_from_name):__doc__r3rrr,rrrdr(rr^r.rrrrrrrr r r Zpsutil._compatr r Z psutil.testsrrrrrrrrrrrrrrrrrrr r!r"r#rzrrrrrPrvZpsutil.tests.runnerrbrr$r$r$r(st                                 J%q5