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_itercCs"x.tjdgdD]}|jt|jjdgqW|jtttjdgdWdQRXtj dtj dddB}x:tjddgdD]&}|j |jd|j |jddqWWdQRXtj dtj dddL}t }x>tjddg|d D](}|j|jd||j |jddqWWdQRXdS) Nr')attrsZfooz$psutil._psplatform.Process.cpu_timesr)r+ cpu_times)r=Zad_value)r/r0r6r7infokeysr9 ValueErrorrr5r8 assertIsNoneassertGreaterEqualobjectassertIs)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)rLg{Gz?)rNrLg? returncodecs<tj|d|d\}}jt|djt|d||fS)NgQ?)rNrLrM)r/ wait_procsr6len)procsrLgonealive)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?)rNrLrOr)r/rSr6rT)rUrLrVrW)r"r#r$rXs  )rr9rBr/rS TypeErrortime assertLessr6rT assertFalsehasattrr terminater,r'r poprPsignalSIGTERMset assertTrue) r"rLsproc1sproc2sproc3rUtrVrWr;rXr#)rKr"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..)rr_r/rS)r"rerfrgrUr;rVrWr#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"rpr#r#r$ test_PAGESIZEszTestSystemAPIs.test_PAGESIZEcCstj}xt|jD]j}t||}|dkr6|j|ttf|dkr|dksX|jd||f||jkr|jd||j||fqWdS)Npercenttotalrz %r < 0 (%s)z%r > total (total=%s, %s=%s)) r/Zvirtual_memory_fieldsgetattrrkintr failrt)r"memnamevaluer#r#r$test_virtual_memorys   z"TestSystemAPIs.test_virtual_memorycCs&tj}|j|jd|jdkr"ndS) Nrtusedfreerssinsoutr)rtr}r~rsrr)r/Z swap_memoryr6rurt)r"ryr#r#r$test_swap_memorys   zTestSystemAPIs.test_swap_memorycCstt}|jtj|jtj|j}|j|j|jtj|j|jtjd|j tjddtj kdS)NrMrrY) rrdr/ pid_existsr'r1r2r3r]r6rK)r"r:r;r#r#r$test_pid_existss zTestSystemAPIs.test_pid_existsc Csttj}xF|D]>}yWqtk rPtjd|tjkrL|j|YqXqWtt|dt|d}x |D]}|j tj ||dqvWdS)Ng?iip)msg) rr/rKAssertionErrorr[sleeprxrangemaxr]r)r"rKr'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/r0rKr6sortrTrc)r"ZplistZpidlistr#r#r$ test_pidsszTestSystemAPIs.test_pidsc Cs&tj}tt_z tjWd|t_XdS)N)sysstdoutrr/rX)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)percpurMz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical idF)logical) r/ cpu_countr6rTr?rDr-pathexistsopenreadr ZSkipTest)r"rfdZ cpuinfo_dataZphysicalr#r#r$test_cpu_counts      zTestSystemAPIs.test_cpu_countcCsfx`d D]X}tjd|d}|jtjWdQRXtjd|d}|jtjddWdQRXqWdS) NrMrz$psutil._psplatform.cpu_count_logical) return_valuez%psutil._psplatform.cpu_count_physicalF)rrY)rYrN)rr5rCr/r)r"valrGr#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?sumrkrlrDr6str)r"rttimescp_timer#r#r$test_cpu_timess    zTestSystemAPIs.test_cpu_timescCsDttj}tjdttj}||}|dks@|jd|dS)Ng?g?z difference %s)rr/r?r[rrx)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?rrkrlrDr6rrT)r"rrtrr#r#r$test_per_cpu_timesCs     z!TestSystemAPIs.test_per_cpu_timescCstjdd}tjd}xtj|krPqWtjdd}x.rM)delta)r/r?_makerruassertAlmostEqualrv)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) rkrlrDZ assertIsNotassertLessEqualr/rrpprintZpformat)r"rsZlast_retZnew_reterrr#r#r$_test_cpu_percent~s   z TestSystemAPIs._test_cpu_percentc Csbtjdd}x.tdD]"}tjdd}|j||||}qW|jttjddWdQRXdS)NgMbP?)intervaldrMrY)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)rrrrMrY) r/rr6rTrrrr9rB)r"rr)rrsr#r#r$test_per_cpu_percents  z#TestSystemAPIs.test_per_cpu_percentcCs`tjdd}xNtdD]B}tjdd}x|D]}|j|||q,W|jt||||}qWdS)NgMbP?)rr)r/cpu_times_percentrrr)r"rr)rrsr#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)rrr)r/rr6rTrrrr)r"rr)rcpursr#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...)rrrTru)r(r)r#r#r$r*szFTestSystemAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_times)r)r/rr?rr5r)r"Z zero_timesrrsr#r#r$#test_per_cpu_times_percent_negatives  z2TestSystemAPIs.test_per_cpu_times_percent_negativec Cstjtj}|j|jd ttdrptjtj}d }|j|j|j|j |j |j |d|j |j |j |dt j }|jt}tj|WdQRX|j|jjtjdS) Nrtr}r~rs disk_usagei)r)rtr}r~rsiiP)r/rr-getcwdr6rur^shutilrtrr~r}tempfileZmktempr9OSErrorZ 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||dxj|D]b}|j|jt|j|jt|j|jt|j|jtt rld|jkrlq t srn|jt st r q q Wtjdd}|j||dxtjddD]}t s(yt j|jWnPtk r}z2t rtr|jtjkrw|jtjtjfkrWYdd}~XnXt s(t r(n|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_partitionsrdrkZdevicerrZfstypeZoptsr r r rr-statrrrZEIOZEPERMZEACCES__file__r,r)r"lsZdiskrrZmountZmountsr#r#r$test_disk_partitionssH     z#TestSystemAPIs.test_disk_partitionscslfdd}tjdd}||tjdd}j|gx.|D]&}j|j|t|||q>WdS)Ncsj|d|jj|d|jj|d|jj|d|jj|d|jj|d|jj|d|jj|d|jdS) NrrMrRrOr) r6Z bytes_sentZ bytes_recvZ packets_sentZ packets_recvZerrinZerroutZdropinZdropout)nt)r"r#r$ check_ntuplesz9TestSystemAPIs.test_net_io_counters..check_ntupleF)pernicT)r/net_io_countersassertNotEqualrdrkr)r"rretkeyr#)r"r$test_net_io_counterss       z#TestSystemAPIs.test_net_io_countersc CsDtjdid,}|jtjdd|jtjddiWdQRXdS)Nz"psutil._psplatform.net_io_counters)rF)rT)rr5rCr/rr6)r"rGr#r#r$test_net_io_counters_no_nics8s  z+TestSystemAPIs.test_net_io_counters_no_nicsc Cshtj}tj}ttjtjtjg}x|jD]\}}|j |t |j t t|t |x|D]}|j |j t|j |jt |j |jt tdf|j |jt tdf|j|j |tjdkr|j |j tj||jr|j tjkr*tj|j }tj||j|jdfWdQRXnj|j tjkrtj|jdtjtjdtjd}|\} } } } } tj| | | }tj||j| WdQRXxB|j|j|j|jfD]*}|dk r|j tjkrt ||j qW|jr|j!|jqf|jrf|j!|jqfWq0Wt"st#st$r8t%tdrd|j tjtjn,t&rP|j tjtj'nt(rd|j tjddS)NrOrrAF_LINKrM)rOrrY))r/ net_if_addrs net_if_statsrcsocketZAF_INETZAF_INET6ritemsrkrr6rTZfamilyrwaddressZnetmasktypeZ broadcastr,r version_inforIntEnumisup contextlibclosingZbindZ getaddrinfoZ SOCK_STREAMZ AI_PASSIVEZptprrCrrr r^rZ AF_PACKETr )r"nicsZ nic_statsZfamiliesZnicZaddrsaddrsr@ZafZsocktypeprotoZ canonnameZsaZipr#r#r$test_net_if_addrsAsV          z TestSystemAPIs.test_net_if_addrsc Csptrdtjddddfg}nd g}tjd|d8}tjdd}trT|j|jdn|j|jd WdQRXdS) Nem1z06:3d:29rM06-3d-29zpsutil._psplatform.net_if_addrs)rrz06:3d:29:00:00:00z06-3d-29-00-00-00rY)rrYrNNN)r r/rrr5rr6r)r"rrGrr#r#r$ test_net_if_addrs_mac_null_bytes}s z/TestSystemAPIs.test_net_if_addrs_mac_null_byteszunreliable on TRAVISc Cstj}tjtjtjf}xh|jD]\\}}|j|t|\}}}}|j|t|j |||j |||j |d|j |dq"WdS)Nr) r/rZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrrkrboolr,rD) r"rZ all_duplexesrzZstatsrZduplexZspeedZmtur#r#r$test_net_if_statss      z TestSystemAPIs.test_net_if_statsz/proc/diskstatsz3/proc/diskstats not available on this linux versionNzunreliable on APPVEYORcsfdd}tjdd}||tjdd}jt|tt|xV|D]N}|||trJ|djrJx|djr|dd }qlWj||jqJWdS) 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]}qWdS) NrrMrRrOrrrr)r6Z read_countZ write_countZ read_bytesZ write_bytesrrZ read_timeZ write_timerZread_merged_countZwrite_merged_countZ busy_timerru)rrz)r"r#r$rs z:TestSystemAPIs.test_disk_io_counters..check_ntupleF)perdiskTrMrYrYrY) r/disk_io_countersr6rTrcrisdigitr4rA)r"rrrr#)r"r$test_disk_io_counterss     z$TestSystemAPIs.test_disk_io_countersc CsDtjdid,}|jtjdd|jtjddiWdQRXdS)Nz#psutil._psplatform.disk_io_counters)rF)rT)rr5rCr/rr6)r"rGr#r#r$test_disk_io_counters_no_diskss  z-TestSystemAPIs.test_disk_io_counters_no_disksz unreliable on APPVEYOR or TRAVIScCstj}|j|gx|D]}|j|jt|j|jttdf|jdk rb|j|jttdf|j|jt j j |j t st r|j|jqtj|jqWdS)N)r/usersrrkrzrZterminalrhostdatetimeZ fromtimestampZstartedr 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_statsr6rurvrDrrm)r"Zinfosrzr{r#r#r$test_cpu_statss   zTestSystemAPIs.test_cpu_statsz not suportedcsTfdd}tjdd}tr&| r&dS|tjddgtrPjt|tjdS)Ncshxb|D]Z}j|jdj|j|jx6|jD],}t||}j|ttt fj |dq0WqWdS)Ncurrentminrr)rrr) r6rurrrrvrkrwr rlrD)rrrzr{)r"r#r$check_lss   z.TestSystemAPIs.test_cpu_freq..check_lsT)rF)r/Zcpu_freqrrr6rTr)r"r rr#)r"r$ test_cpu_freqs  zTestSystemAPIs.test_cpu_freqc Cs8ddddddddd g }x"|D]}|jtt|t|d qWtjd kr|jdd tjj krj|jdnd tjj kr|j tj tj tj gjdd|jd|jd|jd|jdnBdtjj ksdtjj kr|jd ndtjj kr|jdn |jdx$|D]}|jtt|d|d qWdS)Nr r rrrrrrr )rposixlinuxZbsdTrMsunossolarisdarwinF)rkrvr/rr-rzremoverplatformrr6rrrcountrF)r"namesrzr#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_temperaturesrrkrlabelrrDhighcritical)r"tempsrzentriesentryr#r#r$test_sensors_temperatures)s     z(TestSystemAPIs.test_sensors_temperaturesc Csfddgi}tjd|dD}tjdd dd }|j|jd |j|jd |j|jd WdQRXdS)NZcoretemprI@N@Q@z'psutil._psplatform.sensors_temperatures)rT)Z fahrenheitrg^@ga@gc@)rrrr)rr5r/rr6rrr)r"drGrr#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)Nrr) r/Zsensors_batteryrDrsrZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrdZ power_pluggedrkr)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_fansrrkrrrrwr rD)r"Zfansrzrrr#r#r$test_sensors_fansQs  z TestSystemAPIs.test_sensors_fans)C__name__ __module__ __qualname____doc__r%r&r<rIrirjrnr ZskipIfr rrr|rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr-rrr r/rrrrrrrr rrrr!rrr"rr#r#r#r#r$r!;sh7     !       > <#  %  r!__main__)2r'rrrr-rrrarrrr[r/rrrrrrrr r r Zpsutil._compatr Z psutil.testsr rrrrrrrrrrrrrrrrrrr ZTestCaser!r$rr#r#r#r$sh                               '