Merge "Allow bring up MMTEL network in non-vope area if configured" into main
diff --git a/proto/src/persist_atoms.proto b/proto/src/persist_atoms.proto
index 722cb7c..993aa4d 100644
--- a/proto/src/persist_atoms.proto
+++ b/proto/src/persist_atoms.proto
@@ -427,6 +427,8 @@
optional int64 video_available_millis = 10;
optional int64 ut_capable_millis = 11;
optional int64 ut_available_millis = 12;
+ optional int64 registering_millis = 13;
+ optional int64 unregistered_millis = 14;
// Internal use only
optional int64 last_used_millis = 10001;
diff --git a/src/java/com/android/internal/telephony/metrics/ImsStats.java b/src/java/com/android/internal/telephony/metrics/ImsStats.java
index 427595f..2420602 100644
--- a/src/java/com/android/internal/telephony/metrics/ImsStats.java
+++ b/src/java/com/android/internal/telephony/metrics/ImsStats.java
@@ -197,7 +197,7 @@
@ImsRegistrationState private int mLastRegistrationState = REGISTRATION_STATE_NOT_REGISTERED;
private long mLastTimestamp;
- @Nullable private ImsRegistrationStats mLastRegistrationStats;
+ private ImsRegistrationStats mLastRegistrationStats;
@TransportType int mLastTransportType = AccessNetworkConstants.TRANSPORT_TYPE_INVALID;
// Available features are those reported by ImsService to be available for use.
private MmTelCapabilities mLastAvailableFeatures = new MmTelCapabilities();
@@ -210,6 +210,10 @@
public ImsStats(ImsPhone phone) {
mPhone = phone;
mStorage = PhoneFactory.getMetricsCollector().getAtomsStorage();
+
+ mLastRegistrationStats = getDefaultImsRegistrationStats();
+ updateImsRegistrationStats();
+ mLastTimestamp = getTimeMillis();
}
/**
@@ -221,40 +225,46 @@
public synchronized void conclude() {
long now = getTimeMillis();
- // Currently not tracking time spent on registering.
- if (mLastRegistrationState == REGISTRATION_STATE_REGISTERED) {
- ImsRegistrationStats stats = copyOf(mLastRegistrationStats);
- long duration = now - mLastTimestamp;
+ long duration = now - mLastTimestamp;
+ if (duration < MIN_REGISTRATION_DURATION_MILLIS) {
+ logw("conclude: discarding transient stats, duration=%d", duration);
+ } else {
+ ImsRegistrationStats stats = copyOfDimensionsOnly(mLastRegistrationStats);
- if (duration < MIN_REGISTRATION_DURATION_MILLIS) {
- logw("conclude: discarding transient stats, duration=%d", duration);
- } else {
- stats.registeredMillis = duration;
+ switch (mLastRegistrationState) {
+ case REGISTRATION_STATE_REGISTERED:
+ stats.registeredMillis = duration;
- stats.voiceAvailableMillis =
- mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_VOICE) ? duration : 0;
- stats.videoAvailableMillis =
- mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_VIDEO) ? duration : 0;
- stats.utAvailableMillis =
- mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_UT) ? duration : 0;
- stats.smsAvailableMillis =
- mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_SMS) ? duration : 0;
+ stats.voiceAvailableMillis =
+ mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_VOICE) ? duration : 0;
+ stats.videoAvailableMillis =
+ mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_VIDEO) ? duration : 0;
+ stats.utAvailableMillis =
+ mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_UT) ? duration : 0;
+ stats.smsAvailableMillis =
+ mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_SMS) ? duration : 0;
- MmTelCapabilities lastCapableFeatures =
- stats.rat == TelephonyManager.NETWORK_TYPE_IWLAN
- ? mLastWlanCapableFeatures
- : mLastWwanCapableFeatures;
- stats.voiceCapableMillis =
- lastCapableFeatures.isCapable(CAPABILITY_TYPE_VOICE) ? duration : 0;
- stats.videoCapableMillis =
- lastCapableFeatures.isCapable(CAPABILITY_TYPE_VIDEO) ? duration : 0;
- stats.utCapableMillis =
- lastCapableFeatures.isCapable(CAPABILITY_TYPE_UT) ? duration : 0;
- stats.smsCapableMillis =
- lastCapableFeatures.isCapable(CAPABILITY_TYPE_SMS) ? duration : 0;
-
- mStorage.addImsRegistrationStats(stats);
+ MmTelCapabilities lastCapableFeatures =
+ stats.rat == TelephonyManager.NETWORK_TYPE_IWLAN
+ ? mLastWlanCapableFeatures
+ : mLastWwanCapableFeatures;
+ stats.voiceCapableMillis =
+ lastCapableFeatures.isCapable(CAPABILITY_TYPE_VOICE) ? duration : 0;
+ stats.videoCapableMillis =
+ lastCapableFeatures.isCapable(CAPABILITY_TYPE_VIDEO) ? duration : 0;
+ stats.utCapableMillis =
+ lastCapableFeatures.isCapable(CAPABILITY_TYPE_UT) ? duration : 0;
+ stats.smsCapableMillis =
+ lastCapableFeatures.isCapable(CAPABILITY_TYPE_SMS) ? duration : 0;
+ break;
+ case REGISTRATION_STATE_REGISTERING:
+ stats.registeringMillis = duration;
+ break;
+ case REGISTRATION_STATE_NOT_REGISTERED:
+ stats.unregisteredMillis = duration;
+ break;
}
+ mStorage.addImsRegistrationStats(stats);
}
mLastTimestamp = now;
@@ -271,7 +281,7 @@
(newRat == TelephonyManager.NETWORK_TYPE_IWLAN)
? AccessNetworkConstants.TRANSPORT_TYPE_WLAN
: AccessNetworkConstants.TRANSPORT_TYPE_WWAN;
- if (mLastRegistrationStats != null && mLastRegistrationStats.rat != newRat) {
+ if (mLastRegistrationStats.rat != newRat) {
mLastRegistrationStats.rat = newRat;
ratChanged = true;
}
@@ -308,7 +318,7 @@
conclude();
mLastTransportType = imsRadioTech;
- mLastRegistrationStats = getDefaultImsRegistrationStats();
+ updateImsRegistrationStats();
mLastRegistrationStats.rat = convertTransportTypeToNetworkType(imsRadioTech);
mLastRegistrationState = REGISTRATION_STATE_REGISTERING;
}
@@ -318,9 +328,9 @@
conclude();
mLastTransportType = imsRadioTech;
- // NOTE: mLastRegistrationStats can be null (no registering phase).
- if (mLastRegistrationStats == null) {
- mLastRegistrationStats = getDefaultImsRegistrationStats();
+ // NOTE: status can be unregistered (no registering phase)
+ if (mLastRegistrationState == REGISTRATION_STATE_NOT_REGISTERED) {
+ updateImsRegistrationStats();
}
mLastRegistrationStats.rat = convertTransportTypeToNetworkType(imsRadioTech);
mLastRegistrationState = REGISTRATION_STATE_REGISTERED;
@@ -331,16 +341,14 @@
conclude();
// Generate end reason atom.
- // NOTE: mLastRegistrationStats can be null (no registering phase).
ImsRegistrationTermination termination = new ImsRegistrationTermination();
- if (mLastRegistrationStats != null) {
+ if (mLastRegistrationState != REGISTRATION_STATE_NOT_REGISTERED) {
termination.carrierId = mLastRegistrationStats.carrierId;
- termination.ratAtEnd = getRatAtEnd(mLastRegistrationStats.rat);
} else {
+ // if the registration state is from unregistered to unregistered.
termination.carrierId = mPhone.getDefaultPhone().getCarrierId();
- // We cannot tell whether the registration was intended for WWAN or WLAN
- termination.ratAtEnd = TelephonyManager.NETWORK_TYPE_UNKNOWN;
}
+ termination.ratAtEnd = getRatAtEnd(mLastRegistrationStats.rat);
termination.isMultiSim = SimSlotState.isMultiSim();
termination.setupFailed = (mLastRegistrationState != REGISTRATION_STATE_REGISTERED);
termination.reasonCode = reasonInfo.getCode();
@@ -351,14 +359,14 @@
// Reset state to unregistered.
mLastRegistrationState = REGISTRATION_STATE_NOT_REGISTERED;
- mLastRegistrationStats = null;
+ mLastRegistrationStats.rat = TelephonyManager.NETWORK_TYPE_UNKNOWN;
mLastAvailableFeatures = new MmTelCapabilities();
}
/** Updates the RAT when service state changes. */
public synchronized void onServiceStateChanged(ServiceState state) {
if (mLastTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN
- && mLastRegistrationStats != null) {
+ && mLastRegistrationState != REGISTRATION_STATE_NOT_REGISTERED) {
mLastRegistrationStats.rat =
ServiceStateStats.getRat(state, NetworkRegistrationInfo.DOMAIN_PS);
}
@@ -370,7 +378,7 @@
*/
@NetworkType
public synchronized int getImsVoiceRadioTech() {
- if (mLastRegistrationStats == null
+ if (mLastRegistrationState == REGISTRATION_STATE_NOT_REGISTERED
|| !mLastAvailableFeatures.isCapable(CAPABILITY_TYPE_VOICE)) {
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
}
@@ -404,11 +412,16 @@
private ImsRegistrationStats getDefaultImsRegistrationStats() {
Phone phone = mPhone.getDefaultPhone();
ImsRegistrationStats stats = new ImsRegistrationStats();
- stats.carrierId = phone.getCarrierId();
- stats.simSlotIndex = phone.getPhoneId();
+ stats.rat = TelephonyManager.NETWORK_TYPE_UNKNOWN;
return stats;
}
+ private void updateImsRegistrationStats() {
+ Phone phone = mPhone.getDefaultPhone();
+ mLastRegistrationStats.carrierId = phone.getCarrierId();
+ mLastRegistrationStats.simSlotIndex = phone.getPhoneId();
+ }
+
@Nullable
private MmTelCapabilities getLastCapableFeaturesForTech(@ImsRegistrationTech int radioTech) {
switch (radioTech) {
@@ -438,21 +451,12 @@
}
}
- private static ImsRegistrationStats copyOf(ImsRegistrationStats source) {
+ private static ImsRegistrationStats copyOfDimensionsOnly(ImsRegistrationStats source) {
ImsRegistrationStats dest = new ImsRegistrationStats();
dest.carrierId = source.carrierId;
dest.simSlotIndex = source.simSlotIndex;
dest.rat = source.rat;
- dest.registeredMillis = source.registeredMillis;
- dest.voiceCapableMillis = source.voiceCapableMillis;
- dest.voiceAvailableMillis = source.voiceAvailableMillis;
- dest.smsCapableMillis = source.smsCapableMillis;
- dest.smsAvailableMillis = source.smsAvailableMillis;
- dest.videoCapableMillis = source.videoCapableMillis;
- dest.videoAvailableMillis = source.videoAvailableMillis;
- dest.utCapableMillis = source.utCapableMillis;
- dest.utAvailableMillis = source.utAvailableMillis;
return dest;
}
diff --git a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
index 1a53ee6..bd7ce2a 100644
--- a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
+++ b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
@@ -1077,7 +1077,9 @@
roundAndConvertMillisToSeconds(stats.videoCapableMillis),
roundAndConvertMillisToSeconds(stats.videoAvailableMillis),
roundAndConvertMillisToSeconds(stats.utCapableMillis),
- roundAndConvertMillisToSeconds(stats.utAvailableMillis));
+ roundAndConvertMillisToSeconds(stats.utAvailableMillis),
+ roundAndConvertMillisToSeconds(stats.registeringMillis),
+ roundAndConvertMillisToSeconds(stats.unregisteredMillis));
}
private static StatsEvent buildStatsEvent(ImsRegistrationTermination termination) {
diff --git a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
index d495ca2..1da0c46 100644
--- a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
+++ b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
@@ -407,6 +407,8 @@
existingStats.videoAvailableMillis += stats.videoAvailableMillis;
existingStats.utCapableMillis += stats.utCapableMillis;
existingStats.utAvailableMillis += stats.utAvailableMillis;
+ existingStats.registeringMillis += stats.registeringMillis;
+ existingStats.unregisteredMillis += stats.unregisteredMillis;
existingStats.lastUsedMillis = getWallTimeMillis();
} else {
stats.lastUsedMillis = getWallTimeMillis();
@@ -2279,6 +2281,10 @@
normalizeDurationTo24H(stats[i].utCapableMillis, intervalMillis);
stats[i].utAvailableMillis =
normalizeDurationTo24H(stats[i].utAvailableMillis, intervalMillis);
+ stats[i].registeringMillis =
+ normalizeDurationTo24H(stats[i].registeringMillis, intervalMillis);
+ stats[i].unregisteredMillis =
+ normalizeDurationTo24H(stats[i].unregisteredMillis, intervalMillis);
}
return stats;
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java
index 504782b..7c7c5b2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java
@@ -308,12 +308,73 @@
mImsStats.onImsCapabilitiesChanged(
REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_ALL));
+ mImsStats.onImsUnregistered(
+ new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout"));
+
mImsStats.incTimeMillis(2000L);
mImsStats.conclude();
- // No atom should be generated
+ ArgumentCaptor<ImsRegistrationTermination> terminationCaptor =
+ ArgumentCaptor.forClass(ImsRegistrationTermination.class);
+ verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture());
+ ImsRegistrationTermination termination = terminationCaptor.getValue();
+ assertEquals(CARRIER1_ID, termination.carrierId);
+ assertFalse(termination.isMultiSim);
+ assertEquals(TelephonyManager.NETWORK_TYPE_LTE, termination.ratAtEnd);
+ assertTrue(termination.setupFailed);
+ assertEquals(ImsReasonInfo.CODE_REGISTRATION_ERROR, termination.reasonCode);
+ assertEquals(999, termination.extraCode);
+ assertEquals("Timeout", termination.extraMessage);
+
+ // Registering duration should be counted
+ ArgumentCaptor<ImsRegistrationStats> statsCaptor =
+ ArgumentCaptor.forClass(ImsRegistrationStats.class);
+ verify(mPersistAtomsStorage).addImsRegistrationStats(statsCaptor.capture());
+ ImsRegistrationStats stats = statsCaptor.getValue();
+ assertEquals(CARRIER1_ID, stats.carrierId);
+ assertEquals(0, stats.simSlotIndex);
+ assertEquals(TelephonyManager.NETWORK_TYPE_UNKNOWN, stats.rat);
+ assertEquals(2000L, stats.unregisteredMillis);
+ verifyNoMoreInteractions(mPersistAtomsStorage);
+ }
+
+ @Test
+ @SmallTest
+ public void conclude_registering() throws Exception {
+ // IMS over LTE
+ mImsStats.onSetFeatureResponse(
+ CAPABILITY_TYPE_VOICE,
+ REGISTRATION_TECH_LTE,
+ ProvisioningManager.PROVISIONING_VALUE_ENABLED);
+ mImsStats.onSetFeatureResponse(
+ CAPABILITY_TYPE_VIDEO,
+ REGISTRATION_TECH_LTE,
+ ProvisioningManager.PROVISIONING_VALUE_ENABLED);
+ mImsStats.onSetFeatureResponse(
+ CAPABILITY_TYPE_UT,
+ REGISTRATION_TECH_LTE,
+ ProvisioningManager.PROVISIONING_VALUE_ENABLED);
+ mImsStats.onSetFeatureResponse(
+ CAPABILITY_TYPE_SMS,
+ REGISTRATION_TECH_LTE,
+ ProvisioningManager.PROVISIONING_VALUE_ENABLED);
+ mImsStats.onImsCapabilitiesChanged(
+ REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_ALL));
+
+ mImsStats.onImsRegistering(TRANSPORT_TYPE_WLAN);
+
+ mImsStats.incTimeMillis(2000L);
+ mImsStats.conclude();
+
+ // Registering duration should be counted
ArgumentCaptor<ImsRegistrationStats> captor =
ArgumentCaptor.forClass(ImsRegistrationStats.class);
+ verify(mPersistAtomsStorage).addImsRegistrationStats(captor.capture());
+ ImsRegistrationStats stats = captor.getValue();
+ assertEquals(CARRIER1_ID, stats.carrierId);
+ assertEquals(0, stats.simSlotIndex);
+ assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, stats.rat);
+ assertEquals(2000L, stats.registeringMillis);
verifyNoMoreInteractions(mPersistAtomsStorage);
}
@@ -510,6 +571,57 @@
@Test
@SmallTest
+ public void onImsRegistered_afterImsRegistering() throws Exception {
+ mImsStats.onImsRegistering(TRANSPORT_TYPE_WWAN);
+ mImsStats.incTimeMillis(2000L);
+ mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN);
+
+ // Registering duration should be counted
+ ArgumentCaptor<ImsRegistrationStats> captor =
+ ArgumentCaptor.forClass(ImsRegistrationStats.class);
+ verify(mPersistAtomsStorage).addImsRegistrationStats(captor.capture());
+ ImsRegistrationStats stats = captor.getValue();
+ assertEquals(CARRIER1_ID, stats.carrierId);
+ assertEquals(0, stats.simSlotIndex);
+ assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat);
+ assertEquals(0L, stats.registeredMillis);
+ assertEquals(2000L, stats.registeringMillis);
+ }
+
+ @Test
+ @SmallTest
+ public void onImsRegistering_afterImsUnregistered() throws Exception {
+ mImsStats.onImsUnregistered(
+ new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout"));
+ mImsStats.incTimeMillis(2000L);
+ mImsStats.onImsRegistering(TRANSPORT_TYPE_WWAN);
+
+ // Atom with termination info should be generated
+ ArgumentCaptor<ImsRegistrationTermination> terminationCaptor =
+ ArgumentCaptor.forClass(ImsRegistrationTermination.class);
+ verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture());
+ ImsRegistrationTermination termination = terminationCaptor.getValue();
+ assertEquals(CARRIER1_ID, termination.carrierId);
+ assertFalse(termination.isMultiSim);
+ assertEquals(TelephonyManager.NETWORK_TYPE_LTE, termination.ratAtEnd);
+ assertTrue(termination.setupFailed);
+ assertEquals(ImsReasonInfo.CODE_REGISTRATION_ERROR, termination.reasonCode);
+ assertEquals(999, termination.extraCode);
+ assertEquals("Timeout", termination.extraMessage);
+
+ ArgumentCaptor<ImsRegistrationStats> statsCaptor =
+ ArgumentCaptor.forClass(ImsRegistrationStats.class);
+ verify(mPersistAtomsStorage).addImsRegistrationStats(statsCaptor.capture());
+ ImsRegistrationStats stats = statsCaptor.getValue();
+ assertEquals(CARRIER1_ID, stats.carrierId);
+ assertEquals(0, stats.simSlotIndex);
+ assertEquals(TelephonyManager.NETWORK_TYPE_UNKNOWN, stats.rat);
+ assertEquals(2000L, stats.unregisteredMillis);
+ verifyNoMoreInteractions(mPersistAtomsStorage);
+ }
+
+ @Test
+ @SmallTest
public void onImsUnregistered_setupFailure() throws Exception {
mImsStats.onImsUnregistered(
new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout"));
@@ -521,7 +633,7 @@
ImsRegistrationTermination termination = captor.getValue();
assertEquals(CARRIER1_ID, termination.carrierId);
assertFalse(termination.isMultiSim);
- assertEquals(TelephonyManager.NETWORK_TYPE_UNKNOWN, termination.ratAtEnd);
+ assertEquals(TelephonyManager.NETWORK_TYPE_LTE, termination.ratAtEnd);
assertTrue(termination.setupFailed);
assertEquals(ImsReasonInfo.CODE_REGISTRATION_ERROR, termination.reasonCode);
assertEquals(999, termination.extraCode);
@@ -532,16 +644,26 @@
@Test
@SmallTest
public void onImsUnregistered_setupFailureWithProgress() throws Exception {
- mImsStats.onImsRegistering(REGISTRATION_TECH_LTE);
+ mImsStats.onImsRegistering(TRANSPORT_TYPE_WWAN);
mImsStats.incTimeMillis(2000L);
mImsStats.onImsUnregistered(
new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout"));
// Atom with termination info should be generated
- ArgumentCaptor<ImsRegistrationTermination> captor =
+ ArgumentCaptor<ImsRegistrationStats> statsCaptor =
+ ArgumentCaptor.forClass(ImsRegistrationStats.class);
+ verify(mPersistAtomsStorage).addImsRegistrationStats(statsCaptor.capture());
+ ImsRegistrationStats stats = statsCaptor.getValue();
+ assertEquals(CARRIER1_ID, stats.carrierId);
+ assertEquals(0, stats.simSlotIndex);
+ assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat);
+ assertEquals(0L, stats.registeredMillis);
+ assertEquals(2000L, stats.registeringMillis);
+
+ ArgumentCaptor<ImsRegistrationTermination> terminationCaptor =
ArgumentCaptor.forClass(ImsRegistrationTermination.class);
- verify(mPersistAtomsStorage).addImsRegistrationTermination(captor.capture());
- ImsRegistrationTermination termination = captor.getValue();
+ verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture());
+ ImsRegistrationTermination termination = terminationCaptor.getValue();
assertEquals(CARRIER1_ID, termination.carrierId);
assertFalse(termination.isMultiSim);
assertEquals(TelephonyManager.NETWORK_TYPE_LTE, termination.ratAtEnd);
@@ -604,7 +726,7 @@
ImsRegistrationTermination termination = captor.getValue();
assertEquals(CARRIER1_ID, termination.carrierId);
assertFalse(termination.isMultiSim);
- assertEquals(TelephonyManager.NETWORK_TYPE_UNKNOWN, termination.ratAtEnd);
+ assertEquals(TelephonyManager.NETWORK_TYPE_LTE, termination.ratAtEnd);
assertTrue(termination.setupFailed);
assertEquals(ImsReasonInfo.CODE_REGISTRATION_ERROR, termination.reasonCode);
assertEquals(0, termination.extraCode);
@@ -630,7 +752,7 @@
ImsRegistrationTermination termination = captor.getValue();
assertEquals(CARRIER1_ID, termination.carrierId);
assertFalse(termination.isMultiSim);
- assertEquals(TelephonyManager.NETWORK_TYPE_UNKNOWN, termination.ratAtEnd);
+ assertEquals(TelephonyManager.NETWORK_TYPE_LTE, termination.ratAtEnd);
assertTrue(termination.setupFailed);
assertEquals(ImsReasonInfo.CODE_REGISTRATION_ERROR, termination.reasonCode);
assertEquals(0, termination.extraCode);