1f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu/* 2f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * Copyright (C) 2016 The Android Open Source Project 3f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * 4f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * Licensed under the Apache License, Version 2.0 (the "License"); 5f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * you may not use this file except in compliance with the License. 6f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * You may obtain a copy of the License at 7f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * 8f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * http://www.apache.org/licenses/LICENSE-2.0 9f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * 10f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * Unless required by applicable law or agreed to in writing, software 11f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * distributed under the License is distributed on an "AS IS" BASIS, 12f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * See the License for the specific language governing permissions and 14f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu * limitations under the License. 15f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu */ 16f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 17f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yupackage com.android.internal.telephony.metrics; 18f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 19f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.telephony.ServiceState; 20f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.test.suitebuilder.annotation.SmallTest; 21f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.util.Base64; 22f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 23f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.ims.ImsConfig; 24f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.ims.ImsReasonInfo; 25f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.ims.internal.ImsCallSession; 26f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.Call; 27f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.PhoneConstants; 28f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.SmsResponse; 29f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto; 30f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.ImsConnectionState; 31f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.SmsSession; 32f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.RadioAccessTechnology; 33f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonyCallSession; 34f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonyCallSession.Event.CallState; 35f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonyCallSession.Event.ImsCommand; 36f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonyEvent; 37f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonyLog; 38f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonyServiceState; 39f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonyServiceState.RoamingType; 40f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyTest; 41f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.UUSInfo; 42f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DataCallResponse; 43f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 44f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.junit.After; 45f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.junit.Before; 46f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.junit.Test; 47f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.mockito.Mock; 48f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 49f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport java.lang.reflect.Method; 50f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 51f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static android.telephony.ServiceState.RIL_RADIO_TECHNOLOGY_LTE; 52f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static android.telephony.ServiceState.ROAMING_TYPE_DOMESTIC; 53f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEACTIVATE_DATA_CALL; 54f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEND_SMS; 55f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static com.android.internal.telephony.RILConstants.RIL_REQUEST_SETUP_DATA_CALL; 56f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static com.android.internal.telephony.TelephonyProto.PdpType.PDP_TYPE_IPV4V6; 57f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static org.junit.Assert.assertArrayEquals; 58f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static org.junit.Assert.assertEquals; 59f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static org.junit.Assert.assertFalse; 60f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static org.junit.Assert.assertTrue; 61f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static org.mockito.Mockito.doReturn; 62f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 63f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yupublic class TelephonyMetricsTest extends TelephonyTest { 64f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 65f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Mock 66f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private ImsCallSession mImsCallSession; 67f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 68f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Mock 69f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private ImsReasonInfo mImsReasonInfo; 70f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 71f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Mock 72f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private ServiceState mServiceState; 73f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 74f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private TelephonyMetrics mMetrics; 75f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 76f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private UUSInfo mUusInfo; 77f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 78f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Before 79f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void setUp() throws Exception { 80f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu super.setUp(getClass().getSimpleName()); 81f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics = new TelephonyMetrics(); 82f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mUusInfo = new UUSInfo(1, 2, new byte[]{1, 2}); 83f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("123").when(mImsCallSession).getCallId(); 84f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("extramessage").when(mImsReasonInfo).getExtraMessage(); 85f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(123).when(mImsReasonInfo).getCode(); 86f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(456).when(mImsReasonInfo).getExtraCode(); 87f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 88f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(ROAMING_TYPE_DOMESTIC).when(mServiceState).getVoiceRoamingType(); 89f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(ROAMING_TYPE_DOMESTIC).when(mServiceState).getDataRoamingType(); 90f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("voiceshort").when(mServiceState).getVoiceOperatorAlphaShort(); 91f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("voicelong").when(mServiceState).getVoiceOperatorAlphaLong(); 92f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("datashort").when(mServiceState).getDataOperatorAlphaShort(); 93f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("datalong").when(mServiceState).getDataOperatorAlphaLong(); 94f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("123456").when(mServiceState).getVoiceOperatorNumeric(); 95f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("123456").when(mServiceState).getDataOperatorNumeric(); 96f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState).getRilVoiceRadioTechnology(); 97f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState).getRilDataRadioTechnology(); 98f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 99f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 100f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @After 101f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void tearDown() throws Exception { 102f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu super.tearDown(); 103f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 104f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 105f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private TelephonyLog buildProto() throws Exception { 106f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Method method = TelephonyMetrics.class.getDeclaredMethod("buildProto"); 107f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.setAccessible(true); 108f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu return (TelephonyLog) method.invoke(mMetrics); 109f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 110f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 111f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private void reset() throws Exception { 112f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Method method = TelephonyMetrics.class.getDeclaredMethod("reset"); 113f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.setAccessible(true); 114f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.invoke(mMetrics); 115f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 116f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 117f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private String convertProtoToBase64String(TelephonyLog log) throws Exception { 118f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Class[] cArgs = new Class[1]; 119f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu cArgs[0] = TelephonyLog.class; 120f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Method method = TelephonyMetrics.class.getDeclaredMethod("convertProtoToBase64String", 121f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu cArgs); 122f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.setAccessible(true); 123f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu return (String) method.invoke(null, log); 124f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 125f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 126f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 127f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 128f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testEventDropped() throws Exception { 129f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu for (int i = 0; i < 1001; i++) { 130f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeDataStallEvent(mPhone.getPhoneId(), i); 131f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 132f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 133f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1000, log.events.length); 134f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 135f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 136f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 137f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.getEventsDropped()); 138f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events[0].getDataStallAction()); 139f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 140f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 141f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write data stall event 142f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 143f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 144f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteDataStallEvent() throws Exception { 145f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeDataStallEvent(mPhone.getPhoneId(), 3); 146f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 147f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 148f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 149f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 150f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 151f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].hasPhoneId()); 152f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(mPhone.getPhoneId(), log.events[0].getPhoneId()); 153f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(3, log.events[0].getDataStallAction()); 154f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 155f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 156f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on IMS call start 157f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 158f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 159f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsCallStart() throws Exception { 160f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 161f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 162f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 163f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 164f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 165f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 166f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 167f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasPhoneId()); 168f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(mPhone.getPhoneId(), log.callSessions[0].getPhoneId()); 169f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasEventsDropped()); 170f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.callSessions[0].getEventsDropped()); 171f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasStartTimeMinutes()); 172f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions[0].events.length); 173f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[0].hasCallIndex()); 174f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, log.callSessions[0].events[0].getCallIndex()); 175f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[0].hasImsCommand()); 176f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(ImsCommand.IMS_CMD_START, log.callSessions[0].events[0].getImsCommand()); 177f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 178f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 179f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write ims call state 180f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 181f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 182f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteImsCallState() throws Exception { 183f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 184f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeImsCallState(mPhone.getPhoneId(), mImsCallSession, Call.State.ACTIVE); 185f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 186f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 187f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 188f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 189f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 190f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 191f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 192f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasEventsDropped()); 193f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.callSessions[0].getEventsDropped()); 194f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasCallIndex()); 195f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, log.callSessions[0].events[1].getCallIndex()); 196f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasCallState()); 197f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(CallState.CALL_ACTIVE, log.callSessions[0].events[1].getCallState()); 198f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 199f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 200f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write ims set feature value 201f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 202f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 203f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteImsSetFeatureValue() throws Exception { 204f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 205f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeImsSetFeatureValue(mPhone.getPhoneId(), 206f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE, 0, 1, 0); 207f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 208f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 209f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 210f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 211f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 212f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 213f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 214f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasEventsDropped()); 215f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.callSessions[0].getEventsDropped()); 216f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].settings.hasIsEnhanced4GLteModeEnabled()); 217f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].settings.getIsEnhanced4GLteModeEnabled()); 218f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 219f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 220f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on ims call handover event 221f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 222f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 223f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsCallHandoverEvent() throws Exception { 224f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 225f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallHandoverEvent(mPhone.getPhoneId(), 226f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyCallSession.Event.Type.IMS_CALL_HANDOVER, mImsCallSession, 5, 6, 227f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mImsReasonInfo); 228f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 229f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 230f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 231f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 232f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 233f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 234f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 235f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasEventsDropped()); 236f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.callSessions[0].getEventsDropped()); 237f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasType()); 238f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.IMS_CALL_HANDOVER, 239f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu log.callSessions[0].events[1].getType()); 240f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasCallIndex()); 241f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, log.callSessions[0].events[1].getCallIndex()); 242f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasSrcAccessTech()); 243f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(5, log.callSessions[0].events[1].getSrcAccessTech()); 244f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasTargetAccessTech()); 245f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(6, log.callSessions[0].events[1].getTargetAccessTech()); 246f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 247f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].reasonInfo.hasExtraMessage()); 248f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("extramessage", log.callSessions[0].events[1].reasonInfo.getExtraMessage()); 249f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].reasonInfo.hasExtraCode()); 250f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(456, log.callSessions[0].events[1].reasonInfo.getExtraCode()); 251f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].reasonInfo.hasReasonCode()); 252f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, log.callSessions[0].events[1].reasonInfo.getReasonCode()); 253f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 254f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 255f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on ims command 256f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 257f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 258f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsCommand() throws Exception { 259f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 260f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCommand(mPhone.getPhoneId(), mImsCallSession, 123); 261f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 262f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 263f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 264f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 265f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 266f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 267f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 268f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasEventsDropped()); 269f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.callSessions[0].getEventsDropped()); 270f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasType()); 271f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.IMS_COMMAND, 272f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu log.callSessions[0].events[1].getType()); 273f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasImsCommand()); 274f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, log.callSessions[0].events[1].getImsCommand()); 275f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasCallIndex()); 276f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, log.callSessions[0].events[1].getCallIndex()); 277f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 278f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 279f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on ims connection state 280f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 281f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 282f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsConnectionState() throws Exception { 283f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 284f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(), 285f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu ImsConnectionState.State.CONNECTED, mImsReasonInfo); 286f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 287f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 288f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 289f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 290f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 291f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 292f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 293f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 294f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 295f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].hasType()); 296f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyEvent.Type.IMS_CONNECTION_STATE_CHANGED, log.events[0].getType()); 297f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].imsConnectionState.hasState()); 298f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(ImsConnectionState.State.CONNECTED, 299f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu log.events[0].imsConnectionState.getState()); 300f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].imsConnectionState.reasonInfo.hasReasonCode()); 301f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, log.events[0].imsConnectionState.reasonInfo.getReasonCode()); 302f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].imsConnectionState.reasonInfo.hasExtraCode()); 303f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(456, log.events[0].imsConnectionState.reasonInfo.getExtraCode()); 304f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].imsConnectionState.reasonInfo.hasExtraMessage()); 305f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("extramessage", log.events[0].imsConnectionState.reasonInfo.getExtraMessage()); 306f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasEventsDropped()); 307f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.callSessions[0].getEventsDropped()); 308f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasType()); 309f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.IMS_CONNECTION_STATE_CHANGED, 310f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu log.callSessions[0].events[1].getType()); 311f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].imsConnectionState.hasState()); 312f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(ImsConnectionState.State.CONNECTED, 313f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu log.callSessions[0].events[1].imsConnectionState.getState()); 314f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 315f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 316f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on setup data call response 317f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 318f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 319f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnSetupDataCallResponse() throws Exception { 320f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu DataCallResponse response = new DataCallResponse(); 321f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response.status = 5; 322f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response.suggestedRetryTime = 6; 323f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response.cid = 7; 324f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response.active = 8; 325f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response.type = "IPV4V6"; 326f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response.ifname = "ifname"; 327f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 328f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 1, 2, 329f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu RIL_REQUEST_SETUP_DATA_CALL, response); 330f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 331f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 332f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 333f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 334f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 335f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 336f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 337f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 338f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent.RilSetupDataCallResponse respProto = log.events[0].setupDataCallResponse; 339f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 340f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(respProto.hasStatus()); 341f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(5, respProto.getStatus()); 342f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(respProto.hasSuggestedRetryTimeMillis()); 343f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(6, respProto.getSuggestedRetryTimeMillis()); 344f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(respProto.call.hasCid()); 345f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(7, respProto.call.getCid()); 346f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(respProto.call.hasType()); 347f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(PDP_TYPE_IPV4V6, respProto.call.getType()); 348f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(respProto.call.hasIframe()); 349f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("ifname", respProto.call.getIframe()); 350f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 351f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 352f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on deactivate data call response 353f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 354f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 355f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnDeactivateDataCallResponse() throws Exception { 356f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 2, 3, 357f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu RIL_REQUEST_DEACTIVATE_DATA_CALL, null); 358f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 359f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 360f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 361f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 362f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 363f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 364f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 365f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 366f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].hasType()); 367f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyEvent.Type.DATA_CALL_DEACTIVATE_RESPONSE, log.events[0].getType()); 368f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].hasError()); 369f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(4, log.events[0].getError()); 370f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 371f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 372f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write RIL send SMS 373f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 374f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 375f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteRilSendSms() throws Exception { 376f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilSendSms(mPhone.getPhoneId(), 1, 2, 1); 377f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilSendSms(mPhone.getPhoneId(), 4, 5, 2); 378f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 379f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu SmsResponse response = new SmsResponse(0, null, 123); 380f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 381f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 1, 0, RIL_REQUEST_SEND_SMS, 382f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response); 383f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response = new SmsResponse(0, null, 456); 384f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 4, 0, RIL_REQUEST_SEND_SMS, 385f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response); 386f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 387f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 388f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 389f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 390f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.smsSessions.length); 391f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 392f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 393f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 394f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu SmsSession.Event[] events = log.smsSessions[0].events; 395f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(4, events.length); 396f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[0].hasType()); 397f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(SmsSession.Event.Type.SMS_SEND, events[0].getType()); 398f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[0].hasRilRequestId()); 399f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, events[0].getRilRequestId()); 400f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[0].hasTech()); 401f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, events[0].getTech()); 402f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[0].hasFormat()); 403f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, events[0].getFormat()); 404f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 405f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[1].hasType()); 406f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(SmsSession.Event.Type.SMS_SEND, events[1].getType()); 407f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[1].hasRilRequestId()); 408f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(4, events[1].getRilRequestId()); 409f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[1].hasTech()); 410f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(5, events[1].getTech()); 411f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[1].hasFormat()); 412f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, events[1].getFormat()); 413f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 414f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[2].hasType()); 415f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(SmsSession.Event.Type.SMS_SEND_RESULT, events[2].getType()); 416f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[2].hasRilRequestId()); 417f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, events[2].getRilRequestId()); 418f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[2].hasError()); 419f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, events[2].getError()); 420f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[2].hasErrorCode()); 421f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(123, events[2].getErrorCode()); 422f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 423f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[3].hasType()); 424f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(SmsSession.Event.Type.SMS_SEND_RESULT, events[3].getType()); 425f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[3].hasRilRequestId()); 426f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(4, events[3].getRilRequestId()); 427f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[3].hasError()); 428f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, events[3].getError()); 429f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[3].hasErrorCode()); 430f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(456, events[3].getErrorCode()); 431f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 432f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 433f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write phone state 434f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 435f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 436f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWritePhoneState() throws Exception { 437f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 438f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.OFFHOOK); 439f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 440f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 441f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 442f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 443f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 444f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 445f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 446f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 447f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 448f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].hasPhoneId()); 449f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(mPhone.getPhoneId(), log.callSessions[0].getPhoneId()); 450f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 451f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasType()); 452f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.PHONE_STATE_CHANGED, 453f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu log.callSessions[0].events[1].getType()); 454f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.callSessions[0].events[1].hasPhoneState()); 455f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.PhoneState.STATE_OFFHOOK, 456f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu log.callSessions[0].events[1].getPhoneState()); 457f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 458f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 459f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write RIL dial and hangup 460f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 461f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 462f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteRilDialHangup() throws Exception { 463f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilDial(mPhone.getPhoneId(), 1, 2, mUusInfo); 464f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilHangup(mPhone.getPhoneId(), 2, 3); 465f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 466f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 467f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 468f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 469f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 470f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 471f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 472f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 473f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 474f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyCallSession.Event[] events = log.callSessions[0].events; 475f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 476f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, events.length); 477f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[0].hasType()); 478f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.RIL_REQUEST, events[0].getType()); 479f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[0].hasRilRequest()); 480f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.RilRequest.RIL_REQUEST_DIAL, 481f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu events[0].getRilRequest()); 482f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[0].hasRilRequestId()); 483f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, events[0].getRilRequestId()); 484f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 485f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[1].hasType()); 486f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.RIL_REQUEST, events[1].getType()); 487f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[1].hasRilRequest()); 488f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.RilRequest.RIL_REQUEST_HANGUP, 489f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu events[1].getRilRequest()); 490f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(events[1].hasCallIndex()); 491f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(3, events[1].getCallIndex()); 492f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 493f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 494f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write RIL setup data call 495f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 496f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 497f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteRilSetupDataCall() throws Exception { 498f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilSetupDataCall( 499f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mPhone.getPhoneId(), 1, 14, 3, "apn", 0, "IPV4V6"); 500f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 501f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 502f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 503f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 504f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 505f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 506f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 507f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 508f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 509f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.events[0].hasType()); 510f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyEvent.Type.DATA_CALL_SETUP, log.events[0].getType()); 511f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 512f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent.RilSetupDataCall setupDataCall = log.events[0].setupDataCall; 513f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(setupDataCall.hasApn()); 514f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("apn", setupDataCall.getApn()); 515f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(setupDataCall.hasRat()); 516f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(14, setupDataCall.getRat()); 517f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(setupDataCall.hasDataProfile()); 518f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(4, setupDataCall.getDataProfile()); 519f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(setupDataCall.hasType()); 520f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(PDP_TYPE_IPV4V6, setupDataCall.getType()); 521f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 522f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 523f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write service state changed 524f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 525f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 526f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteServiceStateChanged() throws Exception { 527f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState); 528f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 529f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 530f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 531f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 532f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 533f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 534f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 535f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 536f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent event = log.events[0]; 537f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(event.hasType()); 538f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyEvent.Type.RIL_SERVICE_STATE_CHANGED, event.getType()); 539f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 540f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyServiceState state = event.serviceState; 541f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasVoiceRat()); 542f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.getVoiceRat()); 543f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasDataRat()); 544f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.getDataRat()); 545f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasVoiceRoamingType()); 546f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.getVoiceRoamingType()); 547f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasDataRoamingType()); 548f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.getDataRoamingType()); 549f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.voiceOperator.hasAlphaLong()); 550f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("voicelong", state.voiceOperator.getAlphaLong()); 551f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.voiceOperator.hasAlphaShort()); 552f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("voiceshort", state.voiceOperator.getAlphaShort()); 553f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.voiceOperator.hasNumeric()); 554f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("123456", state.voiceOperator.getNumeric()); 555f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.dataOperator.hasAlphaLong()); 556f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("datalong", state.dataOperator.getAlphaLong()); 557f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.dataOperator.hasAlphaShort()); 558f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("datashort", state.dataOperator.getAlphaShort()); 559f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.dataOperator.hasNumeric()); 560f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("123456", state.dataOperator.getNumeric()); 561f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 562f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 563f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test reset scenario 564f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 565f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 566f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testReset() throws Exception { 567f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState); 568f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu reset(); 569f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 570f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 571f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 572f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 573f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 574f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(log.hasEventsDropped()); 575f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertFalse(log.getEventsDropped()); 576f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 577f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent event = log.events[0]; 578f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(event.hasType()); 579f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyEvent.Type.RIL_SERVICE_STATE_CHANGED, event.getType()); 580f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 581f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyServiceState state = event.serviceState; 582f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasVoiceRat()); 583f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.getVoiceRat()); 584f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasDataRat()); 585f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.getDataRat()); 586f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasVoiceRoamingType()); 587f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.getVoiceRoamingType()); 588f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.hasDataRoamingType()); 589f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.getDataRoamingType()); 590f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.voiceOperator.hasAlphaLong()); 591f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("voicelong", state.voiceOperator.getAlphaLong()); 592f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.voiceOperator.hasAlphaShort()); 593f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("voiceshort", state.voiceOperator.getAlphaShort()); 594f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.voiceOperator.hasNumeric()); 595f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("123456", state.voiceOperator.getNumeric()); 596f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.dataOperator.hasAlphaLong()); 597f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("datalong", state.dataOperator.getAlphaLong()); 598f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.dataOperator.hasAlphaShort()); 599f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("datashort", state.dataOperator.getAlphaShort()); 600f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertTrue(state.dataOperator.hasNumeric()); 601f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals("123456", state.dataOperator.getNumeric()); 602f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 603f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 604f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test Proto Encoding/Decoding 605f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 606f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 607f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testProtoEncodingDecoding() throws Exception { 608f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState); 609f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 610f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu String encodedString = convertProtoToBase64String(log); 611f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 612f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu byte[] decodedString = Base64.decode(encodedString, Base64.DEFAULT); 613f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertArrayEquals(TelephonyProto.TelephonyLog.toByteArray(log), decodedString); 614f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 615f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu}