summaryrefslogtreecommitdiff
path: root/tests/unit/src/com
diff options
context:
space:
mode:
authorAvinash Malipatil <avinashmp@google.com>2022-07-14 17:48:12 +0000
committerAvinash Malipatil <avinashmp@google.com>2022-07-14 17:59:08 +0000
commit9ca3cc59c9b7b3af8d8cb43d7ad4c7fb78b21048 (patch)
tree9ff11942232c1e1bb2e49ce99bca32637084fc3c /tests/unit/src/com
parent475ec146fa28539bba9ec7c14ea6c0a7c4ce83b6 (diff)
downloadImsMedia-9ca3cc59c9b7b3af8d8cb43d7ad4c7fb78b21048.tar.gz
Add Unit test cases for class ImsMediaManager
Bug: 238986583 Test: atest ImsMediaJavaUnitTests Change-Id: I8a2542b41314d5da16aa84f4c797e3a41ecf022e
Diffstat (limited to 'tests/unit/src/com')
-rw-r--r--tests/unit/src/com/android/telephony/imsmedia/ImsMediaManagerTest.java188
1 files changed, 188 insertions, 0 deletions
diff --git a/tests/unit/src/com/android/telephony/imsmedia/ImsMediaManagerTest.java b/tests/unit/src/com/android/telephony/imsmedia/ImsMediaManagerTest.java
new file mode 100644
index 00000000..1958251c
--- /dev/null
+++ b/tests/unit/src/com/android/telephony/imsmedia/ImsMediaManagerTest.java
@@ -0,0 +1,188 @@
+/**
+ * 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 android.telephony.imsmedia;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.Parcel;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import java.net.DatagramSocket;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+public class ImsMediaManagerTest {
+ private Executor mExecutor;
+
+ @Mock
+ Context mMockContext;
+ @Mock
+ DatagramSocket mMockRtpSocket, mMockRtcpSocket;
+ @Mock
+ ImsMediaManager.OnConnectedCallback mMockConnectedCallback;
+ @Mock
+ RtpConfig mMockRtpConfig;
+ @Mock
+ ImsMediaSession mMockImsMediaSession;
+ @Mock
+ ImsMediaManager.SessionCallback mMockSessionCallback;
+ @Mock
+ IMediaStubTest mMockImsMedia;
+
+ @Before
+ public void setUp() throws Exception {
+ mExecutor = Executors.newSingleThreadExecutor();
+
+ MockitoAnnotations.initMocks(this);
+ doReturn(mMockImsMedia).when(mMockImsMediaSession).getBinder();
+ doReturn(mMockImsMedia).when(mMockImsMedia).queryLocalInterface(any(String.class));
+ doReturn(true).when(mMockImsMedia).transact(anyInt(), any(Parcel.class), any(), anyInt());
+
+ doAnswer(new Answer<Boolean>() {
+ @Override
+ public Boolean answer(InvocationOnMock invocation) throws Throwable {
+ Object[] args = invocation.getArguments();
+ boolean bServiceConnectionFound = false;
+ boolean bIntentFound = false;
+ for (Object arg : args) {
+ if (arg instanceof ServiceConnection) {
+ synchronized (arg) {
+ bServiceConnectionFound = true;
+ ((ServiceConnection) arg).onServiceConnected(null,
+ (IBinder) mMockImsMedia);
+ arg.notify();
+ }
+ } else if (arg instanceof Intent) {
+ bIntentFound = true;
+ Intent intent = (Intent) arg;
+ assertEquals(intent.getAction(), IImsMedia.class.getName());
+ assertEquals(intent.getComponent(), ComponentName.createRelative(
+ ImsMediaManager.MEDIA_SERVICE_PACKAGE,
+ ImsMediaManager.MEDIA_SERVICE_CLASS));
+ }
+ }
+
+ assertEquals(bServiceConnectionFound, true);
+ assertEquals(bIntentFound, true);
+ return true;
+ }
+ }).when(mMockContext).bindService(any(Intent.class), any(ServiceConnection.class),
+ eq(Context.BIND_AUTO_CREATE));
+
+ doAnswer(new Answer() {
+ @Override
+ public Object answer(InvocationOnMock invocation) throws Throwable {
+ Object[] args = invocation.getArguments();
+ for (Object arg : args) {
+ if (arg instanceof ServiceConnection) {
+ synchronized (arg) {
+ ((ServiceConnection) arg).onServiceDisconnected(null);
+ arg.notify();
+ }
+ }
+ }
+ return null;
+ }
+ }).when(mMockContext).unbindService(any(ServiceConnection.class));
+ }
+
+ @Test
+ public void testServiceBindingAndUnbinding() {
+ ImsMediaManager imsMediaManager =
+ new ImsMediaManager(mMockContext, mExecutor, mMockConnectedCallback);
+
+ synchronized (mMockConnectedCallback) {
+ try {
+ //Wait for connection callback
+ mMockConnectedCallback.wait(1000);
+
+ //Unbind from service
+ imsMediaManager.release();
+
+ //Wait for disconnect callback
+ mMockConnectedCallback.wait(1000);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ verify(mMockConnectedCallback).onConnected();
+ verify(mMockConnectedCallback).onDisconnected();
+ }
+
+ @Test
+ public void testOpenAndCloseSession() {
+ ImsMediaManager imsMediaManager =
+ new ImsMediaManager(mMockContext, mExecutor, mMockConnectedCallback);
+
+ synchronized (mMockConnectedCallback) {
+ try {
+ //Wait for connection callback
+ mMockConnectedCallback.wait(1000);
+
+ imsMediaManager.openSession(mMockRtpSocket, mMockRtcpSocket,
+ ImsMediaSession.SESSION_TYPE_AUDIO, mMockRtpConfig, mExecutor,
+ mMockSessionCallback);
+
+ imsMediaManager.closeSession(mMockImsMediaSession);
+
+ //Unbind from service
+ imsMediaManager.release();
+
+ //Wait for disconnect callback
+ mMockConnectedCallback.wait(1000);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ try {
+ verify(mMockConnectedCallback).onConnected();
+ verify(mMockImsMedia, times(2)).transact(anyInt(), any(Parcel.class), any(), anyInt());
+ verify(mMockConnectedCallback).onDisconnected();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public abstract static class IMediaStubBase implements IBinder {
+ }
+
+ public abstract static class IMediaStubTest extends IMediaStubBase implements IInterface {
+ public abstract boolean transact(int code, Parcel data, Parcel reply, int flags);
+ }
+}