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 191bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static android.telephony.ServiceState.RIL_RADIO_TECHNOLOGY_LTE; 201bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static android.telephony.ServiceState.ROAMING_TYPE_DOMESTIC; 211bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla 221bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEACTIVATE_DATA_CALL; 231bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEND_SMS; 241bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static com.android.internal.telephony.RILConstants.RIL_REQUEST_SETUP_DATA_CALL; 258e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static com.android.internal.telephony.dataconnection.DcTrackerTest.FAKE_ADDRESS; 268e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static com.android.internal.telephony.dataconnection.DcTrackerTest.FAKE_DNS; 278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static com.android.internal.telephony.dataconnection.DcTrackerTest.FAKE_GATEWAY; 288e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static com.android.internal.telephony.dataconnection.DcTrackerTest.FAKE_IFNAME; 298e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static com.android.internal.telephony.dataconnection.DcTrackerTest.FAKE_PCSCF_ADDRESS; 309460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYPE_IPV4V6; 311bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla 321bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static org.junit.Assert.assertArrayEquals; 331bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static org.junit.Assert.assertEquals; 341bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static org.junit.Assert.assertFalse; 351bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static org.junit.Assert.assertTrue; 361bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport static org.mockito.Mockito.doReturn; 371bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla 38516010d13181808ca8205316a419b615e5a9fe5eShuoqimport android.support.test.filters.FlakyTest; 39f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.telephony.ServiceState; 40f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.test.suitebuilder.annotation.SmallTest; 41f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.util.Base64; 42f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 43f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.ims.ImsConfig; 44f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.ims.ImsReasonInfo; 45f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.ims.internal.ImsCallSession; 46f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.Call; 47bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kallaimport com.android.internal.telephony.GsmCdmaConnection; 48f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.PhoneConstants; 49f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.SmsResponse; 50bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kallaimport com.android.internal.telephony.TelephonyTest; 51bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kallaimport com.android.internal.telephony.UUSInfo; 52bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kallaimport com.android.internal.telephony.dataconnection.DataCallResponse; 539460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto; 549460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.ImsConnectionState; 559460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.RadioAccessTechnology; 569460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.SmsSession; 579460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession; 589460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.CallState; 599460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.ImsCommand; 60bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kallaimport com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.RilCall; 619460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent; 629460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.TelephonyLog; 639460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState; 649460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState.RoamingType; 65f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 66f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.junit.After; 67f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.junit.Before; 68f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.junit.Test; 69f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport org.mockito.Mock; 70f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 71f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport java.lang.reflect.Method; 72f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 73f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yupublic class TelephonyMetricsTest extends TelephonyTest { 74f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 75f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Mock 76f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private ImsCallSession mImsCallSession; 77f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 78f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Mock 79f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private ImsReasonInfo mImsReasonInfo; 80f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 81f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Mock 82f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private ServiceState mServiceState; 83f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 84bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla @Mock 85bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla private GsmCdmaConnection mConnection; 86bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla 87f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private TelephonyMetrics mMetrics; 88f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 89f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private UUSInfo mUusInfo; 90f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 91f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Before 92f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void setUp() throws Exception { 93f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu super.setUp(getClass().getSimpleName()); 94f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics = new TelephonyMetrics(); 95f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mUusInfo = new UUSInfo(1, 2, new byte[]{1, 2}); 96f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("123").when(mImsCallSession).getCallId(); 97f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("extramessage").when(mImsReasonInfo).getExtraMessage(); 98f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(123).when(mImsReasonInfo).getCode(); 99f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(456).when(mImsReasonInfo).getExtraCode(); 100f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 101f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(ROAMING_TYPE_DOMESTIC).when(mServiceState).getVoiceRoamingType(); 102f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(ROAMING_TYPE_DOMESTIC).when(mServiceState).getDataRoamingType(); 103f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("voiceshort").when(mServiceState).getVoiceOperatorAlphaShort(); 104f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("voicelong").when(mServiceState).getVoiceOperatorAlphaLong(); 105f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("datashort").when(mServiceState).getDataOperatorAlphaShort(); 106f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("datalong").when(mServiceState).getDataOperatorAlphaLong(); 107f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("123456").when(mServiceState).getVoiceOperatorNumeric(); 108f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn("123456").when(mServiceState).getDataOperatorNumeric(); 109f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState).getRilVoiceRadioTechnology(); 110f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu doReturn(RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState).getRilDataRadioTechnology(); 111f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 112f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 113f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @After 114f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void tearDown() throws Exception { 115f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu super.tearDown(); 116f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 117f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 118f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private TelephonyLog buildProto() throws Exception { 119f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Method method = TelephonyMetrics.class.getDeclaredMethod("buildProto"); 120f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.setAccessible(true); 121f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu return (TelephonyLog) method.invoke(mMetrics); 122f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 123f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 124f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private void reset() throws Exception { 125f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Method method = TelephonyMetrics.class.getDeclaredMethod("reset"); 126f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.setAccessible(true); 127f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.invoke(mMetrics); 128f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 129f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 130f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private String convertProtoToBase64String(TelephonyLog log) throws Exception { 131f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Class[] cArgs = new Class[1]; 132f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu cArgs[0] = TelephonyLog.class; 133f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu Method method = TelephonyMetrics.class.getDeclaredMethod("convertProtoToBase64String", 134f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu cArgs); 135f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu method.setAccessible(true); 136f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu return (String) method.invoke(null, log); 137f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 138f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 139f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 140f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 141f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testEventDropped() throws Exception { 142f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu for (int i = 0; i < 1001; i++) { 143f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeDataStallEvent(mPhone.getPhoneId(), i); 144f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 145f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 146f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1000, log.events.length); 147f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 148f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 149da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertTrue(log.eventsDropped); 150da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(1, log.events[0].dataStallAction); 151f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 152f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 153f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write data stall event 154f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 155f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 156f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteDataStallEvent() throws Exception { 157f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeDataStallEvent(mPhone.getPhoneId(), 3); 158f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 159f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 160f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 161f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 162f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 163da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(mPhone.getPhoneId(), log.events[0].phoneId); 164da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(3, log.events[0].dataStallAction); 165f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 166f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 1671bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla // Test write modem restart event 1681bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla @Test 1691bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla @SmallTest 1701bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla public void testModemRestartEvent() throws Exception { 1711bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla mMetrics.writeModemRestartEvent(mPhone.getPhoneId(), "Test"); 1721bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla TelephonyLog log = buildProto(); 1731bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla 1741bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla assertEquals(1, log.events.length); 1751bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla assertEquals(0, log.callSessions.length); 1761bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla assertEquals(0, log.smsSessions.length); 177da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 178da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(mPhone.getPhoneId(), log.events[0].phoneId); 179da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("Test", log.events[0].modemRestart.reason); 1801bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla } 1811bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla 182f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on IMS call start 183f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 184f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 185f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsCallStart() throws Exception { 186f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 187f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 188f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 189f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 190f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 191f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 192f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 193da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 194da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(mPhone.getPhoneId(), log.callSessions[0].phoneId); 195da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 196da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.callSessions[0].eventsDropped); 197da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 198f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions[0].events.length); 199da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 200da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.callSessions[0].events[0].callIndex); 201da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 202da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(ImsCommand.IMS_CMD_START, log.callSessions[0].events[0].imsCommand); 203f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 204f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 20565d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu // Test write on IMS call received 20665d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu @Test 20765d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu @SmallTest 20865d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu public void testWriteOnImsCallReceive() throws Exception { 20965d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writeOnImsCallReceive(mPhone.getPhoneId(), mImsCallSession); 21065d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 21165d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu TelephonyLog log = buildProto(); 21265d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu 21365d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu assertEquals(0, log.events.length); 21465d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu assertEquals(1, log.callSessions.length); 21565d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu assertEquals(0, log.smsSessions.length); 216da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(mPhone.getPhoneId(), log.callSessions[0].phoneId); 217da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 218da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.callSessions[0].eventsDropped); 219da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 22065d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu assertEquals(1, log.callSessions[0].events.length); 221da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 222da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.callSessions[0].events[0].callIndex); 22365d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu } 22465d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu 225f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write ims call state 226f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 227f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 228f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteImsCallState() throws Exception { 229f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 230f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeImsCallState(mPhone.getPhoneId(), mImsCallSession, Call.State.ACTIVE); 231f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 232f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 233f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 234f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 235f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 236f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 237f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 238da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.callSessions[0].eventsDropped); 239da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 240da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.callSessions[0].events[1].callIndex); 241da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 242da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(CallState.CALL_ACTIVE, log.callSessions[0].events[1].callState); 243f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 244f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 245f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write ims set feature value 246f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 247f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 248f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteImsSetFeatureValue() throws Exception { 249f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 250f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeImsSetFeatureValue(mPhone.getPhoneId(), 251f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE, 0, 1, 0); 25265d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writeImsSetFeatureValue(mPhone.getPhoneId(), 25365d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE, 0, 1, 0); 254f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 255f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 256f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 257f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 258f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 259f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 260f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 261da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.callSessions[0].eventsDropped); 262da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertTrue(log.callSessions[0].events[1].settings.isEnhanced4GLteModeEnabled); 263f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 264f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 265f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on ims call handover event 266f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 267f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 268f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsCallHandoverEvent() throws Exception { 269f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 270f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallHandoverEvent(mPhone.getPhoneId(), 271f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyCallSession.Event.Type.IMS_CALL_HANDOVER, mImsCallSession, 5, 6, 272f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mImsReasonInfo); 273f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 274f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 275f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 276f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 277f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 278f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 279f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 280da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.callSessions[0].eventsDropped); 281f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.IMS_CALL_HANDOVER, 282da243aa6e2c4285975feb44524603e8b20093e70Jack Yu log.callSessions[0].events[1].type); 283da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.callSessions[0].events[1].callIndex); 284da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(5, log.callSessions[0].events[1].srcAccessTech); 285da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(6, log.callSessions[0].events[1].targetAccessTech); 286da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 287da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("extramessage", log.callSessions[0].events[1].reasonInfo.extraMessage); 288da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(456, log.callSessions[0].events[1].reasonInfo.extraCode); 289da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.callSessions[0].events[1].reasonInfo.reasonCode); 290f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 291f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 292f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on ims command 293f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 294f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 295f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsCommand() throws Exception { 296f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 297f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCommand(mPhone.getPhoneId(), mImsCallSession, 123); 298f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 299f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 300f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 301f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 302f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 303f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 304f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 305da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 306da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.callSessions[0].eventsDropped); 307da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 308f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.IMS_COMMAND, 309da243aa6e2c4285975feb44524603e8b20093e70Jack Yu log.callSessions[0].events[1].type); 310da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 311da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.callSessions[0].events[1].imsCommand); 312da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 313da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.callSessions[0].events[1].callIndex); 314f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 315f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 316f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on ims connection state 317f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 318f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 319f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnImsConnectionState() throws Exception { 320f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 321f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(), 322f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu ImsConnectionState.State.CONNECTED, mImsReasonInfo); 32365d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writeOnImsConnectionState(mPhone.getPhoneId(), 32465d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu ImsConnectionState.State.CONNECTED, mImsReasonInfo); 325f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 326f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 327f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 328f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 329f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 330f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 331f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 332da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 333da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyEvent.Type.IMS_CONNECTION_STATE_CHANGED, log.events[0].type); 334f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(ImsConnectionState.State.CONNECTED, 335da243aa6e2c4285975feb44524603e8b20093e70Jack Yu log.events[0].imsConnectionState.state); 336da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, log.events[0].imsConnectionState.reasonInfo.reasonCode); 337da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(456, log.events[0].imsConnectionState.reasonInfo.extraCode); 338da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("extramessage", log.events[0].imsConnectionState.reasonInfo.extraMessage); 339da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.callSessions[0].eventsDropped); 340f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.IMS_CONNECTION_STATE_CHANGED, 341da243aa6e2c4285975feb44524603e8b20093e70Jack Yu log.callSessions[0].events[1].type); 342f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(ImsConnectionState.State.CONNECTED, 343da243aa6e2c4285975feb44524603e8b20093e70Jack Yu log.callSessions[0].events[1].imsConnectionState.state); 344f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 345f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 346f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on setup data call response 347f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 348f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 349f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnSetupDataCallResponse() throws Exception { 3508e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu DataCallResponse response = new DataCallResponse(5, 6, 7, 8, "IPV4V6", FAKE_IFNAME, 3518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu FAKE_ADDRESS, FAKE_DNS, FAKE_GATEWAY, FAKE_PCSCF_ADDRESS, 1440); 352f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 353f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 1, 2, 354f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu RIL_REQUEST_SETUP_DATA_CALL, response); 355f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 356f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 357f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 358f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 359f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 360da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 361f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 362f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent.RilSetupDataCallResponse respProto = log.events[0].setupDataCallResponse; 363f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 364da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(5, respProto.status); 365da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(6, respProto.suggestedRetryTimeMillis); 366da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(7, respProto.call.cid); 367da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(PDP_TYPE_IPV4V6, respProto.call.type); 3688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(FAKE_IFNAME, respProto.call.iframe); 369f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 370f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 371f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write on deactivate data call response 372f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 373f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 374f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteOnDeactivateDataCallResponse() throws Exception { 375f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 2, 3, 376f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu RIL_REQUEST_DEACTIVATE_DATA_CALL, null); 377f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 378f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 379f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 380f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 381f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 382da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 383f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 384da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyEvent.Type.DATA_CALL_DEACTIVATE_RESPONSE, log.events[0].type); 385da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(4, log.events[0].error); 386f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 387f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 388f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write RIL send SMS 389f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 390f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 391f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteRilSendSms() throws Exception { 392f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilSendSms(mPhone.getPhoneId(), 1, 2, 1); 393f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilSendSms(mPhone.getPhoneId(), 4, 5, 2); 394f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 395f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu SmsResponse response = new SmsResponse(0, null, 123); 396f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 397f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 1, 0, RIL_REQUEST_SEND_SMS, 398f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response); 399f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response = new SmsResponse(0, null, 456); 400f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnRilSolicitedResponse(mPhone.getPhoneId(), 4, 0, RIL_REQUEST_SEND_SMS, 401f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu response); 402f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 403f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 404f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 405f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 406f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.smsSessions.length); 407da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 408f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 409f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu SmsSession.Event[] events = log.smsSessions[0].events; 410f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(4, events.length); 411da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(SmsSession.Event.Type.SMS_SEND, events[0].type); 412da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(1, events[0].rilRequestId); 413da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(2, events[0].tech); 414da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(1, events[0].format); 415da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 416da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(SmsSession.Event.Type.SMS_SEND, events[1].type); 417da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(4, events[1].rilRequestId); 418da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(5, events[1].tech); 419da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(2, events[1].format); 420da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 421da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(SmsSession.Event.Type.SMS_SEND_RESULT, events[2].type); 422da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(1, events[2].rilRequestId); 42368b934aacdaff2a2688172cfb3e20135d72034e3Jack Yu assertEquals(1, events[2].error); 424da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(123, events[2].errorCode); 425da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 426da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(SmsSession.Event.Type.SMS_SEND_RESULT, events[3].type); 427da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(4, events[3].rilRequestId); 42868b934aacdaff2a2688172cfb3e20135d72034e3Jack Yu assertEquals(1, events[3].error); 429da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(456, events[3].errorCode); 430f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 431f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 432f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write phone state 433f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 434f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 435f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWritePhoneState() throws Exception { 436f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeOnImsCallStart(mPhone.getPhoneId(), mImsCallSession); 437f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.OFFHOOK); 438f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 439f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 440f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 441f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 442f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 443f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 444da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 445f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 446da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(mPhone.getPhoneId(), log.callSessions[0].phoneId); 447f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, log.callSessions[0].events.length); 448f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.Type.PHONE_STATE_CHANGED, 449da243aa6e2c4285975feb44524603e8b20093e70Jack Yu log.callSessions[0].events[1].type); 450f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.PhoneState.STATE_OFFHOOK, 451da243aa6e2c4285975feb44524603e8b20093e70Jack Yu log.callSessions[0].events[1].phoneState); 452f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 453f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 454f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write RIL dial and hangup 455f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 456f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 457f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteRilDialHangup() throws Exception { 458bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla doReturn(Call.State.DIALING).when(mConnection).getState(); 459bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla mMetrics.writeRilDial(mPhone.getPhoneId(), mConnection, 2, mUusInfo); 460bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla doReturn(Call.State.DISCONNECTED).when(mConnection).getState(); 461bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla mMetrics.writeRilHangup(mPhone.getPhoneId(), mConnection, 3); 462f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writePhoneState(mPhone.getPhoneId(), PhoneConstants.State.IDLE); 463f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 464f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 465f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.events.length); 466f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.callSessions.length); 467f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 468da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 469f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 470f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyCallSession.Event[] events = log.callSessions[0].events; 471f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 472f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(2, events.length); 473da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyCallSession.Event.Type.RIL_REQUEST, events[0].type); 474da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 475f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.RilRequest.RIL_REQUEST_DIAL, 476da243aa6e2c4285975feb44524603e8b20093e70Jack Yu events[0].rilRequest); 477bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla RilCall[] calls = events[0].calls; 478bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla assertEquals(CallState.CALL_DIALING, calls[0].state); 479f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 480f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(TelephonyCallSession.Event.RilRequest.RIL_REQUEST_HANGUP, 481da243aa6e2c4285975feb44524603e8b20093e70Jack Yu events[1].rilRequest); 482bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla calls = events[1].calls; 483bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla assertEquals(3, calls[0].index); 484bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla assertEquals(CallState.CALL_DISCONNECTED, calls[0].state); 485f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 486f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 487f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write RIL setup data call 488f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 489f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 490f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteRilSetupDataCall() throws Exception { 491f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeRilSetupDataCall( 492f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mPhone.getPhoneId(), 1, 14, 3, "apn", 0, "IPV4V6"); 493f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 494f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 495f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 496f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 497f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 498f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 499bdaed78d68d889a024c90ca5e48a2297074247bcNaveen Kalla 500da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 501da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 502f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 503da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyEvent.Type.DATA_CALL_SETUP, log.events[0].type); 504f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 505f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent.RilSetupDataCall setupDataCall = log.events[0].setupDataCall; 506da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 507da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("apn", setupDataCall.apn); 508da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 509da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(14, setupDataCall.rat); 510da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 511da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(4, setupDataCall.dataProfile); 512da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 513da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(PDP_TYPE_IPV4V6, setupDataCall.type); 514f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 515f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 516f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test write service state changed 517f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 518f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 519f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testWriteServiceStateChanged() throws Exception { 520f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState); 52165d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState); 522f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 523f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 524f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 525f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 526f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 5278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 528da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 529f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 530f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent event = log.events[0]; 531da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 532da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyEvent.Type.RIL_SERVICE_STATE_CHANGED, event.type); 533f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 534f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyServiceState state = event.serviceState; 535da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 536da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.voiceRat); 537da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 538da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.dataRat); 539da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 540da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.voiceRoamingType); 541da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 542da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.dataRoamingType); 543da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 544da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("voicelong", state.voiceOperator.alphaLong); 545da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 546da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("voiceshort", state.voiceOperator.alphaShort); 547da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 548da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("123456", state.voiceOperator.numeric); 549da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 550da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("datalong", state.dataOperator.alphaLong); 551da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 552da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("datashort", state.dataOperator.alphaShort); 553da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 554da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("123456", state.dataOperator.numeric); 555f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 556f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 557f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test reset scenario 558f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 559f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 560f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testReset() throws Exception { 561f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState); 562f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu reset(); 563f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 564f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 565f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(1, log.events.length); 566f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.callSessions.length); 567f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertEquals(0, log.smsSessions.length); 5688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 569da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertFalse(log.eventsDropped); 570f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 571f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyEvent event = log.events[0]; 572da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 573da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyEvent.Type.RIL_SERVICE_STATE_CHANGED, event.type); 574f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 575f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyServiceState state = event.serviceState; 576da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 577da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.voiceRat); 578da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 579da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RadioAccessTechnology.RAT_LTE, state.dataRat); 580da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 581da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.voiceRoamingType); 582da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 583da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.dataRoamingType); 584da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 585da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("voicelong", state.voiceOperator.alphaLong); 586da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 587da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("voiceshort", state.voiceOperator.alphaShort); 588da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 589da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("123456", state.voiceOperator.numeric); 590da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 591da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("datalong", state.dataOperator.alphaLong); 592da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 593da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("datashort", state.dataOperator.alphaShort); 594da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 595da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals("123456", state.dataOperator.numeric); 596f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 597f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 598f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu // Test Proto Encoding/Decoding 599f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @Test 600f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu @SmallTest 601f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu public void testProtoEncodingDecoding() throws Exception { 602f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState); 603f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu TelephonyLog log = buildProto(); 604f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu String encodedString = convertProtoToBase64String(log); 605f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu 606f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu byte[] decodedString = Base64.decode(encodedString, Base64.DEFAULT); 607f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu assertArrayEquals(TelephonyProto.TelephonyLog.toByteArray(log), decodedString); 608f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu } 60965d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu 61065d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu // Test write ims capabilities changed 61165d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu @Test 61265d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu @SmallTest 61365d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu public void testWriteOnImsCapabilities() throws Exception { 61465d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu boolean[] caps1 = new boolean[]{true, false, true, false, true, false}; 61565d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writeOnImsCapabilities(mPhone.getPhoneId(), caps1); 61665d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu boolean[] caps2 = new boolean[]{true, false, true, false, true, false}; 61765d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu // The duplicate one should be filtered out. 61865d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writeOnImsCapabilities(mPhone.getPhoneId(), caps2); 61965d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu boolean[] caps3 = new boolean[]{false, true, false, true, false, true}; 62065d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu mMetrics.writeOnImsCapabilities(mPhone.getPhoneId(), caps3); 62165d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu TelephonyLog log = buildProto(); 62265d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu 62365d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu assertEquals(2, log.events.length); 62465d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu assertEquals(0, log.callSessions.length); 62565d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu assertEquals(0, log.smsSessions.length); 62665d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu 62765d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu TelephonyEvent event = log.events[0]; 628da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 629da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyEvent.Type.IMS_CAPABILITIES_CHANGED, event.type); 630da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps1[0], event.imsCapabilities.voiceOverLte); 631da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps1[1], event.imsCapabilities.videoOverLte); 632da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps1[2], event.imsCapabilities.voiceOverWifi); 633da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps1[3], event.imsCapabilities.videoOverWifi); 634da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps1[4], event.imsCapabilities.utOverLte); 635da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps1[5], event.imsCapabilities.utOverWifi); 63665d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu 63765d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu event = log.events[1]; 638da243aa6e2c4285975feb44524603e8b20093e70Jack Yu 639da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(TelephonyEvent.Type.IMS_CAPABILITIES_CHANGED, event.type); 640da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps3[0], event.imsCapabilities.voiceOverLte); 641da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps3[1], event.imsCapabilities.videoOverLte); 642da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps3[2], event.imsCapabilities.voiceOverWifi); 643da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps3[3], event.imsCapabilities.videoOverWifi); 644da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps3[4], event.imsCapabilities.utOverLte); 645da243aa6e2c4285975feb44524603e8b20093e70Jack Yu assertEquals(caps3[5], event.imsCapabilities.utOverWifi); 64665d2fbff57871b60ca2ecc607fdbacdf7930b2f7Jack Yu } 6479460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammer} 648