3 JZcE@sdZddlZddlZddlZddlZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z dd l m Z dd l mZdd l mZdd l mZdd l mZddl mZddl mZerejdZejdkredZqdZndZddZddZeje dGdddejZeje dGdddejZeje dGdddejZeje dGd d!d!ejZe d"kree!dS)#z$Tests specific to all BSD platforms.N)BSD)FREEBSD)NETBSD)OPENBSD)get_test_subprocess) HAS_BATTERY)MEMORY_TOLERANCE) reap_children)retry_before_failing)run_test_module_by_name)sh)unittest)which SC_PAGE_SIZEmuseFc 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)cmdlineresultr /usr/lib64/python3.6/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)Zfieldoutlinerrrr:s  zBSD onlyc@seZdZdZeddZeddZeje dddZ d d Z eje d  d d dZ eje d  d ddZddZdS)BSDSpecificTestCasez)Generic tests common to all BSD variants.cCstj|_dS)N)rpid)clsrrr setUpClassNszBSDSpecificTestCase.setUpClasscCs tdS)N)r )r#rrr tearDownClassRsz!BSDSpecificTestCase.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_timetimeZstrftimeZ localtime assertEqual)selfoutputZstart_psZ start_psutilrrrtest_process_create_timeVs  z,BSDSpecificTestCase.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"rrZnoner&i)r r(rpopr)pathrlinesr devtotalusedfreerrrdfbs      z*BSDSpecificTestCase.test_disks..dfF)all izpsutil=%s, df=%si(ii(i) r)Zdisk_partitionsZ disk_usageZ mountpointr,Zdevicer5absr7Zfailr6)r-r8partZusager4r5r6r7rrr test_disks_s  zBSDSpecificTestCase.test_disksrzsysctl cmd not availablecCs td}|jtjdd|dS)Nzhw.ncpuT)Zlogical)rr,r) cpu_count)r-systrrrtest_cpu_count_logicalzsz*BSDSpecificTestCase.test_cpu_count_logicalcCstd}|j|tjjdS)Nz hw.physmem)rr,r)virtual_memoryr5)r-numrrrtest_virtual_memory_totalsz-BSDSpecificTestCase.test_virtual_memory_totalcCsxztjjD]j\}}ytd|}Wntk r:YqX|j|jd|k|dd|kr|j|jtt j d|dqWdS)Nz ifconfig %sZRUNNING)msgmtuz mtu (\d+)r) r)Z net_if_statsitemsr RuntimeErrorr,ZisuprErrefindall)r-nameZstatsrrrrtest_net_if_statssz%BSDSpecificTestCase.test_net_if_statsN)__name__ __module__ __qualname____doc__ classmethodr$r%r skipIfrr/r=rr@rCrKrrrrr!Js   r!z FREEBSD onlyc@seZdZeddZeddZeddZddZd d Z d d Z ed dZ eddZ eddZ eddZeddZeddZeddZeddZeje dddZeje ded d!Zeje ded"d#Zeje ded$d%Zeje ded&d'Zeje ded(d)Zeje ded*d+Zd,d-Zd.d/Zd0d1Zd2d3Z d4d5Z!eje" d6d7d8Z#eje" d6d9d:Z$eje"d;dS)?FreeBSDSpecificTestCasecCstj|_dS)N)rr")r#rrrr$sz"FreeBSDSpecificTestCase.setUpClasscCs tdS)N)r )r#rrrr%sz%FreeBSDSpecificTestCase.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_mapsrr1r,ZaddrrZrssr2r) r-rmapsr3r fields_startstopZpermsresmaprrrtest_proc_memory_mapss z-FreeBSDSpecificTestCase.test_proc_memory_mapscCs<td|j}|jtj|jj|jddjddS)Nzprocstat -b %srr)r r"r,r)r*Zexer)r-rrrr test_proc_exesz%FreeBSDSpecificTestCase.test_proc_execCsLtd|j}|jdjtj|jjdj|jddjdddS)Nzprocstat -c %s rrr)r r"r,joinr)r*rr)r-rrrrtest_proc_cmdlinesz)FreeBSDSpecificTestCase.test_proc_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,realrZ effectiveZsaved) r-rZeuidZruidZsuidZegidZrgidZsgidprcrdrrrtest_proc_uids_gidss& z+FreeBSDSpecificTestCase.test_proc_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 outr]r])r r"r)r*rlowerr(rZnum_ctx_switchesZ voluntaryr,appendZ involuntarylenrG)r-testedrrfr pstat_value psutil_valuerrrtest_proc_ctx_switchess"        z.FreeBSDSpecificTestCase.test_proc_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 outr]r]r]r])r r"r)r*rrhr(floatZ cpu_timesuserr,risystemrjrG)r-rkrrfr rlrmrrrtest_proc_cpu_timess"        z+FreeBSDSpecificTestCase.test_proc_cpu_timescCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_active_count)delta)rPAGESIZEassertAlmostEqualr)rAactiver)r-r?rrrtest_vmem_actives z(FreeBSDSpecificTestCase.test_vmem_activecCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_inactive_count)rt)rrurvr)rAinactiver)r-r?rrrtest_vmem_inactives z*FreeBSDSpecificTestCase.test_vmem_inactivecCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_wire_count)rt)rrurvr)rAwiredr)r-r?rrrtest_vmem_wireds z'FreeBSDSpecificTestCase.test_vmem_wiredcCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_cache_count)rt)rrurvr)rAcachedr)r-r?rrrtest_vmem_cacheds z(FreeBSDSpecificTestCase.test_vmem_cachedcCs&tdt}|jtjj|tddS)Nzvm.stats.vm.v_free_count)rt)rrurvr)rAr7r)r-r?rrrtest_vmem_free s z&FreeBSDSpecificTestCase.test_vmem_freecCs"td}|jtjj|tddS)Nz vfs.bufspace)rt)rrvr)rAbuffersr)r-r?rrrtest_vmem_bufferssz)FreeBSDSpecificTestCase.test_vmem_bufferszmuse not installedcCstd}|jtjj|dS)NZTotal)rr,r)rAr5)r-rBrrrtest_muse_vmem_totalsz,FreeBSDSpecificTestCase.test_muse_vmem_totalcCs"td}|jtjj|tddS)NZActive)rt)rrvr)rArwr)r-rBrrrtest_muse_vmem_activesz-FreeBSDSpecificTestCase.test_muse_vmem_activecCs"td}|jtjj|tddS)NZInactive)rt)rrvr)rAryr)r-rBrrrtest_muse_vmem_inactive#sz/FreeBSDSpecificTestCase.test_muse_vmem_inactivecCs"td}|jtjj|tddS)NZWired)rt)rrvr)rAr{r)r-rBrrrtest_muse_vmem_wired*sz,FreeBSDSpecificTestCase.test_muse_vmem_wiredcCs"td}|jtjj|tddS)NZCache)rt)rrvr)rAr}r)r-rBrrrtest_muse_vmem_cached1sz-FreeBSDSpecificTestCase.test_muse_vmem_cachedcCs"td}|jtjj|tddS)NZFree)rt)rrvr)rAr7r)r-rBrrrtest_muse_vmem_free8sz+FreeBSDSpecificTestCase.test_muse_vmem_freecCs"td}|jtjj|tddS)NZBuffer)rt)rrvr)rArr)r-rBrrrtest_muse_vmem_buffers?sz.FreeBSDSpecificTestCase.test_muse_vmem_bufferscCs|jtjjtddddS)Nzvm.stats.sys.v_swtchi)rt)rvr) cpu_stats ctx_switchesr)r-rrrtest_cpu_stats_ctx_switchesFs z3FreeBSDSpecificTestCase.test_cpu_stats_ctx_switchescCs|jtjjtddddS)Nzvm.stats.sys.v_intri)rt)rvr)r interruptsr)r-rrrtest_cpu_stats_interruptsJs z1FreeBSDSpecificTestCase.test_cpu_stats_interruptscCs|jtjjtddddS)Nzvm.stats.sys.v_softi)rt)rvr)rZsoft_interruptsr)r-rrrtest_cpu_stats_soft_interruptsNs z6FreeBSDSpecificTestCase.test_cpu_stats_soft_interruptscCs|jtjjtddddS)Nzvm.stats.sys.v_syscalli)rt)rvr)rZsyscallsr)r-rrrtest_cpu_stats_syscallsRs z/FreeBSDSpecificTestCase.test_cpu_stats_syscallscCsLtd}||jddd}|d|jd}t|}|j|tjdS)Nzsysctl kern.boottimez sec = ,)rrrr,r) boot_time)r-sZbtimerrrtest_boot_time\s z&FreeBSDSpecificTestCase.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 secs2hoursgsz@FreeBSDSpecificTestCase.test_sensors_battery..secs2hoursz acpiconf -i 0cSs(g|] }|jdd|jddfqS) rrr])r).0xrrr msz@FreeBSDSpecificTestCase.test_sensors_battery..rzRemaining capacity:%r&zRemaining time:unknown) r dictrr)sensors_batteryrr'r,percentsecsleftZPOWER_TIME_UNLIMITED)r-rrrVZmetricsrZremaining_timerrrtest_sensors_batteryesz,FreeBSDSpecificTestCase.test_sensors_batterycCsl|jtjjtd|jtjjtddktjj}|dkrT|jtddn|j|tdddS)Nzhw.acpi.battery.lifezhw.acpi.aclinerrzhw.acpi.battery.timerr])r,r)rrrZ power_pluggedr)r-rrrr#test_sensors_battery_against_sysctlxs    z;FreeBSDSpecificTestCase.test_sensors_battery_against_sysctlz has batteryc Cs@|jttdtdtdWdQRX|jtjdS)Nzhw.acpi.battery.lifezhw.acpi.battery.timezhw.acpi.acline)Z assertRaisesrGrZ assertIsNoner)r)r-rrrtest_sensors_battery_no_batterys  z7FreeBSDSpecificTestCase.test_sensors_battery_no_batteryN)&rLrMrNrPr$r%r r\r^rargrnrsrxrzr|r~rrr rQMUSE_AVAILABLErrrrrrrrrrrrrrrrrrrrrRsF            rRz OPENBSD onlyc@seZdZddZdS)OpenBSDSpecificTestCasecCs6td}tjj|d}tjjtj}|j||dS)Nz kern.boottimez%a %b %d %H:%M:%S %Y)rdatetimeZstrptimeZ fromtimestampr)rr,)r-rZsys_btZ psutil_btrrrrsz&OpenBSDSpecificTestCase.test_boot_timeN)rLrMrNrrrrrrsrz NETBSD onlyc@s`eZdZeddZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ dS)NetBSDSpecificTestCasec CsRtdd2}x*|D]"}|j|rt|jddSqWWdQRXtd|dS)Nz /proc/meminforbriz can't find %s)openrrrr)Zlook_forfr rrr parse_meminfos    "z$NetBSDSpecificTestCase.parse_meminfocCs|jtjj|jddS)Nz MemTotal:)r,r)rAr5r)r-rrrtest_vmem_totalsz&NetBSDSpecificTestCase.test_vmem_totalcCs |jtjj|jdtddS)NzMemFree:)rt)rvr)rAr7rr)r-rrrrsz%NetBSDSpecificTestCase.test_vmem_freecCs |jtjj|jdtddS)NzBuffers:)rt)rvr)rArrr)r-rrrrsz(NetBSDSpecificTestCase.test_vmem_bufferscCs |jtjj|jdtddS)Nz MemShared:)rt)rvr)rAZsharedrr)r-rrrtest_vmem_sharedsz'NetBSDSpecificTestCase.test_vmem_sharedcCs |jtjj|jdtddS)Nz SwapTotal:)rt)rvr) swap_memoryr5rr)r-rrrtest_swapmem_totalsz)NetBSDSpecificTestCase.test_swapmem_totalcCs |jtjj|jdtddS)Nz SwapFree:)rt)rvr)rr7rr)r-rrrtest_swapmem_freesz(NetBSDSpecificTestCase.test_swapmem_freecCs"tj}|j|j|j|jdS)N)r)rr,r6r5r7)r-Zsmemrrrtest_swapmem_usedsz(NetBSDSpecificTestCase.test_swapmem_usedc Csbtdd8}x0|D] }|jdrt|jd}PqWtdWdQRX|jtjj|dddS)Nz /proc/statrsintrrzcouldn't find linei)rt) rrrrrrvr)rr)r-rr rrrrrs   z0NetBSDSpecificTestCase.test_cpu_stats_interruptsc Csbtdd8}x0|D] }|jdrt|jd}PqWtdWdQRX|jtjj|dddS)Nz /proc/statrsctxtrzcouldn't find linei)rt) rrrrrrvr)rr)r-rr rrrrrs   z2NetBSDSpecificTestCase.test_cpu_stats_ctx_switchesN)rLrMrN staticmethodrrrrrrrrrrrrrrrs  r__main__)"rOrosrHr+r)rrrrZ psutil.testsrrrr r r r r rsysconfrugetuidrrrrQZTestCaser!rRrrrL__file__rrrr sL                 K   B