diff options
author | Rakesh Raghava <rakeshraghava@google.com> | 2022-04-26 12:10:25 +0000 |
---|---|---|
committer | Rakesh Raghava <rakeshraghava@google.com> | 2022-06-22 17:29:20 +0000 |
commit | 5cbbf1f7705ea50196a75ba97808b342d52f868b (patch) | |
tree | 0f9785ffc3c02ec580d71171bade8d8cb8e4f37e /tests/unit | |
parent | faf65268f681c9ecd5be06df9ba9eefed58f2efd (diff) | |
download | ImsMedia-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')
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); + } +} |