summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-28 21:17:22 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-28 21:17:22 +0000
commit2cf8324e2a9b81e3aed24131a2503fbff5043c24 (patch)
tree1bc4b29252594d3dcc121c226fd85349ff0a66f1
parentbe65dcf7412c135efdc42a1bafa23f1bc9c73eb3 (diff)
parent792a63cc312aebbbb05d0dec01d71b0e003ecf7f (diff)
downloadIwlan-simpleperf-release.tar.gz
Snap for 11510257 from 792a63cc312aebbbb05d0dec01d71b0e003ecf7f to simpleperf-releasesimpleperf-release
Change-Id: Ifb92b91cbda5dec7b0ef8670b4f807db8c7ba7d2
-rw-r--r--Android.bp7
-rw-r--r--OWNERS2
-rw-r--r--src/com/google/android/iwlan/IwlanCarrierConfig.java93
-rw-r--r--src/com/google/android/iwlan/IwlanDataService.java50
-rw-r--r--src/com/google/android/iwlan/IwlanEventListener.java4
-rw-r--r--src/com/google/android/iwlan/epdg/EpdgSelector.java4
-rw-r--r--src/com/google/android/iwlan/epdg/EpdgTunnelManager.java34
-rw-r--r--test/com/google/android/iwlan/IwlanDataServiceTest.java108
-rw-r--r--test/com/google/android/iwlan/IwlanEventListenerTest.java4
-rw-r--r--test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java14
10 files changed, 217 insertions, 103 deletions
diff --git a/Android.bp b/Android.bp
index f9d0c76..5071860 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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"],
diff --git a/OWNERS b/OWNERS
index 54d6c0b..0d92786 100644
--- a/OWNERS
+++ b/OWNERS
@@ -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))