diff options
Diffstat (limited to 'services/tests')
6 files changed, 348 insertions, 237 deletions
diff --git a/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set b/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set new file mode 100644 index 0000000..3678b10 --- /dev/null +++ b/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set @@ -0,0 +1,13 @@ +idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_packets rx_tcp_bytes rx_udp_packets rx_udp_bytes rx_other_packets rx_other_bytes tx_tcp_packets tx_tcp_bytes tx_udp_packets tx_udp_bytes tx_other_packets tx_other_bytes
+1 rmnet0 0x0 0 0 14855 82 2804 47 2000 45 12799 35 56 2 676 13 2128 34 0 0
+1 rmnet0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 rmnet0 0x0 1000 0 278102 253 10487 182 277342 243 760 10 0 0 9727 172 760 10 0 0
+2 rmnet0 0x0 1000 1 26033 30 1401 26 25881 28 152 2 0 0 1249 24 152 2 0 0
+3 rmnet0 0x0 10012 0 40524 272 134138 293 40524 272 0 0 0 0 134138 293 0 0 0 0
+3 rmnet0 0x0 10012 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 rmnet0 0x0 10034 0 15791 59 9905 69 15791 59 0 0 0 0 9905 69 0 0 0 0
+4 rmnet0 0x0 10034 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+5 rmnet0 0x0 10055 0 3602 29 7739 59 3602 29 0 0 0 0 7739 59 0 0 0 0
+5 rmnet0 0x0 10055 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+6 rmnet0 0x7fff000300000000 1000 0 483 4 1931 6 483 4 0 0 0 0 1931 6 0 0 0 0
+6 rmnet0 0x7fff000300000000 1000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java b/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java index fe88793..f14569c 100644 --- a/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java +++ b/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java @@ -28,7 +28,10 @@ import com.google.common.util.concurrent.AbstractFuture; import java.util.Iterator; import java.util.List; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; /** * {@link ContextWrapper} that can attach listeners for upcoming @@ -62,6 +65,15 @@ public class BroadcastInterceptingContext extends ContextWrapper { return false; } } + + @Override + public Intent get() throws InterruptedException, ExecutionException { + try { + return get(5, TimeUnit.SECONDS); + } catch (TimeoutException e) { + throw new RuntimeException(e); + } + } } public BroadcastInterceptingContext(Context base) { @@ -126,6 +138,11 @@ public class BroadcastInterceptingContext extends ContextWrapper { } @Override + public void sendBroadcast(Intent intent, String receiverPermission) { + sendBroadcast(intent); + } + + @Override public void removeStickyBroadcast(Intent intent) { // ignored } diff --git a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java index f628977..5f35697 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java @@ -16,6 +16,8 @@ package com.android.server; +import static android.net.NetworkStats.SET_DEFAULT; +import static android.net.NetworkStats.SET_FOREGROUND; import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static com.android.server.NetworkManagementSocketTagger.kernelToTag; @@ -27,7 +29,6 @@ import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; import com.android.frameworks.servicestests.R; -import com.google.common.io.Files; import java.io.File; import java.io.FileOutputStream; @@ -74,11 +75,11 @@ public class NetworkManagementServiceTest extends AndroidTestCase { final NetworkStats stats = mService.getNetworkStatsDetail(); assertEquals(31, stats.size()); - assertStatsEntry(stats, "wlan0", 0, 0, 14615L, 4270L); - assertStatsEntry(stats, "wlan0", 10004, 0, 333821L, 53558L); - assertStatsEntry(stats, "wlan0", 10004, 1947740890, 18725L, 1066L); - assertStatsEntry(stats, "rmnet0", 10037, 0, 31184994L, 684122L); - assertStatsEntry(stats, "rmnet0", 10037, 1947740890, 28507378L, 437004L); + assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0, 14615L, 4270L); + assertStatsEntry(stats, "wlan0", 10004, SET_DEFAULT, 0, 333821L, 53558L); + assertStatsEntry(stats, "wlan0", 10004, SET_DEFAULT, 1947740890, 18725L, 1066L); + assertStatsEntry(stats, "rmnet0", 10037, SET_DEFAULT, 0, 31184994L, 684122L); + assertStatsEntry(stats, "rmnet0", 10037, SET_DEFAULT, 1947740890, 28507378L, 437004L); } public void testNetworkStatsDetailExtended() throws Exception { @@ -86,8 +87,8 @@ public class NetworkManagementServiceTest extends AndroidTestCase { final NetworkStats stats = mService.getNetworkStatsDetail(); assertEquals(2, stats.size()); - assertStatsEntry(stats, "test0", 1000, 0, 1024L, 2048L); - assertStatsEntry(stats, "test0", 1000, 0xF00D, 512L, 512L); + assertStatsEntry(stats, "test0", 1000, SET_DEFAULT, 0, 1024L, 2048L); + assertStatsEntry(stats, "test0", 1000, SET_DEFAULT, 0xF00D, 512L, 512L); } public void testNetworkStatsSummary() throws Exception { @@ -95,12 +96,12 @@ public class NetworkManagementServiceTest extends AndroidTestCase { final NetworkStats stats = mService.getNetworkStatsSummary(); assertEquals(6, stats.size()); - assertStatsEntry(stats, "lo", UID_ALL, TAG_NONE, 8308L, 8308L); - assertStatsEntry(stats, "rmnet0", UID_ALL, TAG_NONE, 1507570L, 489339L); - assertStatsEntry(stats, "ifb0", UID_ALL, TAG_NONE, 52454L, 0L); - assertStatsEntry(stats, "ifb1", UID_ALL, TAG_NONE, 52454L, 0L); - assertStatsEntry(stats, "sit0", UID_ALL, TAG_NONE, 0L, 0L); - assertStatsEntry(stats, "ip6tnl0", UID_ALL, TAG_NONE, 0L, 0L); + assertStatsEntry(stats, "lo", UID_ALL, SET_DEFAULT, TAG_NONE, 8308L, 8308L); + assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L, 489339L); + assertStatsEntry(stats, "ifb0", UID_ALL, SET_DEFAULT, TAG_NONE, 52454L, 0L); + assertStatsEntry(stats, "ifb1", UID_ALL, SET_DEFAULT, TAG_NONE, 52454L, 0L); + assertStatsEntry(stats, "sit0", UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L); + assertStatsEntry(stats, "ip6tnl0", UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L); } public void testNetworkStatsSummaryDown() throws Exception { @@ -112,8 +113,8 @@ public class NetworkManagementServiceTest extends AndroidTestCase { final NetworkStats stats = mService.getNetworkStatsSummary(); assertEquals(7, stats.size()); - assertStatsEntry(stats, "rmnet0", UID_ALL, TAG_NONE, 1507570L, 489339L); - assertStatsEntry(stats, "wlan0", UID_ALL, TAG_NONE, 1024L, 2048L); + assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L, 489339L); + assertStatsEntry(stats, "wlan0", UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 2048L); } public void testKernelTags() throws Exception { @@ -130,6 +131,15 @@ public class NetworkManagementServiceTest extends AndroidTestCase { assertEquals(2147483136, kernelToTag("0x7FFFFE0000000000")); } + public void testNetworkStatsWithSet() throws Exception { + stageFile(R.raw.xt_qtaguid_typical_with_set, new File(mTestProc, "net/xt_qtaguid/stats")); + + final NetworkStats stats = mService.getNetworkStatsDetail(); + assertEquals(12, stats.size()); + assertStatsEntry(stats, "rmnet0", 1000, SET_DEFAULT, 0, 278102L, 253L, 10487L, 182L); + assertStatsEntry(stats, "rmnet0", 1000, SET_FOREGROUND, 0, 26033L, 30L, 1401L, 26L); + } + /** * Copy a {@link Resources#openRawResource(int)} into {@link File} for * testing purposes. @@ -159,12 +169,22 @@ public class NetworkManagementServiceTest extends AndroidTestCase { } } - private static void assertStatsEntry( - NetworkStats stats, String iface, int uid, int tag, long rxBytes, long txBytes) { - final int i = stats.findIndex(iface, uid, tag); + private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set, + int tag, long rxBytes, long txBytes) { + final int i = stats.findIndex(iface, uid, set, tag); + final NetworkStats.Entry entry = stats.getValues(i, null); + assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes); + assertEquals("unexpected txBytes", txBytes, entry.txBytes); + } + + private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set, + int tag, long rxBytes, long rxPackets, long txBytes, long txPackets) { + final int i = stats.findIndex(iface, uid, set, tag); final NetworkStats.Entry entry = stats.getValues(i, null); - assertEquals(rxBytes, entry.rxBytes); - assertEquals(txBytes, entry.txBytes); + assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes); + assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets); + assertEquals("unexpected txBytes", txBytes, entry.txBytes); + assertEquals("unexpected txPackets", txPackets, entry.txPackets); } } diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index 09f8ff3..845aa3f 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -29,8 +29,6 @@ import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL; import static android.net.NetworkPolicyManager.RULE_REJECT_METERED; import static android.net.NetworkPolicyManager.computeLastCycleBoundary; import static android.net.NetworkPolicyManager.computeNextCycleBoundary; -import static android.net.NetworkStats.TAG_NONE; -import static android.net.NetworkStats.UID_ALL; import static android.text.format.DateUtils.DAY_IN_MILLIS; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT; @@ -282,6 +280,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { Future<Void> future; expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, true); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true); @@ -290,6 +289,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // push strict policy for foreground uid, verify ALLOW rule expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, true); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND); @@ -299,6 +299,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // now turn screen off and verify REJECT rule expect(mPowerManager.isScreenOn()).andReturn(false).atLeastOnce(); expectSetUidNetworkRules(UID_A, true); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_REJECT_METERED); replay(); mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SCREEN_OFF)); @@ -308,6 +309,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // and turn screen back on, verify ALLOW rule restored expect(mPowerManager.isScreenOn()).andReturn(true).atLeastOnce(); expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, true); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SCREEN_ON)); @@ -319,6 +321,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { Future<Void> future; expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, true); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true); @@ -327,6 +330,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // POLICY_NONE should RULE_ALLOW in foreground expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, true); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mService.setUidPolicy(UID_A, POLICY_NONE); @@ -335,6 +339,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // POLICY_NONE should RULE_ALLOW in background expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false); @@ -347,6 +352,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // POLICY_REJECT should RULE_ALLOW in background expectSetUidNetworkRules(UID_A, true); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_REJECT_METERED); replay(); mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND); @@ -355,6 +361,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // POLICY_REJECT should RULE_ALLOW in foreground expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, true); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true); @@ -363,6 +370,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // POLICY_REJECT should RULE_REJECT in background expectSetUidNetworkRules(UID_A, true); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_REJECT_METERED); replay(); mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false); @@ -375,6 +383,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // POLICY_NONE should have RULE_ALLOW in background expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false); @@ -384,6 +393,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // adding POLICY_REJECT should cause RULE_REJECT expectSetUidNetworkRules(UID_A, true); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_REJECT_METERED); replay(); mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND); @@ -392,6 +402,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // removing POLICY_REJECT should return us to RULE_ALLOW expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); mService.setUidPolicy(UID_A, POLICY_NONE); @@ -503,7 +514,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // pretend that 512 bytes total have happened stats = new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 256L, 2L, 256L, 2L, 11); + .addIfaceValues(TEST_IFACE, 256L, 2L, 256L, 2L); expect(mStatsService.getSummaryForNetwork(sTemplateWifi, TIME_FEB_15, TIME_MAR_10)) .andReturn(stats).atLeastOnce(); @@ -527,6 +538,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // POLICY_REJECT should RULE_REJECT in background expectSetUidNetworkRules(UID_A, true); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_REJECT_METERED); replay(); mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND); @@ -535,6 +547,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // uninstall should clear RULE_REJECT expectSetUidNetworkRules(UID_A, false); + expectSetUidForeground(UID_A, false); future = expectRulesChanged(UID_A, RULE_ALLOW_ALL); replay(); final Intent intent = new Intent(ACTION_UID_REMOVED); @@ -579,7 +592,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { elapsedRealtime += MINUTE_IN_MILLIS; currentTime = TIME_MAR_10 + elapsedRealtime; stats = new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 0L, 0L, 0L, 0L, 0); + .addIfaceValues(TEST_IFACE, 0L, 0L, 0L, 0L); state = new NetworkState[] { buildWifi() }; { @@ -606,7 +619,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { elapsedRealtime += MINUTE_IN_MILLIS; currentTime = TIME_MAR_10 + elapsedRealtime; stats = new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1536L, 15L, 0L, 0L, 11); + .addIfaceValues(TEST_IFACE, 1536L, 15L, 0L, 0L); { expectTime(currentTime); @@ -627,7 +640,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { elapsedRealtime += MINUTE_IN_MILLIS; currentTime = TIME_MAR_10 + elapsedRealtime; stats = new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 5120L, 512L, 0L, 0L, 22); + .addIfaceValues(TEST_IFACE, 5120L, 512L, 0L, 0L); { expectTime(currentTime); @@ -738,6 +751,11 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { expectLastCall().atLeastOnce(); } + private void expectSetUidForeground(int uid, boolean uidForeground) throws Exception { + mStatsService.setUidForeground(uid, uidForeground); + expectLastCall().atLeastOnce(); + } + private Future<Void> expectRulesChanged(int uid, int policy) throws Exception { final FutureAnswer future = new FutureAnswer(); mPolicyListener.onUidRulesChanged(eq(uid), eq(policy)); diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java index 8eb9cc3..6138490 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java @@ -23,6 +23,9 @@ import static android.net.ConnectivityManager.TYPE_MOBILE; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIMAX; import static android.net.NetworkStats.IFACE_ALL; +import static android.net.NetworkStats.SET_ALL; +import static android.net.NetworkStats.SET_DEFAULT; +import static android.net.NetworkStats.SET_FOREGROUND; import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static android.net.NetworkStatsHistory.FIELD_ALL; @@ -34,9 +37,6 @@ import static android.text.format.DateUtils.HOUR_IN_MILLIS; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; import static android.text.format.DateUtils.WEEK_IN_MILLIS; import static com.android.server.net.NetworkStatsService.ACTION_NETWORK_STATS_POLL; -import static com.android.server.net.NetworkStatsService.packUidAndTag; -import static com.android.server.net.NetworkStatsService.unpackTag; -import static com.android.server.net.NetworkStatsService.unpackUid; import static org.easymock.EasyMock.anyLong; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.eq; @@ -68,6 +68,9 @@ import com.android.server.net.NetworkStatsService.NetworkStatsSettings; import org.easymock.EasyMock; import java.io.File; +import java.util.concurrent.Future; + +import libcore.io.IoUtils; /** * Tests for {@link NetworkStatsService}. @@ -90,6 +93,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase { private static final int UID_BLUE = 1002; private static final int UID_GREEN = 1003; + private long mElapsedRealtime; + private BroadcastInterceptingContext mServiceContext; private File mStatsDir; @@ -107,6 +112,9 @@ public class NetworkStatsServiceTest extends AndroidTestCase { mServiceContext = new BroadcastInterceptingContext(getContext()); mStatsDir = getContext().getFilesDir(); + if (mStatsDir.exists()) { + IoUtils.deleteContents(mStatsDir); + } mNetManager = createMock(INetworkManagementService.class); mAlarmManager = createMock(IAlarmManager.class); @@ -118,11 +126,17 @@ public class NetworkStatsServiceTest extends AndroidTestCase { mServiceContext, mNetManager, mAlarmManager, mTime, mStatsDir, mSettings); mService.bindConnectivityManager(mConnManager); + mElapsedRealtime = 0L; + + expectCurrentTime(); expectDefaultSettings(); - expectSystemReady(); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(buildEmptyStats()); + final Future<?> firstPoll = expectSystemReady(); replay(); mService.systemReady(); + firstPoll.get(); verifyAndReset(); } @@ -148,14 +162,12 @@ public class NetworkStatsServiceTest extends AndroidTestCase { } public void testNetworkStatsWifi() throws Exception { - long elapsedRealtime = 0; - // pretend that wifi network comes online; service should ask about full // network state, and poll any existing interfaces before updating. - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildWifiState()); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); @@ -164,16 +176,13 @@ public class NetworkStatsServiceTest extends AndroidTestCase { 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); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1024L, 1L, 2048L, 2L)); - expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) + .addIfaceValues(TEST_IFACE, 1024L, 1L, 2048L, 2L)); + expectNetworkStatsUidDetail(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); @@ -184,12 +193,12 @@ public class NetworkStatsServiceTest extends AndroidTestCase { // and bump forward again, with counters going higher. this is // important, since polling should correctly subtract last snapshot. - elapsedRealtime += DAY_IN_MILLIS; - expectTime(TEST_START + elapsedRealtime); + incrementCurrentTime(DAY_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 4096L, 4L, 8192L, 8L)); - expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) + .addIfaceValues(TEST_IFACE, 4096L, 4L, 8192L, 8L)); + expectNetworkStatsUidDetail(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); @@ -201,15 +210,14 @@ public class NetworkStatsServiceTest extends AndroidTestCase { } public void testStatsRebootPersist() throws Exception { - long elapsedRealtime = 0; assertStatsFilesExist(false); // pretend that wifi network comes online; service should ask about full // network state, and poll any existing interfaces before updating. - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildWifiState()); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); @@ -218,29 +226,33 @@ public class NetworkStatsServiceTest extends AndroidTestCase { 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); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1024L, 8L, 2048L, 16L)); - 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); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) + .addIfaceValues(TEST_IFACE, 1024L, 8L, 2048L, 16L)); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 2) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 256L, 2L, 128L, 1L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE, 512L, 4L, 256L, 2L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, 0xFAAD, 256L, 2L, 128L, 1L, 0L) + .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 0L)); + + mService.setUidForeground(UID_RED, false); + mService.incrementOperationCount(UID_RED, 0xFAAD, 4); + mService.setUidForeground(UID_RED, true); + mService.incrementOperationCount(UID_RED, 0xFAAD, 6); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); // verify service recorded history 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); + assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10); + assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, 512L, 4L, 256L, 2L, 4); + assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, 512L, 4L, 256L, 2L, 6); + assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0); verifyAndReset(); // graceful shutdown system, which should trigger persist of stats, and @@ -257,47 +269,49 @@ public class NetworkStatsServiceTest extends AndroidTestCase { assertStatsFilesExist(true); // boot through serviceReady() again + expectCurrentTime(); expectDefaultSettings(); - expectSystemReady(); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(buildEmptyStats()); + final Future<?> firstPoll = expectSystemReady(); replay(); mService.systemReady(); + firstPoll.get(); // after systemReady(), we should have historical stats loaded again 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); + assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10); + assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, 512L, 4L, 256L, 2L, 4); + assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, 512L, 4L, 256L, 2L, 6); + assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0); verifyAndReset(); } public void testStatsBucketResize() throws Exception { - long elapsedRealtime = 0; NetworkStatsHistory history = null; assertStatsFilesExist(false); // pretend that wifi network comes online; service should ask about full // network state, and poll any existing interfaces before updating. - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); expectNetworkState(buildWifiState()); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); replay(); 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); + incrementCurrentTime(2 * HOUR_IN_MILLIS); + expectCurrentTime(); expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); - expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 512L, 4L, 512L, 4L)); - expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) + .addIfaceValues(TEST_IFACE, 512L, 4L, 512L, 4L)); + expectNetworkStatsUidDetail(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); @@ -311,10 +325,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase { // now change bucket duration setting and trigger another poll with // exact same values, which should resize existing buckets. - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectSettings(0L, 30 * MINUTE_IN_MILLIS, WEEK_IN_MILLIS); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); - expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); @@ -329,35 +343,28 @@ public class NetworkStatsServiceTest extends AndroidTestCase { } public void testUidStatsAcrossNetworks() throws Exception { - long elapsedRealtime = 0; - // pretend first mobile network comes online - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildMobile3gState(IMSI_1)); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); replay(); 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); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 2048L, 16L, 512L, 4L)); - 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); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) + .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L)); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1536L, 12L, 512L, 4L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L) + .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L)); + mService.incrementOperationCount(UID_RED, 0xF00D, 10); - mService.incrementOperationCount(UID_BLUE, TAG_NONE, 5); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); @@ -365,18 +372,18 @@ public class NetworkStatsServiceTest extends AndroidTestCase { // verify service recorded history 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); + assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 10); + assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 0); verifyAndReset(); // now switch networks; this also tests that we're okay with interfaces // disappearing, to verify we don't count backwards. - elapsedRealtime += HOUR_IN_MILLIS; - expectTime(TEST_START + elapsedRealtime); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildMobile3gState(IMSI_2)); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); - expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); @@ -384,23 +391,24 @@ public class NetworkStatsServiceTest extends AndroidTestCase { verifyAndReset(); // create traffic on second network - elapsedRealtime += HOUR_IN_MILLIS; - expectTime(TEST_START + elapsedRealtime); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 128L, 1L, 1024L, 8L)); - expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 128L, 1L, 1024L, 8L)); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) + .addIfaceValues(TEST_IFACE, 128L, 1L, 1024L, 8L)); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 128L, 1L, 1024L, 8L, 0L) + .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, 0xFAAD, 128L, 1L, 1024L, 8L, 0L)); - mService.incrementOperationCount(UID_BLUE, TAG_NONE, 10); + mService.incrementOperationCount(UID_BLUE, 0xFAAD, 10); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); // verify original history still intact 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); + assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 10); + assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 0); // and verify new history also recorded under different template, which // verifies that we didn't cross the streams. @@ -412,35 +420,29 @@ public class NetworkStatsServiceTest extends AndroidTestCase { } public void testUidRemovedIsMoved() throws Exception { - long elapsedRealtime = 0; - // pretend that network comes online - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildWifiState()); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); replay(); 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); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 4128L, 258L, 544L, 34L)); - 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)); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) + .addIfaceValues(TEST_IFACE, 4128L, 258L, 544L, 34L)); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 16L, 1L, 16L, 1L, 0L) + .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 4096L, 258L, 512L, 32L, 0L) + .addValues(TEST_IFACE, UID_GREEN, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L)); - mService.incrementOperationCount(UID_RED, TAG_NONE, 10); - mService.incrementOperationCount(UID_BLUE, TAG_NONE, 15); - mService.incrementOperationCount(UID_GREEN, TAG_NONE, 5); + mService.incrementOperationCount(UID_RED, 0xFAAD, 10); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); @@ -448,8 +450,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase { // verify service recorded history 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); + assertUidTotal(sTemplateWifi, UID_BLUE, 4096L, 258L, 512L, 32L, 0); + assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 0); verifyAndReset(); // now pretend two UIDs are uninstalled, which should migrate stats to @@ -467,54 +469,48 @@ public class NetworkStatsServiceTest extends AndroidTestCase { 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); + assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 0); + assertUidTotal(sTemplateWifi, UID_REMOVED, 4112L, 259L, 528L, 33L, 10); verifyAndReset(); } public void testUid3g4gCombinedByTemplate() throws Exception { - long elapsedRealtime = 0; - // pretend that network comes online - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildMobile3gState(IMSI_1)); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); replay(); 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); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); - 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)); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)); - 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, 8L, 1024L, 8L, 10); + assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 8L, 1024L, 8L, 5); verifyAndReset(); // now switch over to 4g network - elapsedRealtime += HOUR_IN_MILLIS; - expectTime(TEST_START + elapsedRealtime); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildMobile4gState()); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); - expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(buildEmptyStats()); replay(); mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); @@ -522,92 +518,64 @@ public class NetworkStatsServiceTest extends AndroidTestCase { verifyAndReset(); // create traffic on second network - elapsedRealtime += HOUR_IN_MILLIS; - expectTime(TEST_START + elapsedRealtime); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); - expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_RED, TAG_NONE, 512L, 4L, 256L, 2L)); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 512L, 4L, 256L, 2L, 0L)); - mService.incrementOperationCount(UID_RED, TAG_NONE, 5); + mService.incrementOperationCount(UID_RED, 0xFAAD, 5); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); // verify that ALL_MOBILE template combines both - assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 15); + assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 10); verifyAndReset(); } - - public void testPackedUidAndTag() throws Exception { - assertEquals(0x0000000000000000L, packUidAndTag(0, 0x0)); - assertEquals(0x000003E900000000L, packUidAndTag(1001, 0x0)); - assertEquals(0x000003E90000F00DL, packUidAndTag(1001, 0xF00D)); - - long packed; - packed = packUidAndTag(Integer.MAX_VALUE, Integer.MIN_VALUE); - assertEquals(Integer.MAX_VALUE, unpackUid(packed)); - assertEquals(Integer.MIN_VALUE, unpackTag(packed)); - - packed = packUidAndTag(Integer.MIN_VALUE, Integer.MAX_VALUE); - assertEquals(Integer.MIN_VALUE, unpackUid(packed)); - assertEquals(Integer.MAX_VALUE, unpackTag(packed)); - - packed = packUidAndTag(10005, 0xFFFFFFFF); - assertEquals(10005, unpackUid(packed)); - assertEquals(0xFFFFFFFF, unpackTag(packed)); - - } public void testSummaryForAllUid() throws Exception { - long elapsedRealtime = 0; - // pretend that network comes online - expectTime(TEST_START + elapsedRealtime); + expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildWifiState()); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); + expectNetworkStatsSummary(buildEmptyStats()); replay(); 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); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); - 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)); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 10L, 1L, 10L, 1L, 0L) + .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 1024L, 8L, 512L, 4L, 0L)); - 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, 5L, 50L, 5L, 5); - assertUidTotal(sTemplateWifi, UID_BLUE, 1024L, 8L, 512L, 4L, 10); + assertUidTotal(sTemplateWifi, UID_RED, 50L, 5L, 50L, 5L, 1); + assertUidTotal(sTemplateWifi, UID_BLUE, 1024L, 8L, 512L, 4L, 0); verifyAndReset(); // now create more traffic in next hour, but only for one app - elapsedRealtime += HOUR_IN_MILLIS; - expectTime(TEST_START + elapsedRealtime); + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); expectDefaultSettings(); - expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime)); - expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1) - .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 2048L, 16L, 1024L, 8L)); - - mService.incrementOperationCount(UID_BLUE, TAG_NONE, 15); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 2048L, 16L, 1024L, 8L, 0L)); replay(); mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); @@ -616,16 +584,77 @@ 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, 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); + assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 1); + assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, 10L, 1L, 10L, 1L, 1); + assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, 2048L, 16L, 1024L, 8L, 0); // now verify that recent history only contains one uid - final long currentTime = TEST_START + elapsedRealtime; + final long currentTime = currentTimeMillis(); 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, 5); + assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, 1024L, 8L, 512L, 4L, 0); + + verifyAndReset(); + } + + public void testForegroundBackground() throws Exception { + // pretend that network comes online + expectCurrentTime(); + expectDefaultSettings(); + expectNetworkState(buildWifiState()); + expectNetworkStatsSummary(buildEmptyStats()); + + replay(); + mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION)); + verifyAndReset(); + + // create some initial traffic + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); + expectDefaultSettings(); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 0L)); + + mService.incrementOperationCount(UID_RED, 0xF00D, 1); + + replay(); + mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); + + // verify service recorded history + assertUidTotal(sTemplateWifi, UID_RED, 128L, 2L, 128L, 2L, 1); + verifyAndReset(); + + // now switch to foreground + incrementCurrentTime(HOUR_IN_MILLIS); + expectCurrentTime(); + expectDefaultSettings(); + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE, 32L, 2L, 32L, 2L, 0L) + .addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, 0xFAAD, 1L, 1L, 1L, 1L, 0L)); + + mService.setUidForeground(UID_RED, true); + mService.incrementOperationCount(UID_RED, 0xFAAD, 1); + + replay(); + mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL)); + + // test that we combined correctly + assertUidTotal(sTemplateWifi, UID_RED, 160L, 4L, 160L, 4L, 2); + + // verify entire history present + final NetworkStats stats = mService.getSummaryForAllUid( + sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true); + assertEquals(4, stats.size()); + assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 1); + assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 1); + assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, TAG_NONE, 32L, 2L, 32L, 2L, 1); + assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, 0xFAAD, 1L, 1L, 1L, 1L, 1); verifyAndReset(); } @@ -639,19 +668,27 @@ public class NetworkStatsServiceTest extends AndroidTestCase { private void assertUidTotal(NetworkTemplate template, int uid, long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) { + assertUidTotal(template, uid, SET_ALL, rxBytes, rxPackets, txBytes, txPackets, operations); + } + + private void assertUidTotal(NetworkTemplate template, int uid, int set, long rxBytes, + long rxPackets, long txBytes, long txPackets, int operations) { final NetworkStatsHistory history = mService.getHistoryForUid( - template, uid, TAG_NONE, FIELD_ALL); + template, uid, set, TAG_NONE, FIELD_ALL); assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, rxPackets, txBytes, txPackets, operations); } - private void expectSystemReady() throws Exception { + private Future<?> expectSystemReady() throws Exception { mAlarmManager.remove(isA(PendingIntent.class)); expectLastCall().anyTimes(); mAlarmManager.setInexactRepeating( eq(AlarmManager.ELAPSED_REALTIME), anyLong(), anyLong(), isA(PendingIntent.class)); expectLastCall().atLeastOnce(); + + return mServiceContext.nextBroadcastIntent( + NetworkStatsService.ACTION_NETWORK_STATS_UPDATED); } private void expectNetworkState(NetworkState... state) throws Exception { @@ -682,25 +719,14 @@ public class NetworkStatsServiceTest extends AndroidTestCase { expect(mSettings.getTimeCacheMaxAge()).andReturn(DAY_IN_MILLIS).anyTimes(); } - private void expectTime(long currentTime) throws Exception { + private void expectCurrentTime() throws Exception { expect(mTime.forceRefresh()).andReturn(false).anyTimes(); expect(mTime.hasCache()).andReturn(true).anyTimes(); - expect(mTime.currentTimeMillis()).andReturn(currentTime).anyTimes(); + expect(mTime.currentTimeMillis()).andReturn(currentTimeMillis()).anyTimes(); expect(mTime.getCacheAge()).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) { final File networkFile = new File(mStatsDir, "netstats.bin"); final File uidFile = new File(mStatsDir, "netstats_uid.bin"); @@ -713,12 +739,10 @@ 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, int operations) { + private static void assertValues(NetworkStats stats, String iface, int uid, int set, + int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) { + final int i = stats.findIndex(iface, uid, set, tag); final NetworkStats.Entry entry = stats.getValues(i, null); - 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); @@ -761,8 +785,24 @@ public class NetworkStatsServiceTest extends AndroidTestCase { return new NetworkState(info, prop, null); } - private static NetworkStats buildEmptyStats(long elapsedRealtime) { - return new NetworkStats(elapsedRealtime, 0); + private NetworkStats buildEmptyStats() { + return new NetworkStats(getElapsedRealtime(), 0); + } + + private long getElapsedRealtime() { + return mElapsedRealtime; + } + + private long startTimeMillis() { + return TEST_START; + } + + private long currentTimeMillis() { + return startTimeMillis() + mElapsedRealtime; + } + + private void incrementCurrentTime(long duration) { + mElapsedRealtime += duration; } private void replay() { diff --git a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java index c0870c7..6a9778e 100644 --- a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java @@ -16,6 +16,9 @@ package com.android.server; +import static android.net.NetworkStats.SET_DEFAULT; +import static android.net.NetworkStats.TAG_NONE; +import static android.net.NetworkStats.UID_ALL; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; @@ -289,7 +292,7 @@ public class ThrottleServiceTest extends AndroidTestCase { public void expectGetInterfaceCounter(long rx, long tx) throws Exception { // TODO: provide elapsedRealtime mock to match TimeAuthority final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1); - stats.addValues(TEST_IFACE, NetworkStats.UID_ALL, NetworkStats.TAG_NONE, rx, 0L, tx, 0L, 0); + stats.addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, rx, 0L, tx, 0L, 0); expect(mMockNMService.getNetworkStatsSummary()).andReturn(stats).atLeastOnce(); } |