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