From 64ef4d37852fe6020fd0ea4c3b51d2314f19dab1 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Tue, 30 Mar 2021 20:28:36 +0900 Subject: [PATCH] Add more test coverage for limiting the number of callbacks. Bug: 183921387 Test: test-only change Change-Id: Id48b8eab507fb616cb0adfeba52e00858d44b8a6 --- .../server/ConnectivityServiceTest.java | 78 +++++++++++-------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 10b2f1e9bc..e3e42ed5db 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -18,6 +18,7 @@ package com.android.server; import static android.Manifest.permission.CHANGE_NETWORK_STATE; import static android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS; +import static android.Manifest.permission.NETWORK_SETTINGS; import static android.app.PendingIntent.FLAG_IMMUTABLE; import static android.content.Intent.ACTION_USER_ADDED; import static android.content.Intent.ACTION_USER_REMOVED; @@ -2438,8 +2439,7 @@ public class ConnectivityServiceTest { public void networkCallbacksSanitizationTest_Sanitize() throws Exception { mServiceContext.setPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, PERMISSION_DENIED); - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, - PERMISSION_DENIED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_DENIED); doNetworkCallbacksSanitizationTest(true /* sanitized */); } @@ -2447,7 +2447,7 @@ public class ConnectivityServiceTest { public void networkCallbacksSanitizationTest_NoSanitize_NetworkStack() throws Exception { mServiceContext.setPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, PERMISSION_GRANTED); - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, PERMISSION_DENIED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_DENIED); doNetworkCallbacksSanitizationTest(false /* sanitized */); } @@ -2455,7 +2455,7 @@ public class ConnectivityServiceTest { public void networkCallbacksSanitizationTest_NoSanitize_Settings() throws Exception { mServiceContext.setPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, PERMISSION_DENIED); - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); doNetworkCallbacksSanitizationTest(false /* sanitized */); } @@ -3439,8 +3439,7 @@ public class ConnectivityServiceTest { @Test public void testCaptivePortalApi() throws Exception { - mServiceContext.setPermission( - android.Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final TestNetworkCallback captivePortalCallback = new TestNetworkCallback(); final NetworkRequest captivePortalRequest = new NetworkRequest.Builder() @@ -3474,8 +3473,7 @@ public class ConnectivityServiceTest { private TestNetworkCallback setupNetworkCallbackAndConnectToWifi() throws Exception { // Grant NETWORK_SETTINGS permission to be able to receive LinkProperties change callbacks // with sensitive (captive portal) data - mServiceContext.setPermission( - android.Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final TestNetworkCallback captivePortalCallback = new TestNetworkCallback(); final NetworkRequest captivePortalRequest = new NetworkRequest.Builder() @@ -3909,8 +3907,7 @@ public class ConnectivityServiceTest { @Test public void testRegisterDefaultNetworkCallback() throws Exception { // NETWORK_SETTINGS is necessary to call registerSystemDefaultNetworkCallback. - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, - PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final TestNetworkCallback defaultNetworkCallback = new TestNetworkCallback(); mCm.registerDefaultNetworkCallback(defaultNetworkCallback); @@ -4069,8 +4066,7 @@ public class ConnectivityServiceTest { () -> mCm.registerDefaultNetworkCallbackAsUid(APP1_UID, callback, handler)); callback.assertNoCallback(); - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, - PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); mCm.registerSystemDefaultNetworkCallback(callback, handler); callback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent); mCm.unregisterNetworkCallback(callback); @@ -5391,7 +5387,7 @@ public class ConnectivityServiceTest { } @Test - public void testNetworkCallbackMaximum() { + public void testNetworkCallbackMaximum() throws Exception { final int MAX_REQUESTS = 100; final int CALLBACKS = 89; final int INTENTS = 11; @@ -5468,6 +5464,30 @@ public class ConnectivityServiceTest { } waitForIdle(); + for (int i = 0; i < MAX_REQUESTS; i++) { + NetworkCallback networkCallback = new NetworkCallback(); + mCm.registerDefaultNetworkCallback(networkCallback); + mCm.unregisterNetworkCallback(networkCallback); + } + waitForIdle(); + + for (int i = 0; i < MAX_REQUESTS; i++) { + NetworkCallback networkCallback = new NetworkCallback(); + mCm.registerDefaultNetworkCallback(networkCallback); + mCm.unregisterNetworkCallback(networkCallback); + } + waitForIdle(); + + withPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, () -> { + for (int i = 0; i < MAX_REQUESTS; i++) { + NetworkCallback networkCallback = new NetworkCallback(); + mCm.registerDefaultNetworkCallbackAsUid(1000000 + i, networkCallback, + new Handler(ConnectivityThread.getInstanceLooper())); + mCm.unregisterNetworkCallback(networkCallback); + } + }); + waitForIdle(); + for (int i = 0; i < MAX_REQUESTS; i++) { final PendingIntent pendingIntent = PendingIntent.getBroadcast( mContext, 0 /* requestCode */, new Intent("e" + i), FLAG_IMMUTABLE); @@ -6461,8 +6481,7 @@ public class ConnectivityServiceTest { @Test public void testVpnNetworkActive() throws Exception { // NETWORK_SETTINGS is necessary to call registerSystemDefaultNetworkCallback. - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, - PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final int uid = Process.myUid(); @@ -6954,8 +6973,7 @@ public class ConnectivityServiceTest { @Test public void testRestrictedProfileAffectsVpnUidRanges() throws Exception { // NETWORK_SETTINGS is necessary to see the UID ranges in NetworkCapabilities. - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, - PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final NetworkRequest request = new NetworkRequest.Builder() .removeCapability(NET_CAPABILITY_NOT_VPN) @@ -7041,8 +7059,7 @@ public class ConnectivityServiceTest { mServiceContext.setPermission( Manifest.permission.CONTROL_VPN, PERMISSION_GRANTED); // Necessary to see the UID ranges in NetworkCapabilities. - mServiceContext.setPermission( - Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final NetworkRequest request = new NetworkRequest.Builder() .removeCapability(NET_CAPABILITY_NOT_VPN) @@ -7530,8 +7547,7 @@ public class ConnectivityServiceTest { Manifest.permission.CONTROL_ALWAYS_ON_VPN, PERMISSION_GRANTED); mServiceContext.setPermission( Manifest.permission.CONTROL_VPN, PERMISSION_GRANTED); - mServiceContext.setPermission( - Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final TestNetworkCallback callback = new TestNetworkCallback(); final NetworkRequest request = new NetworkRequest.Builder() @@ -7767,8 +7783,7 @@ public class ConnectivityServiceTest { mServiceContext.setPermission( Manifest.permission.CONTROL_VPN, PERMISSION_GRANTED); // For LockdownVpnTracker to call registerSystemDefaultNetworkCallback. - mServiceContext.setPermission( - Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final NetworkRequest request = new NetworkRequest.Builder().clearCapabilities().build(); final TestNetworkCallback callback = new TestNetworkCallback(); @@ -8898,8 +8913,7 @@ public class ConnectivityServiceTest { private void denyAllLocationPrivilegedPermissions() { mServiceContext.setPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, PERMISSION_DENIED); - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, - PERMISSION_DENIED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_DENIED); mServiceContext.setPermission(Manifest.permission.NETWORK_STACK, PERMISSION_DENIED); mServiceContext.setPermission(Manifest.permission.NETWORK_SETUP_WIZARD, @@ -9155,7 +9169,7 @@ public class ConnectivityServiceTest { @Test public void testCreateForCallerWithLocalMacAddressSanitizedWithSettingsPermission() throws Exception { - mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); final TransportInfo transportInfo = mock(TransportInfo.class); when(transportInfo.getApplicableRedactions()) @@ -10474,8 +10488,7 @@ public class ConnectivityServiceTest { private void registerDefaultNetworkCallbacks() { // Using Manifest.permission.NETWORK_SETTINGS for registerSystemDefaultNetworkCallback() - mServiceContext.setPermission( - Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED); mSystemDefaultNetworkCallback = new TestNetworkCallback(); mDefaultNetworkCallback = new TestNetworkCallback(); mProfileDefaultNetworkCallback = new TestNetworkCallback(); @@ -10485,8 +10498,7 @@ public class ConnectivityServiceTest { registerDefaultNetworkCallbackAsUid(mProfileDefaultNetworkCallback, TEST_WORK_PROFILE_APP_UID); // TODO: test using ConnectivityManager#registerDefaultNetworkCallbackAsUid as well. - mServiceContext.setPermission( - Manifest.permission.NETWORK_SETTINGS, PERMISSION_DENIED); + mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_DENIED); } private void unregisterDefaultNetworkCallbacks() { @@ -10641,7 +10653,7 @@ public class ConnectivityServiceTest { defaultNetworkCallback.assertNoCallback(); final TestNetworkCallback otherUidDefaultCallback = new TestNetworkCallback(); - withPermission(Manifest.permission.NETWORK_SETTINGS, () -> + withPermission(NETWORK_SETTINGS, () -> mCm.registerDefaultNetworkCallbackAsUid(TEST_PACKAGE_UID, otherUidDefaultCallback, new Handler(ConnectivityThread.getInstanceLooper()))); @@ -10689,7 +10701,7 @@ public class ConnectivityServiceTest { defaultNetworkCallback.assertNoCallback(); final TestNetworkCallback otherUidDefaultCallback = new TestNetworkCallback(); - withPermission(Manifest.permission.NETWORK_SETTINGS, () -> + withPermission(NETWORK_SETTINGS, () -> mCm.registerDefaultNetworkCallbackAsUid(TEST_PACKAGE_UID, otherUidDefaultCallback, new Handler(ConnectivityThread.getInstanceLooper()))); @@ -10731,7 +10743,7 @@ public class ConnectivityServiceTest { defaultNetworkCallback.assertNoCallback(); final TestNetworkCallback otherUidDefaultCallback = new TestNetworkCallback(); - withPermission(Manifest.permission.NETWORK_SETTINGS, () -> + withPermission(NETWORK_SETTINGS, () -> mCm.registerDefaultNetworkCallbackAsUid(TEST_PACKAGE_UID, otherUidDefaultCallback, new Handler(ConnectivityThread.getInstanceLooper())));