Revert "Revert "[eSIM BootStrap Support] Support esim bootstrap ..."
Revert submission 25285161-revert-24820655-esim_profile_support_v1.0-APHOXMVQGQ
Reason for revert: With CTS issue fix
Reverted changes: /q/submissionid:25285161-revert-24820655-esim_profile_support_v1.0-APHOXMVQGQ
Bug: 309633531
Test: atest DataNetworkControllerTest DataProfileManagerTest
TelephonyDatabaseHelperTest CtsTelephonyTestCases
Change-Id: I52f75484bc131220132d9c3400fb88a64c694e5a
diff --git a/flags/uicc.aconfig b/flags/uicc.aconfig
index 39b344b..3ef2301 100644
--- a/flags/uicc.aconfig
+++ b/flags/uicc.aconfig
@@ -1,4 +1,11 @@
package: "com.android.internal.telephony.flags"
+
+flag {
+ name: "esim_bootstrap_provisioning_flag"
+ namespace: "telephony"
+ description: "This flag controls eSIM Bootstrap provisioning feature support."
+ bug:"298567545"
+}
flag {
name: "imsi_key_retry_download_on_phone_unlock"
namespace: "telephony"
diff --git a/src/java/com/android/internal/telephony/data/DataNetwork.java b/src/java/com/android/internal/telephony/data/DataNetwork.java
index 0c5c9cb..4cf5ef9 100644
--- a/src/java/com/android/internal/telephony/data/DataNetwork.java
+++ b/src/java/com/android/internal/telephony/data/DataNetwork.java
@@ -2290,6 +2290,10 @@
}
}
+ if (mDataNetworkController.isEsimBootStrapProvisioningActivated()) {
+ builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
+ }
+
// If one of the capabilities are for special use, for example, IMS, CBS, then this
// network should be restricted, regardless data is enabled or not.
if (NetworkCapabilitiesUtils.inferRestrictedCapability(builder.build())
@@ -3318,7 +3322,8 @@
TelephonyNetworkRequest networkRequest = mAttachedNetworkRequestList.get(0);
DataProfile dataProfile = mDataNetworkController.getDataProfileManager()
.getDataProfileForNetworkRequest(networkRequest, targetNetworkType,
- mPhone.getServiceState().isUsingNonTerrestrialNetwork(), false);
+ mPhone.getServiceState().isUsingNonTerrestrialNetwork(),
+ mDataNetworkController.isEsimBootStrapProvisioningActivated(), false);
// Some carriers have different profiles between cellular and IWLAN. We need to
// dynamically switch profile, but only when those profiles have same APN name.
if (dataProfile != null && dataProfile.getApnSetting() != null
diff --git a/src/java/com/android/internal/telephony/data/DataNetworkController.java b/src/java/com/android/internal/telephony/data/DataNetworkController.java
index 2d91967..c29afa6 100644
--- a/src/java/com/android/internal/telephony/data/DataNetworkController.java
+++ b/src/java/com/android/internal/telephony/data/DataNetworkController.java
@@ -101,6 +101,8 @@
import com.android.internal.telephony.data.LinkBandwidthEstimator.LinkBandwidthEstimatorCallback;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.ims.ImsResolver;
+import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.telephony.Rlog;
@@ -1330,6 +1332,7 @@
.getDataProfileForNetworkRequest(requestList.getFirst(),
TelephonyManager.NETWORK_TYPE_IWLAN,
mServiceState.isUsingNonTerrestrialNetwork(),
+ isEsimBootStrapProvisioningActivated(),
false/*ignorePermanentFailure*/);
if (candidate != null && !dataNetwork.getDataProfile().equals(candidate)) {
logv("But skipped because found better data profile " + candidate
@@ -1494,7 +1497,8 @@
evaluation.addDataAllowedReason(DataAllowedReason.EMERGENCY_REQUEST);
evaluation.setCandidateDataProfile(mDataProfileManager.getDataProfileForNetworkRequest(
networkRequest, getDataNetworkType(transport),
- mServiceState.isUsingNonTerrestrialNetwork(), true));
+ mServiceState.isUsingNonTerrestrialNetwork(),
+ isEsimBootStrapProvisioningActivated(), true));
networkRequest.setEvaluation(evaluation);
log(evaluation.toString());
return evaluation;
@@ -1653,6 +1657,7 @@
DataProfile dataProfile = mDataProfileManager
.getDataProfileForNetworkRequest(networkRequest, networkType,
mServiceState.isUsingNonTerrestrialNetwork(),
+ isEsimBootStrapProvisioningActivated(),
// If the evaluation is due to environmental changes, then we should ignore
// the permanent failure reached earlier.
reason.isConditionBased());
@@ -2272,6 +2277,22 @@
}
/**
+ * Check if the device is in eSIM bootstrap provisioning state.
+ *
+ * @return {@code true} if the device is under eSIM bootstrap provisioning.
+ */
+ public boolean isEsimBootStrapProvisioningActivated() {
+ if (!mFeatureFlags.esimBootstrapProvisioningFlag()) {
+ return false;
+ }
+
+ SubscriptionInfoInternal subInfo = SubscriptionManagerService.getInstance()
+ .getSubscriptionInfoInternal(mPhone.getSubId());
+ return subInfo != null
+ && subInfo.getProfileClass() == SubscriptionManager.PROFILE_CLASS_PROVISIONING;
+ }
+
+ /**
* Register for IMS feature registration state.
*
* @param subId The subscription index.
diff --git a/src/java/com/android/internal/telephony/data/DataProfileManager.java b/src/java/com/android/internal/telephony/data/DataProfileManager.java
index 273dc8b..df1fc92 100644
--- a/src/java/com/android/internal/telephony/data/DataProfileManager.java
+++ b/src/java/com/android/internal/telephony/data/DataProfileManager.java
@@ -255,6 +255,7 @@
cursor.close();
return dataProfile;
}
+
/**
* Update all data profiles, including preferred data profile, and initial attach data profile.
* Also send those profiles down to the modem if needed.
@@ -640,12 +641,12 @@
*/
public @Nullable DataProfile getDataProfileForNetworkRequest(
@NonNull TelephonyNetworkRequest networkRequest, @NetworkType int networkType,
- boolean isNtn, boolean ignorePermanentFailure) {
+ boolean isNtn, boolean isEsimBootstrapProvisioning, boolean ignorePermanentFailure) {
ApnSetting apnSetting = null;
if (networkRequest.hasAttribute(TelephonyNetworkRequest
.CAPABILITY_ATTRIBUTE_APN_SETTING)) {
apnSetting = getApnSettingForNetworkRequest(networkRequest, networkType, isNtn,
- ignorePermanentFailure);
+ isEsimBootstrapProvisioning, ignorePermanentFailure);
}
TrafficDescriptor.Builder trafficDescriptorBuilder = new TrafficDescriptor.Builder();
@@ -711,48 +712,52 @@
*/
private @Nullable ApnSetting getApnSettingForNetworkRequest(
@NonNull TelephonyNetworkRequest networkRequest, @NetworkType int networkType,
- boolean isNtn, boolean ignorePermanentFailure) {
+ boolean isNtn, boolean isEsimBootStrapProvisioning, boolean ignorePermanentFailure) {
if (!networkRequest.hasAttribute(
TelephonyNetworkRequest.CAPABILITY_ATTRIBUTE_APN_SETTING)) {
loge("Network request does not have APN setting attribute.");
return null;
}
- if (mFeatureFlags.carrierEnabledSatelliteFlag()) {
- // If the preferred data profile can be used, always use it if it can satisfy the
- // network request with current network type (even though it's been marked as permanent
- // failed.)
- if (mPreferredDataProfile != null
- && networkRequest.canBeSatisfiedBy(mPreferredDataProfile)
- && mPreferredDataProfile.getApnSetting() != null
- && mPreferredDataProfile.getApnSetting().canSupportNetworkType(networkType)
- && ((isNtn && mPreferredDataProfile.getApnSetting().isForInfrastructure(
- ApnSetting.INFRASTRUCTURE_SATELLITE))
- || (!isNtn && mPreferredDataProfile.getApnSetting().isForInfrastructure(
- ApnSetting.INFRASTRUCTURE_CELLULAR)))) {
- if (ignorePermanentFailure || !mPreferredDataProfile.getApnSetting()
- .getPermanentFailed()) {
- return mPreferredDataProfile.getApnSetting();
+ // if esim bootstrap provisioning in progress, do not apply preferred data profile
+ if (!isEsimBootStrapProvisioning) {
+ if (mFeatureFlags.carrierEnabledSatelliteFlag()) {
+ // If the preferred data profile can be used, always use it if it can satisfy the
+ // network request with current network type (even though it's been marked as
+ // permanent failed.)
+ if (mPreferredDataProfile != null
+ && networkRequest.canBeSatisfiedBy(mPreferredDataProfile)
+ && mPreferredDataProfile.getApnSetting() != null
+ && mPreferredDataProfile.getApnSetting().canSupportNetworkType(networkType)
+ && ((isNtn && mPreferredDataProfile.getApnSetting().isForInfrastructure(
+ ApnSetting.INFRASTRUCTURE_SATELLITE))
+ || (!isNtn && mPreferredDataProfile.getApnSetting().isForInfrastructure(
+ ApnSetting.INFRASTRUCTURE_CELLULAR)))) {
+ if (ignorePermanentFailure || !mPreferredDataProfile.getApnSetting()
+ .getPermanentFailed()) {
+ return mPreferredDataProfile.getApnSetting();
+ }
+ log("The preferred data profile is permanently failed. Only condition based "
+ + "retry can happen.");
+ return null;
}
- log("The preferred data profile is permanently failed. Only condition based "
- + "retry can happen.");
- return null;
- }
- } else {
- // If the preferred data profile can be used, always use it if it can satisfy the
- // network request with current network type (even though it's been marked as permanent
- // failed.)
- if (mPreferredDataProfile != null
- && networkRequest.canBeSatisfiedBy(mPreferredDataProfile)
- && mPreferredDataProfile.getApnSetting() != null
- && mPreferredDataProfile.getApnSetting().canSupportNetworkType(networkType)) {
- if (ignorePermanentFailure || !mPreferredDataProfile.getApnSetting()
- .getPermanentFailed()) {
- return mPreferredDataProfile.getApnSetting();
+ } else {
+ // If the preferred data profile can be used, always use it if it can satisfy the
+ // network request with current network type (even though it's been marked as
+ // permanent failed.)
+ if (mPreferredDataProfile != null
+ && networkRequest.canBeSatisfiedBy(mPreferredDataProfile)
+ && mPreferredDataProfile.getApnSetting() != null
+ && mPreferredDataProfile.getApnSetting()
+ .canSupportNetworkType(networkType)) {
+ if (ignorePermanentFailure || !mPreferredDataProfile.getApnSetting()
+ .getPermanentFailed()) {
+ return mPreferredDataProfile.getApnSetting();
+ }
+ log("The preferred data profile is permanently failed. Only condition based "
+ + "retry can happen.");
+ return null;
}
- log("The preferred data profile is permanently failed. Only condition based "
- + "retry can happen.");
- return null;
}
}
@@ -778,6 +783,8 @@
.filter((dp) -> {
if (dp.getApnSetting() == null) return false;
if (!dp.getApnSetting().canSupportNetworkType(networkType)) return false;
+ if (isEsimBootStrapProvisioning
+ != dp.getApnSetting().isEsimBootstrapProvisioning()) return false;
if (mFeatureFlags.carrierEnabledSatelliteFlag()) {
if (isNtn && !dp.getApnSetting().isForInfrastructure(
ApnSetting.INFRASTRUCTURE_SATELLITE)) {
@@ -820,6 +827,10 @@
return null;
}
+ if (isEsimBootStrapProvisioning) {
+ log("Found esim bootstrap provisioning data profile for network request: "
+ + dataProfiles.get(0).getApnSetting());
+ }
return dataProfiles.get(0).getApnSetting();
}
@@ -865,7 +876,9 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_DUN)
.build(), mPhone);
return getDataProfileForNetworkRequest(networkRequest, networkType,
- mPhone.getServiceState().isUsingNonTerrestrialNetwork(), true) != null;
+ mPhone.getServiceState().isUsingNonTerrestrialNetwork(),
+ mDataNetworkController.isEsimBootStrapProvisioningActivated(),
+ true) != null;
}
/**
@@ -1040,6 +1053,8 @@
apnBuilder.setCarrierId(apn1.getCarrierId());
apnBuilder.setSkip464Xlat(apn1.getSkip464Xlat());
apnBuilder.setAlwaysOn(apn1.isAlwaysOn());
+ apnBuilder.setInfrastructureBitmask(apn1.getInfrastructureBitmask());
+ apnBuilder.setEsimBootstrapProvisioning(apn1.isEsimBootstrapProvisioning());
return new DataProfile.Builder()
.setApnSetting(apnBuilder.build())
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
index a09994b..01a82ba 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
@@ -415,6 +415,47 @@
.setPreferred(false)
.build();
+ private final DataProfile mEsimBootstrapDataProfile = new DataProfile.Builder()
+ .setApnSetting(new ApnSetting.Builder()
+ .setEntryName("ESIM BOOTSTRAP")
+ .setApnName("ESIM BOOTSTRAP")
+ .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT)
+ .setNetworkTypeBitmask((int) TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+ | (int) TelephonyManager.NETWORK_TYPE_BITMASK_NR)
+ .setCarrierEnabled(true)
+ .setEsimBootstrapProvisioning(true)
+ .build())
+ .setPreferred(false)
+ .build();
+
+ private final DataProfile mEsimBootstrapImsProfile = new DataProfile.Builder()
+ .setApnSetting(new ApnSetting.Builder()
+ .setEntryName("IMS BOOTSTRAP")
+ .setApnName("IMS BOOTSTRAP")
+ .setApnTypeBitmask(ApnSetting.TYPE_IMS)
+ .setNetworkTypeBitmask((int) TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+ | (int) TelephonyManager.NETWORK_TYPE_BITMASK_NR)
+ .setCarrierEnabled(true)
+ .setEsimBootstrapProvisioning(true)
+ .build())
+ .setPreferred(false)
+ .build();
+
+ private final DataProfile mEsimBootstrapRcsInfraStructureProfile =
+ new DataProfile.Builder()
+ .setApnSetting(new ApnSetting.Builder()
+ .setEntryName("INFRASTRUCTURE BOOTSTRAP")
+ .setApnName("INFRASTRUCTURE BOOTSTRAP")
+ .setApnTypeBitmask(ApnSetting.TYPE_RCS)
+ .setNetworkTypeBitmask((int) TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+ | (int) TelephonyManager.NETWORK_TYPE_BITMASK_NR)
+ .setCarrierEnabled(true)
+ .setInfrastructureBitmask(2)
+ .setEsimBootstrapProvisioning(true)
+ .build())
+ .setPreferred(false)
+ .build();
+
/** Data call response map. The first key is the transport type, the second key is the cid. */
private final Map<Integer, Map<Integer, DataCallResponse>> mDataCallResponses = new HashMap<>();
@@ -919,7 +960,8 @@
mGeneralPurposeDataProfileAlternative, mImsCellularDataProfile,
mImsIwlanDataProfile, mEmergencyDataProfile, mFotaDataProfile,
mTetheringDataProfile, mMmsOnWlanDataProfile, mLowLatencyDataProfile,
- mNtnDataProfile);
+ mNtnDataProfile, mEsimBootstrapDataProfile,
+ mEsimBootstrapImsProfile, mEsimBootstrapRcsInfraStructureProfile);
doAnswer(invocation -> {
DataProfile dp = (DataProfile) invocation.getArguments()[0];
@@ -951,7 +993,8 @@
(TelephonyNetworkRequest) invocation.getArguments()[0];
int networkType = (int) invocation.getArguments()[1];
boolean isNtn = (boolean) invocation.getArguments()[2];
- boolean ignorePermanentFailure = (boolean) invocation.getArguments()[3];
+ boolean isEsimBootstrapProvisioning = (boolean) invocation.getArguments()[3];
+ boolean ignorePermanentFailure = (boolean) invocation.getArguments()[4];
for (DataProfile dataProfile : profiles) {
ApnSetting apnSetting = dataProfile.getApnSetting();
@@ -960,20 +1003,24 @@
&& (apnSetting.getNetworkTypeBitmask() == 0
|| (apnSetting.getNetworkTypeBitmask()
& ServiceState.getBitmaskForTech(networkType)) != 0)
+ && (isEsimBootstrapProvisioning
+ == apnSetting.isEsimBootstrapProvisioning())
&& ((isNtn && apnSetting.isForInfrastructure(
- ApnSetting.INFRASTRUCTURE_SATELLITE))
- || ((!isNtn && apnSetting.isForInfrastructure(
- ApnSetting.INFRASTRUCTURE_CELLULAR))))
+ ApnSetting.INFRASTRUCTURE_SATELLITE))
+ || (!isNtn && apnSetting.isForInfrastructure(
+ ApnSetting.INFRASTRUCTURE_CELLULAR)))
&& (ignorePermanentFailure || !apnSetting.getPermanentFailed())) {
return dataProfile;
}
}
logd("Cannot find data profile to satisfy " + networkRequest + ", network type="
+ TelephonyManager.getNetworkTypeName(networkType) + ", ignorePermanentFailure="
- + ignorePermanentFailure + ", isNtn=" + isNtn);
+ + ignorePermanentFailure + ", isNtn=" + isNtn + ","
+ + "isEsimBootstrapProvisioning=" + isEsimBootstrapProvisioning);
return null;
}).when(mDataProfileManager).getDataProfileForNetworkRequest(
- any(TelephonyNetworkRequest.class), anyInt(), anyBoolean(), anyBoolean());
+ any(TelephonyNetworkRequest.class), anyInt(), anyBoolean(), anyBoolean(),
+ anyBoolean());
doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WWAN).when(mAccessNetworksManager)
.getPreferredTransportByNetworkCapability(anyInt());
@@ -1181,6 +1228,18 @@
+ dataNetworkList);
}
+ private void verifyConnectedNetworkHasNoDataProfile(@NonNull DataProfile dataProfile)
+ throws Exception {
+ List<DataNetwork> dataNetworkList = getDataNetworks();
+ for (DataNetwork dataNetwork : getDataNetworks()) {
+ if (dataNetwork.isConnected() && dataNetwork.getDataProfile().equals(dataProfile)) {
+ fail("network with " + dataProfile + " is connected. dataNetworkList="
+ + dataNetworkList);
+ }
+ }
+ return;
+ }
+
private void verifyAllDataDisconnected() throws Exception {
List<DataNetwork> dataNetworkList = getDataNetworks();
assertWithMessage("All data should be disconnected but it's not. " + dataNetworkList)
@@ -1255,7 +1314,8 @@
+ TelephonyManager.getNetworkTypeName(networkType));
return null;
}).when(mDataProfileManager).getDataProfileForNetworkRequest(
- any(TelephonyNetworkRequest.class), anyInt(), anyBoolean(), anyBoolean());
+ any(TelephonyNetworkRequest.class), anyInt(), anyBoolean(), anyBoolean(),
+ anyBoolean());
// verify the network still connects
verify(mMockedDataNetworkControllerCallback).onConnectedInternetDataNetworksChanged(any());
@@ -1300,7 +1360,7 @@
createDataCallResponse(1, DataCallResponse.LINK_STATUS_ACTIVE, tdList));
doReturn(mEnterpriseDataProfile).when(mDataProfileManager)
.getDataProfileForNetworkRequest(any(TelephonyNetworkRequest.class), anyInt(),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
NetworkCapabilities netCaps = new NetworkCapabilities();
netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE);
@@ -1515,7 +1575,7 @@
// Now RAT changes from UMTS to GSM
doReturn(null).when(mDataProfileManager).getDataProfileForNetworkRequest(
any(TelephonyNetworkRequest.class), eq(TelephonyManager.NETWORK_TYPE_GSM),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
serviceStateChanged(TelephonyManager.NETWORK_TYPE_GSM,
NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
verifyAllDataDisconnected();
@@ -1529,14 +1589,14 @@
// Now RAT changes from GSM to UMTS
doReturn(null).when(mDataProfileManager).getDataProfileForNetworkRequest(
any(TelephonyNetworkRequest.class), eq(TelephonyManager.NETWORK_TYPE_UMTS),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
serviceStateChanged(TelephonyManager.NETWORK_TYPE_UMTS,
NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
doReturn(mGeneralPurposeDataProfile).when(mDataProfileManager)
.getDataProfileForNetworkRequest(any(TelephonyNetworkRequest.class), anyInt(),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
// Now RAT changes from UMTS to LTE
serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE,
NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
@@ -3531,7 +3591,7 @@
createDataCallResponse(1, DataCallResponse.LINK_STATUS_ACTIVE, tdList));
doReturn(mEnterpriseDataProfile).when(mDataProfileManager)
.getDataProfileForNetworkRequest(any(TelephonyNetworkRequest.class), anyInt(),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
NetworkCapabilities netCaps = new NetworkCapabilities();
netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE);
@@ -4593,7 +4653,7 @@
createDataCallResponse(1, DataCallResponse.LINK_STATUS_ACTIVE, tdList));
doReturn(mEnterpriseDataProfile).when(mDataProfileManager)
.getDataProfileForNetworkRequest(any(TelephonyNetworkRequest.class), anyInt(),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest(
new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)
@@ -4631,7 +4691,7 @@
createDataCallResponse(2, DataCallResponse.LINK_STATUS_ACTIVE, tdList));
doReturn(mLowLatencyDataProfile).when(mDataProfileManager)
.getDataProfileForNetworkRequest(any(TelephonyNetworkRequest.class), anyInt(),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
processAllFutureMessages();
dataNetworkList = getDataNetworks();
@@ -4664,7 +4724,7 @@
// Mock the designated MMS profile when WLAN is preferred
doReturn(mMmsOnWlanDataProfile).when(mDataProfileManager).getDataProfileForNetworkRequest(
any(TelephonyNetworkRequest.class), eq(TelephonyManager.NETWORK_TYPE_IWLAN),
- anyBoolean(), anyBoolean());
+ anyBoolean(), anyBoolean(), anyBoolean());
setSuccessfulSetupDataResponse(mMockedWlanDataServiceManager,
createDataCallResponse(2, DataCallResponse.LINK_STATUS_ACTIVE));
@@ -4686,4 +4746,132 @@
processAllMessages();
verifyConnectedNetworkHasDataProfile(mNtnDataProfile);
}
+
+ @Test
+ public void testIsEsimBootStrapProvisioningActivatedWithFlagEnabledAndProvisioningClass() {
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+
+ assertThat(mDataNetworkControllerUT.isEsimBootStrapProvisioningActivated()).isTrue();
+ }
+
+ @Test
+ public void testIsEsimBootStrapProvisioningActivatedWithFlagEnabledAndNoProvisioningClass() {
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_UNSET).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+
+ assertThat(mDataNetworkControllerUT.isEsimBootStrapProvisioningActivated()).isFalse();
+ }
+
+ @Test
+ public void testIsEsimBootStrapProvisioningActivatedWithFlagDisabledAndNoProvisioningClass() {
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(false);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_UNSET).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+
+ assertThat(mDataNetworkControllerUT.isEsimBootStrapProvisioningActivated()).isFalse();
+ }
+
+ @Test
+ public void testIsEsimBootStrapProvisioningActivatedWithFlagDisabledAndProvisioningClass() {
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(false);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+
+ assertThat(mDataNetworkControllerUT.isEsimBootStrapProvisioningActivated()).isFalse();
+ }
+
+ @Test
+ public void testNetworkOnProvisioningProfileClass_WithFlagEnabled() throws Exception {
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+ serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE,
+ NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
+ mDataNetworkControllerUT.addNetworkRequest(
+ createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET));
+ processAllMessages();
+ verifyConnectedNetworkHasDataProfile(mEsimBootstrapDataProfile);
+
+ mDataNetworkControllerUT.addNetworkRequest(
+ createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_IMS,
+ NetworkCapabilities.NET_CAPABILITY_MMTEL));
+ setSuccessfulSetupDataResponse(mMockedDataServiceManagers
+ .get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN), 2);
+ processAllMessages();
+ verifyConnectedNetworkHasDataProfile(mEsimBootstrapImsProfile);
+
+ serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE,
+ NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
+ mDataNetworkControllerUT.addNetworkRequest(
+ createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_RCS));
+ processAllMessages();
+ verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_RCS);
+ }
+
+ @Test
+ public void testNetworkOnNonProvisioningProfileClass_WithFlagEnabled() throws Exception {
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_UNSET).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+ serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE,
+ NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
+ mDataNetworkControllerUT.addNetworkRequest(
+ createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET));
+ processAllMessages();
+ verifyConnectedNetworkHasNoDataProfile(mEsimBootstrapDataProfile);
+
+ mDataNetworkControllerUT.addNetworkRequest(
+ createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_IMS,
+ NetworkCapabilities.NET_CAPABILITY_MMTEL));
+ setSuccessfulSetupDataResponse(mMockedDataServiceManagers
+ .get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN), 2);
+ processAllMessages();
+ verifyConnectedNetworkHasNoDataProfile(mEsimBootstrapImsProfile);
+ }
+
+ @Test
+ public void testNtnNetworkOnProvisioningProfileClass_WithFlagEnabled() throws Exception {
+ when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true);
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+ mIsNonTerrestrialNetwork = true;
+ serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE,
+ NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
+ mDataNetworkControllerUT.addNetworkRequest(
+ createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_RCS));
+ processAllMessages();
+
+ assertThat(mDataNetworkControllerUT.isEsimBootStrapProvisioningActivated()).isTrue();
+ verifyConnectedNetworkHasNoDataProfile(mNtnDataProfile);
+ verifyConnectedNetworkHasDataProfile(mEsimBootstrapRcsInfraStructureProfile);
+ }
+
+ @Test
+ public void testNonNtnNetworkOnProvisioningProfileClass_WithFlagEnabled() throws Exception {
+ when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true);
+ when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true);
+ doReturn(new SubscriptionInfoInternal.Builder().setId(1)
+ .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING).build())
+ .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+ serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE,
+ NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
+ mDataNetworkControllerUT.addNetworkRequest(
+ createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_RCS));
+ processAllMessages();
+
+ assertThat(mDataNetworkControllerUT.isEsimBootStrapProvisioningActivated()).isTrue();
+ verifyConnectedNetworkHasNoDataProfile(mNtnDataProfile);
+ verifyConnectedNetworkHasNoDataProfile(mEsimBootstrapRcsInfraStructureProfile);
+ }
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java
index f9a11be..f8d22cd 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java
@@ -84,8 +84,12 @@
private static final String TETHERING_APN = "DUN_APN";
private static final String APN_SET_ID_1_APN = "APN_SET_ID_1_APN";
private static final String RCS_APN = "RCS_APN";
+ private static final String RCS_APN1 = "RCS_APN1";
private static final String APN_SET_ID_1_TETHERING_APN = "APN_SET_ID_1_TETHERING_APN";
private static final String MATCH_ALL_APN_SET_ID_IMS_APN = "MATCH_ALL_APN_SET_ID_IMS_APN";
+ private static final String ESIM_BOOTSTRAP_PROVISIONING_APN = "ESIM_BOOTSTRAP_PROVISIONING_APN";
+ private static final String TEST_BOOTSTRAP_APN =
+ "TEST_BOOTSTRAP_APN";
private static final String PLMN = "330123";
private static final int DEFAULT_APN_SET_ID = Telephony.Carriers.NO_APN_SET_ID;
private static final int APN_SET_ID_1 = 1;
@@ -137,7 +141,8 @@
Telephony.Carriers.CARRIER_ID,
Telephony.Carriers.SKIP_464XLAT,
Telephony.Carriers.ALWAYS_ON,
- Telephony.Carriers.INFRASTRUCTURE_BITMASK
+ Telephony.Carriers.INFRASTRUCTURE_BITMASK,
+ Telephony.Carriers.ESIM_BOOTSTRAP_PROVISIONING
};
private int mPreferredApnSet = 0;
@@ -177,7 +182,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
// default internet data profile for RAT CDMA, to test update preferred data profile
new Object[]{
@@ -213,7 +219,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
new Object[]{
2, // id
@@ -248,7 +255,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
new Object[]{
3, // id
@@ -283,7 +291,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
new Object[]{
4, // id
@@ -319,7 +328,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
// This APN entry is created to test de-duping.
new Object[]{
@@ -356,7 +366,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
new Object[]{
6, // id
@@ -392,7 +403,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
new Object[]{
7, // id
@@ -428,7 +440,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
new Object[]{
8, // id
@@ -464,7 +477,8 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 1 // INFRASTRUCTURE_CELLULAR
+ 1, // INFRASTRUCTURE_CELLULAR
+ 0 // esim_bootstrap_provisioning
},
new Object[]{
9, // id
@@ -500,7 +514,156 @@
-1, // carrier_id
-1, // skip_464xlat
0, // always_on
- 2 // INFRASTRUCTURE_SATELLITE
+ 2, // INFRASTRUCTURE_SATELLITE
+ 0 // esim_bootstrap_provisioning
+ },
+ new Object[]{
+ 10, // id
+ PLMN, // numeric
+ ESIM_BOOTSTRAP_PROVISIONING_APN, // name
+ ESIM_BOOTSTRAP_PROVISIONING_APN, // apn
+ "", // proxy
+ "", // port
+ "", // mmsc
+ "", // mmsproxy
+ "", // mmsport
+ "", // user
+ "", // password
+ -1, // authtype
+ "default,supl", // types
+ "IPV4V6", // protocol
+ "IPV4V6", // roaming_protocol
+ 1, // carrier_enabled
+ 0, // profile_id
+ 1, // modem_cognitive
+ 0, // max_conns
+ 0, // wait_time
+ 0, // max_conns_time
+ 0, // mtu
+ 1280, // mtu_v4
+ 1280, // mtu_v6
+ "", // mvno_type
+ "", // mnvo_match_data
+ TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+ | TelephonyManager.NETWORK_TYPE_BITMASK_NR, // network_type_bitmask
+ 0, // lingering_network_type_bitmask
+ MATCH_ALL_APN_SET_ID, // apn_set_id
+ -1, // carrier_id
+ -1, // skip_464xlat
+ 0, // always_on
+ 1, // INFRASTRUCTURE_CELLULAR
+ 1 // esim_bootstrap_provisioning
+ },
+ new Object[]{
+ 11, // id
+ PLMN, // numeric
+ IMS_APN, // name
+ IMS_APN, // apn
+ "", // proxy
+ "", // port
+ "", // mmsc
+ "", // mmsproxy
+ "", // mmsport
+ "", // user
+ "", // password
+ -1, // authtype
+ "ims", // types
+ "IPV4V6", // protocol
+ "IPV4V6", // roaming_protocol
+ 1, // carrier_enabled
+ 0, // profile_id
+ 1, // modem_cognitive
+ 0, // max_conns
+ 0, // wait_time
+ 0, // max_conns_time
+ 0, // mtu
+ 1280, // mtu_v4
+ 1280, // mtu_v6
+ "", // mvno_type
+ "", // mnvo_match_data
+ TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+ | TelephonyManager.NETWORK_TYPE_BITMASK_NR, // network_type_bitmask
+ 0, // lingering_network_type_bitmask
+ MATCH_ALL_APN_SET_ID, // apn_set_id
+ -1, // carrier_id
+ -1, // skip_464xlat
+ 0, // always_on
+ 1, // INFRASTRUCTURE_SATELLITE
+ 1 // esim_bootstrap_provisioning
+ },
+ new Object[]{
+ 12, // id
+ PLMN, // numeric
+ TEST_BOOTSTRAP_APN, // name
+ TEST_BOOTSTRAP_APN, // apn
+ "", // proxy
+ "", // port
+ "", // mmsc
+ "", // mmsproxy
+ "", // mmsport
+ "", // user
+ "", // password
+ -1, // authtype
+ "default", // types
+ "IPV4V6", // protocol
+ "IPV4V6", // roaming_protocol
+ 1, // carrier_enabled
+ 0, // profile_id
+ 1, // modem_cognitive
+ 0, // max_conns
+ 0, // wait_time
+ 0, // max_conns_time
+ 0, // mtu
+ 1280, // mtu_v4
+ 1280, // mtu_v6
+ "", // mvno_type
+ "", // mnvo_match_data
+ TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+ | TelephonyManager.NETWORK_TYPE_BITMASK_NR, // network_type_bitmask
+ 0, // lingering_network_type_bitmask
+ MATCH_ALL_APN_SET_ID, // apn_set_id
+ -1, // carrier_id
+ -1, // skip_464xlat
+ 0, // always_on
+ 2, // INFRASTRUCTURE_SATELLITE
+ 1 // esim_bootstrap_provisioning
+ },
+ new Object[]{
+ 13, // id
+ PLMN, // numeric
+ RCS_APN1, // name
+ RCS_APN1, // apn
+ "", // proxy
+ "", // port
+ "", // mmsc
+ "", // mmsproxy
+ "", // mmsport
+ "", // user
+ "", // password
+ -1, // authtype
+ "rcs", // types
+ "IPV4V6", // protocol
+ "IPV4V6", // roaming_protocol
+ 1, // carrier_enabled
+ 0, // profile_id
+ 1, // modem_cognitive
+ 0, // max_conns
+ 0, // wait_time
+ 0, // max_conns_time
+ 0, // mtu
+ 1280, // mtu_v4
+ 1280, // mtu_v6
+ "", // mvno_type
+ "", // mnvo_match_data
+ TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+ | TelephonyManager.NETWORK_TYPE_BITMASK_NR, // network_type_bitmask
+ 0, // lingering_network_type_bitmask
+ DEFAULT_APN_SET_ID, // apn_set_id
+ -1, // carrier_id
+ -1, // skip_464xlat
+ 0, // always_on
+ 2, // INFRASTRUCTURE_SATELLITE
+ 1 // esim_bootstrap_provisioning
}
);
@@ -716,7 +879,7 @@
.build();
TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone);
DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dp.canSatisfy(tnr.getCapabilities())).isTrue();
assertThat(dp.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
@@ -727,7 +890,7 @@
.build();
tnr = new TelephonyNetworkRequest(request, mPhone);
dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dp.canSatisfy(tnr.getCapabilities())).isTrue();
assertThat(dp.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
@@ -737,7 +900,7 @@
.build();
tnr = new TelephonyNetworkRequest(request, mPhone);
dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dp.canSatisfy(tnr.getCapabilities())).isTrue();
assertThat(dp.getApnSetting().getApnName()).isEqualTo(IMS_APN);
@@ -746,7 +909,7 @@
.build();
tnr = new TelephonyNetworkRequest(request, mPhone);
dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dp).isNull();
doReturn(new NetworkRegistrationInfo.Builder()
@@ -759,7 +922,7 @@
.build();
tnr = new TelephonyNetworkRequest(request, mPhone);
dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_NR, false, false);
+ TelephonyManager.NETWORK_TYPE_NR, false, false , false);
assertThat(dp.canSatisfy(tnr.getCapabilities())).isTrue();
assertThat(dp.getApnSetting().getApnName()).isEqualTo(TETHERING_APN);
}
@@ -771,7 +934,7 @@
.build();
TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone);
DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_GSM, false, false);
+ TelephonyManager.NETWORK_TYPE_GSM, false, false, false);
// Should not find data profile due to RAT incompatible.
assertThat(dp).isNull();
}
@@ -783,14 +946,14 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
logd("Set setLastSetupTimestamp on " + dataProfile);
dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime());
// See if another one can be returned.
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN1);
}
@@ -801,7 +964,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting()).isNull();
OsAppId osAppId = new OsAppId(dataProfile.getTrafficDescriptor().getOsAppId());
@@ -814,7 +977,7 @@
.addEnterpriseId(2), ConnectivityManager.TYPE_NONE,
0, NetworkRequest.Type.REQUEST), mPhone);
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting()).isNull();
osAppId = new OsAppId(dataProfile.getTrafficDescriptor().getOsAppId());
@@ -830,7 +993,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting()).isNull();
OsAppId osAppId = new OsAppId(dataProfile.getTrafficDescriptor().getOsAppId());
@@ -846,7 +1009,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting()).isNull();
OsAppId osAppId = new OsAppId(dataProfile.getTrafficDescriptor().getOsAppId());
@@ -864,7 +1027,7 @@
.build();
TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone);
DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, true, false);
+ TelephonyManager.NETWORK_TYPE_LTE, true, false, false);
assertThat(dp.canSatisfy(tnr.getCapabilities())).isTrue();
assertThat(dp.getApnSetting().getApnName()).isEqualTo(RCS_APN);
@@ -877,7 +1040,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime());
dataProfile.setPreferred(true);
@@ -891,14 +1054,14 @@
// Test See if the same one can be returned.
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();
// Test Another default internet network connected due to RAT changed. Verify the preferred
// data profile is updated.
DataProfile legacyRatDataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_CDMA, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_CDMA, false, false, false);
DataNetwork legacyRatInternetNetwork = Mockito.mock(DataNetwork.class);
doReturn(legacyRatDataProfile).when(legacyRatInternetNetwork).getDataProfile();
doReturn(new DataNetworkController.NetworkRequestList(List.of(tnr)))
@@ -917,7 +1080,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_DUN)
.build(), mPhone);
DataProfile dunDataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- dunTnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ dunTnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
DataNetwork dunInternetNetwork = Mockito.mock(DataNetwork.class);
doReturn(dunDataProfile).when(dunInternetNetwork).getDataProfile();
doReturn(new DataNetworkController.NetworkRequestList(List.of(dunTnr)))
@@ -1016,7 +1179,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile).isNull();
// expect default EIMS when SIM absent
@@ -1025,7 +1188,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS)
.build(), mPhone);
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo("sos");
// expect no default IMS when SIM absent
@@ -1034,7 +1197,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
.build(), mPhone);
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile).isEqualTo(null);
// Verify null as initial attached data profile is sent to modem
@@ -1064,7 +1227,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile).isNull();
// expect default EIMS when SIM absent
@@ -1073,7 +1236,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS)
.build(), mPhone);
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo("sos");
// expect no default IMS when SIM absent
@@ -1082,7 +1245,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
.build(), mPhone);
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile).isEqualTo(null);
// Verify in legacy mode, null IA should NOT be sent to modem
@@ -1117,7 +1280,7 @@
new TelephonyNetworkRequest(new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
.build(), mPhone),
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(IMS_APN);
}
@@ -1129,7 +1292,7 @@
TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone);
// This should get the merged data profile after deduping.
DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dp.canSatisfy(NetworkCapabilities.NET_CAPABILITY_INTERNET)).isTrue();
}
@@ -1266,7 +1429,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApn()).isEqualTo("sos");
assertThat(dataProfile.getTrafficDescriptor().getDataNetworkName()).isEqualTo("sos");
@@ -1283,7 +1446,7 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build(), mPhone);
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime());
DataNetwork internetNetwork = Mockito.mock(DataNetwork.class);
@@ -1354,7 +1517,7 @@
// The carrier configured data profile should be the preferred APN after APN reset
DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN1);
assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();
@@ -1367,7 +1530,7 @@
// The carrier configured data profile should be the preferred APN after APN reset
dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
- tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN1);
assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();
}
@@ -1648,7 +1811,7 @@
.build();
TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone);
DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
// Mark the APN as permanent failed.
dp.getApnSetting().setPermanentFailed(true);
@@ -1656,7 +1819,8 @@
// Data profile manager should return a different data profile for setup as the previous
// data profile has been marked as permanent failed.
assertThat(mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false)).isNotEqualTo(dp);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false))
+ .isNotEqualTo(dp);
}
@Test
@@ -1671,7 +1835,7 @@
.build();
TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone);
DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false);
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false);
// Mark the APN as permanent failed.
dp.getApnSetting().setPermanentFailed(true);
@@ -1679,7 +1843,8 @@
// Since preferred APN is already set, and that data profile was marked as permanent failed,
// so this should result in getting nothing.
assertThat(mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr,
- TelephonyManager.NETWORK_TYPE_LTE, false, false)).isNull();
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false))
+ .isNull();
}
private void changeSimStateTo(@TelephonyManager.SimState int simState) {
@@ -1700,6 +1865,98 @@
// Verify the we can get the previously permanent failed data profile again.
assertThat(mDataProfileManagerUT.getDataProfileForNetworkRequest(
new TelephonyNetworkRequest(request, mPhone),
- TelephonyManager.NETWORK_TYPE_LTE, false, false)).isNotNull();
+ TelephonyManager.NETWORK_TYPE_LTE, false, false, false))
+ .isNotNull();
}
+
+ @Test
+ public void testDifferentNetworkRequestProfilesOnEsimBootStrapProvisioning() {
+ Mockito.clearInvocations(mDataProfileManagerCallback);
+ Mockito.clearInvocations(mMockedWwanDataServiceManager);
+ when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true);
+
+ // SIM inserted
+ mDataProfileManagerUT.obtainMessage(3 /* EVENT_SIM_REFRESH */).sendToTarget();
+ processAllMessages();
+
+ // expect default profile for internet network request, when esim bootstrap provisioning
+ // flag is enabled at data profile, during esim bootstrap provisioning
+ TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ .build(), mPhone);
+ DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false);
+ assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(
+ "ESIM_BOOTSTRAP_PROVISIONING_APN");
+
+ // expect IMS profile for ims network request, when esim bootstrap provisioning flag
+ // is enabled at data profile, during esim bootstrap provisioning
+ tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
+ .build(), mPhone);
+ dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false);
+ assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo("IMS_APN");
+
+ // expect no mms profile for mms network request, when esim bootstrap provisioning flag
+ // is disabled at data profile, during esim bootstrap provisioning
+ tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS)
+ .build(), mPhone);
+ dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false);
+ assertThat(dataProfile).isEqualTo(null);
+
+ // expect no rcs profile for rcs network request, when esim bootstrap provisioning flag
+ // is disabled at data profile, during esim bootstrap provisioning
+ tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS)
+ .build(), mPhone);
+ dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false);
+ assertThat(dataProfile).isEqualTo(null);
+ }
+
+ @Test
+ public void testEsimBootstrapProvisioningEnabled_MultipleProfile() {
+ Mockito.clearInvocations(mDataProfileManagerCallback);
+ Mockito.clearInvocations(mMockedWwanDataServiceManager);
+
+ // SIM inserted
+ mDataProfileManagerUT.obtainMessage(3 /* EVENT_SIM_REFRESH */).sendToTarget();
+ processAllMessages();
+
+ // expect initial default profile entry selected for internet network request, when
+ // multiple esim bootstrap provisioning flag is enabled at data profile for same apn
+ // type
+ TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ .build(), mPhone);
+ DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false);
+ assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(
+ ESIM_BOOTSTRAP_PROVISIONING_APN);
+ }
+
+ @Test
+ public void testInfrastructureProfileOnEsimBootStrapProvisioning() {
+ Mockito.clearInvocations(mDataProfileManagerCallback);
+ Mockito.clearInvocations(mMockedWwanDataServiceManager);
+ when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true);
+
+ // SIM inserted
+ mDataProfileManagerUT.obtainMessage(3 /* EVENT_SIM_REFRESH */).sendToTarget();
+ processAllMessages();
+
+ // expect initial default profile entry selected for internet network request, when
+ // multiple esim bootstrap provisioning flag is enabled at data profile for same apn
+ // type
+ TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS)
+ .build(), mPhone);
+ DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
+ tnr, TelephonyManager.NETWORK_TYPE_LTE, true, true, false);
+ assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(RCS_APN1);
+ }
+
}