From 57826ec3eeb4e96ac5be0054dd9fa96190fcbc23 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 3897dedb701279a5a3451bd64a74f01c3ccf987f 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 + "}" + "}";