diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-28 21:17:22 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-28 21:17:22 +0000 |
commit | 2cf8324e2a9b81e3aed24131a2503fbff5043c24 (patch) | |
tree | 1bc4b29252594d3dcc121c226fd85349ff0a66f1 | |
parent | be65dcf7412c135efdc42a1bafa23f1bc9c73eb3 (diff) | |
parent | 792a63cc312aebbbb05d0dec01d71b0e003ecf7f (diff) | |
download | Iwlan-simpleperf-release.tar.gz |
Snap for 11510257 from 792a63cc312aebbbb05d0dec01d71b0e003ecf7f to simpleperf-releasesimpleperf-release
Change-Id: Ifb92b91cbda5dec7b0ef8670b4f807db8c7ba7d2
-rw-r--r-- | Android.bp | 7 | ||||
-rw-r--r-- | OWNERS | 2 | ||||
-rw-r--r-- | src/com/google/android/iwlan/IwlanCarrierConfig.java | 93 | ||||
-rw-r--r-- | src/com/google/android/iwlan/IwlanDataService.java | 50 | ||||
-rw-r--r-- | src/com/google/android/iwlan/IwlanEventListener.java | 4 | ||||
-rw-r--r-- | src/com/google/android/iwlan/epdg/EpdgSelector.java | 4 | ||||
-rw-r--r-- | src/com/google/android/iwlan/epdg/EpdgTunnelManager.java | 34 | ||||
-rw-r--r-- | test/com/google/android/iwlan/IwlanDataServiceTest.java | 108 | ||||
-rw-r--r-- | test/com/google/android/iwlan/IwlanEventListenerTest.java | 4 | ||||
-rw-r--r-- | test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java | 14 |
10 files changed, 217 insertions, 103 deletions
@@ -5,8 +5,8 @@ package { genrule { name: "statslog-Iwlan-java-gen", tools: ["stats-log-api-gen"], - cmd: "$(location stats-log-api-gen) --java $(out) --module iwlan --javaPackage com.google.android.iwlan" - + " --javaClass IwlanStatsLog", + cmd: "$(location stats-log-api-gen) --java $(out) --module iwlan --javaPackage com.google.android.iwlan" + + " --javaClass IwlanStatsLog", out: ["com/google/android/iwlan/IwlanStatsLog.java"], } @@ -29,11 +29,12 @@ android_app { libs: [ "android.net.ipsec.ike.stubs.system", + "androidx.annotation_annotation", "auto_value_annotations", "framework-annotations-lib", "framework-connectivity", "framework-wifi", - "modules-utils-handlerexecutor" + "modules-utils-handlerexecutor", ], plugins: ["auto_value_plugin"], @@ -1,5 +1,5 @@ -edensu@google.com amreddy@google.com radhikaagrawal@google.com pochunlee@google.com apsankar@google.com +tairuw@google.com diff --git a/src/com/google/android/iwlan/IwlanCarrierConfig.java b/src/com/google/android/iwlan/IwlanCarrierConfig.java index bb3a20f..e68341a 100644 --- a/src/com/google/android/iwlan/IwlanCarrierConfig.java +++ b/src/com/google/android/iwlan/IwlanCarrierConfig.java @@ -21,6 +21,8 @@ import android.os.PersistableBundle; import android.support.annotation.NonNull; import android.telephony.CarrierConfigManager; +import androidx.annotation.VisibleForTesting; + /** Class for handling IWLAN carrier configuration. */ public class IwlanCarrierConfig { static final String PREFIX = "iwlan."; @@ -42,6 +44,13 @@ public class IwlanCarrierConfig { PREFIX + "n1_mode_exclusion_for_emergency_session"; /** + * Key to decide whether N1 mode shall be enabled or disabled depending on 5G enabling status + * via the UI/UX. See {@link #DEFAULT_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL} for the default value. + */ + public static final String KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL = + PREFIX + "update_n1_mode_on_ui_change_bool"; + + /** * Default delay in seconds for releasing the IWLAN connection after a WWAN handover. This is * the default value for {@link #KEY_HANDOVER_TO_WWAN_RELEASE_DELAY_SECOND_INT}. */ @@ -53,10 +62,18 @@ public class IwlanCarrierConfig { */ public static final boolean DEFAULT_N1_MODE_EXCLUSION_FOR_EMERGENCY_SESSION_BOOL = false; - private static PersistableBundle mHiddenBundle = new PersistableBundle(); + /** + * The default value for determining whether N1 mode shall be enabled or disabled depending on + * 5G enabling status via the UI/UX. + */ + public static final boolean DEFAULT_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL = true; + + private static PersistableBundle sTestBundle = new PersistableBundle(); + + private static PersistableBundle sHiddenBundle = new PersistableBundle(); static { - mHiddenBundle = createHiddenDefaultConfig(); + sHiddenBundle = createHiddenDefaultConfig(); } /** @@ -72,6 +89,8 @@ public class IwlanCarrierConfig { bundle.putBoolean( KEY_N1_MODE_EXCLUSION_FOR_EMERGENCY_SESSION_BOOL, DEFAULT_N1_MODE_EXCLUSION_FOR_EMERGENCY_SESSION_BOOL); + bundle.putBoolean( + KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, DEFAULT_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL); return bundle; } @@ -88,13 +107,17 @@ public class IwlanCarrierConfig { } private static PersistableBundle getDefaultConfig(String key) { + if (sTestBundle.containsKey(key)) { + return sTestBundle; + } + PersistableBundle bundle = CarrierConfigManager.getDefaultConfig(); if (bundle.containsKey(key)) { return bundle; } - if (mHiddenBundle.containsKey(key)) { - return mHiddenBundle; + if (sHiddenBundle.containsKey(key)) { + return sHiddenBundle; } throw new IllegalArgumentException("Default config not found for key: " + key); @@ -274,6 +297,7 @@ public class IwlanCarrierConfig { public static boolean getDefaultConfigBoolean(String key) { return getDefaultConfig(key).getBoolean(key); } + /** * Gets the default configuration int[] value for a given key. * @@ -295,6 +319,7 @@ public class IwlanCarrierConfig { public static long[] getDefaultConfigLongArray(String key) { return getDefaultConfig(key).getLongArray(key); } + /** * Gets the default configuration double[] value for a given key. * @@ -327,4 +352,64 @@ public class IwlanCarrierConfig { public static boolean[] getDefaultConfigBooleanArray(String key) { return getDefaultConfig(key).getBooleanArray(key); } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigBundle(PersistableBundle bundle) { + sTestBundle.putAll(bundle); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigInt(@NonNull String key, int value) { + sTestBundle.putInt(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigLong(@NonNull String key, long value) { + sTestBundle.putLong(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigDouble(@NonNull String key, double value) { + sTestBundle.putDouble(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigBoolean(@NonNull String key, boolean value) { + sTestBundle.putBoolean(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigString(@NonNull String key, String value) { + sTestBundle.putString(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigIntArray(@NonNull String key, @NonNull int[] value) { + sTestBundle.putIntArray(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigLongArray(@NonNull String key, @NonNull long[] value) { + sTestBundle.putLongArray(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigDoubleArray(@NonNull String key, @NonNull double[] value) { + sTestBundle.putDoubleArray(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigBooleanArray(@NonNull String key, @NonNull boolean[] value) { + sTestBundle.putBooleanArray(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void putTestConfigStringArray(@NonNull String key, @NonNull String[] value) { + sTestBundle.putStringArray(key, value); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static void resetTestConfig() { + sTestBundle.clear(); + } } diff --git a/src/com/google/android/iwlan/IwlanDataService.java b/src/com/google/android/iwlan/IwlanDataService.java index 2bf967a..7c680ea 100644 --- a/src/com/google/android/iwlan/IwlanDataService.java +++ b/src/com/google/android/iwlan/IwlanDataService.java @@ -20,6 +20,11 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static android.net.ipsec.ike.ike3gpp.Ike3gppParams.PDU_SESSION_ID_UNSET; +import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_DEACTIVATE_DATA_CALL; +import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_IN_DEACTIVATING_STATE; +import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP; +import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC; + import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; @@ -923,7 +928,8 @@ public class IwlanDataService extends DataService { entry.getKey(), true /* forceClose */, getIwlanTunnelCallback(), - getIwlanTunnelMetrics()); + getIwlanTunnelMetrics(), + BRINGDOWN_REASON_IN_DEACTIVATING_STATE); } } } @@ -1047,7 +1053,8 @@ public class IwlanDataService extends DataService { entry.getKey(), true /* forceClose */, getIwlanTunnelCallback(), - getIwlanTunnelMetrics()); + getIwlanTunnelMetrics(), + BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP); } } } @@ -1229,7 +1236,10 @@ public class IwlanDataService extends DataService { // TODO(b/309867756): Include N1_MODE_CAPABILITY inclusion status in metrics. private boolean needIncludeN1ModeCapability() { - if (!mFeatureFlags.updateN1ModeOnUiChange()) { + if (!IwlanCarrierConfig.getConfigBoolean( + mContext, + getSlotIndex(), + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL)) { return isN1ModeSupported(); } if (!isN1ModeSupported()) { @@ -1247,10 +1257,10 @@ public class IwlanDataService extends DataService { protected boolean isN1ModeSupported() { int[] nrAvailabilities = - IwlanHelper.getConfig( - CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY, + IwlanCarrierConfig.getConfigIntArray( mContext, - getSlotIndex()); + getSlotIndex(), + CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY); Log.d( TAG, "KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY : " @@ -1508,11 +1518,11 @@ public class IwlanDataService extends DataService { if (cellInfolist != null && iwlanDataServiceProvider.isRegisteredCellInfoChanged(cellInfolist)) { int[] addrResolutionMethods = - IwlanHelper.getConfig( - CarrierConfigManager.Iwlan - .KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY, + IwlanCarrierConfig.getConfigIntArray( mContext, - iwlanDataServiceProvider.getSlotIndex()); + iwlanDataServiceProvider.getSlotIndex(), + CarrierConfigManager.Iwlan + .KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY); for (int addrResolutionMethod : addrResolutionMethods) { if (addrResolutionMethod == CarrierConfigManager.Iwlan.EPDG_ADDRESS_CELLULAR_LOC) { @@ -1529,7 +1539,10 @@ public class IwlanDataService extends DataService { int previousCallState = iwlanDataServiceProvider.mCallState; int currentCallState = iwlanDataServiceProvider.mCallState = msg.arg2; - if (!mFeatureFlags.updateN1ModeOnUiChange()) { + if (!IwlanCarrierConfig.getConfigBoolean( + mContext, + iwlanDataServiceProvider.getSlotIndex(), + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL)) { break; } @@ -1542,11 +1555,14 @@ public class IwlanDataService extends DataService { break; case IwlanEventListener.PREFERRED_NETWORK_TYPE_CHANGED_EVENT: - if (!mFeatureFlags.updateN1ModeOnUiChange()) { - break; - } iwlanDataServiceProvider = (IwlanDataServiceProvider) getDataServiceProvider(msg.arg1); + if (!IwlanCarrierConfig.getConfigBoolean( + mContext, + iwlanDataServiceProvider.getSlotIndex(), + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL)) { + break; + } long allowedNetworkType = (long) msg.obj; onPreferredNetworkTypeChanged(iwlanDataServiceProvider, allowedNetworkType); break; @@ -1642,7 +1658,8 @@ public class IwlanDataService extends DataService { dataProfile.getApnSetting().getApnName(), true /* forceClose */, iwlanDataServiceProvider.getIwlanTunnelCallback(), - iwlanDataServiceProvider.getIwlanTunnelMetrics()); + iwlanDataServiceProvider.getIwlanTunnelMetrics(), + BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC); iwlanDataServiceProvider.deliverCallback( IwlanDataServiceProvider.CALLBACK_TYPE_SETUP_DATACALL_COMPLETE, 5 /* DataServiceCallback @@ -1913,7 +1930,8 @@ public class IwlanDataService extends DataService { matchingApn, isNetworkLost || isHandoverSuccessful, /* forceClose */ serviceProvider.getIwlanTunnelCallback(), - serviceProvider.getIwlanTunnelMetrics()); + serviceProvider.getIwlanTunnelMetrics(), + BRINGDOWN_REASON_DEACTIVATE_DATA_CALL); } private void resumePendingDeactivationIfExists( diff --git a/src/com/google/android/iwlan/IwlanEventListener.java b/src/com/google/android/iwlan/IwlanEventListener.java index 890afb4..427f4a7 100644 --- a/src/com/google/android/iwlan/IwlanEventListener.java +++ b/src/com/google/android/iwlan/IwlanEventListener.java @@ -187,10 +187,6 @@ public class IwlanEventListener { public void onAllowedNetworkTypesChanged( @TelephonyManager.AllowedNetworkTypesReason int reason, @TelephonyManager.NetworkTypeBitMask long allowedNetworkType) { - if (!mFeatureFlags.updateN1ModeOnUiChange()) { - return; - } - if (reason != TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER) { return; } diff --git a/src/com/google/android/iwlan/epdg/EpdgSelector.java b/src/com/google/android/iwlan/epdg/EpdgSelector.java index 3db6ac2..3590a7e 100644 --- a/src/com/google/android/iwlan/epdg/EpdgSelector.java +++ b/src/com/google/android/iwlan/epdg/EpdgSelector.java @@ -68,6 +68,7 @@ import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.regex.Pattern; import java.util.stream.Collectors; public class EpdgSelector { @@ -101,6 +102,7 @@ public class EpdgSelector { private static final int PCO_IPV6_LEN = 16; // 16 bytes for IPv6 address in PCO data. private static final String NO_DOMAIN = "NO_DOMAIN"; + private static final Pattern PLMN_PATTERN = Pattern.compile("\\d{5,6}"); BlockingQueue<Runnable> dnsResolutionQueue; @@ -1388,6 +1390,6 @@ public class EpdgSelector { * @return True if the PLMN identifier is valid, false otherwise. */ private static boolean isValidPlmn(String plmn) { - return plmn != null && plmn.matches("\\d{5,6}"); + return plmn != null && PLMN_PATTERN.matcher(plmn).matches(); } } diff --git a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java index 47f3fa3..c350525 100644 --- a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java +++ b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java @@ -237,11 +237,19 @@ public class EpdgTunnelManager { public static final int BRINGDOWN_REASON_UNKNOWN = 0; public static final int BRINGDOWN_REASON_DISABLE_N1_MODE = 1; public static final int BRINGDOWN_REASON_ENABLE_N1_MODE = 2; + public static final int BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC = 3; + public static final int BRINGDOWN_REASON_IN_DEACTIVATING_STATE = 4; + public static final int BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP = 5; + public static final int BRINGDOWN_REASON_DEACTIVATE_DATA_CALL = 6; @IntDef({ BRINGDOWN_REASON_UNKNOWN, BRINGDOWN_REASON_DISABLE_N1_MODE, BRINGDOWN_REASON_ENABLE_N1_MODE, + BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC, + BRINGDOWN_REASON_IN_DEACTIVATING_STATE, + BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP, + BRINGDOWN_REASON_DEACTIVATE_DATA_CALL, }) public @interface TunnelBringDownReason {} @@ -253,6 +261,14 @@ public class EpdgTunnelManager { return "BRINGDOWN_REASON_DISABLE_N1_MODE"; case BRINGDOWN_REASON_ENABLE_N1_MODE: return "BRINGDOWN_REASON_ENABLE_N1_MODE"; + case BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC: + return "BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC"; + case BRINGDOWN_REASON_IN_DEACTIVATING_STATE: + return "BRINGDOWN_REASON_IN_DEACTIVATING_STATE"; + case BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP: + return "BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP"; + case BRINGDOWN_REASON_DEACTIVATE_DATA_CALL: + return "BRINGDOWN_REASON_DEACTIVATE_DATA_CALL"; default: return "Unknown(" + reason + ")"; } @@ -693,24 +709,6 @@ public class EpdgTunnelManager { * provided in {@link #bringUpTunnel}. If no tunnel was available, callback will be delivered * using client-provided provided tunnelCallback and iwlanTunnelMetrics * - * @param apnName apn name - * @param forceClose if true, results in local cleanup of tunnel - * @param tunnelCallback Used if no current or pending IWLAN tunnel exists - * @param iwlanTunnelMetrics Used to report metrics if no current or pending IWLAN tunnel exists - */ - // TODO(b/309866889): Clarify tunnel bring down reason for tunnel closure. - public void closeTunnel( - @NonNull String apnName, - boolean forceClose, - @NonNull TunnelCallback tunnelCallback, - @NonNull IwlanTunnelMetricsImpl iwlanTunnelMetrics) { - closeTunnel( - apnName, forceClose, tunnelCallback, iwlanTunnelMetrics, BRINGDOWN_REASON_UNKNOWN); - } - - /** - * Closes tunnel for an apn with reason. - * * @param apnName APN name * @param forceClose if {@code true}, triggers a local cleanup of the tunnel; if {@code false}, * performs a normal closure procedure diff --git a/test/com/google/android/iwlan/IwlanDataServiceTest.java b/test/com/google/android/iwlan/IwlanDataServiceTest.java index f5914d9..6168b82 100644 --- a/test/com/google/android/iwlan/IwlanDataServiceTest.java +++ b/test/com/google/android/iwlan/IwlanDataServiceTest.java @@ -27,6 +27,9 @@ import static android.telephony.TelephonyManager.NETWORK_TYPE_BITMASK_NR; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; +import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_DEACTIVATE_DATA_CALL; +import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; @@ -142,7 +145,6 @@ public class IwlanDataServiceTest { @Mock private LinkAddress mMockIPv6LinkAddress; @Mock private Inet4Address mMockInet4Address; @Mock private Inet6Address mMockInet6Address; - @Mock private CarrierConfigManager mMockCarrierConfigManager; @Mock private FeatureFlags mFakeFeatureFlags; MockitoSession mStaticMockSession; @@ -213,7 +215,6 @@ public class IwlanDataServiceTest { .mockStatic(ErrorPolicyManager.class) .mockStatic(IwlanBroadcastReceiver.class) .mockStatic(SubscriptionManager.class) - .mockStatic(IwlanCarrierConfig.class) .strictness(Strictness.LENIENT) .startMocking(); @@ -262,8 +263,6 @@ public class IwlanDataServiceTest { mIwlanDataService = spy(new IwlanDataService(mFakeFeatureFlags)); - when(mMockContext.getSystemService(eq(CarrierConfigManager.class))) - .thenReturn(mMockCarrierConfigManager); // Injects the test looper into the IwlanDataServiceHandler doReturn(mTestLooper.getLooper()).when(mIwlanDataService).getLooper(); mIwlanDataService.setAppContext(mMockContext); @@ -281,8 +280,9 @@ public class IwlanDataServiceTest { when(mMockConnectivityManager.getLinkProperties(eq(mMockNetwork))) .thenReturn(mLinkProperties); - when(mMockTunnelLinkProperties.ifaceName()).thenReturn("mockipsec0"); + + mockCarrierConfigForN1Mode(true); } private void moveTimeForwardAndDispatch(long milliSeconds) { @@ -293,6 +293,7 @@ public class IwlanDataServiceTest { @After public void cleanUp() throws Exception { mStaticMockSession.finishMocking(); + IwlanCarrierConfig.resetTestConfig(); mSpyIwlanDataServiceProvider.close(); mTestLooper.dispatchAll(); if (mIwlanDataService != null) { @@ -458,7 +459,8 @@ public class IwlanDataServiceTest { networkCallback.onLinkPropertiesChanged(mMockNetwork, newLinkProperties); verify(mMockEpdgTunnelManager, times(1)) .updateNetwork(eq(mMockNetwork), eq(newLinkProperties)); - verify(mMockEpdgTunnelManager, never()).closeTunnel(any(), anyBoolean(), any(), any()); + verify(mMockEpdgTunnelManager, never()) + .closeTunnel(any(), anyBoolean(), any(), any(), anyInt()); } @Test @@ -867,7 +869,8 @@ public class IwlanDataServiceTest { eq(TEST_APN_NAME), eq(false), any(IwlanTunnelCallback.class), - any(IwlanTunnelMetricsImpl.class)); + any(IwlanTunnelMetricsImpl.class), + eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL)); /* Check callback result is RESULT_SUCCESS when onClosed() is called. */ mSpyIwlanDataServiceProvider @@ -907,7 +910,8 @@ public class IwlanDataServiceTest { eq(TEST_APN_NAME), eq(true) /* forceClose */, any(IwlanTunnelCallback.class), - any(IwlanTunnelMetricsImpl.class)); + any(IwlanTunnelMetricsImpl.class), + eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL)); /* Check callback result is RESULT_SUCCESS when onClosed() is called. */ mSpyIwlanDataServiceProvider @@ -922,11 +926,8 @@ public class IwlanDataServiceTest { public void testDeactivateDataCall_DelayedReleaseAfterHandover() { DataProfile dp = buildImsDataProfile(); - when(IwlanCarrierConfig.getConfigInt( - mMockContext, - DEFAULT_SLOT_INDEX, - IwlanCarrierConfig.KEY_HANDOVER_TO_WWAN_RELEASE_DELAY_SECOND_INT)) - .thenReturn(3); + IwlanCarrierConfig.putTestConfigInt( + IwlanCarrierConfig.KEY_HANDOVER_TO_WWAN_RELEASE_DELAY_SECOND_INT, 3); onSystemDefaultNetworkConnected(TRANSPORT_WIFI); mSpyIwlanDataServiceProvider.setTunnelState( @@ -952,7 +953,8 @@ public class IwlanDataServiceTest { eq(TEST_APN_NAME), anyBoolean(), any(IwlanTunnelCallback.class), - any(IwlanTunnelMetricsImpl.class)); + any(IwlanTunnelMetricsImpl.class), + eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL)); moveTimeForwardAndDispatch(50); /* Check closeTunnel() is called. */ @@ -961,7 +963,8 @@ public class IwlanDataServiceTest { eq(TEST_APN_NAME), eq(true) /* forceClose */, any(IwlanTunnelCallback.class), - any(IwlanTunnelMetricsImpl.class)); + any(IwlanTunnelMetricsImpl.class), + eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL)); /* Check callback result is RESULT_SUCCESS when onClosed() is called. */ mSpyIwlanDataServiceProvider @@ -976,11 +979,8 @@ public class IwlanDataServiceTest { public void testDeactivateDataCall_DelayedReleaseAfterHandover_NetworkReleaseBeforeDelay() { DataProfile dp = buildImsDataProfile(); - when(IwlanCarrierConfig.getConfigInt( - mMockContext, - DEFAULT_SLOT_INDEX, - IwlanCarrierConfig.KEY_HANDOVER_TO_WWAN_RELEASE_DELAY_SECOND_INT)) - .thenReturn(3); + IwlanCarrierConfig.putTestConfigInt( + IwlanCarrierConfig.KEY_HANDOVER_TO_WWAN_RELEASE_DELAY_SECOND_INT, 3); when(ErrorPolicyManager.getInstance(eq(mMockContext), eq(DEFAULT_SLOT_INDEX))) .thenReturn(mMockErrorPolicyManager); when(mMockErrorPolicyManager.getDataFailCause(eq(TEST_APN_NAME))) @@ -1020,7 +1020,8 @@ public class IwlanDataServiceTest { eq(TEST_APN_NAME), anyBoolean(), any(IwlanTunnelCallback.class), - any(IwlanTunnelMetricsImpl.class)); + any(IwlanTunnelMetricsImpl.class), + anyInt()); /* Check callback result is RESULT_SUCCESS when onClosed() is called. */ mSpyIwlanDataServiceProvider @@ -1037,7 +1038,8 @@ public class IwlanDataServiceTest { eq(TEST_APN_NAME), anyBoolean(), any(IwlanTunnelCallback.class), - any(IwlanTunnelMetricsImpl.class)); + any(IwlanTunnelMetricsImpl.class), + anyInt()); // No additional callbacks are involved. verify(mMockDataServiceCallback, times(1)).onDeactivateDataCallComplete(anyInt()); @@ -1993,7 +1995,8 @@ public class IwlanDataServiceTest { eq(TEST_APN_NAME), anyBoolean(), any(IwlanTunnelCallback.class), - any(IwlanTunnelMetricsImpl.class)); + any(IwlanTunnelMetricsImpl.class), + eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL)); advanceCalendarByTimeMs(deactivationTime, calendar); @@ -2044,7 +2047,13 @@ public class IwlanDataServiceTest { Network newNetwork2 = createMockNetwork(mLinkProperties); onSystemDefaultNetworkConnected( newNetwork2, mLinkProperties, TRANSPORT_WIFI, DEFAULT_SUB_INDEX); - verify(mMockEpdgTunnelManager, times(1)).closeTunnel(any(), anyBoolean(), any(), any()); + verify(mMockEpdgTunnelManager, times(1)) + .closeTunnel( + any(), + anyBoolean(), + any(), + any(), + eq(BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP)); } public static TunnelLinkProperties createTunnelLinkProperties() throws Exception { @@ -2072,15 +2081,6 @@ public class IwlanDataServiceTest { .build(); } - private void setupMockForGetConfig(PersistableBundle bundle) { - if (bundle == null) { - bundle = new PersistableBundle(); - } - when(mMockContext.getSystemService(eq(CarrierConfigManager.class))) - .thenReturn(mMockCarrierConfigManager); - when(mMockCarrierConfigManager.getConfigForSubId(DEFAULT_SLOT_INDEX)).thenReturn(bundle); - } - private void mockCarrierConfigForN1Mode(boolean supportN1Mode) { PersistableBundle bundle = new PersistableBundle(); if (supportN1Mode) { @@ -2095,7 +2095,7 @@ public class IwlanDataServiceTest { CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY, new int[] {CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA}); } - setupMockForGetConfig(bundle); + IwlanCarrierConfig.putTestConfigBundle(bundle); } private void mockCallState(int callState) { @@ -2132,7 +2132,7 @@ public class IwlanDataServiceTest { CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA, CarrierConfigManager.CARRIER_NR_AVAILABILITY_SA }); - setupMockForGetConfig(bundle); + IwlanCarrierConfig.putTestConfigBundle(bundle); assertTrue(mSpyIwlanDataServiceProvider.isN1ModeSupported()); bundle.putIntArray( @@ -2140,14 +2140,15 @@ public class IwlanDataServiceTest { new int[] { CarrierConfigManager.CARRIER_NR_AVAILABILITY_NSA, }); - setupMockForGetConfig(bundle); + IwlanCarrierConfig.putTestConfigBundle(bundle); assertFalse(mSpyIwlanDataServiceProvider.isN1ModeSupported()); } @Test public void testMultipleAllowedNetworkTypeChangeInIdle_updateN1Mode() throws Exception { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); mockCarrierConfigForN1Mode(true); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, true); mockCallState(CALL_STATE_IDLE); mockSetupDataCallWithPduSessionId(0); updatePreferredNetworkType(NETWORK_TYPE_BITMASK_NR); @@ -2175,8 +2176,10 @@ public class IwlanDataServiceTest { @Test public void testMultipleAllowedNetworkTypeChangeInCall_preferenceChanged_updateAfterCallEnds() throws Exception { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); mockCarrierConfigForN1Mode(true); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, true); + mockCallState(CALL_STATE_RINGING); mockSetupDataCallWithPduSessionId(0); updatePreferredNetworkType(NETWORK_TYPE_BITMASK_NR); @@ -2208,8 +2211,10 @@ public class IwlanDataServiceTest { @Test public void testMultipleAllowedNetworkTypeChangeInCall_preferenceNotChanged_noUpdate() throws Exception { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); mockCarrierConfigForN1Mode(true); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, true); + mockCallState(CALL_STATE_RINGING); mockSetupDataCallWithPduSessionId(0); updatePreferredNetworkType(NETWORK_TYPE_BITMASK_NR); @@ -2234,8 +2239,10 @@ public class IwlanDataServiceTest { @Test public void testOnAllowedNetworkTypeChange_flagDisabled_noTunnelClose() { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(false); mockCarrierConfigForN1Mode(true); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, false); + mockCallState(CALL_STATE_IDLE); mockSetupDataCallWithPduSessionId(0); updatePreferredNetworkType(NETWORK_TYPE_BITMASK_NR); @@ -2246,8 +2253,10 @@ public class IwlanDataServiceTest { @Test public void testOnAllowedNetworkTypeChange_n1ModeNotSupported_noTunnelClose() { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); mockCarrierConfigForN1Mode(false); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, true); + mockCallState(CALL_STATE_IDLE); mockSetupDataCallWithPduSessionId(0); updatePreferredNetworkType(NETWORK_TYPE_BITMASK_NR); @@ -2258,8 +2267,10 @@ public class IwlanDataServiceTest { @Test public void testN1ModeNotSupported_tunnelBringupWithNoN1ModeCapability() { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); mockCarrierConfigForN1Mode(false); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, true); + mockSetupDataCallWithPduSessionId(1); ArgumentCaptor<TunnelSetupRequest> tunnelSetupRequestCaptor = @@ -2272,8 +2283,10 @@ public class IwlanDataServiceTest { @Test public void testNoN1ModeCapabilityInOngoingDataCall_newTunnelBringup_doNotIncludeN1() { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); mockCarrierConfigForN1Mode(true); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_UPDATE_N1_MODE_ON_UI_CHANGE_BOOL, true); + mockSetupDataCallWithPduSessionId(0); ArgumentCaptor<TunnelSetupRequest> tunnelSetupRequestCaptor = @@ -2325,6 +2338,7 @@ public class IwlanDataServiceTest { @Test public void testN1ModeForEmergencySession() { int pduSessionId = 5; + updatePreferredNetworkType(NETWORK_TYPE_BITMASK_NR); DataProfile dp = buildDataProfile(ApnSetting.TYPE_EMERGENCY); verifySetupDataCallRequestHandled(pduSessionId, dp); @@ -2338,11 +2352,9 @@ public class IwlanDataServiceTest { @Test public void testN1ModeExclusionForEmergencySession() { - when(IwlanCarrierConfig.getConfigBoolean( - mMockContext, - DEFAULT_SLOT_INDEX, - IwlanCarrierConfig.KEY_N1_MODE_EXCLUSION_FOR_EMERGENCY_SESSION_BOOL)) - .thenReturn(true); + IwlanCarrierConfig.putTestConfigBoolean( + IwlanCarrierConfig.KEY_N1_MODE_EXCLUSION_FOR_EMERGENCY_SESSION_BOOL, true); + updatePreferredNetworkType(NETWORK_TYPE_BITMASK_NR); DataProfile dp = buildDataProfile(ApnSetting.TYPE_EMERGENCY); verifySetupDataCallRequestHandled(5 /* pduSessionId */, dp); diff --git a/test/com/google/android/iwlan/IwlanEventListenerTest.java b/test/com/google/android/iwlan/IwlanEventListenerTest.java index a922a10..5999872 100644 --- a/test/com/google/android/iwlan/IwlanEventListenerTest.java +++ b/test/com/google/android/iwlan/IwlanEventListenerTest.java @@ -368,8 +368,6 @@ public class IwlanEventListenerTest { @SuppressLint("MissingPermission") @Test public void testDisable5gViaUi() throws Exception { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); - when(mMockHandler.obtainMessage( eq(IwlanEventListener.PREFERRED_NETWORK_TYPE_CHANGED_EVENT), eq(DEFAULT_SLOT_INDEX), @@ -393,8 +391,6 @@ public class IwlanEventListenerTest { @SuppressLint("MissingPermission") @Test public void testEnable5gViaUi() throws Exception { - when(mFakeFeatureFlags.updateN1ModeOnUiChange()).thenReturn(true); - when(mMockHandler.obtainMessage( eq(IwlanEventListener.PREFERRED_NETWORK_TYPE_CHANGED_EVENT), eq(DEFAULT_SLOT_INDEX), diff --git a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java index b7004e7..1829047 100644 --- a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java +++ b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java @@ -16,6 +16,8 @@ package com.google.android.iwlan.epdg; +import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_UNKNOWN; + import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -553,7 +555,8 @@ public class EpdgTunnelManagerTest { testApnName, false /*forceClose*/, mMockIwlanTunnelCallback, - mMockIwlanTunnelMetrics); + mMockIwlanTunnelMetrics, + BRINGDOWN_REASON_UNKNOWN); mTestLooper.dispatchAll(); verify(mEpdgTunnelManager).closePendingRequestsForApn(eq(testApnName)); @@ -582,7 +585,8 @@ public class EpdgTunnelManagerTest { testApnName, true /*forceClose*/, mMockIwlanTunnelCallback, - mMockIwlanTunnelMetrics); + mMockIwlanTunnelMetrics, + BRINGDOWN_REASON_UNKNOWN); mTestLooper.dispatchAll(); verify(mMockIkeSession).kill(); @@ -606,7 +610,8 @@ public class EpdgTunnelManagerTest { testApnName, false /*forceClose*/, mMockIwlanTunnelCallback, - mMockIwlanTunnelMetrics); + mMockIwlanTunnelMetrics, + BRINGDOWN_REASON_UNKNOWN); mTestLooper.dispatchAll(); verify(mMockIkeSession).close(); @@ -2091,7 +2096,8 @@ public class EpdgTunnelManagerTest { TEST_APN_NAME, false /*forceClose*/, mMockIwlanTunnelCallback, - mMockIwlanTunnelMetrics); + mMockIwlanTunnelMetrics, + BRINGDOWN_REASON_UNKNOWN); mTestLooper.dispatchAll(); verify(mMockIwlanTunnelCallback, times(1)) |