1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.internal.telephony.metrics;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertTrue;
22 
23 import android.test.suitebuilder.annotation.SmallTest;
24 
25 import com.android.internal.telephony.TelephonyTest;
26 import com.android.internal.telephony.nano.TelephonyProto;
27 import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.CallQuality;
28 import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.CallQualitySummary;
29 import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.SignalStrength;
30 
31 import org.junit.After;
32 import org.junit.Before;
33 import org.junit.Test;
34 
35 public class InProgressCallSessionTest extends TelephonyTest {
36 
37     private InProgressCallSession mCallSession;
38 
39     @Before
setUp()40     public void setUp() throws Exception {
41         super.setUp(getClass().getSimpleName());
42         mCallSession = new InProgressCallSession(mPhone.getPhoneId());
43     }
44 
45     @After
tearDown()46     public void tearDown() throws Exception {
47         super.tearDown();
48     }
49 
50     // Test add event
51     @Test
52     @SmallTest
testAddEvent()53     public void testAddEvent() {
54         CallSessionEventBuilder builder = new CallSessionEventBuilder(
55                 TelephonyProto.TelephonyCallSession.Event.Type.RIL_RESPONSE)
56                 .setRilRequest(1)
57                 .setRilRequestId(2)
58                 .setRilError(3);
59         mCallSession.addEvent(builder);
60         assertEquals(builder.build(), mCallSession.events.getFirst());
61         assertFalse(mCallSession.isEventsDropped());
62     }
63 
64     // Test dropped event scenario
65     @Test
66     @SmallTest
testEventDropped()67     public void testEventDropped() {
68         for (int i = 0; i < 301; i++) {
69             CallSessionEventBuilder builder = new CallSessionEventBuilder(
70                     TelephonyProto.TelephonyCallSession.Event.Type.RIL_RESPONSE)
71                     .setRilRequest(1)
72                     .setRilRequestId(i + 1)
73                     .setRilError(3);
74             mCallSession.addEvent(builder);
75         }
76 
77         assertTrue(mCallSession.isEventsDropped());
78         assertEquals(2, mCallSession.events.getFirst().rilRequestId);
79     }
80 
81     @Test
82     @SmallTest
testAddCallQualityEvent()83     public void testAddCallQualityEvent() {
84         CallQuality cq = new CallQuality();
85         cq.downlinkLevel = CallQuality.CallQualityLevel.GOOD;
86         cq.uplinkLevel = CallQuality.CallQualityLevel.GOOD;
87         CallSessionEventBuilder builder = new CallSessionEventBuilder(
88                 TelephonyProto.TelephonyCallSession.Event.Type.CALL_QUALITY_CHANGED)
89                 .setCallQuality(cq);
90         mCallSession.addEvent(builder);
91         assertEquals(builder.build(), mCallSession.events.getFirst());
92     }
93 
94     @Test
95     @SmallTest
testAddCallQualitySummaryEvent()96     public void testAddCallQualitySummaryEvent() {
97         SignalStrength ss1 = new SignalStrength();
98         ss1.lteSnr = 22;
99 
100         SignalStrength ss2 = new SignalStrength();
101         ss2.lteSnr = 44;
102 
103         CallQuality cq1 = new CallQuality();
104         cq1.downlinkLevel = CallQuality.CallQualityLevel.GOOD;
105         cq1.uplinkLevel = CallQuality.CallQualityLevel.GOOD;
106 
107         CallQuality cq2 = new CallQuality();
108         cq1.downlinkLevel = CallQuality.CallQualityLevel.BAD;
109         cq1.uplinkLevel = CallQuality.CallQualityLevel.BAD;
110 
111         CallQualitySummary cqs = new CallQualitySummary();
112         cqs.totalGoodQualityDurationInSeconds = 2;
113         cqs.totalBadQualityDurationInSeconds = 3;
114         cqs.totalDurationWithQualityInformationInSeconds = 5;
115         cqs.snapshotOfWorstSsWithGoodQuality = cq2;
116         cqs.snapshotOfBestSsWithGoodQuality = cq2;
117         cqs.snapshotOfWorstSsWithBadQuality = cq1;
118         cqs.snapshotOfBestSsWithBadQuality = cq1;
119         cqs.worstSsWithGoodQuality = ss1;
120         cqs.bestSsWithGoodQuality = ss2;
121         cqs.worstSsWithBadQuality = ss1;
122         cqs.bestSsWithBadQuality = ss2;
123 
124         CallSessionEventBuilder builder = new CallSessionEventBuilder(
125                 TelephonyProto.TelephonyCallSession.Event.Type.CALL_QUALITY_CHANGED)
126                 .setCallQualitySummaryDl(cqs)
127                 .setCallQualitySummaryUl(cqs);
128         mCallSession.addEvent(builder);
129         assertEquals(builder.build(), mCallSession.events.getFirst());
130     }
131 }
132