diff options
author | Jeff Sharkey <jsharkey@android.com> | 2011-10-31 16:37:52 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2011-11-02 15:14:11 -0700 |
commit | 163e6443f27884a9bfcb9a48ef606dc635852c23 (patch) | |
tree | eb308345d0b83c32ca9da79eecad23cc0fdab3fc /services/tests | |
parent | 7a5a50c12f6a6e094d1e8aa7514df37f1176354a (diff) | |
download | frameworks_base-163e6443f27884a9bfcb9a48ef606dc635852c23.zip frameworks_base-163e6443f27884a9bfcb9a48ef606dc635852c23.tar.gz frameworks_base-163e6443f27884a9bfcb9a48ef606dc635852c23.tar.bz2 |
Correct proc file reader, optimizations.
Moved away from BufferedReader, which only reads the first 8KB of
some proc files because it aggresively fills its buffer. Optimized
proc parsing, now double the speed. Tests to cover.
Log when NetworkStats counters roll backwards when subtracting, and
optimizations around findIndex(). When system removes UID, also
remove from last stats snapshot to avoid xt counters from rolling
backwards.
Bug: 5472949, 5458380
Change-Id: I07c08fe5233156fac2b84450f6291868bf9bfaf2
Diffstat (limited to 'services/tests')
-rw-r--r-- | services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java | 53 | ||||
-rw-r--r-- | services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java | 42 |
2 files changed, 78 insertions, 17 deletions
diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index e892b5e..368595f 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -66,6 +66,7 @@ import android.net.NetworkTemplate; import android.os.Binder; import android.os.INetworkManagementService; import android.os.IPowerManager; +import android.os.MessageQueue.IdleHandler; import android.test.AndroidTestCase; import android.test.mock.MockPackageManager; import android.test.suitebuilder.annotation.LargeTest; @@ -87,6 +88,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.logging.Handler; import libcore.io.IoUtils; @@ -100,6 +102,10 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { private static final long TEST_START = 1194220800000L; private static final String TEST_IFACE = "test0"; + private static final long KB_IN_BYTES = 1024; + private static final long MB_IN_BYTES = KB_IN_BYTES * 1024; + private static final long GB_IN_BYTES = MB_IN_BYTES * 1024; + private static NetworkTemplate sTemplateWifi = NetworkTemplate.buildTemplateWifi(); private BroadcastInterceptingContext mServiceContext; @@ -255,31 +261,37 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false); mProcessObserver.onForegroundActivitiesChanged(PID_2, UID_A, false); mProcessObserver.onForegroundActivitiesChanged(PID_3, UID_B, false); + waitUntilIdle(); assertFalse(mService.isUidForeground(UID_A)); assertFalse(mService.isUidForeground(UID_B)); // push one of the shared pids into foreground mProcessObserver.onForegroundActivitiesChanged(PID_2, UID_A, true); + waitUntilIdle(); assertTrue(mService.isUidForeground(UID_A)); assertFalse(mService.isUidForeground(UID_B)); // and swap another uid into foreground mProcessObserver.onForegroundActivitiesChanged(PID_2, UID_A, false); mProcessObserver.onForegroundActivitiesChanged(PID_3, UID_B, true); + waitUntilIdle(); assertFalse(mService.isUidForeground(UID_A)); assertTrue(mService.isUidForeground(UID_B)); // push both pid into foreground mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true); mProcessObserver.onForegroundActivitiesChanged(PID_2, UID_A, true); + waitUntilIdle(); assertTrue(mService.isUidForeground(UID_A)); // pull one out, should still be foreground mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false); + waitUntilIdle(); assertTrue(mService.isUidForeground(UID_A)); // pull final pid out, should now be background mProcessObserver.onForegroundActivitiesChanged(PID_2, UID_A, false); + waitUntilIdle(); assertFalse(mService.isUidForeground(UID_A)); } @@ -528,13 +540,14 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // TODO: consider making strongly ordered mock expectRemoveInterfaceQuota(TEST_IFACE); - expectSetInterfaceQuota(TEST_IFACE, 1536L); + expectSetInterfaceQuota(TEST_IFACE, (2 * MB_IN_BYTES) - 512); expectClearNotifications(); future = expectMeteredIfacesChanged(TEST_IFACE); replay(); - setNetworkPolicies(new NetworkPolicy(sTemplateWifi, CYCLE_DAY, 1024L, 2048L, SNOOZE_NEVER)); + setNetworkPolicies(new NetworkPolicy( + sTemplateWifi, CYCLE_DAY, 1 * MB_IN_BYTES, 2 * MB_IN_BYTES, SNOOZE_NEVER)); future.get(); verifyAndReset(); } @@ -590,8 +603,8 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { future = expectMeteredIfacesChanged(); replay(); - setNetworkPolicies( - new NetworkPolicy(sTemplateWifi, CYCLE_DAY, 1024L, 2048L, SNOOZE_NEVER)); + setNetworkPolicies(new NetworkPolicy( + sTemplateWifi, CYCLE_DAY, 1 * MB_IN_BYTES, 2 * MB_IN_BYTES, SNOOZE_NEVER)); future.get(); verifyAndReset(); } @@ -609,7 +622,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { .andReturn(stats).atLeastOnce(); expectRemoveInterfaceQuota(TEST_IFACE); - expectSetInterfaceQuota(TEST_IFACE, 2048L); + expectSetInterfaceQuota(TEST_IFACE, 2 * MB_IN_BYTES); expectClearNotifications(); future = expectMeteredIfacesChanged(TEST_IFACE); @@ -623,7 +636,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // go over warning, which should kick notification incrementCurrentTime(MINUTE_IN_MILLIS); stats = new NetworkStats(getElapsedRealtime(), 1) - .addIfaceValues(TEST_IFACE, 1536L, 15L, 0L, 0L); + .addIfaceValues(TEST_IFACE, 1536 * KB_IN_BYTES, 15L, 0L, 0L); { expectCurrentTime(); @@ -643,7 +656,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { // go over limit, which should kick notification and dialog incrementCurrentTime(MINUTE_IN_MILLIS); stats = new NetworkStats(getElapsedRealtime(), 1) - .addIfaceValues(TEST_IFACE, 5120L, 512L, 0L, 0L); + .addIfaceValues(TEST_IFACE, 5 * MB_IN_BYTES, 512L, 0L, 0L); { expectCurrentTime(); @@ -799,6 +812,32 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { } } + private static class IdleFuture extends AbstractFuture<Void> implements IdleHandler { + @Override + public Void get() throws InterruptedException, ExecutionException { + try { + return get(5, TimeUnit.SECONDS); + } catch (TimeoutException e) { + throw new RuntimeException(e); + } + } + + /** {@inheritDoc} */ + public boolean queueIdle() { + set(null); + return false; + } + } + + /** + * Wait until {@link #mService} internal {@link Handler} is idle. + */ + private void waitUntilIdle() throws Exception { + final IdleFuture future = new IdleFuture(); + mService.addIdleHandler(future); + future.get(); + } + private static void assertTimeEquals(long expected, long actual) { if (expected != actual) { fail("expected " + formatTime(expected) + " but was actually " + formatTime(actual)); diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java index f7dff23..fbc171b 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java @@ -83,6 +83,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase { private static final String TAG = "NetworkStatsServiceTest"; private static final String TEST_IFACE = "test0"; + private static final String TEST_IFACE2 = "test1"; private static final long TEST_START = 1194220800000L; private static final String IMSI_1 = "310004"; @@ -418,8 +419,12 @@ public class NetworkStatsServiceTest extends AndroidTestCase { expectCurrentTime(); expectDefaultSettings(); expectNetworkState(buildMobile3gState(IMSI_2)); - expectNetworkStatsSummary(buildEmptyStats()); - expectNetworkStatsUidDetail(buildEmptyStats()); + 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)); expectNetworkStatsPoll(); replay(); @@ -432,9 +437,11 @@ public class NetworkStatsServiceTest extends AndroidTestCase { expectCurrentTime(); expectDefaultSettings(); expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1) - .addIfaceValues(TEST_IFACE, 128L, 1L, 1024L, 8L)); + .addIfaceValues(TEST_IFACE, 2176L, 17L, 1536L, 12L)); expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) - .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 128L, 1L, 1024L, 8L, 0L) + .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, 640L, 5L, 1024L, 8L, 0L) .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, 0xFAAD, 128L, 1L, 1024L, 8L, 0L)); expectNetworkStatsPoll(); @@ -499,6 +506,15 @@ public class NetworkStatsServiceTest extends AndroidTestCase { // special "removed" bucket. expectCurrentTime(); expectDefaultSettings(); + 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)); + expectNetworkStatsPoll(); + replay(); final Intent intent = new Intent(ACTION_UID_REMOVED); intent.putExtra(EXTRA_UID, UID_BLUE); @@ -553,9 +569,11 @@ public class NetworkStatsServiceTest extends AndroidTestCase { incrementCurrentTime(HOUR_IN_MILLIS); expectCurrentTime(); expectDefaultSettings(); - expectNetworkState(buildMobile4gState()); + expectNetworkState(buildMobile4gState(TEST_IFACE2)); expectNetworkStatsSummary(buildEmptyStats()); - expectNetworkStatsUidDetail(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)); expectNetworkStatsPoll(); replay(); @@ -569,8 +587,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase { expectDefaultSettings(); 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)); + .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) + .addValues(TEST_IFACE2, UID_RED, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 0L) + .addValues(TEST_IFACE2, UID_RED, SET_DEFAULT, 0xFAAD, 512L, 4L, 256L, 2L, 0L)); expectNetworkStatsPoll(); mService.incrementOperationCount(UID_RED, 0xFAAD, 5); @@ -625,6 +645,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase { expectDefaultSettings(); 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, 2048L, 16L, 1024L, 8L, 0L)); expectNetworkStatsPoll(); @@ -881,11 +903,11 @@ public class NetworkStatsServiceTest extends AndroidTestCase { return new NetworkState(info, prop, null, subscriberId); } - private static NetworkState buildMobile4gState() { + private static NetworkState buildMobile4gState(String iface) { final NetworkInfo info = new NetworkInfo(TYPE_WIMAX, 0, null, null); info.setDetailedState(DetailedState.CONNECTED, null, null); final LinkProperties prop = new LinkProperties(); - prop.setInterfaceName(TEST_IFACE); + prop.setInterfaceName(iface); return new NetworkState(info, prop, null); } |