diff options
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.java | 198 |
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(); + } +} |