diff options
Diffstat (limited to 'tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java')
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java | 414 |
1 files changed, 370 insertions, 44 deletions
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 504782bb46..df8bd85d0c 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java @@ -23,6 +23,7 @@ import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPAB import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT; import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO; import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE; +import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM; import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN; import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_LTE; import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_NR; @@ -40,6 +41,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import android.telephony.NetworkRegistrationInfo; import android.telephony.TelephonyManager; import android.telephony.ims.ImsReasonInfo; +import android.telephony.ims.ImsRegistrationAttributes; import android.telephony.ims.ProvisioningManager; import android.telephony.ims.feature.MmTelFeature.MmTelCapabilities; import android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability; @@ -67,6 +69,13 @@ public class ImsStatsTest extends TelephonyTest { private static final int CARRIER1_ID = 1; private static final int CARRIER2_ID = 1187; + private ImsRegistrationAttributes mWwanAttributes = + new ImsRegistrationAttributes.Builder(REGISTRATION_TECH_LTE).build(); + private ImsRegistrationAttributes mIwlanAttributes = + new ImsRegistrationAttributes.Builder(REGISTRATION_TECH_IWLAN).build(); + private ImsRegistrationAttributes mCrossSimAttributes = + new ImsRegistrationAttributes.Builder(REGISTRATION_TECH_CROSS_SIM).build(); + @MmTelCapability private static final int CAPABILITY_TYPE_ALL = MmTelCapabilities.CAPABILITY_TYPE_VOICE @@ -164,7 +173,7 @@ public class ImsStatsTest extends TelephonyTest { CAPABILITY_TYPE_SMS, REGISTRATION_TECH_LTE, ProvisioningManager.PROVISIONING_VALUE_ENABLED); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_ALL)); @@ -211,7 +220,7 @@ public class ImsStatsTest extends TelephonyTest { CAPABILITY_TYPE_SMS, REGISTRATION_TECH_LTE, ProvisioningManager.PROVISIONING_VALUE_ENABLED); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); @@ -258,7 +267,7 @@ public class ImsStatsTest extends TelephonyTest { CAPABILITY_TYPE_UT, REGISTRATION_TECH_LTE, ProvisioningManager.PROVISIONING_VALUE_ENABLED); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WLAN); + mImsStats.onImsRegistered(mIwlanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_IWLAN, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); @@ -287,6 +296,35 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest + public void conclude_registeredVoiceOnly_crossSimCalling() throws Exception { + mImsStats.onSetFeatureResponse( + CAPABILITY_TYPE_VOICE, + REGISTRATION_TECH_CROSS_SIM, + ProvisioningManager.PROVISIONING_VALUE_ENABLED); + mImsStats.onImsRegistered(mCrossSimAttributes); + mImsStats.onImsCapabilitiesChanged( + REGISTRATION_TECH_CROSS_SIM, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); + + mImsStats.incTimeMillis(2000L); + mImsStats.conclude(); + + // 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(true, stats.isIwlanCrossSim); + assertEquals(2000L, stats.registeredMillis); + assertEquals(2000L, stats.voiceCapableMillis); + assertEquals(2000L, stats.voiceAvailableMillis); + verifyNoMoreInteractions(mPersistAtomsStorage); + } + + @Test + @SmallTest public void conclude_notRegistered() throws Exception { // IMS over LTE mImsStats.onSetFeatureResponse( @@ -308,12 +346,190 @@ public class ImsStatsTest extends TelephonyTest { 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_LTE, 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); + } + + @Test + @SmallTest + public void conclude_serviceStateChanged_afterRatUnknown() 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.onImsUnregistered( + new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout")); + + doReturn(TelephonyManager.NETWORK_TYPE_UNKNOWN) + .when(mServiceState) + .getDataNetworkType(); + mImsStats.onServiceStateChanged(mServiceState); + + mImsStats.incTimeMillis(2000L); + + doReturn(TelephonyManager.NETWORK_TYPE_LTE) + .when(mServiceState) + .getDataNetworkType(); + mImsStats.onServiceStateChanged(mServiceState); + mImsStats.conclude(); + + // 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); + verifyNoMoreInteractions(mPersistAtomsStorage); + } + + @Test + @SmallTest + public void conclude_serviceStateChanged_afterRatLte() 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.onImsUnregistered( + new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout")); + + doReturn(TelephonyManager.NETWORK_TYPE_LTE) + .when(mServiceState) + .getDataNetworkType(); + mImsStats.onServiceStateChanged(mServiceState); + + mImsStats.incTimeMillis(2000L); + + doReturn(TelephonyManager.NETWORK_TYPE_UNKNOWN) + .when(mServiceState) + .getDataNetworkType(); + mImsStats.onServiceStateChanged(mServiceState); + mImsStats.conclude(); + + // Atom with termination info and durations 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_LTE, stats.rat); + assertEquals(2000L, stats.unregisteredMillis); verifyNoMoreInteractions(mPersistAtomsStorage); } @@ -324,7 +540,7 @@ public class ImsStatsTest extends TelephonyTest { CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, ProvisioningManager.PROVISIONING_VALUE_ENABLED); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.incTimeMillis(2000L); mImsStats.onImsCapabilitiesChanged( @@ -359,7 +575,7 @@ public class ImsStatsTest extends TelephonyTest { CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, ProvisioningManager.PROVISIONING_VALUE_ENABLED); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); @@ -398,7 +614,7 @@ public class ImsStatsTest extends TelephonyTest { CAPABILITY_TYPE_SMS, REGISTRATION_TECH_LTE, ProvisioningManager.PROVISIONING_VALUE_ENABLED); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_SMS)); @@ -437,7 +653,7 @@ public class ImsStatsTest extends TelephonyTest { CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, ProvisioningManager.PROVISIONING_VALUE_ENABLED); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.incTimeMillis(2000L); mImsStats.onSetFeatureResponse( @@ -468,11 +684,11 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest public void onImsRegistered_differentTech() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.incTimeMillis(2000L); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WLAN); + mImsStats.onImsRegistered(mIwlanAttributes); mImsStats.incTimeMillis(2000L); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); // At this point, the first 2 registrations should have their durations counted ArgumentCaptor<ImsRegistrationStats> captor = @@ -510,6 +726,62 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest + public void onImsRegistered_afterImsRegistering() throws Exception { + mImsStats.onImsRegistering(TRANSPORT_TYPE_WWAN); + mImsStats.incTimeMillis(2000L); + mImsStats.onImsRegistered(mWwanAttributes); + + // 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 { + doReturn(TelephonyManager.NETWORK_TYPE_LTE) + .when(mServiceState) + .getDataNetworkType(); + mImsStats.onServiceStateChanged(mServiceState); + + 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_LTE, 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 +793,7 @@ public class ImsStatsTest extends TelephonyTest { 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 +804,26 @@ public class ImsStatsTest extends TelephonyTest { @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 = + // Atom with termination info and durations should be generated + 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); @@ -555,7 +837,7 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest public void onImsUnregistered_afterRegistered() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.incTimeMillis(2000L); mImsStats.onImsUnregistered( new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout")); @@ -604,7 +886,7 @@ public class ImsStatsTest extends TelephonyTest { 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 +912,7 @@ public class ImsStatsTest extends TelephonyTest { 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); @@ -757,9 +1039,7 @@ public class ImsStatsTest extends TelephonyTest { } } - @Test - @SmallTest - public void onImsUnregistered_multiSim() throws Exception { + void secondSimMockSetup() { doReturn(mSecondImsPhone).when(mSecondPhone).getImsPhone(); doReturn(mSecondPhone).when(mSecondImsPhone).getDefaultPhone(); doReturn(1).when(mSecondPhone).getPhoneId(); @@ -776,8 +1056,14 @@ public class ImsStatsTest extends TelephonyTest { // Reusing service state tracker from phone 0 for simplicity doReturn(mSST).when(mSecondPhone).getServiceStateTracker(); doReturn(mSST).when(mSecondImsPhone).getServiceStateTracker(); + } + + @Test + @SmallTest + public void onImsUnregistered_multiSim() throws Exception { + secondSimMockSetup(); mImsStats = new TestableImsStats(mSecondImsPhone); - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.incTimeMillis(2000L); mImsStats.onImsUnregistered( new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout")); @@ -815,6 +1101,42 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest + public void onImsUnregistered_crossSim() throws Exception { + secondSimMockSetup(); + mImsStats = new TestableImsStats(mSecondImsPhone); + mImsStats.onImsRegistered(mCrossSimAttributes); + mImsStats.incTimeMillis(2000L); + mImsStats.onImsUnregistered( + new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 999, "Timeout")); + + // Atom with termination info and durations should be generated + ArgumentCaptor<ImsRegistrationStats> statsCaptor = + ArgumentCaptor.forClass(ImsRegistrationStats.class); + verify(mPersistAtomsStorage).addImsRegistrationStats(statsCaptor.capture()); + ImsRegistrationStats stats = statsCaptor.getValue(); + assertEquals(CARRIER2_ID, stats.carrierId); + assertEquals(1, stats.simSlotIndex); + assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, stats.rat); + assertEquals(true, stats.isIwlanCrossSim); + assertEquals(2000L, stats.registeredMillis); + + ArgumentCaptor<ImsRegistrationTermination> terminationCaptor = + ArgumentCaptor.forClass(ImsRegistrationTermination.class); + verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture()); + ImsRegistrationTermination termination = terminationCaptor.getValue(); + assertEquals(CARRIER2_ID, termination.carrierId); + assertTrue(termination.isMultiSim); + assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, termination.ratAtEnd); + assertEquals(true, termination.isIwlanCrossSim); + assertFalse(termination.setupFailed); + assertEquals(ImsReasonInfo.CODE_REGISTRATION_ERROR, termination.reasonCode); + assertEquals(999, termination.extraCode); + assertEquals("Timeout", termination.extraMessage); + verifyNoMoreInteractions(mPersistAtomsStorage); + } + + @Test + @SmallTest public void getImsVoiceRadioTech_noRegistration() throws Exception { // Do nothing @@ -824,7 +1146,7 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest public void getImsVoiceRadioTech_noVoiceRegistration() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_SMS)); @@ -834,7 +1156,7 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest public void getImsVoiceRadioTech_cellularRegistration() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); @@ -844,7 +1166,7 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest public void getImsVoiceRadioTech_wifiRegistration() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WLAN); + mImsStats.onImsRegistered(mIwlanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_IWLAN, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); @@ -853,8 +1175,18 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest + public void getImsVoiceRadioTech_crossSimRegistration() throws Exception { + mImsStats.onImsRegistered(mCrossSimAttributes); + mImsStats.onImsCapabilitiesChanged( + REGISTRATION_TECH_CROSS_SIM, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); + + assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, mImsStats.getImsVoiceRadioTech()); + } + + @Test + @SmallTest public void getImsVoiceRadioTech_unregistered() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); mImsStats.onImsUnregistered( @@ -873,17 +1205,14 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest public void getImsVoiceRadioTech_serviceStateChanged() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_LTE, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); - doReturn( - new NetworkRegistrationInfo.Builder() - .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_NR) - .setRegistrationState( - NetworkRegistrationInfo.REGISTRATION_STATE_HOME) - .build()) + + doReturn(TelephonyManager.NETWORK_TYPE_NR) .when(mServiceState) - .getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN); + .getDataNetworkType(); + mImsStats.onServiceStateChanged(mServiceState); assertEquals(TelephonyManager.NETWORK_TYPE_NR, mImsStats.getImsVoiceRadioTech()); } @@ -891,17 +1220,14 @@ public class ImsStatsTest extends TelephonyTest { @Test @SmallTest public void getImsVoiceRadioTech_serviceStateChanged_wlan() throws Exception { - mImsStats.onImsRegistered(TRANSPORT_TYPE_WWAN); + mImsStats.onImsRegistered(mWwanAttributes); mImsStats.onImsCapabilitiesChanged( REGISTRATION_TECH_IWLAN, new MmTelCapabilities(CAPABILITY_TYPE_VOICE)); - doReturn( - new NetworkRegistrationInfo.Builder() - .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_NR) - .setRegistrationState( - NetworkRegistrationInfo.REGISTRATION_STATE_HOME) - .build()) + + doReturn(TelephonyManager.NETWORK_TYPE_IWLAN) .when(mServiceState) - .getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN); + .getDataNetworkType(); + mImsStats.onServiceStateChanged(mServiceState); assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, mImsStats.getImsVoiceRadioTech()); } |