3 ̪e@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddl mZddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"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#lm0Z0dd$lm1Z1Gd%d&d&e-Z2Gd'd(d(e-Z3Gd)d*d*e-Z4Gd+d,d,e-Z5Gd-d.d.e-Z6Gd/d0d0e-Z7Gd1d2d2e-Z8e9d3krdd4l:m;Z;e;e<dS)5zTests for system APIS.N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)PY3)FileNotFoundError)long)ASCII_FS) CI_TESTING)DEVNULL)GITHUB_ACTIONS)GLOBAL_TIMEOUT) HAS_BATTERY) HAS_CPU_FREQ)HAS_GETLOADAVG)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)IS_64BIT) MACOS_12PLUS)PYPY)UNICODE_SUFFIX)PsutilTestCase)check_net_address)enum)mock)retry_on_failurec@s\eZdZddZddZejeo"edddZ ejeo:eddd Z d d Z d d Z dS)TestProcessAPIscCs8|jtjddtjD|j}|j|jddtjDtj|j}|j|j |j |jddtjDddtjD}|j t |dddt t |d ddtjd tjtjd |j ttjgWdQRXtjd tjtjd *|jtjttjWdQRXWdQRXdS) NcSsg|] }|jqS)pid).0xr%r%D/usr/local/lib64/python3.6/site-packages/psutil/tests/test_system.py Bsz5TestProcessAPIs.test_process_iter..cSsg|] }|jqSr%)r&)r'r(r%r%r)r*DscSsg|] }|jqSr%)r&)r'r(r%r%r)r*HscSsg|]}|qSr%r%)r'r(r%r%r)r*KscSs|jS)N)r&)r(r%r%r)Msz3TestProcessAPIs.test_process_iter..)keycSs|jS)N)r&)r(r%r%r)r+Nszpsutil.Process) side_effect)assertInosgetpidpsutil process_iterspawn_testprocr&Processkillwait assertNotIn assertEqualsortedsetr"patch NoSuchProcesslist AccessDenied assertRaises)selfsprocplsr%r%r)test_process_iterAs$ z!TestProcessAPIs.test_process_itercCs8x.tjdgdD]}|jt|jjdgqW|jtttjdgdWdQRXtj dtj dddL}x:tjddgdD]&}|j |jd|j |jddqW|j stWdQRXtj dtj dddX}t}x>tjddg|d D](}|j|jd||j |jddqW|j s*tWdQRXdS) Nr&)attrsZfooz$psutil._psplatform.Process.cpu_timesr)r- cpu_times)rEZad_value)r1r2r8r=infokeysr? ValueErrorr"r;r> assertIsNoneassertGreaterEqualcalledAssertionErrorobjectZassertIs)r@rBmflagr%r%r)test_prcess_iter_w_attrs[s, z(TestProcessAPIs.test_prcess_iter_w_attrsz-spawn_testproc() unreliable on PYPY + WINDOWSc sfdd}gj}j}j}dd|||fD}jttj|ddjttj|ddtj}tj|d|d \}}jtj|d j|gjt |d jgx|D]} j t | d qWt d fdd} |j | ||\}}j|jdd|Dtr:j|jjtj nj|jjdj|jgx|D]} j t | d qbWt d fdd} |j |j | ||\}}jtt|j|j|jgx|D]} jt | d qWdS)Ncsj|jdS)N)appendr&)rB)pidsr%r)callbackxsz1TestProcessAPIs.test_wait_procs..callbackcSsg|]}tj|jqSr%)r1r4r&)r'r(r%r%r)r*sz3TestProcessAPIs.test_wait_procs..)timeout)rUg{Gz?)rWrUg? returncodecs<tj|d|d\}}jt|djt|d||fS)NgQ?)rWrUrV)r1 wait_procsr8len)procsrUgonealive)r@r%r)test_1s z/TestProcessAPIs.test_wait_procs..test_1cSsg|] }|jqSr%)r&)r'r(r%r%r)r*scs<tj|d|d\}}jt|djt|d||fS)NgQ?)rWrUrXr)r1r\r8r])r^rUr_r`)r@r%r)test_2s z/TestProcessAPIs.test_wait_procs..test_2)r3r?rJr1r\ TypeErrortime assertLessr8r] assertFalsehasattrr# terminater.r&r poprYsignalSIGTERMr: assertTrue) r@rUsproc1sproc2sproc3r^tr_r`rBrarbr%)rTr@r)test_wait_procstsB         zTestProcessAPIs.test_wait_procscCsP|j}|j}|j}dd|||fD}x|D] }|jq2Wtj|dS)NcSsg|]}tj|jqSr%)r1r4r&)r'r(r%r%r)r*sz>TestProcessAPIs.test_wait_procs_no_timeout..)r3rir1r\)r@rnrorpr^rBr%r%r)test_wait_procs_no_timeouts  z*TestProcessAPIs.test_wait_procs_no_timeoutcCsv|j}|jtj|jtj|j}|j|j|jtj|j|jtjd|j tjddtj kdS)NrVrrc) r3rmr1 pid_existsr&r4r5r6rgr8rT)r@rArBr%r%r)test_pid_existss zTestProcessAPIs.test_pid_existsc Cstj}xN|D]F}ytj|s"tWqtk rRtjd|j|tjYqXqWtt|dt|d}x |D]}|j tj||dqxWdS)Ng?i:i>)msg) r1rTrtrNresleepr7rangemaxrg)r@rTr&r%r%r)test_pid_exists_2s   z!TestProcessAPIs.test_pid_exists_2N) __name__ __module__ __qualname__rDrRunittestskipIfrr rrrsrurzr%r%r%r)r$@s;  r$c@sBeZdZddZejeo ej dddZ ddZ dd Z d S) TestMiscAPIscCs4tj}|j|t|j|d|j|tjdS)Nr)r1Z boot_timeassertIsInstancefloat assertGreaterrfre)r@Zbtr%r%r)test_boot_times  zTestMiscAPIs.test_boot_timezunreliable on CIc Cstj}|j|gx|D]}|j|d|js6t|j|jt|j|jtt df|j dk rz|j|j tt df|j|j |j |j dt j j|j tstr|j|jn tj|jWdQRXqWdS)N)userg)r1usersassertNotEqualsubTestnamerNrstrterminaltypehostrstarteddatetime fromtimestampr rrKr&r4)r@rrr%r%r) test_userss     zTestMiscAPIs.test_usersc Cs&tj}tt_z tjWd|t_XdS)N)sysstdoutrr1test)r@rr%r%r) test_tests  zTestMiscAPIs.test_testc Csddddddddd g }x"|D]}|jtt|t|d qWtjd krJtjsPttj s\t|j dd t j j krtj s~t|j dnd t j j krtjst|jtjtjtjgjdd|j d|j d|j d|j dn^dt j j ks dt j j kr"tjst|j d n&dt j j krntjs>t|j dn$tjsVttj sdt|j dx"|D]}|jtt||d qtWdS)Nr r rrrrrrr )rvposixlinuxZbsdTrVsunossolarisdarwin)rgetattrr1boolr/rr rNr removerplatformlowerrrr8rrrcountr rrg)r@namesrr%r%r)test_os_constantssP                   zTestMiscAPIs.test_os_constantsN) r{r|r}rr~rrr1rrrrr%r%r%r)rs rc@seZdZddZddZdS)TestMemoryAPIscCstj}|jdkst||jdks,t|d|jko@dknsNt||jdks`t||jdksrt|xt|jD]j}t ||}|dkr|j |t t f|dkrz|dks|j d||f||jkrz|j d||j||fqzWdS)Nrdpercenttotalz %r < 0 (%s)z%r > total (total=%s, %s=%s))r1Zvirtual_memoryrrNZ availablerusedfree_fieldsrrintrfail)r@memrvaluer%r%r)test_virtual_memory/s""   z"TestMemoryAPIs.test_virtual_memorycCstj}|j|jd |jdks(t||jdks:t||jdkrX|jdksjt|n|jdksjt|d|jko~dknst||j dkst||j dkst|dS) Nrrrrsinsoutrr)rrrrrr) r1Z swap_memoryr8rrrNrrrrr)r@rr%r%r)test_swap_memoryCs  "zTestMemoryAPIs.test_swap_memoryN)r{r|r}rrr%r%r%r)r.src@seZdZddZddZddZddZd d Zd d Zd dZ e j e oJe dddZddZddZddZddZddZddZddZe j eoejd kd!e j e d"d#d$Ze j e d"d%d&Zd'S)( TestCpuAPIsc Csttj}|j||j|ttjdd|j|dtjj drpt d}|j }WdQRXd|krpt j ddS)NT)percpurVz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical id)r1 cpu_countZassertIsNotNoner8r]rGrLr/pathexistsopenreadr~ZSkipTest)r@logicalfdZ cpuinfo_datar%r%r)test_cpu_count_logicalVs    z"TestCpuAPIs.test_cpu_count_logicalcCsftj}tjdd}|dkr&|jdtrJtjdddkrJ|j|n|j|d|j||dS)NF)rzcpu_count_cores() is Noner[rV)rrV)r1rskipTestr rgetwindowsversionrKrL)r@rZcoresr%r%r)test_cpu_count_coresbs    z TestCpuAPIs.test_cpu_count_corescCszxtd D]l}tjd|d}|jtj|js2tWdQRXtjd|d"}|jtjdd|jshtWdQRXqWdS) NrVrz$psutil._psplatform.cpu_count_logical) return_valuez"psutil._psplatform.cpu_count_coresF)rrc)rcrN)r"r;rKr1rrMrN)r@valrPr%r%r)test_cpu_count_nonems   zTestCpuAPIs.test_cpu_count_nonecCs^d}tj}t|x,|D]$}|j|t|j|d||7}qW|j|t|t|dS)Nrg)r1rGsumrrrLassertAlmostEqualr)r@rtimescp_timer%r%r)test_cpu_times{s    zTestCpuAPIs.test_cpu_timescCsPttj}tjt}x(tj|kr@ttj}||krdSqW|jddS)Nztime remained the same)rr1rGrerr)r@t1Zstop_att2r%r%r)test_cpu_times_time_increasess   z)TestCpuAPIs.test_cpu_times_time_increasescCsxftjddD]V}d}t|x,|D]$}|j|t|j|d||7}q$W|j|t|t|qW|jt tjdddt tjdddS)NT)rrgF) r1rGrrrrLrrr8r])r@rrrr%r%r)test_per_cpu_timess     zTestCpuAPIs.test_per_cpu_timescCstjdd}tjt}xhtj|kr0|jdStjdd}x@t||D]2\}}tj|tj|}}||}|dkrHdSqHWqWdS)NT)rrWg?)r1rGrerrzipZ_cpu_busy_time)r@Ztot1Z giveup_atZtot2rr differencer%r%r)test_per_cpu_times_2s     z TestCpuAPIs.test_per_cpu_times_2zunreliable on OPENBSD + CIc Csxtj}tjdd}|jddt|D}xF|jD]<}|j|||d"|jt||t||ddWdQRXq4WdS)NT)rcSsg|] }t|qSr%)r)r'numr%r%r)r*sz9TestCpuAPIs.test_cpu_times_comparison..)fieldbaseper_cpurV)delta)r1rG_makerrrrr)r@rrZ summed_valuesrr%r%r)test_cpu_times_comparisons  z%TestCpuAPIs.test_cpu_times_comparisoncCsy<|j|t|j|d|j|d|j|dtjWn@tk r|}z$td|tj |tj |fWYdd}~XnXdS)NggY@z %s last=%s new=%sg) rrrLZ assertIsNotassertLessEqualr1rrNpprintpformat)r@rZlast_retZnew_reterrr%r%r)_test_cpu_percents   zTestCpuAPIs._test_cpu_percentc Csbtjdd}x.tdD]"}tjdd}|j||||}qW|jttjddWdQRXdS)NgMbP?)intervalrrVrc)r1 cpu_percentrxrr?rJ)r@last_newr%r%r)test_cpu_percents   zTestCpuAPIs.test_cpu_percentc Cstjddd}|jt|tjx>tdD]2}tjddd}x|D]}|j|||qDW|}q,W|jttjdddWdQRXdS)NgMbP?T)rrrrVrc) r1rr8r]rrxrr?rJ)r@rrrrr%r%r)test_per_cpu_percents  z TestCpuAPIs.test_per_cpu_percentc Cstjdd}xNtdD]B}tjdd}x|D]}|j|||q,W|jt||||}qW|jttjddWdQRXdS)NgMbP?)rrrVrc)r1cpu_times_percentrxrrr?rJ)r@rrrrr%r%r)test_cpu_times_percents    z"TestCpuAPIs.test_cpu_times_percentcCstjddd}|jt|tjx^tdD]R}tjddd}x:|D]2}x|D]}|j|||qNW|jt|||qDW|}q,WdS)NgMbP?T)rrr)r1rr8r]rrxrr)r@rrrcpurr%r%r)test_per_cpu_times_percents  z&TestCpuAPIs.test_per_cpu_times_percentc CsrtjddddtjddD}tjd|d8x0tjddD] }x|D]}|j|ddqJWq@WWdQRXdS)NT)rcSs*g|]"}|jddtt|jDqS)cSsg|]}dqS)rr%)r'r(r%r%r)r*szNTestCpuAPIs.test_per_cpu_times_percent_negative...)rrxr]r)r'r(r%r%r)r*szCTestCpuAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_times)r)r1rrGr"r;r)r@Z zero_timesrrr%r%r)#test_per_cpu_times_percent_negatives  z/TestCpuAPIs.test_per_cpu_times_percent_negativecCsZtj}|j|jdx>|jD]4}t||}|j|dt r|dkr|j|dqWdS)N ctx_switches interruptssoft_interruptssyscallsr)rrrr)rr)r1Z cpu_statsr8rrrLrr)r@Zinfosrrr%r%r)test_cpu_stats&s   zTestCpuAPIs.test_cpu_statsarm64zskipped due to #1892z not supportedcsffdd}tjdd}tr,| r,jd|s8t||tjddgtrbjt|tjdS)Ncsrxl|D]d}j|jd|jdkr2j|j|jx6|jD],}t||}j|ttt fj |dq:WqWdS)Ncurrentminrygr)rrry) r8rryrrrrrrrrL)rCntrr)r@r%r)check_ls:s    z+TestCpuAPIs.test_cpu_freq..check_lsT)rzreturns empty list on FreeBSDF) r1Zcpu_freqrrrNrr8r]r)r@rrCr%)r@r) test_cpu_freq5s    zTestCpuAPIs.test_cpu_freqcCsBtj}|jt|dx$|D]}|j|t|j|dqWdS)NrXg)r1 getloadavgr8r]rrrL)r@Zloadavgloadr%r%r)test_getloadavgNs   zTestCpuAPIs.test_getloadavgN)r{r|r}rrrrrrrr~rrrrrrrrrrrrrmachinerrrrr%r%r%r)rUs&   #      rc@seZdZejeoe dddZeje dddZ ddZ d d Z eje o\e jjd  d ejeopej d ddZddZdS) TestDiskAPIszunreliable on PYPY32 + 32BITc Cs&tjtj}|j|jd |jdks.t||jdks@t||j dksRt||j|jksft||j|j kszt|d|j kodknst|j t t drt jtj}d }|j|j|j|j |j |j |d ts|j |j|j|d |j}|jttj|WdQRXdS)Nrrrrrr disk_usagei)r)rrrriiP)r1rr/getcwdr8rrrNrrrrhshutilrrZ get_testfnr?r )r@usageZ shutil_usageZ tolerancefnamer%r%r)test_disk_usageXs($  zTestDiskAPIs.test_disk_usageznot an ASCII fsc Cs$|jttjtWdQRXdS)N)r?UnicodeEncodeErrorr1rr)r@r%r%r)test_disk_usage_unicodews z$TestDiskAPIs.test_disk_usage_unicodecCstjddS)N.)r1r)r@r%r%r)test_disk_usage_bytes}sz"TestDiskAPIs.test_disk_usage_bytescsfdd}tjdd}j||dxj|D]b}||trHd|jkrHq,tsdtjj|j sjt |n|j tjj|j st ||j s,t |q,Wtjdd}j||dxtjddD]}||t o|j rytj |j WnVtk r8}z8trtr|jtjkrw|jtjtjfkr(WYdd}~XqXtjj|j st |qWdd }|t}d d tjddD}j||dS) Ncsj|jtj|jtj|jtj|jtj|jttdfj|j ttdf|jdk rt rj |jd|j dk rj |j ddS)Nr) rdevicer mountpointfstypeoptsmaxfilerrmaxpathrr)r)r@r%r) check_ntuples z7TestDiskAPIs.test_disk_partitions..check_ntupleF)all)rvZcdromTcSs2tjj|}xtjj|s(tjj|}qW|jS)N)r/rabspathismountdirnamer)rr%r%r)find_mount_points z;TestDiskAPIs.test_disk_partitions..find_mount_pointcSsg|]}|jr|jjqSr%)rr)r'r(r%r%r)r*sz5TestDiskAPIs.test_disk_partitions..)r1Zdisk_partitionsrmr rr r/rrrrNrrstatOSErrorrrerrnoZEIOEPERMEACCES__file__r.)r@rrCZdiskrr ZmountZmountsr%)r@r)test_disk_partitionss<    z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionzunreliable on CIcs~fdd}tjdd}|dk s(td||tjdd}jt|tt|x$|D]}|sjt||||qZWdS)Ncsj|d|jj|d|jj|d|jj|d|jtpNtsƈj|d|jj|d|jt rj|d|j j|d|j j|d |j nt rƈj|d|j x$|jD]}t||dkst|qWdS) NrrVr[rXrr)r8 read_count write_count read_bytes write_bytesrr read_time write_timerZread_merged_countZwrite_merged_countZ busy_timerrrrN)rr)r@r%r)rs z8TestDiskAPIs.test_disk_io_counters..check_ntupleF)perdiskzno disks on this system?T)r1disk_io_countersrNr8r]r:)r@rretr,r%)r@r)test_disk_io_counterss     z"TestDiskAPIs.test_disk_io_countersc CsNtjdid6}|jtjdd|jtjddi|js@tWdQRXdS)Nz#psutil._psplatform.disk_io_counters)rF)rT)r"r;rKr1rr8rMrN)r@rPr%r%r)test_disk_io_counters_no_diskss  z+TestDiskAPIs.test_disk_io_counters_no_disksN)r{r|r}r~rrrrrrrrrr/rrrr1rr!r"r%r%r%r)rWs@rc@sneZdZeje dddZeje dddZddZdd Z d d Z eje pZe pZe d d dZdS) TestNetAPIsz not supportedcslfdd}tjdd}||tjdd}j|gx.|D]&}j|j|t|||q>WdS)Ncs(j|d|jj|d|jj|d|jj|d|jj|d|jj|d|jj|d|jj|d|j|jdkst ||jdkst ||jdkst ||jdkst ||jdkst ||jdkst ||jdkst ||jdks$t |dS) NrrVr[rXrrrr) r8 bytes_sent bytes_recv packets_sent packets_recverrinerroutdropindropoutrN)r)r@r%r)rs z6TestNetAPIs.test_net_io_counters..check_ntupleF)pernicT)r1net_io_countersrrmrr)r@rr r,r%)r@r)test_net_io_counterss       z TestNetAPIs.test_net_io_countersc CsNtjdid6}|jtjdd|jtjddi|js@tWdQRXdS)Nz"psutil._psplatform.net_io_counters)rF)r,T)r"r;rKr1r-r8rMrN)r@rPr%r%r)test_net_io_counters_no_nics s  z(TestNetAPIs.test_net_io_counters_no_nicsc Csttj}|st|tj}ttjtjtjg}x|j D]\}}|j |t |j t t|t |x|D]}|j |jt|j |jt |j |jt tdf|j |jt tdf|j|j|trt r|j |jtj||jr|jtjkr6tj|j}tj||j|jdfWdQRXnj|jtjkrtj|jdtjtjdtjd}|\} } } } } tj| | | }tj||j| WdQRXxB|j|j|j|j fD]*}|dk r|jtjkrt!||jqW|jr|j"|j qr|j rr|j"|jqrWqs|                                  Y'!6