/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tradefed.device; import com.android.tradefed.device.TopHelper.TopStats; import junit.framework.TestCase; import org.easymock.EasyMock; import java.util.List; /** * Unit tests for {@link TopHelper} */ public class TopHelperTest extends TestCase { private ITestDevice mMockDevice; private TopHelper mTop; @Override protected void setUp() throws Exception { super.setUp(); mMockDevice = EasyMock.createMock(ITestDevice.class); mTop = new TopHelper(mMockDevice); } /** * Test that all the output from top invoked once is supported and parsed (or not parsed). */ public void testTopParser_parse() { final String lines = ("User 7%, System 5%, IOW 3%, IRQ 2%\r\n" + "User 3 + Nice 0 + Sys 6 + Idle 100 + IOW 0 + IRQ 0 + SIRQ 0 = 109\r\n" + "\r\n" + " PID TID PR CPU% S VSS RSS PCY UID Thread Proc\r\n" + " 1388 1388 0 11% R 1160K 576K fg shell top top\r\n" + " 2 2 0 0% S 0K 0K fg root kthreadd\r\n" + "\r\n" + "\r\n" + "\r\n"); mTop.getReceiver().processNewLines(lines.split("\r\n")); List<TopStats> stats = mTop.getTopStats(); assertEquals(1, stats.size()); assertEquals(17.0, stats.get(0).mTotalPercent, 0.0001); assertEquals(7.0, stats.get(0).mUserPercent, 0.0001); assertEquals(5.0, stats.get(0).mSystemPercent, 0.0001); assertEquals(3.0, stats.get(0).mIowPercent, 0.0001); assertEquals(2.0, stats.get(0).mIrqPercent, 0.0001); } /** * Test that the parser returns the correct averages for various ranges. */ public void testTopParser_stats() { final String lines = ( "User 15%, System 11%, IOW 7%, IRQ 3%\r\n" + "User 16%, System 12%, IOW 8%, IRQ 4%\r\n" + "User 17%, System 13%, IOW 9%, IRQ 5%\r\n" + "User 18%, System 14%, IOW 10%, IRQ 6%\r\n" + "User 19%, System 15%, IOW 11%, IRQ 7%\r\n" + "User 20%, System 16%, IOW 12%, IRQ 8%\r\n" + "User 21%, System 17%, IOW 13%, IRQ 9%\r\n"); List<TopStats> stats = mTop.getTopStats(); assertEquals(0, stats.size()); assertNull(TopHelper.getTotalAverage(stats)); assertNull(TopHelper.getUserAverage(stats)); assertNull(TopHelper.getSystemAverage(stats)); assertNull(TopHelper.getIowAverage(stats)); assertNull(TopHelper.getIrqAverage(stats)); mTop.getReceiver().processNewLines(lines.split("\r\n")); stats = mTop.getTopStats(); assertEquals(7, mTop.getTopStats().size()); assertEquals(48.0, TopHelper.getTotalAverage(stats.subList(0, 7)), 0.001); assertEquals(18.0, TopHelper.getUserAverage(stats.subList(0, 7)), 0.001); assertEquals(14.0, TopHelper.getSystemAverage(stats.subList(0, 7)), 0.001); assertEquals(10.0, TopHelper.getIowAverage(stats.subList(0, 7)), 0.001); assertEquals(6.0, TopHelper.getIrqAverage(stats.subList(0, 7)), 0.001); assertEquals(44.0, TopHelper.getTotalAverage(stats.subList(0, 7 - 2)), 0.001); assertEquals(17.0, TopHelper.getUserAverage(stats.subList(0, 7 - 2)), 0.001); assertEquals(13.0, TopHelper.getSystemAverage(stats.subList(0, 7 - 2)), 0.001); assertEquals(9.0, TopHelper.getIowAverage(stats.subList(0, 7 - 2)), 0.001); assertEquals(5.0, TopHelper.getIrqAverage(stats.subList(0, 7 - 2)), 0.001); assertEquals(52.0, TopHelper.getTotalAverage(stats.subList(2, 7)), 0.001); assertEquals(19.0, TopHelper.getUserAverage(stats.subList(2, 7)), 0.001); assertEquals(15.0, TopHelper.getSystemAverage(stats.subList(2, 7)), 0.001); assertEquals(11.0, TopHelper.getIowAverage(stats.subList(2, 7)), 0.001); assertEquals(7.0, TopHelper.getIrqAverage(stats.subList(2, 7)), 0.001); assertNull(TopHelper.getTotalAverage(stats.subList(3, 3))); assertNull(TopHelper.getUserAverage(stats.subList(3, 3))); assertNull(TopHelper.getSystemAverage(stats.subList(3, 3))); assertNull(TopHelper.getIowAverage(stats.subList(3, 3))); assertNull(TopHelper.getIrqAverage(stats.subList(3, 3))); } }