From ac799e5a4d29730b8b4ccfd15d11c82043c3249f Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Mon, 1 Feb 2021 22:26:22 +0900 Subject: [PATCH] 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 4f13dc3d3e94d..4c658e1be1e19 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);