From 13726d128acbe70a40ae76671faff2f28a5c3e1a Mon Sep 17 00:00:00 2001 From: Antonio Cansado Date: Wed, 30 Mar 2016 11:37:18 -0700 Subject: [PATCH] Addressing API council comments on NetworkStatsManager. Callbacks - DataUsageCallback renamed to UsageCallback - DataUsagePolicy removed; passing in params directly to register method - making it an abstract class - passing in (networkType, subscriberId) that reached its threshold - renaming onLimitReached to onThresholdReached to match existing naming - only monitor single network,subscriberId - no monitoring of specific uids; using device or user wide instead Tags - only owner uid can read its tags - exposing only TAG_NONE to match service side BUG: 27530098 Change-Id: I2b2664da71806868a1e937d2bf4d1f234637509b --- .../server/net/NetworkStatsObserversTest.java | 225 +++--------------- .../server/net/NetworkStatsServiceTest.java | 164 +------------ 2 files changed, 43 insertions(+), 346 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkStatsObserversTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkStatsObserversTest.java index cff5876f85..21560acbf3 100644 --- a/services/tests/servicestests/src/com/android/server/net/NetworkStatsObserversTest.java +++ b/services/tests/servicestests/src/com/android/server/net/NetworkStatsObserversTest.java @@ -56,7 +56,7 @@ import com.android.server.net.NetworkStatsServiceTest.IdleableHandlerThread; import com.android.server.net.NetworkStatsServiceTest.LatchedHandler; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Objects; import java.util.List; import junit.framework.TestCase; @@ -91,7 +91,6 @@ public class NetworkStatsObserversTest extends TestCase { private static final long BASE_BYTES = 7 * MB_IN_BYTES; private static final int INVALID_TYPE = -1; - private static final int[] NO_UIDS = null; private static final VpnInfo[] VPN_INFO = new VpnInfo[0]; private long mElapsedRealtime; @@ -134,112 +133,60 @@ public class NetworkStatsObserversTest extends TestCase { public void testRegister_thresholdTooLow_setsDefaultThreshold() throws Exception { long thresholdTooLowBytes = 1L; - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateWifi }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, thresholdTooLowBytes); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateWifi, thresholdTooLowBytes); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateWifi, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); } public void testRegister_highThreshold_accepted() throws Exception { long highThresholdBytes = 2 * THRESHOLD_BYTES; - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateWifi }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, highThresholdBytes); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateWifi, highThresholdBytes); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateWifi, request.template)); assertEquals(highThresholdBytes, request.thresholdInBytes); } public void testRegister_twoRequests_twoIds() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateWifi }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateWifi, THRESHOLD_BYTES); DataUsageRequest request1 = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request1.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request1.templates)); - assertNull(request1.uids); + assertTrue(Objects.equals(sTemplateWifi, request1.template)); assertEquals(THRESHOLD_BYTES, request1.thresholdInBytes); DataUsageRequest request2 = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request2.requestId > request1.requestId); - assertTrue(Arrays.deepEquals(templates, request2.templates)); - assertNull(request2.uids); + assertTrue(Objects.equals(sTemplateWifi, request2.template)); assertEquals(THRESHOLD_BYTES, request2.thresholdInBytes); } - public void testRegister_defaultAccess_otherUids_securityException() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; - int[] uids = new int[] { UID_RED, UID_BLUE, UID_GREEN }; - DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, uids, THRESHOLD_BYTES); - - try { - mStatsObservers.register(inputRequest, mMessenger, mockBinder, UID_RED, - NetworkStatsAccess.Level.DEFAULT); - fail("Should have denied access"); - } catch (SecurityException expected) {} - } - - public void testRegister_userAccess_otherUidsSameUser() - throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; - int[] uids = new int[] { UID_RED, UID_BLUE, UID_GREEN }; - DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, uids, THRESHOLD_BYTES); - - DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, - UID_RED, NetworkStatsAccess.Level.USER); - assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertTrue(Arrays.equals(uids, request.uids)); - assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); - } - - public void testRegister_defaultAccess_sameUid() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; - int[] uids = new int[] { UID_RED }; - DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, uids, THRESHOLD_BYTES); - - DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, - UID_RED, NetworkStatsAccess.Level.DEFAULT); - assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertTrue(Arrays.equals(uids, request.uids)); - assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); - } - public void testUnregister_unknownRequest_noop() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateWifi }; DataUsageRequest unknownRequest = new DataUsageRequest( - 123456 /* id */, templates, NO_UIDS, THRESHOLD_BYTES); + 123456 /* id */, sTemplateWifi, THRESHOLD_BYTES); mStatsObservers.unregister(unknownRequest, UID_RED); } public void testUnregister_knownRequest_releasesCaller() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); Mockito.verify(mockBinder).linkToDeath(any(IBinder.DeathRecipient.class), anyInt()); @@ -250,15 +197,13 @@ public class NetworkStatsObserversTest extends TestCase { } public void testUnregister_knownRequest_invalidUid_doesNotUnregister() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, UID_RED, NetworkStatsAccess.Level.DEVICE); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); Mockito.verify(mockBinder).linkToDeath(any(IBinder.DeathRecipient.class), anyInt()); @@ -269,15 +214,13 @@ public class NetworkStatsObserversTest extends TestCase { } public void testUpdateStats_initialSample_doesNotNotify() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); NetworkIdentitySet identSet = new NetworkIdentitySet(); @@ -301,15 +244,13 @@ public class NetworkStatsObserversTest extends TestCase { } public void testUpdateStats_belowThreshold_doesNotNotify() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); NetworkIdentitySet identSet = new NetworkIdentitySet(); @@ -339,16 +280,14 @@ public class NetworkStatsObserversTest extends TestCase { assertEquals(INVALID_TYPE, mHandler.mLastMessageType); } - public void testUpdateStats_aboveThresholdNetwork_notifies() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; + public void testUpdateStats_deviceAccess_notifies() throws Exception { DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); NetworkIdentitySet identSet = new NetworkIdentitySet(); @@ -378,104 +317,14 @@ public class NetworkStatsObserversTest extends TestCase { assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.mLastMessageType); } - public void testUpdateStats_aboveThresholdMultipleNetwork_notifies() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1, sTemplateImsi2 }; + public void testUpdateStats_defaultAccess_notifiesSameUid() throws Exception { DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); - - DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, - UID_RED, NetworkStatsAccess.Level.DEVICESUMMARY); - assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); - assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); - - NetworkIdentitySet identSet1 = new NetworkIdentitySet(); - identSet1.add(new NetworkIdentity( - TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN, - IMSI_1, null /* networkId */, false /* roaming */, true /* metered */)); - mActiveIfaces.put(TEST_IFACE, identSet1); - - NetworkIdentitySet identSet2 = new NetworkIdentitySet(); - identSet2.add(new NetworkIdentity( - TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN, - IMSI_2, null /* networkId */, false /* roaming */, true /* metered */)); - mActiveIfaces.put(TEST_IFACE2, identSet2); - - // Baseline - NetworkStats xtSnapshot = new NetworkStats(TEST_START, 1 /* initialSize */) - .addIfaceValues(TEST_IFACE, BASE_BYTES, 8L, BASE_BYTES, 16L) - .addIfaceValues(TEST_IFACE2, BASE_BYTES + 1234L, 18L, BASE_BYTES, 12L); - NetworkStats uidSnapshot = null; - mStatsObservers.updateStats( - xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces, - VPN_INFO, TEST_START); - - // Delta - traffic on IMSI2 - xtSnapshot = new NetworkStats(TEST_START + MINUTE_IN_MILLIS, 1 /* initialSize */) - .addIfaceValues(TEST_IFACE, BASE_BYTES, 8L, BASE_BYTES, 16L) - .addIfaceValues(TEST_IFACE2, BASE_BYTES + THRESHOLD_BYTES, 22L, - BASE_BYTES + THRESHOLD_BYTES, 24L); - mStatsObservers.updateStats( - xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces, - VPN_INFO, TEST_START); - waitForObserverToIdle(); - - assertTrue(mCv.block(WAIT_TIMEOUT)); - assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.mLastMessageType); - } - - public void testUpdateStats_aboveThresholdUid_notifies() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; - int[] uids = new int[] { UID_RED, UID_BLUE, UID_GREEN }; - DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, uids, THRESHOLD_BYTES); - - DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, - Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE); - assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertTrue(Arrays.equals(uids,request.uids)); - assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); - - NetworkIdentitySet identSet = new NetworkIdentitySet(); - identSet.add(new NetworkIdentity( - TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN, - IMSI_1, null /* networkId */, false /* roaming */, true /* metered */)); - mActiveUidIfaces.put(TEST_IFACE, identSet); - - // Baseline - NetworkStats xtSnapshot = null; - NetworkStats uidSnapshot = new NetworkStats(TEST_START, 2 /* initialSize */) - .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_NO, - BASE_BYTES, 2L, BASE_BYTES, 2L, 0L); - mStatsObservers.updateStats( - xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces, - VPN_INFO, TEST_START); - - // Delta - uidSnapshot = new NetworkStats(TEST_START+ 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) - .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_NO, - BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L); - mStatsObservers.updateStats( - xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces, - VPN_INFO, TEST_START); - waitForObserverToIdle(); - - assertTrue(mCv.block(WAIT_TIMEOUT)); - assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.mLastMessageType); - } - - public void testUpdateStats_defaultAccess_noUid_notifiesSameUid() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; - DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, UID_RED, NetworkStatsAccess.Level.DEFAULT); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); NetworkIdentitySet identSet = new NetworkIdentitySet(); @@ -494,7 +343,7 @@ public class NetworkStatsObserversTest extends TestCase { VPN_INFO, TEST_START); // Delta - uidSnapshot = new NetworkStats(TEST_START+ 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) + uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_NO, BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L); mStatsObservers.updateStats( @@ -506,16 +355,14 @@ public class NetworkStatsObserversTest extends TestCase { assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.mLastMessageType); } - public void testUpdateStats_defaultAccess_noUid_usageOtherUid_doesNotNotify() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; + public void testUpdateStats_defaultAccess_usageOtherUid_doesNotNotify() throws Exception { DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, UID_BLUE, NetworkStatsAccess.Level.DEFAULT); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); NetworkIdentitySet identSet = new NetworkIdentitySet(); @@ -534,7 +381,7 @@ public class NetworkStatsObserversTest extends TestCase { VPN_INFO, TEST_START); // Delta - uidSnapshot = new NetworkStats(TEST_START+ 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) + uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_NO, BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L); mStatsObservers.updateStats( @@ -547,15 +394,13 @@ public class NetworkStatsObserversTest extends TestCase { } public void testUpdateStats_userAccess_usageSameUser_notifies() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, UID_BLUE, NetworkStatsAccess.Level.USER); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); NetworkIdentitySet identSet = new NetworkIdentitySet(); @@ -574,7 +419,7 @@ public class NetworkStatsObserversTest extends TestCase { VPN_INFO, TEST_START); // Delta - uidSnapshot = new NetworkStats(TEST_START+ 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) + uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_NO, BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L); mStatsObservers.updateStats( @@ -587,15 +432,13 @@ public class NetworkStatsObserversTest extends TestCase { } public void testUpdateStats_userAccess_usageAnotherUser_doesNotNotify() throws Exception { - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1 }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, NO_UIDS, THRESHOLD_BYTES); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES); DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, UID_RED, NetworkStatsAccess.Level.USER); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateImsi1, request.template)); assertEquals(THRESHOLD_BYTES, request.thresholdInBytes); NetworkIdentitySet identSet = new NetworkIdentitySet(); @@ -614,7 +457,7 @@ public class NetworkStatsObserversTest extends TestCase { VPN_INFO, TEST_START); // Delta - uidSnapshot = new NetworkStats(TEST_START+ 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) + uidSnapshot = new NetworkStats(TEST_START + 2 * MINUTE_IN_MILLIS, 2 /* initialSize */) .addValues(TEST_IFACE, UID_ANOTHER_USER, SET_DEFAULT, TAG_NONE, ROAMING_NO, BASE_BYTES + THRESHOLD_BYTES, 2L, BASE_BYTES + THRESHOLD_BYTES, 2L, 0L); mStatsObservers.updateStats( diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkStatsServiceTest.java index 74c19845cd..94c6711da9 100644 --- a/services/tests/servicestests/src/com/android/server/net/NetworkStatsServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/net/NetworkStatsServiceTest.java @@ -100,7 +100,7 @@ import org.easymock.EasyMock; import java.io.File; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Objects; import java.util.List; /** @@ -887,7 +887,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase { } - public void testRegisterDataUsageCallback_network() throws Exception { + public void testRegisterUsageCallback() throws Exception { // pretend that wifi network comes online; service should ask about full // network state, and poll any existing interfaces before updating. expectCurrentTime(); @@ -907,9 +907,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase { String callingPackage = "the.calling.package"; long thresholdInBytes = 1L; // very small; should be overriden by framework - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateWifi }; DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, null /* uids */, thresholdInBytes); + DataUsageRequest.REQUEST_ID_UNSET, sTemplateWifi, thresholdInBytes); // Create a messenger that waits for callback activity ConditionVariable cv = new ConditionVariable(false); @@ -931,11 +930,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase { // Register and verify request and that binder was called DataUsageRequest request = - mService.registerDataUsageCallback(callingPackage, inputRequest, + mService.registerUsageCallback(callingPackage, inputRequest, messenger, mockBinder); assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertNull(request.uids); + assertTrue(Objects.equals(sTemplateWifi, request.template)); long minThresholdInBytes = 2 * 1024 * 1024; // 2 MB assertEquals(minThresholdInBytes, request.thresholdInBytes); @@ -997,7 +995,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase { EasyMock.replay(mockBinder); // Unregister request - mService.unregisterDataUsageRequest(request); + mService.unregisterUsageRequest(request); // Wait for the caller to ack receipt of CALLBACK_RELEASED assertTrue(cv.block(WAIT_TIMEOUT)); @@ -1007,157 +1005,13 @@ public class NetworkStatsServiceTest extends AndroidTestCase { EasyMock.verify(mockBinder); } - public void testRegisterDataUsageCallback_uids() throws Exception { - // pretend that network comes online - expectCurrentTime(); - expectDefaultSettings(); - expectNetworkState(buildMobile3gState(IMSI_1, true /* isRoaming */)); - expectNetworkStatsSummary(buildEmptyStats()); - expectNetworkStatsUidDetail(buildEmptyStats()); - expectNetworkStatsPoll(); - expectBandwidthControlCheck(); - - replay(); - mService.forceUpdateIfaces(); - verifyAndReset(); - + public void testUnregisterUsageCallback_unknown_noop() throws Exception { String callingPackage = "the.calling.package"; long thresholdInBytes = 10 * 1024 * 1024; // 10 MB - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1, sTemplateImsi2 }; - int[] uids = new int[] { UID_RED }; - DataUsageRequest inputRequest = new DataUsageRequest( - DataUsageRequest.REQUEST_ID_UNSET, templates, uids, thresholdInBytes); - - // Create a messenger that waits for callback activity - ConditionVariable cv = new ConditionVariable(false); - cv.close(); - LatchedHandler latchedHandler = new LatchedHandler(Looper.getMainLooper(), cv); - Messenger messenger = new Messenger(latchedHandler); - - // Allow binder to connect - IBinder mockBinder = createMock(IBinder.class); - mockBinder.linkToDeath((IBinder.DeathRecipient) anyObject(), anyInt()); - EasyMock.replay(mockBinder); - - // Force poll - expectCurrentTime(); - expectDefaultSettings(); - expectNetworkStatsSummary(buildEmptyStats()); - expectNetworkStatsUidDetail(buildEmptyStats()); - expectNetworkStatsPoll(); - replay(); - - // Register and verify request and that binder was called - DataUsageRequest request = - mService.registerDataUsageCallback(callingPackage, inputRequest, - messenger, mockBinder); - assertTrue(request.requestId > 0); - assertTrue(Arrays.deepEquals(templates, request.templates)); - assertTrue(Arrays.equals(uids, request.uids)); - assertEquals(thresholdInBytes, request.thresholdInBytes); - - // Wait for service to handle internal MSG_REGISTER_DATA_USAGE_LISTENER - mHandler.sendMessage(mHandler.obtainMessage(-1)); - mHandlerThread.waitForIdle(WAIT_TIMEOUT); - - verifyAndReset(); - - // Make sure that the caller binder gets connected - EasyMock.verify(mockBinder); - EasyMock.reset(mockBinder); - - // modify some number on mobile interface, and trigger poll event - // not enough traffic to call data usage callback - incrementCurrentTime(HOUR_IN_MILLIS); - expectCurrentTime(); - expectDefaultSettings(); - expectNetworkStatsSummary(buildEmptyStats()); - expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) - .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_NO, 128L, 2L, - 128L, 2L, 0L) - .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, ROAMING_NO, 64L, 1L, 64L, - 1L, 0L)); - expectNetworkStatsPoll(); - - replay(); - forcePollAndWaitForIdle(); - - // verify service recorded history - assertUidTotal(sTemplateImsi1, UID_RED, 128L, 2L, 128L, 2L, 0); - - // verify entire history present - NetworkStats stats = mSession.getSummaryForAllUid( - sTemplateImsi1, Long.MIN_VALUE, Long.MAX_VALUE, true); - assertEquals(2, stats.size()); - assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_YES, 128L, 2L, - 128L, 2L, 0); - assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, ROAMING_YES, 64L, 1L, 64L, - 1L, 0); - - verifyAndReset(); - - // make sure callback has not being called - assertEquals(INVALID_TYPE, latchedHandler.mLastMessageType); - - // and bump forward again, with counters going higher. this is - // important, since it will trigger the data usage callback - incrementCurrentTime(DAY_IN_MILLIS); - expectCurrentTime(); - expectDefaultSettings(); - expectNetworkStatsSummary(buildEmptyStats()); - expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) - .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_NO, - 128000000L, 2L, 128000000L, 2L, 0L) - .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, ROAMING_NO, - 64000000L, 1L, 64000000L, 1L, 0L)); - expectNetworkStatsPoll(); - - replay(); - forcePollAndWaitForIdle(); - - // verify service recorded history - assertUidTotal(sTemplateImsi1, UID_RED, 128000000L, 2L, 128000000L, 2L, 0); - - // verify entire history present - stats = mSession.getSummaryForAllUid( - sTemplateImsi1, Long.MIN_VALUE, Long.MAX_VALUE, true); - assertEquals(2, stats.size()); - assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, ROAMING_YES, - 128000000L, 2L, 128000000L, 2L, 0); - assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, ROAMING_YES, - 64000000L, 1L, 64000000L, 1L, 0); - - verifyAndReset(); - - // Wait for the caller to ack receipt of CALLBACK_LIMIT_REACHED - assertTrue(cv.block(WAIT_TIMEOUT)); - assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, latchedHandler.mLastMessageType); - cv.close(); - - // Allow binder to disconnect - expect(mockBinder.unlinkToDeath((IBinder.DeathRecipient) anyObject(), anyInt())) - .andReturn(true); - EasyMock.replay(mockBinder); - - // Unregister request - mService.unregisterDataUsageRequest(request); - - // Wait for the caller to ack receipt of CALLBACK_RELEASED - assertTrue(cv.block(WAIT_TIMEOUT)); - assertEquals(NetworkStatsManager.CALLBACK_RELEASED, latchedHandler.mLastMessageType); - - // Make sure that the caller binder gets disconnected - EasyMock.verify(mockBinder); - } - - public void testUnregisterDataUsageCallback_unknown_noop() throws Exception { - String callingPackage = "the.calling.package"; - long thresholdInBytes = 10 * 1024 * 1024; // 10 MB - NetworkTemplate[] templates = new NetworkTemplate[] { sTemplateImsi1, sTemplateImsi2 }; DataUsageRequest unknownRequest = new DataUsageRequest( - 2, templates, null /* uids */, thresholdInBytes); + 2 /* requestId */, sTemplateImsi1, thresholdInBytes); - mService.unregisterDataUsageRequest(unknownRequest); + mService.unregisterUsageRequest(unknownRequest); } private static File getBaseDir(File statsDir) {