summaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorRakesh Raghava <rakeshraghava@google.com>2022-04-26 12:10:25 +0000
committerRakesh Raghava <rakeshraghava@google.com>2022-06-22 17:29:20 +0000
commit5cbbf1f7705ea50196a75ba97808b342d52f868b (patch)
tree0f9785ffc3c02ec580d71171bade8d8cb8e4f37e /tests/unit
parentfaf65268f681c9ecd5be06df9ba9eefed58f2efd (diff)
downloadImsMedia-5cbbf1f7705ea50196a75ba97808b342d52f868b.tar.gz
(ImsMedia) added CallQuality APIs
- updated aidl - handled in ImsMedia java layer - UT updated Bug: 236845105 Test: build (mm) and atest ImsMediaJavaUnitTests Change-Id: Ia84628acf8c921879612253f7d3db390e800d9e7
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/src/com/android/telephony/imsmedia/AudioOffloadTest.java36
-rw-r--r--tests/unit/src/com/android/telephony/imsmedia/AudioSessionTest.java14
-rw-r--r--tests/unit/src/com/android/telephony/imsmedia/CallQualityTest.java182
3 files changed, 222 insertions, 10 deletions
diff --git a/tests/unit/src/com/android/telephony/imsmedia/AudioOffloadTest.java b/tests/unit/src/com/android/telephony/imsmedia/AudioOffloadTest.java
index be5f9b43..b29f80f4 100644
--- a/tests/unit/src/com/android/telephony/imsmedia/AudioOffloadTest.java
+++ b/tests/unit/src/com/android/telephony/imsmedia/AudioOffloadTest.java
@@ -36,6 +36,7 @@ import android.hardware.radio.ims.media.RtpError;
import android.hardware.radio.ims.media.RtpSessionState;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
+import android.telephony.CallQuality;
import android.telephony.ims.RtpHeaderExtension;
import android.telephony.imsmedia.AudioConfig;
import android.telephony.imsmedia.IImsAudioSessionCallback;
@@ -279,7 +280,7 @@ public class AudioOffloadTest {
final AudioConfig outputAudioConfig = Utils.convertToAudioConfig(outputRtpConfig);
// Ensure both are same
assertEquals(inputAudioConfig, outputAudioConfig);
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to invoke confirmConfig: " + e);
}
@@ -298,7 +299,7 @@ public class AudioOffloadTest {
try {
verify(callback, times(1)).onConfirmConfigResponse(
eq(inputAudioConfig), eq(NO_RESOURCES));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify confirmConfigResponse: " + e);
}
}
@@ -346,7 +347,7 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).notifyMediaInactivity(eq(RTP));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify notifyMediaInactivity: " + e);
}
@@ -355,7 +356,7 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).notifyMediaInactivity(eq(RTCP));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify notifyMediaInactivity: " + e);
}
}
@@ -367,7 +368,7 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).notifyPacketLoss(eq(PACKET_LOSS));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify notifyPacketLoss: " + e);
}
}
@@ -379,7 +380,7 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).notifyJitter(eq(JITTER));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify notifyJitter: " + e);
}
}
@@ -394,7 +395,7 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).onFirstMediaPacketReceived(eq(outputAudioConfig));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify onFirstMediaPacketReceived: " + e);
}
}
@@ -433,7 +434,7 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).onHeaderExtensionReceived(eq(inputExtensions));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify onHeaderExtensionReceived: " + e);
}
}
@@ -448,7 +449,7 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).triggerAnbrQuery(eq(outputAudioConfig));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify triggerAnbrQuery: " + e);
}
}
@@ -460,11 +461,26 @@ public class AudioOffloadTest {
processAllMessages();
try {
verify(callback, times(1)).onDtmfReceived(eq(DTMF_DIGIT));
- } catch (RemoteException e) {
+ } catch (RemoteException e) {
fail("Failed to notify onDtmfReceived: " + e);
}
}
+ public void testCallQualityChangedInd() {
+ final android.hardware.radio.ims.media.CallQuality inputCallQuality =
+ CallQualityTest.createHalCallQuality();
+ final CallQuality outputCallQuality = Utils.convertCallQuality(inputCallQuality);
+
+ // Receive Call Quality Changed Indication
+ offloadListener.onCallQualityChanged(inputCallQuality);
+ processAllMessages();
+ try {
+ verify(callback, times(1)).onCallQualityChanged(eq(outputCallQuality));
+ } catch (RemoteException e) {
+ fail("Failed to notify onCallQualityChanged: " + e);
+ }
+ }
+
private void processAllMessages() {
while (!looper.getLooper().getQueue().isIdle()) {
looper.processAllMessages();
diff --git a/tests/unit/src/com/android/telephony/imsmedia/AudioSessionTest.java b/tests/unit/src/com/android/telephony/imsmedia/AudioSessionTest.java
index 670e2bad..ace49897 100644
--- a/tests/unit/src/com/android/telephony/imsmedia/AudioSessionTest.java
+++ b/tests/unit/src/com/android/telephony/imsmedia/AudioSessionTest.java
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.verify;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
+import android.telephony.CallQuality;
import android.telephony.ims.RtpHeaderExtension;
import android.telephony.imsmedia.AudioConfig;
import android.telephony.imsmedia.IImsAudioSessionCallback;
@@ -366,6 +367,19 @@ public class AudioSessionTest {
}
}
+ @Test
+ public void testCallQualityChangedInd() {
+ // Receive Call Quality Changed Indication
+ CallQuality callQuality = CallQualityTest.createCallQuality();
+ Utils.sendMessage(handler, AudioSession.EVENT_CALL_QUALITY_CHANGE_IND, callQuality);
+ processAllMessages();
+ try {
+ verify(callback, times(1)).onCallQualityChanged(eq(callQuality));
+ } catch (RemoteException e) {
+ fail("Failed to notify onCallQualityChanged: " + e);
+ }
+ }
+
private void processAllMessages() {
while (!looper.getLooper().getQueue().isIdle()) {
looper.processAllMessages();
diff --git a/tests/unit/src/com/android/telephony/imsmedia/CallQualityTest.java b/tests/unit/src/com/android/telephony/imsmedia/CallQualityTest.java
new file mode 100644
index 00000000..f44e7004
--- /dev/null
+++ b/tests/unit/src/com/android/telephony/imsmedia/CallQualityTest.java
@@ -0,0 +1,182 @@
+/**
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.telephony.imsmedia;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.telephony.CallQuality;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class CallQualityTest {
+ private static final int DOWNLINKCALLQUALITYLEVEL = 1;
+ private static final int UPLINKCALLQUALITYLEVEL = 2;
+ private static final int CALLDURATION = 40000;
+ private static final int NUMRTPPACKETSTRANSMITTED = 1600;
+ private static final int NUMRTPPACKETSRECEIVED = 1700;
+ private static final int NUMRTPPACKETSTRANSMITTEDLOST = 400;
+ private static final int NUMRTPPACKETSNOTRECEIVED = 42;
+ private static final int AVERAGERELATIVEJITTER = 30;
+ private static final int MAXRELATIVEJITTER = 40;
+ private static final int AVERAGEROUNDTRIPTIME = 100;
+ private static final int CODECTYPE = 1;
+ private static final boolean RTPINACTIVITYDETECTED = true;
+ private static final boolean RXSILENCEDETECTED = false;
+ private static final boolean TXSILENCEDETECTED = false;
+ private static final int NUMVOICEFRAMES = 100;
+ private static final int NUMNODATAFRAMES = 20;
+ private static final int NUMDROPPEDRTPPACKETS = 40;
+ private static final long MINPLAYOUTDELAYMILLIS = 200;
+ private static final long MAXPLAYOUTDELAYMILLIS = 1000;
+ private static final int NUMRTPSIDPACKETSRECEIVED = 20;
+ private static final int NUMRTPDUPLICATEPACKETS = 50;
+
+ static CallQuality createCallQuality() {
+ return new CallQuality.Builder()
+ .setDownlinkCallQualityLevel(DOWNLINKCALLQUALITYLEVEL)
+ .setUplinkCallQualityLevel(UPLINKCALLQUALITYLEVEL)
+ .setCallDurationMillis(CALLDURATION)
+ .setNumRtpPacketsTransmitted(NUMRTPPACKETSTRANSMITTED)
+ .setNumRtpPacketsReceived(NUMRTPPACKETSRECEIVED)
+ .setNumRtpPacketsTransmittedLost(NUMRTPPACKETSTRANSMITTEDLOST)
+ .setNumRtpPacketsNotReceived(NUMRTPPACKETSNOTRECEIVED)
+ .setAverageRelativeJitter(AVERAGERELATIVEJITTER)
+ .setMaxRelativeJitter(MAXRELATIVEJITTER)
+ .setAverageRoundTripTimeMillis(AVERAGEROUNDTRIPTIME)
+ .setCodecType(CODECTYPE)
+ .setRtpInactivityDetected(RTPINACTIVITYDETECTED)
+ .setIncomingSilenceDetectedAtCallSetup(RXSILENCEDETECTED)
+ .setOutgoingSilenceDetectedAtCallSetup(TXSILENCEDETECTED)
+ .setNumVoiceFrames(NUMVOICEFRAMES)
+ .setNumNoDataFrames(NUMNODATAFRAMES)
+ .setNumDroppedRtpPackets(NUMDROPPEDRTPPACKETS)
+ .setMinPlayoutDelayMillis(MINPLAYOUTDELAYMILLIS)
+ .setMaxPlayoutDelayMillis(MAXPLAYOUTDELAYMILLIS)
+ .setNumRtpSidPacketsReceived(NUMRTPSIDPACKETSRECEIVED)
+ .setNumRtpDuplicatePackets(NUMRTPDUPLICATEPACKETS)
+ .build();
+ }
+
+ static android.hardware.radio.ims.media.CallQuality createHalCallQuality() {
+ final android.hardware.radio.ims.media.CallQuality callQuality =
+ new android.hardware.radio.ims.media.CallQuality();
+ callQuality.downlinkCallQualityLevel = DOWNLINKCALLQUALITYLEVEL;
+ callQuality.uplinkCallQualityLevel = UPLINKCALLQUALITYLEVEL;
+ callQuality.callDuration = CALLDURATION;
+ callQuality.numRtpPacketsTransmitted = NUMRTPPACKETSTRANSMITTED;
+ callQuality.numRtpPacketsReceived = NUMRTPPACKETSRECEIVED;
+ callQuality.numRtpPacketsTransmittedLost = NUMRTPPACKETSTRANSMITTEDLOST;
+ callQuality.numRtpPacketsNotReceived = NUMRTPPACKETSNOTRECEIVED;
+ callQuality.averageRelativeJitter = AVERAGERELATIVEJITTER;
+ callQuality.maxRelativeJitter = MAXRELATIVEJITTER;
+ callQuality.averageRoundTripTime = AVERAGEROUNDTRIPTIME;
+ callQuality.codecType = CODECTYPE;
+ callQuality.rtpInactivityDetected = RTPINACTIVITYDETECTED;
+ callQuality.rxSilenceDetected = RXSILENCEDETECTED;
+ callQuality.txSilenceDetected = TXSILENCEDETECTED;
+ callQuality.numVoiceFrames = NUMVOICEFRAMES;
+ callQuality.numNoDataFrames = NUMNODATAFRAMES;
+ callQuality.numDroppedRtpPackets = NUMDROPPEDRTPPACKETS;
+ callQuality.minPlayoutDelayMillis = MINPLAYOUTDELAYMILLIS;
+ callQuality.maxPlayoutDelayMillis = MAXPLAYOUTDELAYMILLIS;
+ callQuality.numRtpSidPacketsReceived = NUMRTPSIDPACKETSRECEIVED;
+ callQuality.numRtpDuplicatePackets = NUMRTPDUPLICATEPACKETS;
+ return callQuality;
+ }
+
+ @Test
+ public void testConstructorAndGetters() {
+ CallQuality callQuality = createCallQuality();
+
+ assertThat(callQuality.getDownlinkCallQualityLevel()).isEqualTo(DOWNLINKCALLQUALITYLEVEL);
+ assertThat(callQuality.getUplinkCallQualityLevel()).isEqualTo(UPLINKCALLQUALITYLEVEL);
+ assertThat(callQuality.getCallDuration()).isEqualTo(CALLDURATION);
+ assertThat(callQuality.getNumRtpPacketsTransmitted()).isEqualTo(NUMRTPPACKETSTRANSMITTED);
+ assertThat(callQuality.getNumRtpPacketsReceived()).isEqualTo(NUMRTPPACKETSRECEIVED);
+ assertThat(callQuality.getNumRtpPacketsTransmittedLost())
+ .isEqualTo(NUMRTPPACKETSTRANSMITTEDLOST);
+ assertThat(callQuality.getNumRtpPacketsNotReceived()).isEqualTo(NUMRTPPACKETSNOTRECEIVED);
+ assertThat(callQuality.getAverageRelativeJitter()).isEqualTo(AVERAGERELATIVEJITTER);
+ assertThat(callQuality.getMaxRelativeJitter()).isEqualTo(MAXRELATIVEJITTER);
+ assertThat(callQuality.getAverageRoundTripTime()).isEqualTo(AVERAGEROUNDTRIPTIME);
+ assertThat(callQuality.getCodecType()).isEqualTo(CODECTYPE);
+ assertThat(callQuality.isRtpInactivityDetected()).isEqualTo(RTPINACTIVITYDETECTED);
+ assertThat(callQuality.isIncomingSilenceDetectedAtCallSetup()).isEqualTo(RXSILENCEDETECTED);
+ assertThat(callQuality.isOutgoingSilenceDetectedAtCallSetup()).isEqualTo(TXSILENCEDETECTED);
+ assertThat(callQuality.getNumVoiceFrames()).isEqualTo(NUMVOICEFRAMES);
+ assertThat(callQuality.getNumNoDataFrames()).isEqualTo(NUMNODATAFRAMES);
+ assertThat(callQuality.getNumDroppedRtpPackets()).isEqualTo(NUMDROPPEDRTPPACKETS);
+ assertThat(callQuality.getMinPlayoutDelayMillis()).isEqualTo(MINPLAYOUTDELAYMILLIS);
+ assertThat(callQuality.getMaxPlayoutDelayMillis()).isEqualTo(MAXPLAYOUTDELAYMILLIS);
+ assertThat(callQuality.getNumRtpSidPacketsReceived()).isEqualTo(NUMRTPSIDPACKETSRECEIVED);
+ assertThat(callQuality.getNumRtpDuplicatePackets()).isEqualTo(NUMRTPDUPLICATEPACKETS);
+ }
+
+ @Test
+ public void testParcel() {
+ CallQuality callQuality = createCallQuality();
+
+ Parcel parcel = Parcel.obtain();
+ callQuality.writeToParcel(parcel, 0);
+ parcel.setDataPosition(0);
+
+ CallQuality parcelConfig = CallQuality.CREATOR.createFromParcel(parcel);
+ assertThat(callQuality).isEqualTo(parcelConfig);
+ }
+
+ @Test
+ public void testEqual() {
+ CallQuality callQuality1 = createCallQuality();
+ CallQuality callQuality2 = createCallQuality();
+
+ assertThat(callQuality1).isEqualTo(callQuality2);
+ }
+
+ @Test
+ public void testNotEqual() {
+ CallQuality callQuality1 = createCallQuality();
+ CallQuality callQuality2 = new CallQuality.Builder()
+ .setDownlinkCallQualityLevel(DOWNLINKCALLQUALITYLEVEL)
+ .setUplinkCallQualityLevel(UPLINKCALLQUALITYLEVEL)
+ .setCallDurationMillis(CALLDURATION)
+ .setNumRtpPacketsTransmitted(NUMRTPPACKETSTRANSMITTED)
+ .setNumRtpPacketsReceived(NUMRTPPACKETSRECEIVED)
+ .setNumRtpPacketsTransmittedLost(NUMRTPPACKETSTRANSMITTEDLOST)
+ .setNumRtpPacketsNotReceived((NUMRTPPACKETSNOTRECEIVED + 1))
+ .setAverageRelativeJitter(AVERAGERELATIVEJITTER)
+ .setMaxRelativeJitter(MAXRELATIVEJITTER)
+ .setAverageRoundTripTimeMillis(AVERAGEROUNDTRIPTIME)
+ .setCodecType(CODECTYPE)
+ .setRtpInactivityDetected(RTPINACTIVITYDETECTED)
+ .setIncomingSilenceDetectedAtCallSetup(RXSILENCEDETECTED)
+ .setOutgoingSilenceDetectedAtCallSetup(TXSILENCEDETECTED)
+ .setNumVoiceFrames(NUMVOICEFRAMES)
+ .setNumNoDataFrames(NUMNODATAFRAMES)
+ .setNumDroppedRtpPackets(NUMDROPPEDRTPPACKETS)
+ .setMinPlayoutDelayMillis(MINPLAYOUTDELAYMILLIS)
+ .setMaxPlayoutDelayMillis(MAXPLAYOUTDELAYMILLIS)
+ .setNumRtpSidPacketsReceived(NUMRTPSIDPACKETSRECEIVED)
+ .setNumRtpDuplicatePackets(NUMRTPDUPLICATEPACKETS)
+ .build();
+ assertThat(callQuality1).isNotEqualTo(callQuality2);
+ }
+}