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