U =_ @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|ttgW5QRXt j dttd*|tjttW5QRXW5QRXdS)NcSsg|] }|jqSpid.0xr$r$K/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_system.py @sz5TestProcessAPIs.test_process_iter..cSsg|] }|jqSr$r%r'r$r$r*r+BscSsg|] }|jqSr$r%r'r$r$r*r+Fszpsutil.ProcessZ side_effect)assertInosgetpidpsutil process_iterspawn_testprocr&ProcesskillwaitZ assertNotInrpatchZ NoSuchProcess assertEquallist AccessDenied assertRaisesselfZsprocpr$r$r*test_process_iter?s    z!TestProcessAPIs.test_process_iterc CstjdgdD]}|t|jdgq|tttjdgdW5QRXtj dt ddd>}tjddgdD]&}| |jd| |jddq|W5QRXtj dt dddH}t }tjddg|d D](}||jd|| |jddqW5QRXdS) Nr&)attrsZfooz$psutil._psplatform.Process.cpu_timesrr, cpu_times)r?Zad_value)r0r1r7r8infokeysr: ValueErrorrr6r9 assertIsNoneassertGreaterEqualobjectassertIs)r<r=mflagr$r$r*test_prcess_iter_w_attrsPs0     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 g|D]}  t | d qt dfdd} | | ||\}}|jdd|Dtr6|jtj n|jd|jg|D]}  t | d q\t dfdd} | | | ||\}}tt|j|j|jg|D]} t | d qdS)Ncs|jdSN)appendr&)r=)pidsr$r*callbackgsz1TestProcessAPIs.test_wait_procs..callbackcSsg|]}t|jqSr$r0r3r&r'r$r$r*r+nsz3TestProcessAPIs.test_wait_procs..)timeout)rOg{Gz?rRrOg? returncodecs<tj|d|d\}}t|dt|d||fS)NQ?rTrSr0 wait_procsr7lenprocsrOgonealiver<r$r*test{s  z-TestProcessAPIs.test_wait_procs..testcSsg|] }|jqSr$r%r'r$r$r*r+scs<tj|d|d\}}t|dt|d||fS)NrXrTrUrrZr]rar$r*rbs  )r2r:rDr0r[ TypeErrortime assertLessr7r\ assertFalsehasattrr terminater-r&r poprVsignalSIGTERMset assertTrue) r<rOsproc1sproc2sproc3r^tr_r`r=rbr$)rNr<r*test_wait_procsdsF    zTestProcessAPIs.test_wait_procscCsP|}|}|}dd|||fD}|D] }|q0t|\}}dS)NcSsg|]}t|jqSr$rPr'r$r$r*r+sz>TestProcessAPIs.test_wait_procs_no_timeout..)r2rhr0r[)r<rnrorpr^r=r_r`r$r$r*test_wait_procs_no_timeouts z*TestProcessAPIs.test_wait_procs_no_timeoutcCsv|}|t|jt|j}|||t|j|td| tddt kdS)NrQr) r2rmr0 pid_existsr&r3r4r5rfr7rNr;r$r$r*test_pid_existss zTestProcessAPIs.test_pid_existsc Cst}|D]>}zWq tk rHtd|tkrD||Yq Xq tt|dt|d}|D]}|jt ||dqjdS)Ng?iipmsg) r0rNAssertionErrorrdsleepfailrangemaxrfrt)r<rNr&r$r$r*test_pid_exists_2s  z!TestProcessAPIs.test_pid_exists_2N) __name__ __module__ __qualname__r>rKr"skipIfrr rrrsrur}r$r$r$r*r#=s  7   r#c@sBeZdZddZeeo e dddZ ddZ dd Z d S) TestMiscAPIscCs4t}||t||d||tdSNr)r0Z boot_timeassertIsInstancefloat assertGreaterrerd)r<Zbtr$r$r*test_boot_times  zTestMiscAPIs.test_boot_timeunreliable on CIcCst}||g|D]}||jt||jttdf|jdk r`||jttdf|j|jt j |j t st r||jqt|jqdSrL)r0usersassertNotEqualrnamestrZterminaltypeZhostdatetimeZ fromtimestampZstartedr rrEr&r3)r<ruserr$r$r* test_userss  zTestMiscAPIs.test_userscCs&tj}tt_z tW5|t_XdSrL)sysstdoutrr0rb)r<rr$r$r* test_tests  zTestMiscAPIs.test_testc Cs,ddddddddd g }|D]}|jtt|t|d qtjd kr|dd tj krd|dnd tj kr| tj tj tj gdd|d|d|d|dn@dtj ksdtj kr|d ndtj kr|dn |d|D]}|jtt|d|d q dS)Nr r rrrrrrr rvposixZlinuxZbsdTrSZsunosZsolarisdarwinF)rgetattrr0boolr.rremoverplatformlowerr7rrrcountrH)r<namesrr$r$r*test_os_constantss@             zTestMiscAPIs.test_os_constantsN) r~rrrr"rrr0rrrrr$r$r$r*rs   rc@seZdZddZddZdS)TestMemoryAPIscCs~t}|jD]j}t||}|dkr4||ttf|dkr|dksV|d||f||jkr|d||j||fqdS)Npercenttotalrz %r < 0 (%s)z%r > total (total=%s, %s=%s)) r0Zvirtual_memory_fieldsrrintr rzr)r<memrvaluer$r$r*test_virtual_memorys    z"TestMemoryAPIs.test_virtual_memorycCs&t}||jd|jdkr"ndS)N)rusedfreerZsinZsoutr)r0Z swap_memoryr7rr)r<rr$r$r*test_swap_memory s zTestMemoryAPIs.test_swap_memoryN)r~rrrrr$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}| }W5QRXd|krpt ddS)NTpercpurSz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical id)r0 cpu_countZassertIsNotNoner7r\rArFr.pathexistsopenreadr"ZSkipTest)r<logicalfdZ cpuinfo_datar$r$r*test_cpu_count_logical3s    z"TestCpuAPIs.test_cpu_count_logicalcCsft}tjdd}|dkr&|dtrJtdddkrJ||n||d|||dS)NFrzphysical cpu_count() is NonerY)rSrS)r0rskipTestr rZgetwindowsversionrErF)r<rZphysicalr$r$r*test_cpu_count_physical?s    z#TestCpuAPIs.test_cpu_count_physicalc CsbdD]X}tjd|d}|tW5QRXtjd|d}|tjddW5QRXqdS)N)rQrNz$psutil._psplatform.cpu_count_logicalZ return_valuez%psutil._psplatform.cpu_count_physicalFr)rr6rEr0r)r<valrIr$r$r*test_cpu_count_noneJs zTestCpuAPIs.test_cpu_count_nonecCsZd}t}t||D]$}||t||d||7}q||t|t|dS)Nr)r0rAsumrrrFr7r)r<rtimescp_timer$r$r*test_cpu_timesVs   zTestCpuAPIs.test_cpu_timescCsLtt}tt}t|kr>tt}||krdSq|ddS)Nztime remained the same)rr0rArdrrz)r<t1Zstop_att2r$r$r*test_cpu_times_time_increasesss    z)TestCpuAPIs.test_cpu_times_time_increasescCstjddD]R}d}t||D]$}||t||d||7}q ||t|t|q |ttjdddttjdddS)NTrrrF) r0rArrrrFr7rr\)r<rrrr$r$r*test_per_cpu_times}s    zTestCpuAPIs.test_per_cpu_timescCstjdd}tt}t|kr.|dStjdd}t||D]4\}}t|t|}}||}|dkrDdSqDqdS)NTrrRg?)r0rArdrrzzipZ_cpu_busy_time)r<Ztot1Z giveup_atZtot2rr differencer$r$r*test_per_cpu_times_2s     z TestCpuAPIs.test_per_cpu_times_2cCsXt}tjdd}|ddt|D}|jD] }|jt||t||ddq2dS)NTrcSsg|] }t|qSr$)r)r(Znumr$r$r*r+sz9TestCpuAPIs.test_cpu_times_comparison..rSZdelta)r0rA_makerrassertAlmostEqualr)r<baseZper_cpuZ summed_valuesZfieldr$r$r*test_cpu_times_comparisons  z%TestCpuAPIs.test_cpu_times_comparisonc Csz<||t||d||d||dtWn@tk r|}z"td|t |t |fW5d}~XYnXdS)NrggY@z %s last=%s new=%s) rrrFZ assertIsNotassertLessEqualr0rrxpprintZpformat)r<rZlast_retZnew_reterrr$r$r*_test_cpu_percents   zTestCpuAPIs._test_cpu_percentc Cs^tjdd}tdD]"}tjdd}|||||}q|ttjddW5QRXdSNMbP?)intervaldrQ)r0 cpu_percentr{rr:rD)r<lastr)newr$r$r*test_cpu_percents    zTestCpuAPIs.test_cpu_percentc Cstjddd}|t|ttdD].}tjddd}|D]}||||q@|}q*|ttjdddW5QRXdS)NrTrrrrQ) r0rr7r\rr{rr:rDr<rr)rrr$r$r*test_per_cpu_percents  z TestCpuAPIs.test_per_cpu_percentc Csztjdd}tdD]>}tjdd}|D]}||||q(|t||||}q|ttjddW5QRXdSr)r0cpu_times_percentr{rrr:rDrr$r$r*test_cpu_times_percents    z"TestCpuAPIs.test_cpu_times_percentcCsztjddd}|t|ttdD]J}tjddd}|D].}|D]}||||qH|t|||q@|}q*dS)NrTrr)r0rr7r\rr{rr)r<rr)rcpurr$r$r*test_per_cpu_times_percents z&TestCpuAPIs.test_per_cpu_times_percentc CsjtjddddtjddD}tjd|d0tjddD]}|D]}||ddqFq>W5QRXdS)NTrcSs*g|]"}|ddtt|jDqS)cSsg|]}dqS)rr$r'r$r$r*r+szNTestCpuAPIs.test_per_cpu_times_percent_negative...)rr{r\rr'r$r$r*r+szCTestCpuAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_timesr)r0rrArr6r)r<Z zero_timesrrr$r$r*#test_per_cpu_times_percent_negatives  z/TestCpuAPIs.test_per_cpu_times_percent_negativecCsTt}||jd|jD]2}t||}||dts|dkr||dqdS)N) ctx_switches interruptsZsoft_interruptsZsyscallsr)rr)r0Z cpu_statsr7rrrFrr)r<Zinfosrrr$r$r*test_cpu_statss    zTestCpuAPIs.test_cpu_statsz not suportedcsXfdd}tjdd}tr*|s*d|tjddgtrTt|tdS)Ncsj|D]`}|jd|jdkr0|j|j|jD],}t||}|ttt f |dq6qdS)N)currentminr|rr) r7rr|rrrrrr rrF)lsntrrrar$r*check_lss   z+TestCpuAPIs.test_cpu_freq..check_lsTrzreturns empty list on FreeBSDF)r0Zcpu_freqrrrr7r\r)r<rrr$rar* test_cpu_freqs  zTestCpuAPIs.test_cpu_freq not supportedcCs>t}|t|d|D]}||t||dqdS)NrUr)r0 getloadavgr7r\rrrF)r<Zloadavgloadr$r$r*test_getloadavgs  zTestCpuAPIs.test_getloadavgN)r~rrrrrrrrrrrrrrrrrr"rrrrrr$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}||jdttdrptt}d}||j|j|j |j |j |d|j |j |j |d| }| tt|W5QRXdS)N)rrrr disk_usageiPr)r0rr.getcwdr7rrgshutilrrrrZ get_testfnr:r )r<ZusageZ shutil_usageZ toleranceZfnamer$r$r*test_disk_usage#s    zTestDiskAPIs.test_disk_usageznot an ASCII fsc Cs$|tttW5QRXdSrL)r:UnicodeEncodeErrorr0rr!rar$r$r*test_disk_usage_unicode>s z$TestDiskAPIs.test_disk_usage_unicodecCstddS)N.)r0rrar$r$r*test_disk_usage_bytesDsz"TestDiskAPIs.test_disk_usage_bytesc s,fdd}tjdd}j||d|D](}||trFd|jkrFq*tsLq*|jq*tjdd}j||dtjddD]z}||tsz|jrzzt |jWqzt k r}z4t rt r|j t jkrWYqz|j t jt jfkrW5d}~XYqzXqzdd }|t}d d tjddD}||dS) Ncs|jt|jt|jt|jt|jttdf|j ttdf|jdk rt s |jd|j dk r |j ddSr) rdevicer mountpointZfstypeoptsZmaxfilerrZmaxpathr rrrar$r* check_ntupleHs z7TestDiskAPIs.test_disk_partitions..check_ntupleF)allrvZcdromTcSs.tj|}tj|s&tj|}q |SrL)r.rabspathismountdirnamer)rr$r$r*find_mount_pointys  z;TestDiskAPIs.test_disk_partitions..find_mount_pointcSsg|]}|jr|jqSr$)rrr'r$r$r*r+sz5TestDiskAPIs.test_disk_partitions..)r0Zdisk_partitionsrmr rr rrr.statOSErrorr rerrnoZEIOZEPERMZEACCES__file__r-)r<rrZdiskrrZmountZmountsr$rar*test_disk_partitionsGs<    z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionrcs^fdd}tjdd}||tjdd}t|tt||D]}|||qHdS)Ncs|d|j|d|j|d|j|d|jtstsƈ|d|j|d|jt r|d|j |d|j |d |j nt rƈ|d|j |jD]}qdS) NrrSrYrUr)r7Z read_countZ write_countZ read_bytesZ write_bytesrrZ read_timeZ write_timerZread_merged_countZwrite_merged_countZ busy_timerr)rrrar$r*rs z8TestDiskAPIs.test_disk_io_counters..check_ntupleFZperdiskT)r0disk_io_countersr7r\rlr<rretkeyr$rar*test_disk_io_counterss   z"TestDiskAPIs.test_disk_io_countersc CsDtjdid,}|tjdd|tjddiW5QRXdS)Nz#psutil._psplatform.disk_io_countersrFr T)rr6rEr0r r7r<rIr$r$r*test_disk_io_counters_no_diskssz+TestDiskAPIs.test_disk_io_counters_no_disksN)r~rrr"rrrrrrrrrr.rrrr0r rrr$r$r$r*r!s   = rc@sneZdZee dddZee dddZddZdd Z d d Z ee pZe pZe d d dZdS) TestNetAPIsrcshfdd}tjdd}||tjdd}|g|D]&}||t|||q.check_ntupleFZpernicT)r0net_io_countersrrmrrr r$rar*test_net_io_counterss      z TestNetAPIs.test_net_io_countersc CsDtjdid,}|tjdd|tjddiW5QRXdS)Nz"psutil._psplatform.net_io_countersrFrT)rr6rEr0rr7rr$r$r*test_net_io_counters_no_nicssz(TestNetAPIs.test_net_io_counters_no_nicsc Cs\t}t}ttjtjtjg}|D]\}}| |t | t t|t ||D]}| |j t| |jt | |jt tdf| |jt tdf||j |tjdkrts| |j tj||jr|j tjkr&t|j }t|||jdfW5QRXnj|j tjkrt|jdtjtjdtjd}|\} } } } } t| | | }t||| W5QRX|j|j|j|j fD]*}|dk r|j tjkrt!||j q|jr|"|j q^|j r^|"|jq^q,t#st$st%r,t&tdrX| tjtjn,t'rD| tjtj(nt)rX| tjddS)N)rUrrAF_LINKrQ)*r0 net_if_addrs net_if_statsrlsocketZAF_INETZAF_INET6ritemsrrr7r\ZfamilyraddressZnetmaskrZ broadcastr-r version_inforrIntEnumisup contextlibclosingZbindZ getaddrinfoZ SOCK_STREAMZ AI_PASSIVEZptprrErrr rgrZ AF_PACKETr )r<nicsZ nic_statsZfamiliesZnicZaddrsaddrsrBZafZsocktypeprotoZ canonnameZsaZipr$r$r*test_net_if_addrssf         zTestNetAPIs.test_net_if_addrsc Csptrdtjddddfg}ndg}tjd|d8}tdd}trT||jdn||jdW5QRXdS) Nem1z06:3d:29)r&rQz06-3d-29NNNzpsutil._psplatform.net_if_addrsrrz06:3d:29:00:00:00z06-3d-29-00-00-00)r r0rrr6rr7r)r<r rIr"r$r$r* test_net_if_addrs_mac_null_bytessz,TestNetAPIs.test_net_if_addrs_mac_null_bytesc Cst}tjtjtjf}|D]\\}}||t|\}}}}||t| ||| ||| |d| |dq dSr) r0rZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrrrrr-rF) r<r!Z all_duplexesrZstatsrZduplexZspeedZmtur$r$r*test_net_if_stats$s      zTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc Cs:tjdttjdd}t}||iW5QRXdS)Nzpsutil._psutil_posix.net_if_mtur@r,)rr6rrZENODEVr0rr7)r<rIr r$r$r*test_net_if_stats_enodev3s  z$TestNetAPIs.test_net_if_stats_enodevN)r~rrr"rrrrr%r'r(rrrr)r$r$r$r*rs    <rc@sreZdZee dddZee dddZee dee dddZ ee dd d Z d S) TestSensorsAPIsrcCst}|D]t\}}||t|D]Z}||jt|jdk rR||jd|jdk rj||jd|j dk r(||j dq(qdSr) r0sensors_temperaturesrrrlabelrrFhighcritical)r<tempsrentriesentryr$r$r*test_sensors_temperatures@s    z)TestSensorsAPIs.test_sensors_temperaturesc Csfddgi}tjd|dD}tjdddd}||jd||jd ||jd W5QRXdS) NZcoretemp)r,gI@gN@gQ@z'psutil._psplatform.sensors_temperaturesrT)Z fahrenheitrg^@ga@gc@)rr6r0r+r7rr-r.)r<drIr/r$r$r*#test_sensors_temperatures_fahreneitNs z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz no batterycCspt}||jd||jd|jtjtjfkrF||jdn|jtjkr^||j | |j t dS)Nrr) r0Zsensors_batteryrFrrZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrmZ power_pluggedrr)r<r r$r$r*test_sensors_batteryZs  z$TestSensorsAPIs.test_sensors_batterycCsbt}|D]L\}}||t|D]2}||jt||jttf| |jdq(qdSr) r0Z sensors_fansrrrr,rrr rF)r<Zfansrr0r1r$r$r*test_sensors_fanshs z!TestSensorsAPIs.test_sensors_fansN) r~rrr"rrr2r4rrr5rr6r$r$r$r*r*>s     r*__main__) run_from_name):__doc__rrrr.rrrjrrrdr0rrrrrrrr r r Zpsutil._compatr r Z psutil.testsrrrrrrrrrrrrrrrrrrr r!r"r#rrrrrr*r~Zpsutil.tests.runnerr8rr$r$r$r*st                                 J%q5