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