diff options
author | bodamnam <bodamnam@google.com> | 2022-07-19 05:09:40 +0000 |
---|---|---|
committer | bodamnam <bodamnam@google.com> | 2022-07-21 04:31:09 +0000 |
commit | 608d73050c35a01f10ab838402d46a4a6317f3b4 (patch) | |
tree | e6c609815c5b95e1cac70412814428db7fb8b368 /tests/unit/src/com/android/telephony/imsmedia/TextSessionTest.java | |
parent | 9dd7f429e3cf865e5b1a2a1371afe5d54dbb19eb (diff) | |
download | ImsMedia-608d73050c35a01f10ab838402d46a4a6317f3b4.tar.gz |
Add implementation of RTT in ImsMedia java
Bug: 239498507
Test: atest
Change-Id: If6de9f2a71e472205a1b530b1eeff04d73331e84
Diffstat (limited to 'tests/unit/src/com/android/telephony/imsmedia/TextSessionTest.java')
-rw-r--r-- | tests/unit/src/com/android/telephony/imsmedia/TextSessionTest.java | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/tests/unit/src/com/android/telephony/imsmedia/TextSessionTest.java b/tests/unit/src/com/android/telephony/imsmedia/TextSessionTest.java new file mode 100644 index 00000000..06abaf4c --- /dev/null +++ b/tests/unit/src/com/android/telephony/imsmedia/TextSessionTest.java @@ -0,0 +1,231 @@ +/** + * 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 static org.junit.Assert.fail; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import android.os.Parcel; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.telephony.imsmedia.IImsTextSessionCallback; +import android.telephony.imsmedia.ImsMediaSession; +import android.telephony.imsmedia.MediaQualityThreshold; +import android.telephony.imsmedia.TextConfig; +import android.testing.TestableLooper; + +import com.android.telephony.imsmedia.Utils.OpenSessionParams; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.net.DatagramSocket; +import java.net.SocketException; + +@RunWith(JUnit4.class) +public class TextSessionTest { + private static final int SESSION_ID = 1; + private static final int DTMF_DURATION = 120; + private static final int UNUSED = -1; + private static final int SUCCESS = ImsMediaSession.RESULT_SUCCESS; + private static final int NO_RESOURCES = ImsMediaSession.RESULT_NO_RESOURCES; + private static final int RTP = ImsMediaSession.PACKET_TYPE_RTP; + private static final int RTCP = ImsMediaSession.PACKET_TYPE_RTCP; + private static final String TEXT_STREAM = "Hello"; + private TextSession mTextSession; + private TextSession.TextSessionHandler mHandler; + @Mock + private TextService mTextService; + private TextListener mTextListener; + @Mock + private TextLocalSession mTextLocalSession; + @Mock + private IImsTextSessionCallback mCallback; + private TestableLooper mLooper; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mTextSession = new TextSession(SESSION_ID, mCallback, mTextService, mTextLocalSession); + mTextListener = mTextSession.getTextListener(); + mHandler = mTextSession.getTextSessionHandler(); + try { + mLooper = new TestableLooper(mHandler.getLooper()); + } catch (Exception e) { + fail("Unable to create TestableLooper"); + } + } + + @After + public void tearDown() throws Exception { + if (mLooper != null) { + mLooper.destroy(); + mLooper = null; + } + } + + private Parcel createParcel(int message, int result, TextConfig config) { + Parcel parcel = Parcel.obtain(); + parcel.writeInt(message); + parcel.writeInt(result); + if (config != null) { + config.writeToParcel(parcel, 0); + } + parcel.setDataPosition(0); + return parcel; + } + + @Test + public void testOpenSession() { + DatagramSocket rtpSocket = null; + DatagramSocket rtcpSocket = null; + + try { + rtpSocket = new DatagramSocket(); + rtcpSocket = new DatagramSocket(); + } catch (SocketException e) { + fail("SocketException:" + e); + } + + OpenSessionParams params = new OpenSessionParams( + ParcelFileDescriptor.fromDatagramSocket(rtpSocket), + ParcelFileDescriptor.fromDatagramSocket(rtcpSocket), + null, null); + + mTextSession.openSession(params); + processAllMessages(); + verify(mTextService, times(1)).openSession(eq(SESSION_ID), eq(params)); + } + + @Test + public void testCloseSession() { + mTextSession.closeSession(); + processAllMessages(); + verify(mTextService, times(1)).closeSession(eq(SESSION_ID)); + } + + @Test + public void testGetSessionState() { + assertThat(mTextSession.getSessionId()).isEqualTo(SESSION_ID); + assertThat(mTextSession.getSessionState()).isEqualTo(ImsMediaSession.SESSION_STATE_CLOSED); + Utils.sendMessage(mHandler, TextSession.EVENT_SESSION_CHANGED_IND, + ImsMediaSession.SESSION_STATE_OPEN); + processAllMessages(); + assertThat(mTextSession.getSessionState()).isEqualTo(ImsMediaSession.SESSION_STATE_OPEN); + } + + @Test + public void testModifySession() { + // Modify Session Request + TextConfig config = TextConfigTest.createTextConfig(); + mTextSession.modifySession(config); + processAllMessages(); + verify(mTextLocalSession, times(1)).modifySession(eq(config)); + + // Modify Session Response - Success + mTextListener.onMessage( + createParcel(TextSession.EVENT_MODIFY_SESSION_RESPONSE, SUCCESS, config)); + processAllMessages(); + try { + verify(mCallback, times(1)).onModifySessionResponse(eq(config), eq(SUCCESS)); + } catch (RemoteException e) { + fail("Failed to notify modifySessionResponse: " + e); + } + + // Modify Session Response - Failure (NO_RESOURCES) + mTextListener.onMessage( + createParcel(TextSession.EVENT_MODIFY_SESSION_RESPONSE, NO_RESOURCES, config)); + processAllMessages(); + try { + verify(mCallback, times(1)).onModifySessionResponse(eq(config), eq(NO_RESOURCES)); + } catch (RemoteException e) { + fail("Failed to notify modifySessionResponse: " + e); + } + } + + @Test + public void testSendRtt() { + mTextSession.sendRtt(TEXT_STREAM); + processAllMessages(); + verify(mTextLocalSession, times(1)).sendRtt(eq(TEXT_STREAM)); + } + + @Test + public void testSetMediaQualityThreshold() { + // Set Media Quality Threshold + MediaQualityThreshold threshold = MediaQualityThresholdTest.createMediaQualityThreshold(); + mTextSession.setMediaQualityThreshold(threshold); + processAllMessages(); + verify(mTextLocalSession, times(1)).setMediaQualityThreshold(eq(threshold)); + } + + @Test + public void testMediaInactivityInd() { + // Receive Inactivity - RTP + Parcel parcel = Parcel.obtain(); + parcel.writeInt(TextSession.EVENT_MEDIA_INACTIVITY_IND); + parcel.writeInt(RTP); + parcel.setDataPosition(0); + mTextListener.onMessage(parcel); + processAllMessages(); + try { + verify(mCallback, times(1)).notifyMediaInactivity(eq(RTP)); + } catch (RemoteException e) { + fail("Failed to notify notifyMediaInactivity: " + e); + } + + // Receive Inactivity - RTCP + Parcel parcel2 = Parcel.obtain(); + parcel2.writeInt(TextSession.EVENT_MEDIA_INACTIVITY_IND); + parcel2.writeInt(RTCP); + parcel2.setDataPosition(0); + mTextListener.onMessage(parcel2); + processAllMessages(); + try { + verify(mCallback, times(1)).notifyMediaInactivity(eq(RTCP)); + } catch (RemoteException e) { + fail("Failed to notify notifyMediaInactivity: " + e); + } + } + + @Test + public void testRttReceived() { + // Receive onRttReceived + Utils.sendMessage(mHandler, TextSession.EVENT_RTT_RECEIVED, TEXT_STREAM); + processAllMessages(); + try { + verify(mCallback, times(1)).onRttReceived(eq(TEXT_STREAM)); + } catch (RemoteException e) { + fail("Failed to notify onRttReceived: " + e); + } + } + + private void processAllMessages() { + while (!mLooper.getLooper().getQueue().isIdle()) { + mLooper.processAllMessages(); + } + } +} |