blob: a216b7e89d804221d2d2ad278e9d7e297b78456f [file] [log] [blame]
/*
* 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)));
}
}