3 ̪eR@sdZddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddl m Z ddl m Z dd l mZdd l mZdd l mZdd l mZdd l mZddl mZerddlmZeZejdkoedZndZdZddZddZeje dGdddeZeje dGdddeZeje dGdddeZeje dGdddeZeje d Gd!d"d"eZ e!d#krdd$l"m#Z#e#e$dS)%z$Tests specific to all BSD platforms.N)BSD)FREEBSD)NETBSD)OPENBSD) HAS_BATTERY)TOLERANCE_SYS_MEM)PsutilTestCase)retry_on_failure)sh)spawn_testproc) terminate)which) getpagesizemuseFc Cshtd|}tr(||jddd}nts0trF||jddd}yt|Stk rb|SXdS)zmExpects a sysctl command with an argument and parse the result returning only the value of interest. zsysctl z: N=)r rfindrrint ValueError)cmdlineresultrA/usr/local/lib64/python3.6/site-packages/psutil/tests/test_bsd.pysysctl-s rcCs@td}x&|jdD]}|j|rPqWtdt|jdS)z+Thin wrapper around 'muse' cmdline utility.r zline not foundr)r split startswithrr)fieldoutlinerrrr<s  zBSD onlyc@seZdZdZeddZeddZeje dddZ d d Z eje d  d d dZ eje d  d eje dddZeje d dddZdS) BSDTestCasez)Generic tests common to all BSD variants.cCstj|_dS)N)r pid)clsrrr setUpClassPszBSDTestCase.setUpClasscCst|jdS)N)r r")r#rrr tearDownClassTszBSDTestCase.tearDownClassz -o lstart doesn't work on NETBSDcCsPtd|j}|jddj}tj|jj}tjdtj |}|j ||dS)Nzps -o lstart -p %sZSTARTEDz%a %b %e %H:%M:%S %Y) r r"replacestrippsutilProcessZ create_timetimestrftime localtime assertEqual)selfoutputZstart_psZ start_psutilrrrtest_process_create_timeXs z$BSDTestCase.test_process_create_timecCsdd}xtjddD]}tj|j}||j\}}}}|j|j||j|j|t|j|d krz|j d|j|ft|j |d kr|j d|j |fqWdS) NcSstd|j}|jd}|jd|jd}|jdd\}}}}|dkrRd}t|d}t|d}t|d}||||fS)Nz df -k "%s"rrnoner&i)r r(rpopr)pathrlinesr devtotalusedfreerrrdfes      z"BSDTestCase.test_disks..dfF)all izpsutil=%s, df=%si(ii(i) r)Zdisk_partitions disk_usage mountpointr.devicer8absr:Zfailr9)r/r;partusager7r8r9r:rrr test_disksbs  zBSDTestCase.test_disksrzsysctl cmd not availablecCs td}|jtjdd|dS)Nzhw.ncpuT)Zlogical)rr.r) cpu_count)r/systrrrtest_cpu_count_logical}sz"BSDTestCase.test_cpu_count_logicalzskipped on NETBSDcCstd}|j|tjjdS)Nz hw.physmem)rr.r)virtual_memoryr8)r/numrrrtest_virtual_memory_totalsz%BSDTestCase.test_virtual_memory_totalifconfigzifconfig cmd not availablecCsxztjjD]j\}}ytd|}Wntk r:YqX|j|jd|k|dd|kr|j|jtt j d|dqWdS)Nz ifconfig %sRUNNING)msgmtuz mtu (\d+)r) r)Z net_if_statsitemsr RuntimeErrorr.isuprNrrefindall)r/nameZstatsrrrrtest_net_if_statsszBSDTestCase.test_net_if_statsN)__name__ __module__ __qualname____doc__ classmethodr$r%unittestskipIfrr1rDr rGrJrUrrrrr!Ls   r!z FREEBSD onlyc@sfeZdZeddZeddZeddZddZd d Z d d Z ed dZ eddZ dS)FreeBSDPsutilTestCasecCstj|_dS)N)r r")r#rrrr$sz FreeBSDPsutilTestCase.setUpClasscCst|jdS)N)r r")r#rrrr%sz#FreeBSDPsutilTestCase.tearDownClassc Cstd|j}tj|jjdd}|jddd}x||r|j}|j}|dd\}}}} } |j} |jd||f| j|jt | | j | j j ds6|j|d | j q6WdS) Nzprocstat -v %sF)Zgroupedrrz%s-%s[r=) r r"r)r*Z memory_mapsrr4r.addrrZrssr5r) r/rmapsr6r fields_startstopZpermsresmaprrrtest_memory_mapss z&FreeBSDPsutilTestCase.test_memory_mapscCs<td|j}|jtj|jj|jddjddS)Nzprocstat -b %srr)r r"r.r)r*Zexer)r/rrrrtest_exeszFreeBSDPsutilTestCase.test_execCsLtd|j}|jdjtj|jjdj|jddjdddS)Nzprocstat -c %s rrr)r r"r.joinr)r*rr)r/rrrr test_cmdlinesz"FreeBSDPsutilTestCase.test_cmdlinec Cstd|j}|jddjdd\}}}}}}tj|j}|j} |j} |j| jt ||j| j t ||j| j t ||j| jt ||j| j t ||j| j t |dS)Nzprocstat -s %srrr) r r"rr)r*uidsgidsr.realr effectivesaved) r/rZeuidZruidZsuidZegidZrgidZsgidprorprrrtest_uids_gidss& z$FreeBSDPsutilTestCase.test_uids_gidscCsg}td|j}tj|j}x|jdD]}|jj}d|krtt|jd}|jj }|j |||j dq*d|kr*t|jd }|jj }|j |||j dq*Wt |dkrtddS) Nzprocstat -r %srz voluntary contextrz involuntary contextrz)couldn't find lines match in procstat outriri)r r"r)r*rlowerr(rZnum_ctx_switches voluntaryr.append involuntarylenrP)r/testedrrtr pstat_value psutil_valuerrrtest_ctx_switchess"        z'FreeBSDPsutilTestCase.test_ctx_switchescCsg}td|j}tj|j}x|jdD]}|jj}d|krtd|jd jdd }|jj }|j |||j dq*d|kr*td|jd jdd }|jj }|j |||j dq*Wt |dkrtd dS)Nzprocstat -r %srz user timez0.r.z system timerz)couldn't find lines match in procstat outriririri)r r"r)r*rrvr(floatZ cpu_timesuserr.rxsystemrzrP)r/r{rrtr r|r}rrrtest_cpu_timess"        z$FreeBSDPsutilTestCase.test_cpu_timesN) rVrWrXrZr$r%r rhrjrmrur~rrrrrr]s   r]c@seZdZeddZddZeddZeddZed d Z ed d Z ed dZ eddZ e je dddZe je deddZe je deddZe je deddZe je deddZe je deddZe je deddZd d!Zd"d#Zd$d%Zed&d'Zd(d)Zd*d+Zd,d-Zd.d/Ze je d0d1d2Z e je d0d3d4Z!e jed5d6d7Z"d8d9Z#d:S);FreeBSDSystemTestCasecCsRtdjd}tjd|}|s,td|dd|ddD\}}}|||fS) Nz swapinfo -krz\s+zCan't parse swapinfo: %scss|]}t|dVqdS)iN)r).0rtrrr sz7FreeBSDSystemTestCase.parse_swapinfo..r2ri)r splitlinesrRrr)r0partsr8r9r:rrrparse_swapinfos   z$FreeBSDSystemTestCase.parse_swapinfoc Csd}ytt|}Wntk r2|jdYnX|jtjj|d}t|}t|jdjdd}t|jdjdd}|jtjj ||jtjj |dS)Nzdev.cpu.0.freqz#frequencies not supported by kernelzdev.cpu.0.freq_levelsr/rri) rrrPskipTestr.r)Zcpu_freqcurrentrmaxmin)r/sensor sysctl_resultZmax_freqZmin_freqrrr!test_cpu_frequency_against_sysctlsz7FreeBSDSystemTestCase.test_cpu_frequency_against_sysctlcCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_active_count)delta)rPAGESIZEassertAlmostEqualr)rHactiver)r/rFrrrtest_vmem_actives z&FreeBSDSystemTestCase.test_vmem_activecCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_inactive_count)r)rrrr)rHinactiver)r/rFrrrtest_vmem_inactive$s z(FreeBSDSystemTestCase.test_vmem_inactivecCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_wire_count)r)rrrr)rHwiredr)r/rFrrrtest_vmem_wired+s z%FreeBSDSystemTestCase.test_vmem_wiredcCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_cache_count)r)rrrr)rHcachedr)r/rFrrrtest_vmem_cached2s z&FreeBSDSystemTestCase.test_vmem_cachedcCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_free_count)r)rrrr)rHr:r)r/rFrrrtest_vmem_free9s z$FreeBSDSystemTestCase.test_vmem_freecCs"td}|jtjj|tddS)Nz vfs.bufspace)r)rrr)rHbuffersr)r/rFrrrtest_vmem_buffers@sz'FreeBSDSystemTestCase.test_vmem_bufferszmuse not installedcCstd}|jtjj|dS)NZTotal)rr.r)rHr8)r/rIrrrtest_muse_vmem_totalIsz*FreeBSDSystemTestCase.test_muse_vmem_totalcCs"td}|jtjj|tddS)NZActive)r)rrr)rHrr)r/rIrrrtest_muse_vmem_activeNsz+FreeBSDSystemTestCase.test_muse_vmem_activecCs"td}|jtjj|tddS)NZInactive)r)rrr)rHrr)r/rIrrrtest_muse_vmem_inactiveVsz-FreeBSDSystemTestCase.test_muse_vmem_inactivecCs"td}|jtjj|tddS)NZWired)r)rrr)rHrr)r/rIrrrtest_muse_vmem_wired^sz*FreeBSDSystemTestCase.test_muse_vmem_wiredcCs"td}|jtjj|tddS)NCache)r)rrr)rHrr)r/rIrrrtest_muse_vmem_cachedfsz+FreeBSDSystemTestCase.test_muse_vmem_cachedcCs"td}|jtjj|tddS)NZFree)r)rrr)rHr:r)r/rIrrrtest_muse_vmem_freensz)FreeBSDSystemTestCase.test_muse_vmem_freecCs"td}|jtjj|tddS)NZBuffer)r)rrr)rHrr)r/rIrrrtest_muse_vmem_buffersvsz,FreeBSDSystemTestCase.test_muse_vmem_bufferscCs|jtjjtddddS)Nzvm.stats.sys.v_swtchi)r)rr) cpu_stats ctx_switchesr)r/rrrtest_cpu_stats_ctx_switches~sz1FreeBSDSystemTestCase.test_cpu_stats_ctx_switchescCs|jtjjtddddS)Nzvm.stats.sys.v_intri)r)rr)r interruptsr)r/rrrtest_cpu_stats_interruptssz/FreeBSDSystemTestCase.test_cpu_stats_interruptscCs|jtjjtddddS)Nzvm.stats.sys.v_softi)r)rr)rsoft_interruptsr)r/rrrtest_cpu_stats_soft_interruptssz4FreeBSDSystemTestCase.test_cpu_stats_soft_interruptscCs|jtjjtddddS)Nzvm.stats.sys.v_syscalli@ )r)rr)rsyscallsr)r/rrrtest_cpu_stats_syscallssz-FreeBSDSystemTestCase.test_cpu_stats_syscallscCs(|j\}}}|jtjj|tddS)N)r)rrr) swap_memoryr:r)r/r8r9r:rrrtest_swapmem_freesz'FreeBSDSystemTestCase.test_swapmem_freecCs(|j\}}}|jtjj|tddS)N)r)rrr)rr9r)r/r8r9r:rrrtest_swapmem_usedsz'FreeBSDSystemTestCase.test_swapmem_usedcCs(|j\}}}|jtjj|tddS)N)r)rrr)rr8r)r/r8r9r:rrrtest_swapmem_totalsz(FreeBSDSystemTestCase.test_swapmem_totalcCsLtd}||jddd}|d|jd}t|}|j|tjdS)Nzsysctl kern.boottimez sec = ,)rrrr.r) boot_time)r/sZbtimerrrtest_boot_times z$FreeBSDSystemTestCase.test_boot_timez no batterycCsdd}td}tdd|jdD}tj}t|djdd }|d }|j|j||d krt|j|j tj n|j||j |dS) NcSs(t|d\}}t|d\}}d||fS)N<z%d:%02d)divmod)Zsecsmrhrrr secs2hourssz>FreeBSDSystemTestCase.test_sensors_battery..secs2hoursz acpiconf -i 0cSs(g|] }|jdd|jddfqS) rrri)r)rxrrr sz>FreeBSDSystemTestCase.test_sensors_battery..rzRemaining capacity:%r&zRemaining time:unknown) r dictrr)sensors_batteryrr'r.percentsecsleftPOWER_TIME_UNLIMITED)r/rrrbmetricsrZremaining_timerrrtest_sensors_batterysz*FreeBSDSystemTestCase.test_sensors_batterycCsl|jtjjtd|jtjjtddktjj}|dkrT|jtddn|j|tdddS)Nzhw.acpi.battery.lifezhw.acpi.aclinerrzhw.acpi.battery.timerri)r.r)rrr power_pluggedr)r/rrrr#test_sensors_battery_against_sysctls z9FreeBSDSystemTestCase.test_sensors_battery_against_sysctlz has batteryc Cs@|jttdtdtdWdQRX|jtjdS)Nzhw.acpi.battery.lifezhw.acpi.battery.timezhw.acpi.acline)Z assertRaisesrPrZ assertIsNoner)r)r/rrrtest_sensors_battery_no_batterys  z5FreeBSDSystemTestCase.test_sensors_battery_no_batterycCstjd}xt|D]}d|}yttt|dd }Wntk rZ|jdYnX|jtj d|j |ddd|}ttt|dd }|j tj d|j |qWdS) NTzdev.cpu.%s.temperaturerz$temperatures not supported by kernelZcoretempr=)rzdev.cpu.%s.coretemp.tjmaxriri) r)rErangerrrrPrrZsensors_temperaturesrr.high)r/Znum_cpusZcpurrrrr(test_sensors_temperatures_against_sysctls  z>FreeBSDSystemTestCase.test_sensors_temperatures_against_sysctlN)$rVrWrX staticmethodrrr rrrrrrr[r\MUSE_AVAILABLErrrrrrrrrrrrrrrrrrrrrrrrrsB          rz OPENBSD onlyc@seZdZddZdS)OpenBSDTestCasecCs6td}tjj|d}tjjtj}|j||dS)Nz kern.boottimez%a %b %d %H:%M:%S %Y)rdatetimestrptime fromtimestampr)rr.)r/rZsys_btZ psutil_btrrrr szOpenBSDTestCase.test_boot_timeN)rVrWrXrrrrrr srz NETBSD onlyc@sheZdZeddZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZdS)NetBSDTestCasec CsPtd2}x*|D]"}|j|rt|jddSqWWdQRXtd|dS)Nz /proc/meminforiz can't find %s)openrrrr)Zlook_forfr rrr parse_meminfos    "zNetBSDTestCase.parse_meminfocCs|jtjj|jddS)Nz MemTotal:)r.r)rHr8r)r/rrrtest_vmem_total%szNetBSDTestCase.test_vmem_totalcCs |jtjj|jdtddS)NzMemFree:)r)rr)rHr:rr)r/rrrr*szNetBSDTestCase.test_vmem_freecCs |jtjj|jdtddS)NzBuffers:)r)rr)rHrrr)r/rrrr1sz NetBSDTestCase.test_vmem_bufferscCs |jtjj|jdtddS)Nz MemShared:)r)rr)rHsharedrr)r/rrrtest_vmem_shared8szNetBSDTestCase.test_vmem_sharedcCs |jtjj|jdtddS)NzCached:)r)rr)rHrrr)r/rrrr?szNetBSDTestCase.test_vmem_cachedcCs |jtjj|jdtddS)Nz SwapTotal:)r)rr)rr8rr)r/rrrrHsz!NetBSDTestCase.test_swapmem_totalcCs |jtjj|jdtddS)Nz SwapFree:)r)rr)rr:rr)r/rrrrOsz NetBSDTestCase.test_swapmem_freecCs"tj}|j|j|j|jdS)N)r)rr.r9r8r:)r/smemrrrrVsz NetBSDTestCase.test_swapmem_usedc Csbtdd8}x0|D] }|jdrt|jd}PqWtdWdQRX|jtjj|dddS)Nz /proc/statrbsintrrzcouldn't find linei)r) rrrrrrr)rr)r/rr rrrrr\s   z(NetBSDTestCase.test_cpu_stats_interruptsc Csbtdd8}x0|D] }|jdrt|jd}PqWtdWdQRX|jtjj|dddS)Nz /proc/statrsctxtrzcouldn't find linei)r) rrrrrrr)rr)r/rr rrrrrhs   z*NetBSDTestCase.test_cpu_stats_ctx_switchesN)rVrWrXrrrrrrrrrrrrrrrrrs   r__main__) run_from_name)%rYrosrRr+r[r)rrrrZ psutil.testsrrrr r r r r Zpsutil._psutil_posixrrgetuidrrrr\r!r]rrrrVZpsutil.tests.runnerr__file__rrrr sR             O[ [