diff options
3 files changed, 36 insertions, 7 deletions
diff --git a/core/java/android/util/DebugUtils.java b/core/java/android/util/DebugUtils.java index 265b0d303f7f..55d114b224f2 100644 --- a/core/java/android/util/DebugUtils.java +++ b/core/java/android/util/DebugUtils.java @@ -251,7 +251,7 @@ public class DebugUtils { if (value == 0 && flagsWasZero) { return constNameWithoutPrefix(prefix, field); } - if ((flags & value) == value) { + if (value != 0 && (flags & value) == value) { flags &= ~value; res.append(constNameWithoutPrefix(prefix, field)).append('|'); } diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index d3346cddf3d0..d610561cae08 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1509,6 +1509,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { latch.await(5, TimeUnit.SECONDS); } + @VisibleForTesting + Handler getHandlerForTesting() { + return mHandler; + } + /** * Update mobile policies with data cycle information from {@link CarrierConfigManager} * if necessary. diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java index ce1edcd584f6..49c22a355f3d 100644 --- a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java @@ -113,6 +113,7 @@ import android.net.NetworkStatsHistory; import android.net.NetworkTemplate; import android.net.StringNetworkSpecifier; import android.os.Binder; +import android.os.Handler; import android.os.INetworkManagementService; import android.os.PersistableBundle; import android.os.PowerManagerInternal; @@ -1047,7 +1048,7 @@ public class NetworkPolicyManagerServiceTest { // Define simple data plan final SubscriptionPlan plan = buildMonthlyDataPlan( ZonedDateTime.parse("2015-11-01T00:00:00.00Z"), DataUnit.MEGABYTES.toBytes(1800)); - mService.setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[] { plan }, + setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[] { plan }, mServiceContext.getOpPackageName()); // We're 20% through the month (6 days) @@ -1171,7 +1172,7 @@ public class NetworkPolicyManagerServiceTest { // Define simple data plan which gives us effectively 60MB/day final SubscriptionPlan plan = buildMonthlyDataPlan( ZonedDateTime.parse("2015-11-01T00:00:00.00Z"), DataUnit.MEGABYTES.toBytes(1800)); - mService.setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[] { plan }, + setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[] { plan }, mServiceContext.getOpPackageName()); // We're 20% through the month (6 days) @@ -1387,6 +1388,8 @@ public class NetworkPolicyManagerServiceTest { when(mConnManager.getAllNetworkState()).thenReturn(new NetworkState[0]); when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{FAKE_SUB_ID}); when(mTelephonyManager.getSubscriberId(FAKE_SUB_ID)).thenReturn(FAKE_SUBSCRIBER_ID); + when(mTelephonyManager.createForSubscriptionId(FAKE_SUB_ID)) + .thenReturn(mock(TelephonyManager.class)); PersistableBundle bundle = CarrierConfigManager.getDefaultConfig(); when(mCarrierConfigManager.getConfigForSubId(FAKE_SUB_ID)).thenReturn(bundle); setNetworkPolicies(buildDefaultFakeMobilePolicy()); @@ -1398,6 +1401,8 @@ public class NetworkPolicyManagerServiceTest { when(mConnManager.getAllNetworkState()).thenReturn(new NetworkState[0]); when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{FAKE_SUB_ID}); when(mTelephonyManager.getSubscriberId(FAKE_SUB_ID)).thenReturn(FAKE_SUBSCRIBER_ID); + when(mTelephonyManager.createForSubscriptionId(FAKE_SUB_ID)) + .thenReturn(mock(TelephonyManager.class)); when(mCarrierConfigManager.getConfigForSubId(FAKE_SUB_ID)).thenReturn(null); setNetworkPolicies(buildDefaultFakeMobilePolicy()); // smoke test to make sure no errors are raised @@ -1583,7 +1588,7 @@ public class NetworkPolicyManagerServiceTest { final SubscriptionPlan plan = buildMonthlyDataPlan( ZonedDateTime.parse("2015-11-01T00:00:00.00Z"), DataUnit.MEGABYTES.toBytes(1800)); - mService.setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, + setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, mServiceContext.getOpPackageName()); reset(mTelephonyManager, mNetworkManager, mNotifManager); @@ -1604,7 +1609,7 @@ public class NetworkPolicyManagerServiceTest { final SubscriptionPlan plan = buildMonthlyDataPlan( ZonedDateTime.parse("2015-11-01T00:00:00.00Z"), DataUnit.MEGABYTES.toBytes(100)); - mService.setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, + setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, mServiceContext.getOpPackageName()); reset(mTelephonyManager, mNetworkManager, mNotifManager); @@ -1620,7 +1625,7 @@ public class NetworkPolicyManagerServiceTest { { final SubscriptionPlan plan = buildMonthlyDataPlan( ZonedDateTime.parse("2015-11-01T00:00:00.00Z"), BYTES_UNLIMITED); - mService.setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, + setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, mServiceContext.getOpPackageName()); reset(mTelephonyManager, mNetworkManager, mNotifManager); @@ -1637,7 +1642,7 @@ public class NetworkPolicyManagerServiceTest { { final SubscriptionPlan plan = buildMonthlyDataPlan( ZonedDateTime.parse("2015-11-01T00:00:00.00Z"), BYTES_UNLIMITED); - mService.setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, + setSubscriptionPlans(TEST_SUB_ID, new SubscriptionPlan[]{plan}, mServiceContext.getOpPackageName()); reset(mTelephonyManager, mNetworkManager, mNotifManager); @@ -1853,6 +1858,8 @@ public class NetworkPolicyManagerServiceTest { when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn( new int[] { TEST_SUB_ID }); when(mTelephonyManager.getSubscriberId(TEST_SUB_ID)).thenReturn(TEST_IMSI); + when(mTelephonyManager.createForSubscriptionId(TEST_SUB_ID)) + .thenReturn(mock(TelephonyManager.class)); doNothing().when(mTelephonyManager).setPolicyDataEnabled(anyBoolean(), anyInt()); expectNetworkState(false /* roaming */); } @@ -1979,6 +1986,23 @@ public class NetworkPolicyManagerServiceTest { private FutureIntent mRestrictBackgroundChanged; + private void postMsgAndWaitForCompletion() throws InterruptedException { + final Handler handler = mService.getHandlerForTesting(); + final CountDownLatch latch = new CountDownLatch(1); + mService.getHandlerForTesting().post(latch::countDown); + if (!latch.await(5, TimeUnit.SECONDS)) { + fail("Timed out waiting for the test msg to be handled"); + } + } + + private void setSubscriptionPlans(int subId, SubscriptionPlan[] plans, String callingPackage) + throws InterruptedException { + mService.setSubscriptionPlans(subId, plans, callingPackage); + // setSubscriptionPlans() triggers async events, wait for those to be completed before + // moving forward as they could interfere with the tests later. + postMsgAndWaitForCompletion(); + } + private void setRestrictBackground(boolean flag) throws Exception { mService.setRestrictBackground(flag); // Sanity check. |