Add operation counts to network statistics.
Provide API to increment "operation counts" for a UID and tag, used to eventually derive bytes/operation stats. Internally is stored at network layer, but should belong at data layer. Switch profiling to use data layer stats, which are emulated by summarizing network layer details. Read packet counts from new /proc/ columns and collect them into NetworkStatsHistory. Prevent double-counting by ignoring values from first snapshot. Watch for duplicate /proc/ entries. Update tests to verify packet and operation counters. Bug: 5052136, 5097392 Change-Id: I1832f65a2b8a9188f8088f253474a667c21a2f09
This commit is contained in:
@@ -23,16 +23,18 @@ import static android.text.format.DateUtils.SECOND_IN_MILLIS;
|
||||
import static android.text.format.DateUtils.WEEK_IN_MILLIS;
|
||||
import static android.text.format.DateUtils.YEAR_IN_MILLIS;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.test.suitebuilder.annotation.Suppress;
|
||||
import android.util.Log;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import com.android.frameworks.coretests.R;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.util.Random;
|
||||
|
||||
@SmallTest
|
||||
public class NetworkStatsHistoryTest extends TestCase {
|
||||
public class NetworkStatsHistoryTest extends AndroidTestCase {
|
||||
private static final String TAG = "NetworkStatsHistoryTest";
|
||||
|
||||
private static final long TEST_START = 1194220800000L;
|
||||
@@ -47,6 +49,32 @@ public class NetworkStatsHistoryTest extends TestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testReadOriginalVersion() throws Exception {
|
||||
final DataInputStream in = new DataInputStream(
|
||||
getContext().getResources().openRawResource(R.raw.history_v1));
|
||||
|
||||
NetworkStatsHistory.Entry entry = null;
|
||||
try {
|
||||
final NetworkStatsHistory history = new NetworkStatsHistory(in);
|
||||
assertEquals(15 * SECOND_IN_MILLIS, history.getBucketDuration());
|
||||
|
||||
entry = history.getValues(0, entry);
|
||||
assertEquals(29143L, entry.rxBytes);
|
||||
assertEquals(6223L, entry.txBytes);
|
||||
|
||||
entry = history.getValues(history.size() - 1, entry);
|
||||
assertEquals(1476L, entry.rxBytes);
|
||||
assertEquals(838L, entry.txBytes);
|
||||
|
||||
entry = history.getValues(Long.MIN_VALUE, Long.MAX_VALUE, entry);
|
||||
assertEquals(332401L, entry.rxBytes);
|
||||
assertEquals(64314L, entry.txBytes);
|
||||
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void testRecordSingleBucket() throws Exception {
|
||||
final long BUCKET_SIZE = HOUR_IN_MILLIS;
|
||||
stats = new NetworkStatsHistory(BUCKET_SIZE);
|
||||
|
||||
@@ -31,9 +31,9 @@ public class NetworkStatsTest extends TestCase {
|
||||
|
||||
public void testFindIndex() throws Exception {
|
||||
final NetworkStats stats = new NetworkStats(TEST_START, 3)
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L)
|
||||
.addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L);
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 10)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 11)
|
||||
.addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 12);
|
||||
|
||||
assertEquals(2, stats.findIndex(TEST_IFACE, 102, TAG_NONE));
|
||||
assertEquals(2, stats.findIndex(TEST_IFACE, 102, TAG_NONE));
|
||||
@@ -47,95 +47,95 @@ public class NetworkStatsTest extends TestCase {
|
||||
assertEquals(0, stats.size());
|
||||
assertEquals(2, stats.internalSize());
|
||||
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L, 3);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L, 4);
|
||||
|
||||
assertEquals(2, stats.size());
|
||||
assertEquals(2, stats.internalSize());
|
||||
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L, 7);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L, 8);
|
||||
stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L, 10);
|
||||
|
||||
assertEquals(5, stats.size());
|
||||
assertTrue(stats.internalSize() >= 5);
|
||||
|
||||
assertEntry(stats, 0, TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L);
|
||||
assertEntry(stats, 1, TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L);
|
||||
assertEntry(stats, 2, TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L);
|
||||
assertEntry(stats, 3, TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L);
|
||||
assertEntry(stats, 4, TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L);
|
||||
assertValues(stats, 0, TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L, 3);
|
||||
assertValues(stats, 1, TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L, 4);
|
||||
assertValues(stats, 2, TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L, 7);
|
||||
assertValues(stats, 3, TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L, 8);
|
||||
assertValues(stats, 4, TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L, 10);
|
||||
}
|
||||
|
||||
public void testCombineExisting() throws Exception {
|
||||
final NetworkStats stats = new NetworkStats(TEST_START, 10);
|
||||
|
||||
stats.addValues(TEST_IFACE, 1001, TAG_NONE, 512L, 4L, 256L, 2L);
|
||||
stats.addValues(TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L);
|
||||
stats.combineValues(TEST_IFACE, 1001, TAG_NONE, -128L, -1L, -128L, -1L);
|
||||
stats.addValues(TEST_IFACE, 1001, TAG_NONE, 512L, 4L, 256L, 2L, 10);
|
||||
stats.addValues(TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L, 2);
|
||||
stats.combineValues(TEST_IFACE, 1001, TAG_NONE, -128L, -1L, -128L, -1L, -1);
|
||||
|
||||
assertEntry(stats, 0, TEST_IFACE, 1001, TAG_NONE, 384L, 3L, 128L, 1L);
|
||||
assertEntry(stats, 1, TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L);
|
||||
assertValues(stats, 0, TEST_IFACE, 1001, TAG_NONE, 384L, 3L, 128L, 1L, 9);
|
||||
assertValues(stats, 1, TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L, 2);
|
||||
|
||||
// now try combining that should create row
|
||||
stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L);
|
||||
assertEntry(stats, 2, TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L);
|
||||
stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L);
|
||||
assertEntry(stats, 2, TEST_IFACE, 5005, TAG_NONE, 256L, 2L, 256L, 2L);
|
||||
stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3);
|
||||
assertValues(stats, 2, TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3);
|
||||
stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3);
|
||||
assertValues(stats, 2, TEST_IFACE, 5005, TAG_NONE, 256L, 2L, 256L, 2L, 6);
|
||||
}
|
||||
|
||||
public void testSubtractIdenticalData() throws Exception {
|
||||
final NetworkStats before = new NetworkStats(TEST_START, 2)
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L);
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
|
||||
|
||||
final NetworkStats after = new NetworkStats(TEST_START, 2)
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L);
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
|
||||
|
||||
final NetworkStats result = after.subtract(before);
|
||||
|
||||
// identical data should result in zero delta
|
||||
assertEntry(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L);
|
||||
assertEntry(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L);
|
||||
assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L, 0);
|
||||
assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L, 0);
|
||||
}
|
||||
|
||||
public void testSubtractIdenticalRows() throws Exception {
|
||||
final NetworkStats before = new NetworkStats(TEST_START, 2)
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L);
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
|
||||
|
||||
final NetworkStats after = new NetworkStats(TEST_START, 2)
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1025L, 9L, 2L, 1L)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 3L, 1L, 1028L, 9L);
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1025L, 9L, 2L, 1L, 15)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 3L, 1L, 1028L, 9L, 20);
|
||||
|
||||
final NetworkStats result = after.subtract(before);
|
||||
|
||||
// expect delta between measurements
|
||||
assertEntry(result, 0, TEST_IFACE, 100, TAG_NONE, 1L, 1L, 2L, 1L);
|
||||
assertEntry(result, 1, TEST_IFACE, 101, TAG_NONE, 3L, 1L, 4L, 1L);
|
||||
assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 1L, 1L, 2L, 1L, 4);
|
||||
assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 3L, 1L, 4L, 1L, 8);
|
||||
}
|
||||
|
||||
public void testSubtractNewRows() throws Exception {
|
||||
final NetworkStats before = new NetworkStats(TEST_START, 2)
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L);
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
|
||||
|
||||
final NetworkStats after = new NetworkStats(TEST_START, 3)
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L)
|
||||
.addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L);
|
||||
.addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
|
||||
.addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12)
|
||||
.addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
|
||||
|
||||
final NetworkStats result = after.subtract(before);
|
||||
|
||||
// its okay to have new rows
|
||||
assertEntry(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L);
|
||||
assertEntry(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L);
|
||||
assertEntry(result, 2, TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L);
|
||||
assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L, 0);
|
||||
assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L, 0);
|
||||
assertValues(result, 2, TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
|
||||
}
|
||||
|
||||
private static void assertEntry(NetworkStats stats, int index, String iface, int uid, int tag,
|
||||
long rxBytes, long rxPackets, long txBytes, long txPackets) {
|
||||
private static void assertValues(NetworkStats stats, int index, String iface, int uid, int tag,
|
||||
long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) {
|
||||
final NetworkStats.Entry entry = stats.getValues(index, null);
|
||||
assertEquals(iface, entry.iface);
|
||||
assertEquals(uid, entry.uid);
|
||||
@@ -144,6 +144,7 @@ public class NetworkStatsTest extends TestCase {
|
||||
assertEquals(rxPackets, entry.rxPackets);
|
||||
assertEquals(txBytes, entry.txBytes);
|
||||
assertEquals(txPackets, entry.txPackets);
|
||||
assertEquals(operations, entry.operations);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,10 +50,9 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
final File canonicalFilesDir = getContext().getFilesDir().getCanonicalFile();
|
||||
mTestProc = new File(canonicalFilesDir, "proc");
|
||||
mTestProc = new File(getContext().getFilesDir(), "proc");
|
||||
if (mTestProc.exists()) {
|
||||
Files.deleteRecursively(mTestProc);
|
||||
IoUtils.deleteContents(mTestProc);
|
||||
}
|
||||
|
||||
mService = NetworkManagementService.createForTest(mContext, mTestProc, true);
|
||||
@@ -64,7 +63,7 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
|
||||
mService = null;
|
||||
|
||||
if (mTestProc.exists()) {
|
||||
Files.deleteRecursively(mTestProc);
|
||||
IoUtils.deleteContents(mTestProc);
|
||||
}
|
||||
|
||||
super.tearDown();
|
||||
|
||||
@@ -160,22 +160,25 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
|
||||
// verify service has empty history for wifi
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L);
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
verifyAndReset();
|
||||
|
||||
// bootstrap with full polling event to prime stats
|
||||
performBootstrapPoll(TEST_START, elapsedRealtime);
|
||||
|
||||
// modify some number on wifi, and trigger poll event
|
||||
elapsedRealtime += HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1024L, 1L, 2048L, 2L));
|
||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 2048L);
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 1L, 2048L, 2L, 0);
|
||||
verifyAndReset();
|
||||
|
||||
// and bump forward again, with counters going higher. this is
|
||||
@@ -185,13 +188,13 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_ALL, TAG_NONE, 4096L, 4L, 8192L, 8L));
|
||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
assertNetworkTotal(sTemplateWifi, 4096L, 8192L);
|
||||
assertNetworkTotal(sTemplateWifi, 4096L, 4L, 8192L, 8L, 0);
|
||||
verifyAndReset();
|
||||
|
||||
}
|
||||
@@ -211,26 +214,32 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
|
||||
// verify service has empty history for wifi
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L);
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
verifyAndReset();
|
||||
|
||||
// bootstrap with full polling event to prime stats
|
||||
performBootstrapPoll(TEST_START, elapsedRealtime);
|
||||
|
||||
// modify some number on wifi, and trigger poll event
|
||||
elapsedRealtime += HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1024L, 8L, 2048L, 16L));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 2)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 2)
|
||||
.addValues(TEST_IFACE, UID_RED, TAG_NONE, 512L, 4L, 256L, 2L)
|
||||
.addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 128L, 1L, 128L, 1L));
|
||||
|
||||
mService.incrementOperationCount(UID_RED, TAG_NONE, 20);
|
||||
mService.incrementOperationCount(UID_BLUE, TAG_NONE, 10);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 2048L);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 512L, 256L);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 128L);
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 512L, 4L, 256L, 2L, 20);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 10);
|
||||
verifyAndReset();
|
||||
|
||||
// graceful shutdown system, which should trigger persist of stats, and
|
||||
@@ -241,7 +250,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
// we persisted them to file.
|
||||
expectDefaultSettings();
|
||||
replay();
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L);
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
verifyAndReset();
|
||||
|
||||
assertStatsFilesExist(true);
|
||||
@@ -254,9 +263,9 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mService.systemReady();
|
||||
|
||||
// after systemReady(), we should have historical stats loaded again
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 2048L);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 512L, 256L);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 128L);
|
||||
assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 512L, 4L, 256L, 2L, 20);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 10);
|
||||
verifyAndReset();
|
||||
|
||||
}
|
||||
@@ -278,20 +287,23 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
verifyAndReset();
|
||||
|
||||
// bootstrap with full polling event to prime stats
|
||||
performBootstrapPoll(TEST_START, elapsedRealtime);
|
||||
|
||||
// modify some number on wifi, and trigger poll event
|
||||
elapsedRealtime += 2 * HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
|
||||
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_ALL, TAG_NONE, 512L, 4L, 512L, 4L));
|
||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
history = mService.getHistoryForNetwork(sTemplateWifi);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, 512L, 512L);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, 512L, 4L, 512L, 4L, 0);
|
||||
assertEquals(HOUR_IN_MILLIS, history.getBucketDuration());
|
||||
assertEquals(2, history.size());
|
||||
verifyAndReset();
|
||||
@@ -301,14 +313,14 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectSettings(0L, 30 * MINUTE_IN_MILLIS, WEEK_IN_MILLIS);
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify identical stats, but spread across 4 buckets now
|
||||
history = mService.getHistoryForNetwork(sTemplateWifi);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, 512L, 512L);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, 512L, 4L, 512L, 4L, 0);
|
||||
assertEquals(30 * MINUTE_IN_MILLIS, history.getBucketDuration());
|
||||
assertEquals(4, history.size());
|
||||
verifyAndReset();
|
||||
@@ -328,25 +340,32 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
verifyAndReset();
|
||||
|
||||
// bootstrap with full polling event to prime stats
|
||||
performBootstrapPoll(TEST_START, elapsedRealtime);
|
||||
|
||||
// create some traffic on first network
|
||||
elapsedRealtime += HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_ALL, TAG_NONE, 2048L, 16L, 512L, 4L));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 3)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 3)
|
||||
.addValues(TEST_IFACE, UID_RED, TAG_NONE, 1536L, 12L, 512L, 4L)
|
||||
.addValues(TEST_IFACE, UID_RED, 0xF00D, 512L, 4L, 512L, 4L)
|
||||
.addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 512L, 4L, 0L, 0L));
|
||||
|
||||
mService.incrementOperationCount(UID_RED, TAG_NONE, 15);
|
||||
mService.incrementOperationCount(UID_RED, 0xF00D, 10);
|
||||
mService.incrementOperationCount(UID_BLUE, TAG_NONE, 5);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
assertNetworkTotal(sTemplateImsi1, 2048L, 512L);
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L);
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 512L);
|
||||
assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 0L);
|
||||
assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0);
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 15);
|
||||
assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 5);
|
||||
verifyAndReset();
|
||||
|
||||
// now switch networks; this also tests that we're okay with interfaces
|
||||
@@ -356,7 +375,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectDefaultSettings();
|
||||
expectNetworkState(buildMobile3gState(IMSI_2));
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
@@ -369,22 +388,24 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_ALL, TAG_NONE, 128L, 1L, 1024L, 8L));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 128L, 1L, 1024L, 8L));
|
||||
|
||||
mService.incrementOperationCount(UID_BLUE, TAG_NONE, 10);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify original history still intact
|
||||
assertNetworkTotal(sTemplateImsi1, 2048L, 512L);
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 512L);
|
||||
assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 0L);
|
||||
assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0);
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 15);
|
||||
assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 5);
|
||||
|
||||
// and verify new history also recorded under different template, which
|
||||
// verifies that we didn't cross the streams.
|
||||
assertNetworkTotal(sTemplateImsi2, 128L, 1024L);
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L);
|
||||
assertUidTotal(sTemplateImsi2, UID_BLUE, 128L, 1024L);
|
||||
assertNetworkTotal(sTemplateImsi2, 128L, 1L, 1024L, 8L, 0);
|
||||
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
|
||||
assertUidTotal(sTemplateImsi2, UID_BLUE, 128L, 1L, 1024L, 8L, 10);
|
||||
verifyAndReset();
|
||||
|
||||
}
|
||||
@@ -402,25 +423,32 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
verifyAndReset();
|
||||
|
||||
// bootstrap with full polling event to prime stats
|
||||
performBootstrapPoll(TEST_START, elapsedRealtime);
|
||||
|
||||
// create some traffic
|
||||
elapsedRealtime += HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_ALL, TAG_NONE, 4128L, 258L, 544L, 34L));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_RED, TAG_NONE, 16L, 1L, 16L, 1L)
|
||||
.addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 4096L, 258L, 512L, 32L)
|
||||
.addValues(TEST_IFACE, UID_GREEN, TAG_NONE, 16L, 1L, 16L, 1L));
|
||||
|
||||
mService.incrementOperationCount(UID_RED, TAG_NONE, 10);
|
||||
mService.incrementOperationCount(UID_BLUE, TAG_NONE, 15);
|
||||
mService.incrementOperationCount(UID_GREEN, TAG_NONE, 5);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
assertNetworkTotal(sTemplateWifi, 4128L, 544L);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 16L, 16L);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 4096L, 512L);
|
||||
assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 16L);
|
||||
assertNetworkTotal(sTemplateWifi, 4128L, 258L, 544L, 34L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 16L, 1L, 16L, 1L, 10);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 4096L, 258L, 512L, 32L, 15);
|
||||
assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 5);
|
||||
verifyAndReset();
|
||||
|
||||
// now pretend two UIDs are uninstalled, which should migrate stats to
|
||||
@@ -435,11 +463,11 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
|
||||
// existing uid and total should remain unchanged; but removed UID
|
||||
// should be gone completely.
|
||||
assertNetworkTotal(sTemplateWifi, 4128L, 544L);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 0L, 0L);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 0L, 0L);
|
||||
assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 16L);
|
||||
assertUidTotal(sTemplateWifi, UID_REMOVED, 4112L, 528L);
|
||||
assertNetworkTotal(sTemplateWifi, 4128L, 258L, 544L, 34L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 0L, 0L, 0L, 0L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 0L, 0L, 0L, 0L, 0);
|
||||
assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 5);
|
||||
assertUidTotal(sTemplateWifi, UID_REMOVED, 4112L, 259L, 528L, 33L, 25);
|
||||
verifyAndReset();
|
||||
|
||||
}
|
||||
@@ -457,20 +485,26 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
verifyAndReset();
|
||||
|
||||
// bootstrap with full polling event to prime stats
|
||||
performBootstrapPoll(TEST_START, elapsedRealtime);
|
||||
|
||||
// create some traffic
|
||||
elapsedRealtime += HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_RED, TAG_NONE, 1024L, 8L, 1024L, 8L)
|
||||
.addValues(TEST_IFACE, UID_RED, 0xF00D, 512L, 4L, 512L, 4L));
|
||||
|
||||
mService.incrementOperationCount(UID_RED, TAG_NONE, 10);
|
||||
mService.incrementOperationCount(UID_RED, 0xF00D, 5);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 1024L);
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 8L, 1024L, 8L, 10);
|
||||
verifyAndReset();
|
||||
|
||||
// now switch over to 4g network
|
||||
@@ -479,7 +513,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectDefaultSettings();
|
||||
expectNetworkState(buildMobile4gState());
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
@@ -491,14 +525,16 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_RED, TAG_NONE, 512L, 4L, 256L, 2L));
|
||||
|
||||
mService.incrementOperationCount(UID_RED, TAG_NONE, 5);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify that ALL_MOBILE template combines both
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 1280L);
|
||||
assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 15);
|
||||
|
||||
verifyAndReset();
|
||||
|
||||
@@ -537,32 +573,41 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
|
||||
verifyAndReset();
|
||||
|
||||
// bootstrap with full polling event to prime stats
|
||||
performBootstrapPoll(TEST_START, elapsedRealtime);
|
||||
|
||||
// create some traffic for two apps
|
||||
elapsedRealtime += HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_RED, TAG_NONE, 50L, 5L, 50L, 5L)
|
||||
.addValues(TEST_IFACE, UID_RED, 0xF00D, 10L, 1L, 10L, 1L)
|
||||
.addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 1024L, 8L, 512L, 4L));
|
||||
|
||||
mService.incrementOperationCount(UID_RED, TAG_NONE, 5);
|
||||
mService.incrementOperationCount(UID_RED, 0xF00D, 1);
|
||||
mService.incrementOperationCount(UID_BLUE, TAG_NONE, 10);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
// verify service recorded history
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 50L, 50L);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 1024L, 512L);
|
||||
assertUidTotal(sTemplateWifi, UID_RED, 50L, 5L, 50L, 5L, 5);
|
||||
assertUidTotal(sTemplateWifi, UID_BLUE, 1024L, 8L, 512L, 4L, 10);
|
||||
verifyAndReset();
|
||||
|
||||
|
||||
// now create more traffic in next hour, but only for one app
|
||||
elapsedRealtime += HOUR_IN_MILLIS;
|
||||
expectTime(TEST_START + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
|
||||
.addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 2048L, 16L, 1024L, 8L));
|
||||
|
||||
mService.incrementOperationCount(UID_BLUE, TAG_NONE, 15);
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
|
||||
@@ -570,28 +615,32 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
NetworkStats stats = mService.getSummaryForAllUid(
|
||||
sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true);
|
||||
assertEquals(3, stats.size());
|
||||
assertValues(stats, 0, IFACE_ALL, UID_RED, TAG_NONE, 50L, 5L, 50L, 5L);
|
||||
assertValues(stats, 1, IFACE_ALL, UID_RED, 0xF00D, 10L, 1L, 10L, 1L);
|
||||
assertValues(stats, 2, IFACE_ALL, UID_BLUE, TAG_NONE, 2048L, 16L, 1024L, 8L);
|
||||
assertValues(stats, 0, IFACE_ALL, UID_RED, TAG_NONE, 50L, 5L, 50L, 5L, 5);
|
||||
assertValues(stats, 1, IFACE_ALL, UID_RED, 0xF00D, 10L, 1L, 10L, 1L, 1);
|
||||
assertValues(stats, 2, IFACE_ALL, UID_BLUE, TAG_NONE, 2048L, 16L, 1024L, 8L, 15);
|
||||
|
||||
// now verify that recent history only contains one uid
|
||||
final long currentTime = TEST_START + elapsedRealtime;
|
||||
stats = mService.getSummaryForAllUid(
|
||||
sTemplateWifi, currentTime - HOUR_IN_MILLIS, currentTime, true);
|
||||
assertEquals(1, stats.size());
|
||||
assertValues(stats, 0, IFACE_ALL, UID_BLUE, TAG_NONE, 1024L, 8L, 512L, 4L);
|
||||
assertValues(stats, 0, IFACE_ALL, UID_BLUE, TAG_NONE, 1024L, 8L, 512L, 4L, 5);
|
||||
|
||||
verifyAndReset();
|
||||
}
|
||||
|
||||
private void assertNetworkTotal(NetworkTemplate template, long rxBytes, long txBytes) {
|
||||
private void assertNetworkTotal(NetworkTemplate template, long rxBytes, long rxPackets,
|
||||
long txBytes, long txPackets, int operations) {
|
||||
final NetworkStatsHistory history = mService.getHistoryForNetwork(template);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, txBytes);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, rxPackets, txBytes,
|
||||
txPackets, operations);
|
||||
}
|
||||
|
||||
private void assertUidTotal(NetworkTemplate template, int uid, long rxBytes, long txBytes) {
|
||||
private void assertUidTotal(NetworkTemplate template, int uid, long rxBytes, long rxPackets,
|
||||
long txBytes, long txPackets, int operations) {
|
||||
final NetworkStatsHistory history = mService.getHistoryForUid(template, uid, TAG_NONE);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, txBytes);
|
||||
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, rxPackets, txBytes,
|
||||
txPackets, operations);
|
||||
}
|
||||
|
||||
private void expectSystemReady() throws Exception {
|
||||
@@ -611,8 +660,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expect(mNetManager.getNetworkStatsSummary()).andReturn(summary).atLeastOnce();
|
||||
}
|
||||
|
||||
private void expectNetworkStatsDetail(NetworkStats detail) throws Exception {
|
||||
expect(mNetManager.getNetworkStatsDetail()).andReturn(detail).atLeastOnce();
|
||||
private void expectNetworkStatsUidDetail(NetworkStats detail) throws Exception {
|
||||
expect(mNetManager.getNetworkStatsUidDetail(eq(UID_ALL))).andReturn(detail).atLeastOnce();
|
||||
}
|
||||
|
||||
private void expectDefaultSettings() throws Exception {
|
||||
@@ -639,6 +688,17 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
expect(mTime.getCacheCertainty()).andReturn(0L).anyTimes();
|
||||
}
|
||||
|
||||
private void performBootstrapPoll(long testStart, long elapsedRealtime) throws Exception {
|
||||
expectTime(testStart + elapsedRealtime);
|
||||
expectDefaultSettings();
|
||||
expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
|
||||
expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
|
||||
|
||||
replay();
|
||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||
verifyAndReset();
|
||||
}
|
||||
|
||||
private void assertStatsFilesExist(boolean exist) {
|
||||
final File networkFile = new File(mStatsDir, "netstats.bin");
|
||||
final File uidFile = new File(mStatsDir, "netstats_uid.bin");
|
||||
@@ -652,23 +712,26 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
}
|
||||
|
||||
private static void assertValues(NetworkStats stats, int i, String iface, int uid, int tag,
|
||||
long rxBytes, long rxPackets, long txBytes, long txPackets) {
|
||||
long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) {
|
||||
final NetworkStats.Entry entry = stats.getValues(i, null);
|
||||
assertEquals(iface, entry.iface);
|
||||
assertEquals(uid, entry.uid);
|
||||
assertEquals(tag, entry.tag);
|
||||
assertEquals(rxBytes, entry.rxBytes);
|
||||
// TODO: enable testing packet counts once stored in history
|
||||
// assertEquals(rxPackets, entry.rxPackets);
|
||||
assertEquals(txBytes, entry.txBytes);
|
||||
// assertEquals(txPackets, entry.txPackets);
|
||||
assertEquals("unexpected iface", iface, entry.iface);
|
||||
assertEquals("unexpected uid", uid, entry.uid);
|
||||
assertEquals("unexpected tag", tag, entry.tag);
|
||||
assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
|
||||
assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
|
||||
assertEquals("unexpected txBytes", txBytes, entry.txBytes);
|
||||
assertEquals("unexpected txPackets", txPackets, entry.txPackets);
|
||||
assertEquals("unexpected operations", operations, entry.operations);
|
||||
}
|
||||
|
||||
private static void assertValues(
|
||||
NetworkStatsHistory stats, long start, long end, long rxBytes, long txBytes) {
|
||||
private static void assertValues(NetworkStatsHistory stats, long start, long end, long rxBytes,
|
||||
long rxPackets, long txBytes, long txPackets, int operations) {
|
||||
final NetworkStatsHistory.Entry entry = stats.getValues(start, end, null);
|
||||
assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
|
||||
assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
|
||||
assertEquals("unexpected txBytes", txBytes, entry.txBytes);
|
||||
assertEquals("unexpected txPackets", txPackets, entry.txPackets);
|
||||
assertEquals("unexpected operations", operations, entry.operations);
|
||||
}
|
||||
|
||||
private static NetworkState buildWifiState() {
|
||||
|
||||
Reference in New Issue
Block a user