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 20e0d14ac14d..bc5edf89b4b0 100644 --- a/core/java/android/util/DebugUtils.java +++ b/core/java/android/util/DebugUtils.java @@ -255,7 +255,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 976a0c663101..72c4c5e85f66 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 ba12b7393048..8a489047f179 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; @@ -1117,7 +1118,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) @@ -1241,7 +1242,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) @@ -1457,6 +1458,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()); @@ -1468,6 +1471,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 @@ -1653,7 +1658,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); @@ -1674,7 +1679,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); @@ -1690,7 +1695,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); @@ -1707,7 +1712,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); @@ -1923,6 +1928,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 */); } @@ -2049,6 +2056,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. |