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 Cs,tjdgdD]}|t|jdgq|tttjdgdW5QRXtj dt dddH}tjddgdD]&}| |jd| |jddq||j stW5QRXtj dt dddT}t}tjddg|d D](}||jd|| |jddq|j stW5QRXdS) Nr&)attrsZfooz$psutil._psplatform.Process.cpu_timesrr, cpu_times)r?Zad_value)r0r1r7r8infokeysr: ValueErrorrr6r9 assertIsNoneassertGreaterEqualcalledAssertionErrorobjectassertIs)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)rQg{Gz?rTrQg? returncodecs<tj|d|d\}}t|dt|d||fS)NQ?rVrUr0 wait_procsr7lenprocsrQgonealiver<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)NrZrVrWrr\r_rcr$r*rds  )r2r:rDr0r] TypeErrortime assertLessr7r^ assertFalsehasattrr terminater-r&r poprXsignalSIGTERMset assertTrue) r<rQsproc1sproc2sproc3r`trarbr=rdr$)rPr<r*test_wait_procsdsF    zTestProcessAPIs.test_wait_procscCsP|}|}|}dd|||fD}|D] }|q0t|\}}dS)NcSsg|]}t|jqSr$rRr'r$r$r*r+sz>TestProcessAPIs.test_wait_procs_no_timeout..)r2rjr0r])r<rprqrrr`r=rarbr$r$r*test_wait_procs_no_timeouts z*TestProcessAPIs.test_wait_procs_no_timeoutcCsv|}|t|jt|j}|||t|j|td| tddt kdS)NrSr) r2ror0 pid_existsr&r3r4r5rhr7rPr;r$r$r*test_pid_existss zTestProcessAPIs.test_pid_existsc Cst}|D]L}zt|s tWq tk rVtd|tkrR||Yq Xq tt|dt|d}|D]}|j t||dqxdS)Ng?iipmsg) r0rPrvrHrfsleepfailrangemaxrh)r<rPr&r$r$r*test_pid_exists_2s  z!TestProcessAPIs.test_pid_exists_2N) __name__ __module__ __qualname__r>rMr"skipIfrr rtrurwr~r$r$r$r*r#=s  7   r#c@sBeZdZddZeeo e dddZ ddZ dd Z d S) TestMiscAPIscCs4t}||t||d||tdSNr)r0Z boot_timeassertIsInstancefloat assertGreaterrgrf)r<Zbtr$r$r*test_boot_times  zTestMiscAPIs.test_boot_timeunreliable on CIcCst}||g|D]}|js*t|||jt||jttdf|j dk rn||j ttdf|j|j |j dkst|t j |j t str||jqt|jqdS)N)r0usersassertNotEqualnamerHrstrZterminaltypeZhostZstarteddatetimeZ fromtimestampr rrEr&r3)r<ruserr$r$r* test_userss  zTestMiscAPIs.test_userscCs&tj}tt_z tW5|t_XdSrN)sysstdoutrr0rd)r<rr$r$r* test_tests  zTestMiscAPIs.test_testc Csddddddddd g }|D]}|jtt|t|d qtjd krDtjsLttjrVt| dd t j krtj sxt| dnd t j krtjst|tjtjtjgdd| d| d| d| dn^dt j ksdt j krtjst| d n&dt j krftjs8t| dn"tjsPttjr\t| d|D]}|jtt|d|d qjdS)Nr r rrrrrrr rxposixZlinuxZbsdTrUZsunosZsolarisdarwinF)rgetattrr0boolr.rr rHr removerplatformlowerrrr7rrrcountr rrJ)r<namesrr$r$r*test_os_constantssP                     zTestMiscAPIs.test_os_constantsN) rrrrr"rrr0rrrrr$r$r$r*rs   rc@seZdZddZddZdS)TestMemoryAPIscCst}|jdkst||jdks,t|d|jkrBdksLnt||jdks^t||jdkspt||jD]j}t ||}|dkr| |t t f|dkrv|dks| d||f||jkrv| d||j||fqvdS)Nrdpercenttotalz %r < 0 (%s)z%r > total (total=%s, %s=%s))r0Zvirtual_memoryrrHZ availablerusedfree_fieldsrrintr r{)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) r0Z swap_memoryr7rrrHrrrrr)r<rr$r$r*test_swap_memory s  zTestMemoryAPIs.test_swap_memoryN)rrrrrr$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)NTpercpurUz /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 Noner[)rUrU)r0rskipTestr rZgetwindowsversionrErF)r<rZphysicalr$r$r*test_cpu_count_physical?s    z#TestCpuAPIs.test_cpu_count_physicalc CsvdD]l}tjd|d}|t|js0tW5QRXtjd|d"}|tjdd|jsftW5QRXqdS)N)rSrNz$psutil._psplatform.cpu_count_logicalZ return_valuez%psutil._psplatform.cpu_count_physicalFr)rr6rEr0rrGrH)r<valrKr$r$r*test_cpu_count_noneJszTestCpuAPIs.test_cpu_count_nonecCsZd}t}t||D]$}||t||d||7}q||t|t|dS)Nrr)r0rAsumrrrFr7r)r<rtimescp_timer$r$r*test_cpu_timesVs   zTestCpuAPIs.test_cpu_timescCsLtt}tt}t|kr>tt}||krdSq|ddS)Nztime remained the same)rr0rArfrr{)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)NTrrTg?)r0rArfrr{zipZ_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..rUZdelta)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 assertIsNotassertLessEqualr0rrHpprintZpformat)r<rZlast_retZnew_reterrr$r$r*_test_cpu_percents   zTestCpuAPIs._test_cpu_percentc Cs^tjdd}tdD]"}tjdd}|||||}q|ttjddW5QRXdSNMbP?)intervalrrS)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)NrTrrrrS) 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 suportedcsdfdd}tjdd}tr*|s*d|s6t||tjddgtr`t|tdS)Ncsj|D]`}|jd|jdkr0|j|j|jD],}t||}|ttt f |dq6qdS)N)currentminr}rr) r7rr}rrrrrr rrF)lsntrrrcr$r*check_lss   z+TestCpuAPIs.test_cpu_freq..check_lsTrzreturns empty list on FreeBSDF) r0Zcpu_freqrrrHrr7r^r)r<rrr$rcr* test_cpu_freqs   zTestCpuAPIs.test_cpu_freq not supportedcCs>t}|t|d|D]}||t||dqdS)NrWr)r0 getloadavgr7r^rrrF)r<Zloadavgloadr$r$r*test_getloadavgs  zTestCpuAPIs.test_getloadavgN)rrrrrrrrrrrrrrrrrrr"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}||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|W5QRXdS)N)rrrrrr disk_usageiPr)r0rr.getcwdr7rrrHrrrrishutilrZ get_testfnr:r )r<ZusageZ shutil_usageZ toleranceZfnamer$r$r*test_disk_usage#s*"    zTestDiskAPIs.test_disk_usageznot an ASCII fsc Cs$|tttW5QRXdSrN)r:UnicodeEncodeErrorr0rr!rcr$r$r*test_disk_usage_unicode>s z$TestDiskAPIs.test_disk_usage_unicodecCstddS)N.)r0rrcr$r$r*test_disk_usage_bytesDsz"TestDiskAPIs.test_disk_usage_bytesc sfdd}tjdd}j||d|D]b}||trFd|jkrFq*tsbtj|j sht |n|j tj|j s~t ||j s*t |q*tjdd}j||dtjddD]}||ts|j rzt |j Wn\tk r6}z.check_ntupleF)allrxZcdromTcSs.tj|}tj|s&tj|}q |SrN)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_partitionsror rr r.rrrrHrrstatOSErrorr rerrnoZEIOZEPERMZEACCES__file__r-)r<rrZdiskrrZmountZmountsr$rcr*test_disk_partitionsGs>    z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionrcszfdd}tjdd}|dk s(td||tjdd}t|tt||D]}|sht||||qXdS)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]}t||dkst|qdS) NrrUr[rWr)r7Z read_countZ write_countZ read_bytesZ write_bytesrrZ read_timeZ write_timerZread_merged_countZwrite_merged_countZ busy_timerrrrH)rrrcr$r*rs z8TestDiskAPIs.test_disk_io_counters..check_ntupleFZperdiskzno disks on this system?T)r0disk_io_countersrHr7r^rnr<rretkeyr$rcr*test_disk_io_counterss    z"TestDiskAPIs.test_disk_io_countersc CsNtjdid6}|tjdd|tjddi|js@tW5QRXdS)Nz#psutil._psplatform.disk_io_countersrFr T)rr6rEr0rr7rGrHr<rKr$r$r*test_disk_io_counters_no_diskssz+TestDiskAPIs.test_disk_io_counters_no_disksN)rrrr"rrrrrrrrrr.rrrr0rrrr$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_countersrrorrrr$rcr*test_net_io_counterss      z TestNetAPIs.test_net_io_countersc CsNtjdid6}|tjdd|tjddi|js@tW5QRXdS)Nz"psutil._psplatform.net_io_countersrFrT)rr6rEr0rr7rGrHrr$r$r*test_net_io_counters_no_nicssz(TestNetAPIs.test_net_io_counters_no_nicsc Csht}|st|t}ttjtjtjg}| D]\}}| |t | t t|t ||D]}| |jt| |jt | |jt tdf| |jt tdf||j|tjdkrts| |jtj||jr|jtjkr2t|j}t|||jdfW5QRXnj|jtjkrt|jdtjtjdtj d}|\} } } } } t| | | }t||| W5QRX|j|j|j|j!fD]*}|dk r|jtjkrt"||jq|jr|#|j!qj|j!rj|#|jqjq8t$st%st&r8t'tdrd| tjtjn,t(rP| tjtj)nt*rd| tjddS)N)rWr rAF_LINKrS)+r0 net_if_addrsrH net_if_statsrnsocketZAF_INETZAF_INET6ritemsrrr7r^ZfamilyraddressZnetmaskrZ broadcastr-r version_inforrIntEnumisup contextlibclosingZbindZ getaddrinfoZ SOCK_STREAMZ AI_PASSIVEZptprrErrr rirZ AF_PACKETr )r<nicsZ nic_statsZfamiliesZnicZaddrsaddrsrBZafZsocktypeprotoZ canonnameZsaZipr$r$r*test_net_if_addrssh          zTestNetAPIs.test_net_if_addrsc Csztrdtjddddfg}ndg}tjd|dB}tdd}|jsJttr^||j dn||j dW5QRXdS) Nem1z06:3d:29)r*rSz06-3d-29NNNzpsutil._psplatform.net_if_addrsrrz06:3d:29:00:00:00z06-3d-29-00-00-00) r r0rrr6rrGrHr7r)r<rrKr&r$r$r* test_net_if_addrs_mac_null_bytess z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc Cst}|st|tjtjtjf}|D]\\}}||t|\}}}}||t | ||| ||| |d| |dq,dSr) r0rrHZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrrrrr-rF) r<r%Z all_duplexesrZstatsr"ZduplexZspeedZmtur$r$r*test_net_if_stats$s       zTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc CsDtjdttjdd$}t}||i|js6t W5QRXdS)Nzpsutil._psutil_posix.net_if_mtur@r,) rr6rrZENODEVr0rr7rGrH)r<rKrr$r$r*test_net_if_stats_enodev3s  z$TestNetAPIs.test_net_if_stats_enodevN)rrrr"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 Cspddgi}tjd|dN}tjdddd}|js8t||jd||jd ||j d W5QRXdS) NZcoretemp)r0gI@gN@gQ@z'psutil._psplatform.sensors_temperaturesrT)Z fahrenheitrg^@ga@gc@) rr6r0r/rGrHr7rr1r2)r<drKr3r$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_UNLIMITEDroZ power_pluggedrr)r<rr$r$r*test_sensors_batteryZs  z$TestSensorsAPIs.test_sensors_batterycCsbt}|D]L\}}||t|D]2}||jt||jttf| |jdq(qdSr) r0Z sensors_fansrrrr0rrr rF)r<Zfansrr4r5r$r$r*test_sensors_fanshs z!TestSensorsAPIs.test_sensors_fansN) rrrr"rrr6r8rrr9rr:r$r$r$r*r.>s     r.__main__) run_from_name):__doc__r#rrr.rrrlrrrfr0rrrrrrrr r r Zpsutil._compatr r Z psutil.testsrrrrrrrrrrrrrrrrrrr r!r"r#rrrrrr.rZpsutil.tests.runnerr<rr$r$r$r*st                                 J%q5