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