From 786947b4acf40e655f679782061a863aa4ef0c01 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Mon, 1 Feb 2021 22:26:22 +0900 Subject: [PATCH 1/2] Improve testing for network blocking. This simplifies the uidNetworkingBlocked method and makes it more realistic by supporting more combinations of rules than just the four used by this test. Also support RULE_ALLOW_METERED, and add test coverage for it. Test: test-only change Change-Id: Id4f6c7f41429f3ae7841d3214b3e5e95ec591f85 --- .../server/ConnectivityServiceTest.java | 44 ++++++------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 4f13dc3d3e..4c658e1be1 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -1283,32 +1283,10 @@ public class ConnectivityServiceTest { } private void updateUidNetworkingBlocked() { - // Changes the return value of the mock NetworkPolicyManager's isUidNetworkingBlocked method - // based on the current UID rules and restrict background setting. Note that the test never - // pretends to be a foreground app, so always declare no connectivity if background - // networking is not allowed. - switch (mUidRules) { - case RULE_REJECT_ALL: - when(mNetworkPolicyManager.isUidNetworkingBlocked(anyInt(), anyBoolean())) - .thenReturn(true); - break; - - case RULE_REJECT_METERED: - when(mNetworkPolicyManager.isUidNetworkingBlocked(anyInt(), eq(true))) - .thenReturn(true); - when(mNetworkPolicyManager.isUidNetworkingBlocked(anyInt(), eq(false))) - .thenReturn(mRestrictBackground); - break; - - case RULE_ALLOW_METERED: - case RULE_NONE: - when(mNetworkPolicyManager.isUidNetworkingBlocked(anyInt(), anyBoolean())) - .thenReturn(mRestrictBackground); - break; - - default: - fail("Unknown policy rule " + mUidRules); - } + doAnswer(i -> NetworkPolicyManagerInternal.isUidNetworkingBlocked( + i.getArgument(0) /* uid */, mUidRules, i.getArgument(1) /* metered */, + mRestrictBackground) + ).when(mNetworkPolicyManager).isUidNetworkingBlocked(anyInt(), anyBoolean()); } private void setUidRulesChanged(int uidRules) throws RemoteException { @@ -6917,7 +6895,7 @@ public class ConnectivityServiceTest { cellNetworkCallback.expectCapabilitiesWithout(NET_CAPABILITY_NOT_METERED, mCellNetworkAgent); cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent); - assertEquals(null, mCm.getActiveNetwork()); + assertNull(mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); @@ -6930,17 +6908,21 @@ public class ConnectivityServiceTest { setUidRulesChanged(RULE_NONE); cellNetworkCallback.assertNoCallback(); - // Restrict the network based on BackgroundRestricted. + // Restrict background data. Networking is not blocked because the network is unmetered. setRestrictBackgroundChanged(true); cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent); - assertEquals(null, mCm.getActiveNetwork()); + assertNull(mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); - setRestrictBackgroundChanged(true); cellNetworkCallback.assertNoCallback(); - setRestrictBackgroundChanged(false); + + setUidRulesChanged(RULE_ALLOW_METERED); cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent); + assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); + assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); + + setRestrictBackgroundChanged(false); cellNetworkCallback.assertNoCallback(); assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); From b852199e0a1257a6b38a3b38ac80577f7d0f4d44 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Fri, 29 Jan 2021 20:19:23 +0900 Subject: [PATCH 2/2] Add the underlying networks to NetworkAgentInfo#toString. This is useful in debugging VPN networks. Bug: 173331190 Test: manual Change-Id: I4f38a53980191a1813c2ef313fedc51af98f18f6 --- .../java/com/android/server/connectivity/NetworkAgentInfo.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java index b282484600..1a4f20c710 100644 --- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java @@ -57,6 +57,7 @@ import com.android.internal.util.WakeupMessage; import com.android.server.ConnectivityService; import java.io.PrintWriter; +import java.util.Arrays; import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; @@ -1025,6 +1026,8 @@ public class NetworkAgentInfo implements Comparable { + (networkAgentConfig.acceptUnvalidated ? " acceptUnvalidated" : "") + (networkAgentConfig.acceptPartialConnectivity ? " acceptPartialConnectivity" : "") + (clatd.isStarted() ? " clat{" + clatd + "} " : "") + + (declaredUnderlyingNetworks != null + ? " underlying{" + Arrays.toString(declaredUnderlyingNetworks) + "}" : "") + " lp{" + linkProperties + "}" + " nc{" + networkCapabilities + "}" + "}";