aboutsummaryrefslogtreecommitdiff
path: root/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java')
-rw-r--r--tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java198
1 files changed, 198 insertions, 0 deletions
diff --git a/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java b/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java
new file mode 100644
index 00000000..b4f9cca4
--- /dev/null
+++ b/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2020 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.ims.rcs.uce.request;
+
+import static android.telephony.ims.stub.RcsCapabilityExchangeImplBase.COMMAND_CODE_NOT_SUPPORTED;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.net.Uri;
+import android.telephony.ims.RcsContactTerminatedReason;
+import android.telephony.ims.RcsUceAdapter;
+import android.telephony.ims.aidl.ISubscribeResponseCallback;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.ims.ImsTestBase;
+import com.android.ims.rcs.uce.presence.subscribe.SubscribeController;
+import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback;
+import com.android.ims.rcs.uce.util.NetworkSipCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+@RunWith(AndroidJUnit4.class)
+public class SubscribeRequestTest extends ImsTestBase {
+
+ @Mock SubscribeController mSubscribeController;
+ @Mock CapabilityRequestResponse mRequestResponse;
+ @Mock RequestManagerCallback mRequestManagerCallback;
+
+ private int mSubId = 1;
+ private long mCoordId = 1;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ @Test
+ @SmallTest
+ public void testRequestCapabilities() throws Exception {
+ SubscribeRequest subscribeRequest = getSubscribeRequest();
+
+ List<Uri> uriList = new ArrayList<>();
+ subscribeRequest.requestCapabilities(uriList);
+
+ verify(mSubscribeController).requestCapabilities(eq(uriList), any());
+ }
+
+ @Test
+ @SmallTest
+ public void testRequestCapabilitiesWhenDestroy() throws Exception {
+ SubscribeRequest subscribeRequest = getSubscribeRequest();
+ subscribeRequest.onFinish();
+
+ List<Uri> uriList = new ArrayList<>();
+ subscribeRequest.requestCapabilities(uriList);
+
+ verify(mRequestResponse).setRequestInternalError(RcsUceAdapter.ERROR_GENERIC_FAILURE);
+ verify(mRequestManagerCallback).notifyRequestError(eq(mCoordId), anyLong());
+ verify(mSubscribeController, never()).requestCapabilities(any(), any());
+ }
+
+ @Test
+ @SmallTest
+ public void testCommandErrorCallback() throws Exception {
+ SubscribeRequest subscribeRequest = getSubscribeRequest();
+ ISubscribeResponseCallback callback = subscribeRequest.getResponseCallback();
+
+ callback.onCommandError(COMMAND_CODE_NOT_SUPPORTED);
+
+ verify(mRequestResponse).setCommandError(COMMAND_CODE_NOT_SUPPORTED);
+ verify(mRequestManagerCallback).notifyCommandError(eq(mCoordId), anyLong());
+ }
+
+ @Test
+ @SmallTest
+ public void testNetworkResponse() throws Exception {
+ SubscribeRequest subscribeRequest = getSubscribeRequest();
+
+ int sipCode = NetworkSipCode.SIP_CODE_FORBIDDEN;
+ String reason = "forbidden";
+ ISubscribeResponseCallback callback = subscribeRequest.getResponseCallback();
+ callback.onNetworkResponse(sipCode, reason);
+
+ verify(mRequestResponse).setNetworkResponseCode(sipCode, reason);
+ verify(mRequestManagerCallback).notifyNetworkResponse(eq(mCoordId), anyLong());
+ }
+
+ @Test
+ @SmallTest
+ public void testResourceTerminated() throws Exception {
+ SubscribeRequest subscribeRequest = getSubscribeRequest();
+ ISubscribeResponseCallback callback = subscribeRequest.getResponseCallback();
+
+ Uri contact = Uri.fromParts("sip", "test", null);
+ List<RcsContactTerminatedReason> list = new ArrayList<>();
+ list.add(new RcsContactTerminatedReason(contact, "terminated"));
+ callback.onResourceTerminated(list);
+
+ verify(mRequestResponse).addTerminatedResource(list);
+ verify(mRequestManagerCallback).notifyResourceTerminated(eq(mCoordId), anyLong());
+ }
+
+ @Test
+ @SmallTest
+ public void testCapabilitiesUpdate() throws Exception {
+ SubscribeRequest subscribeRequest = getSubscribeRequest();
+ ISubscribeResponseCallback callback = subscribeRequest.getResponseCallback();
+
+ List<String> pidfXml = new ArrayList<>();
+ pidfXml.add(getPidfData());
+ callback.onNotifyCapabilitiesUpdate(pidfXml);
+
+ verify(mRequestResponse).addUpdatedCapabilities(any());
+ verify(mRequestManagerCallback).notifyCapabilitiesUpdated(eq(mCoordId), anyLong());
+ }
+
+ @Test
+ @SmallTest
+ public void testTerminatedCallback() throws Exception {
+ SubscribeRequest subscribeRequest = getSubscribeRequest();
+ doReturn(true).when(mRequestResponse).isNetworkResponseOK();
+ ISubscribeResponseCallback callback = subscribeRequest.getResponseCallback();
+
+ String reason = "forbidden";
+ long retryAfterMillis = 10000L;
+ callback.onTerminated(reason, retryAfterMillis);
+
+ verify(mRequestResponse).setTerminated(reason, retryAfterMillis);
+ verify(mRequestManagerCallback).notifyTerminated(eq(mCoordId), anyLong());
+ }
+
+ private SubscribeRequest getSubscribeRequest() {
+ SubscribeRequest request = new SubscribeRequest(mSubId, UceRequest.REQUEST_TYPE_CAPABILITY,
+ mRequestManagerCallback, mSubscribeController, mRequestResponse);
+ request.setRequestCoordinatorId(mCoordId);
+ return request;
+ }
+
+ private String getPidfData() {
+ StringBuilder pidfBuilder = new StringBuilder();
+ pidfBuilder.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>")
+ .append("<presence entity=\"sip:test\"")
+ .append(" xmlns=\"urn:ietf:params:xml:ns:pidf\"")
+ .append(" xmlns:op=\"urn:oma:xml:prs:pidf:oma-pres\"")
+ .append(" xmlns:op=\"urn:oma:xml:prs:pidf:oma-pres\"")
+ .append(" xmlns:caps=\"urn:ietf:params:xml:ns:pidf:caps\">")
+ // tuple 1
+ .append("<tuple id=\"tid0\"><status><basic>open</basic></status>")
+ .append("<op:service-description>")
+ .append("<op:service-id>service_id_01</op:service-id>")
+ .append("<op:version>1.0</op:version>")
+ .append("<op:description>description_test1</op:description>")
+ .append("</op:service-description>")
+ // support audio
+ .append("<caps:servcaps>")
+ .append("<caps:audio>true</caps:audio>")
+ // support video
+ .append("<caps:video>true</caps:video>")
+ .append("</caps:servcaps>")
+ .append("<contact>sip:test</contact>")
+ .append("</tuple>");
+
+ return pidfBuilder.toString();
+ }
+}