blob: 9c5478d393880d524a2b887fe36e29040cca5f22 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// Copyright 2011 Google Inc. All Rights Reserved.
package android.test;
import android.net.NetworkStats;
import android.net.NetworkStats.Entry;
import android.net.TrafficStats;
import android.os.Bundle;
import junit.framework.AssertionFailedError;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestListener;
import java.lang.reflect.Method;
/**
* A specialized {@link android.app.Instrumentation} that can collect Bandwidth statistics during
* the execution of the test.
* This is used in place of {@link InstrumentationTestRunner}.
* i.e. adb shell am instrumentation -w -e class com.android.foo.FooTest \
* com.android.foo/android.test.BandwidthTestRunner
*
* @see NetworkStats and @see TrafficStats for details of the collected statistics
* @hide
*/
public class BandwidthTestRunner extends InstrumentationTestRunner implements TestListener {
private static final String REPORT_KEY_PACKETS_SENT = "txPackets";
private static final String REPORT_KEY_PACKETS_RECEIVED = "rxPackets";
private static final String REPORT_KEY_BYTES_SENT = "txBytes";
private static final String REPORT_KEY_BYTES_RECEIVED = "rxBytes";
private static final String REPORT_KEY_OPERATIONS = "operations";
private boolean mHasClassAnnotation;
private boolean mIsBandwidthTest;
private Bundle mTestResult;
@Override
public void onCreate(Bundle arguments) {
super.onCreate(arguments);
addTestListener(this);
}
public void addError(Test test, Throwable t) {
}
public void addFailure(Test test, AssertionFailedError t) {
}
public void startTest(Test test) {
String testClass = test.getClass().getName();
String testName = ((TestCase)test).getName();
Method testMethod = null;
try {
testMethod = test.getClass().getMethod(testName);
} catch (NoSuchMethodException e) {
// ignore- the test with given name does not exist. Will be handled during test
// execution
}
try {
// Look for BandwdthTest annotation on both test class and test method
if (testMethod != null ) {
if (testMethod.isAnnotationPresent(BandwidthTest.class) ){
mIsBandwidthTest = true;
TrafficStats.startDataProfiling(null);
} else if (test.getClass().isAnnotationPresent(BandwidthTest.class)){
mIsBandwidthTest = true;
TrafficStats.startDataProfiling(null);
}
}
} catch (SecurityException e) {
// ignore - the test with given name cannot be accessed. Will be handled during
// test execution
}
}
public void endTest(Test test) {
if (mIsBandwidthTest){
mTestResult = new Bundle();
mIsBandwidthTest=false;
NetworkStats stats = TrafficStats.stopDataProfiling(null);
Entry entry = stats.getTotal(null);
mTestResult.putLong(REPORT_KEY_BYTES_RECEIVED, entry.rxBytes);
mTestResult.putLong(REPORT_KEY_BYTES_SENT, entry.txBytes);
mTestResult.putLong(REPORT_KEY_PACKETS_RECEIVED, entry.rxPackets);
mTestResult.putLong(REPORT_KEY_PACKETS_SENT, entry.txPackets);
mTestResult.putLong(REPORT_KEY_OPERATIONS, entry.operations);
System.out.println(mTestResult.toString());
sendStatus(0, mTestResult);
}
}
}
|