3 JZ/@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl m Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlm 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-Gd"d#d#e-j.Z/e0d$kre(e1dS)%zTests for system APIS.N)AIX)BSD)FREEBSD)LINUX)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS)long)APPVEYOR)ASCII_FS)check_net_address)DEVNULL)enum)get_test_subprocess) HAS_BATTERY) HAS_CPU_FREQ)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)mock) reap_children)retry_before_failing)run_test_module_by_name) safe_rmpath)TESTFN)TESTFN_UNICODE)TRAVIS)unittestc@sBeZdZdZddZddZddZdd Zd d Zd d Z ddZ e j e dddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Z d7d8Z!d9d:Z"d;d<Z#d=d>Z$d?d@Z%dAdBZ&dCdDZ'dEdFZ(dGdHZ)e j e*dIdJdKZ+e j e,o\e-j.j/dL dMe j e0ote1j2dNkdOdPdQZ3dRdSZ4e j e0pe*oe1j5 dTdUdVZ6dWdXZ7e j e8 dYdZd[Z9d\d]Z:e j e; d^d_d`Z d^e j e? dcdddeZ@e j eA d^dfdgZBdNS)hTestSystemAPIszTests for system-related APIs.cCs ttdS)N)rr)selfr##/usr/lib64/python3.6/test_system.pysetUp>szTestSystemAPIs.setUpcCs tdS)N)r)r"r#r#r$tearDownAszTestSystemAPIs.tearDowncCs|jtjddtjDt}|j|jddtjDtj|j}|j|j |j |jddtjDt j dtj tjd|jttjgWdQRXt j dtjtjd*|jtjttjWdQRXWdQRXdS)NcSsg|] }|jqSr#)pid).0xr#r#r$ Esz4TestSystemAPIs.test_process_iter..cSsg|] }|jqSr#)r')r(r)r#r#r$r*GscSsg|] }|jqSr#)r')r(r)r#r#r$r*Kszpsutil.Process) side_effect)assertInosgetpidpsutil process_iterrr'Processkillwait assertNotInrpatchZ NoSuchProcess assertEquallist AccessDenied assertRaises)r"sprocpr#r#r$test_process_iterDs z TestSystemAPIs.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)r=Zad_value)r/r0r6r7infokeysr9 ValueErrorrr5r8 assertIsNoneassertGreaterEqualcalledAssertionErrorobjectassertIs)r"r;mflagr#r#r$test_prcess_iter_w_paramsUs$ z(TestSystemAPIs.test_prcess_iter_w_paramsc sfdd}gt}t}t}dd|||fD}jttj|ddjttj|ddtj}tj|d|d \}}jtj|d j|gjt |d jgx|D]} j t | d qWt d fdd} |j | ||\}}j|jdd|Dtr4j|jjtj nj|jjdj|jgx|D]} j t | d q\Wt d fdd} |j |j | ||\}}jtt|j|j|jgx|D]} jt | d qWdS)Ncsj|jdS)N)appendr')r;)pidsr#r$callbackjsz0TestSystemAPIs.test_wait_procs..callbackcSsg|]}tj|jqSr#)r/r1r')r(r)r#r#r$r*qsz2TestSystemAPIs.test_wait_procs..)timeout)rNg{Gz?)rPrNg? returncodecs<tj|d|d\}}jt|djt|d||fS)NgQ?)rPrNrO)r/ wait_procsr6len)procsrNgonealive)r"r#r$test~s  z,TestSystemAPIs.test_wait_procs..testcSsg|] }|jqSr#)r')r(r)r#r#r$r*scs<tj|d|d\}}jt|djt|d||fS)NgQ?)rPrNrQr)r/rUr6rV)rWrNrXrY)r"r#r$rZs  )rr9rBr/rU TypeErrortime assertLessr6rV assertFalsehasattrr terminater,r'r poprRsignalSIGTERMset assertTrue) r"rNsproc1sproc2sproc3rWtrXrYr;rZr#)rMr"r$test_wait_procsisB       zTestSystemAPIs.test_wait_procscCsNt}t}t}dd|||fD}x|D] }|jq,Wtj|\}}dS)NcSsg|]}tj|jqSr#)r/r1r')r(r)r#r#r$r*sz=TestSystemAPIs.test_wait_procs_no_timeout..)rrar/rU)r"rgrhrirWr;rXrYr#r#r$test_wait_procs_no_timeouts  z)TestSystemAPIs.test_wait_procs_no_timeoutcCs4tj}|j|t|j|d|j|tjdS)Nr)r/Z boot_timeassertIsInstancefloat assertGreaterr^r])r"Zbtr#r#r$test_boot_times  zTestSystemAPIs.test_boot_timez POSIX onlycCs"ddl}|jtjd|jdS)Nr SC_PAGE_SIZE)resourcer6r-sysconfZ getpagesize)r"rrr#r#r$ test_PAGESIZEszTestSystemAPIs.test_PAGESIZEcCstj}|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))r/Zvirtual_memoryrwrFZ availablervusedfree_fieldsgetattrrmintr fail)r"memnamevaluer#r#r$test_virtual_memorys "   z"TestSystemAPIs.test_virtual_memorycCstj}|j|jd |jdks(t||jdks:t||jdkrX|jdksjt|n|jdksjt|d|jko~dknst||j dkst||j dkst|dS) Nrwrxryrvsinsoutrru)rwrxryrvrr) r/Z swap_memoryr6rzrwrFrxryrvrr)r"r~r#r#r$test_swap_memorys  "zTestSystemAPIs.test_swap_memorycCstt}|jtj|jtj|j}|j|j|jtj|j|jtjd|j tjddtj kdS)NrOrr[) rrfr/ pid_existsr'r1r2r3r_r6rM)r"r:r;r#r#r$test_pid_existss zTestSystemAPIs.test_pid_existsc Csttj}xT|D]L}ytj|s(tWqtk r^tjd|tjkrZ|j|YqXqWtt |dt |d}x |D]}|j tj||dqWdS)Ng?iip)msg) rr/rMrrFr]sleepr}rangemaxr_)r"rMr'r#r#r$test_pid_exists_2s    z TestSystemAPIs.test_pid_exists_2cCsJddtjD}tj}|j|j|j|jt|tt|dS)NcSsg|] }|jqSr#)r')r(r)r#r#r$r*sz,TestSystemAPIs.test_pids..)r/r0rMr6sortrVre)r"ZplistZpidlistr#r#r$ test_pidsszTestSystemAPIs.test_pidsc Cs&tj}tt_z tjWd|t_XdS)N)sysstdoutrr/rZ)r"rr#r#r$ test_tests  zTestSystemAPIs.test_testc Cstj}|j|ttjdd|j|dtjjdrft d}|j }WdQRXd|krft j dtjdd}|j|d|j||dS) NT)percpurOz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical idF)logical) r/ cpu_countr6rVr?rDr-pathexistsopenreadr ZSkipTest)r"rfdZ cpuinfo_dataZphysicalr#r#r$test_cpu_counts      zTestSystemAPIs.test_cpu_countcCszxtd D]l}tjd|d}|jtj|js2tWdQRXtjd|d"}|jtjdd|jshtWdQRXqWdS) NrOrz$psutil._psplatform.cpu_count_logical) return_valuez%psutil._psplatform.cpu_count_physicalF)rr[)r[rN)rr5rCr/rrErF)r"valrIr#r#r$test_cpu_count_nones   z"TestSystemAPIs.test_cpu_count_nonecCs^d}tj}t|x,|D]$}|j|t|j|d||7}qW|j|t|t|dS)Nrg)r/r?sumrmrnrDr6str)r"rwtimescp_timer#r#r$test_cpu_timess    zTestSystemAPIs.test_cpu_timescCsDttj}tjdttj}||}|dks@|jd|dS)Ng?g?z difference %s)rr/r?r]rr})r"t1t2 differencer#r#r$test_cpu_times_time_increases:s    z,TestSystemAPIs.test_cpu_times_time_increasescCsxftjddD]V}d}t|x,|D]$}|j|t|j|d||7}q$W|j|t|t|qW|jttjdddttjdddS)NT)rrgF) r/r?rrmrnrDr6rrV)r"rrwrr#r#r$test_per_cpu_timesCs     z!TestSystemAPIs.test_per_cpu_timescCstjdd}tjd}xtj|krPqWtjdd}x.rO)delta)r/r?_makerrzassertAlmostEqualr{)r"baseZper_cpuZ summed_valuesZfieldr#r#r$test_cpu_times_comparisonts   z(TestSystemAPIs.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) rmrnrDZ assertIsNotassertLessEqualr/rrFpprintZpformat)r"rvZlast_retZnew_reterrr#r#r$_test_cpu_percent~s   z TestSystemAPIs._test_cpu_percentc Csbtjdd}x.tdD]"}tjdd}|j||||}qW|jttjddWdQRXdS)NgMbP?)intervalrurOr[)r/ cpu_percentrrr9rB)r"lastr)newr#r#r$test_cpu_percents   zTestSystemAPIs.test_cpu_percentc Cstjddd}|jt|tjx>tdD]2}tjddd}x|D]}|j|||qDW|}q,W|jttjdddWdQRXdS)NgMbP?T)rrrurOr[) r/rr6rVrrrr9rB)r"rr)rrvr#r#r$test_per_cpu_percents  z#TestSystemAPIs.test_per_cpu_percentcCs`tjdd}xNtdD]B}tjdd}x|D]}|j|||q,W|jt||||}qWdS)NgMbP?)rru)r/cpu_times_percentrrr)r"rr)rrvr#r#r$test_cpu_times_percents   z%TestSystemAPIs.test_cpu_times_percentcCstjddd}|jt|tjx^tdD]R}tjddd}x:|D]2}x|D]}|j|||qNW|jt|||qDW|}q,WdS)NgMbP?T)rrru)r/rr6rVrrrr)r"rr)rcpurvr#r#r$test_per_cpu_times_percents  z)TestSystemAPIs.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*szQTestSystemAPIs.test_per_cpu_times_percent_negative...)rrrVrz)r(r)r#r#r$r*szFTestSystemAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_times)r)r/rr?rr5r)r"Z zero_timesrrvr#r#r$#test_per_cpu_times_percent_negatives  z2TestSystemAPIs.test_per_cpu_times_percent_negativec Cs2tjtj}|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 |j |j|j|d tj}|jt}tj|WdQRX|j|jjtjdS)Nrwrxryrvrru disk_usagei)r)rwrxryrviiP)r/rr-getcwdr6rzrwrFrxryrvr`shutilrtempfileZmktempr9OSErrorZ exceptionerrnoENOENT)r"ZusageZ shutil_usageZ toleranceZfnameexcr#r#r$test_disk_usages($    zTestSystemAPIs.test_disk_usagec Cs(tr$|jttjtWdQRXdS)N)rr9UnicodeEncodeErrorr/rr)r"r#r#r$test_disk_usage_unicodes z&TestSystemAPIs.test_disk_usage_unicodecCstjddS)N.)r/r)r"r#r#r$test_disk_usage_bytessz$TestSystemAPIs.test_disk_usage_bytescCstjdd}|j||dx|D]}|j|jt|j|jt|j|jt|j|jtt rld|jkrlq t st j j |jst|n|jtstrt j j |jst|nt j j|jst||js t|q Wtjdd}|j||dxtjddD]}t syt j|jWnXtk rp}z:trJtrJ|jtjkrJw|jtjtjfkr`WYdd}~Xn@Xts~trt j j |jst|nt j j|jst||j|jt|j|jtqWdd}|t}dd tjddD}|j||tj|dS) NF)all)rZcdromTcSs2tjj|}xtjj|s(tjj|}qW|jS)N)r-rabspathismountdirnamelower)rr#r#r$find_mount_points z=TestSystemAPIs.test_disk_partitions..find_mount_pointcSsg|]}|jjqSr#) mountpointr)r(r)r#r#r$r*sz7TestSystemAPIs.test_disk_partitions..)r/Zdisk_partitionsrfrmZdevicerrZfstypeZoptsr r r-rrrFr risdirstatrrrZEIOZEPERMZEACCES__file__r,r)r"lsZdiskrrZmountZmountsr#r#r$test_disk_partitionssL     z#TestSystemAPIs.test_disk_partitionscslfdd}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) NrrOrTrQr) r6Z bytes_sentZ bytes_recvZ packets_sentZ packets_recvZerrinZerroutZdropinZdropoutrF)nt)r"r#r$ check_ntuples z9TestSystemAPIs.test_net_io_counters..check_ntupleF)pernicT)r/net_io_countersassertNotEqualrfrmr)r"rretkeyr#)r"r$test_net_io_counterss       z#TestSystemAPIs.test_net_io_countersc CsNtjdid6}|jtjdd|jtjddi|js@tWdQRXdS)Nz"psutil._psplatform.net_io_counters)rF)rT)rr5rCr/rr6rErF)r"rIr#r#r$test_net_io_counters_no_nics8s  z+TestSystemAPIs.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|tjdkr|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"|jqrWq.check_ntupleF)perdiskzno disks on this system?TrOr[r[r[) r/disk_io_countersrFr6rVrerisdigitr4rA)r"rrrr#)r"r$test_disk_io_counterss      z$TestSystemAPIs.test_disk_io_countersc CsNtjdid6}|jtjdd|jtjddi|js@tWdQRXdS)Nz#psutil._psplatform.disk_io_counters)rF)rT)rr5rCr/rr6rErF)r"rIr#r#r$test_disk_io_counters_no_diskss  z-TestSystemAPIs.test_disk_io_counters_no_disksz unreliable on APPVEYOR or TRAVIScCstj}|j|gx|D]}|js,t||j|jt|j|jttdf|j dk rp|j|j ttdf|j|j |j dkst|t j j |j t str|j|jqtj|jqWdS)Ng)r/usersrrrFrmrZterminalrhostZstarteddatetimeZ fromtimestampr rrCr'r1)r"ruserr#r#r$ test_userss   zTestSystemAPIs.test_userscCsZtj}|j|jdx>|jD]4}t||}|j|dt r|dkr|j|dqWdS)N ctx_switches interruptssoft_interruptssyscallsr)rrrr)rr)r/Z cpu_statsr6rzr{rDrro)r"Zinfosrrr#r#r$test_cpu_statss   zTestSystemAPIs.test_cpu_statsz not suportedcs`fdd}tjdd}tr&| r&dS|s2t||tjddgtr\jt|tjdS)Ncshxb|D]Z}j|jdj|j|jx6|jD],}t||}j|ttt fj |dq0WqWdS)Ncurrentminrr)r r r) r6rzrr rr{rmr|r rnrD)rrrr)r"r#r$check_lss   z.TestSystemAPIs.test_cpu_freq..check_lsT)rF)r/Zcpu_freqrrFrr6rVr)r"r rr#)r"r$ test_cpu_freqs   zTestSystemAPIs.test_cpu_freqc 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|d qtWdS)Nr r rrrrrrr )rposixlinuxZbsdTrOsunossolarisdarwinF)rmr{r/rr-rr rFr removerplatformrrrr6rrrcountr rrH)r"namesrr#r#r$test_os_constantss>                      z TestSystemAPIs.test_os_constantsz not supportedcCstj}x|jD]x\}}|j|txb|D]Z}|j|jt|jdk rV|j|jd|jdk rn|j|jd|j dk r,|j|j dq,WqWdS)Nr) r/sensors_temperaturesrrmrlabelr rDhighcritical)r"tempsrentriesentryr#r#r$test_sensors_temperatures)s     z(TestSystemAPIs.test_sensors_temperaturesc Cspddgi}tjd|dN}tjdd dd }|js8t|j|jd |j|jd |j|j d WdQRXdS)NZcoretemprI@N@Q@z'psutil._psplatform.sensors_temperatures)rT)Z fahrenheitrg^@ga@gc@)rrr r!) rr5r/rrErFr6r rr)r"drIrr#r#r$#test_sensors_temperatures_fahreneit7s   z2TestSystemAPIs.test_sensors_temperatures_fahreneitz no batterycCsptj}|j|jd|j|jd|jtjtjfkrF|j|jdn|jtjkr^|j|j |j |j t dS)Nrru) r/Zsensors_batteryrDrvrZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrfZ power_pluggedrmr)r"rr#r#r$test_sensors_batteryCs   z#TestSystemAPIs.test_sensors_batterycCsjtj}x\|jD]P\}}|j|tx:|D]2}|j|jt|j|jttf|j |jdq,WqWdS)Nr) r/Z sensors_fansrrmrrr r|r rD)r"Zfansrrrr#r#r$test_sensors_fansQs  z TestSystemAPIs.test_sensors_fans)C__name__ __module__ __qualname____doc__r%r&r<rKrkrlrpr ZskipIfr rtrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr-rrr r/rrrrrrrr rrrr#rrr$rr%r#r#r#r$r!;sh7     !       > <#  %  r!__main__)2r)rrrr-rrrcrrrr]r/rrrrrrrr r r Zpsutil._compatr Z psutil.testsr rrrrrrrrrrrrrrrrrrr ZTestCaser!r&rr#r#r#r$sh                               '