diff options
Diffstat (limited to 'tests/src/com/android/ims')
7 files changed, 413 insertions, 10 deletions
diff --git a/tests/src/com/android/ims/rcs/uce/UceStatsWriterTest.java b/tests/src/com/android/ims/rcs/uce/UceStatsWriterTest.java new file mode 100644 index 00000000..49edf198 --- /dev/null +++ b/tests/src/com/android/ims/rcs/uce/UceStatsWriterTest.java @@ -0,0 +1,292 @@ +/* + * Copyright (C) 2021 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; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.SmallTest; + +import android.telephony.ims.RcsContactPresenceTuple; +import android.telephony.ims.RcsContactUceCapability; + +import com.android.ims.rcs.uce.UceStatsWriter; +import com.android.ims.rcs.uce.UceStatsWriter.UceStatsCallback; + +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.MockitoAnnotations; + +@RunWith(AndroidJUnit4.class) +public class UceStatsWriterTest { + private int mSubId = 3; + private long mTaskId = 5; + private int mRegistrationTech = 3; + private int mType = 2; + private boolean mSuccessful = true; + private int mCommandCode = 4; + private int mNetworkResponse = 200; + private String mReason = "noresource"; + + private Callback mCallback; + private TestableUceStatsWriter mWrite; + + class Callback implements UceStatsCallback { + int subId; + List<String> featureTagList; + List<String> serviceIdList; + List<String> versions; + int registrationTech; + int type; + boolean successful; + int commandCode; + int networkResponse; + long taskId; + List<RcsContactUceCapability> updatedCapList; + String reason; + + Callback() { + } + + public void onImsRegistrationFeatureTagStats(int subId, List<String> featureTagList, + int registrationTech) { + this.subId = subId; + this.featureTagList = featureTagList; + this.registrationTech = registrationTech; + } + + public void onStoreCompleteImsRegistrationFeatureTagStats(int subId) {} + + public void onImsRegistrationServiceDescStats(int subId, List<String> serviceIdList, + List<String> serviceIdVersionList, int registrationTech) { + this.subId = subId; + this.serviceIdList = serviceIdList; + this.versions = serviceIdVersionList; + this.registrationTech = registrationTech; + } + + public void onSubscribeResponse(int subId, long taskId, int networkResponse) { + this.subId = subId; + this.taskId = taskId; + this.successful = true; + this.commandCode = 0; + this.networkResponse = networkResponse; + } + + public void onUceEvent(int subId, int type, boolean successful, int commandCode, + int networkResponse) { + this.subId = subId; + this.type = type; + this.successful = successful; + this.commandCode = commandCode; + this.networkResponse = networkResponse; + } + + public void onSubscribeTerminated(int subId, long taskId, String reason) { + this.subId = subId; + this.taskId = taskId; + this.reason = reason; + } + + public void onPresenceNotifyEvent(int subId, long taskId, + List<RcsContactUceCapability> updatedCapList) { + this.subId = subId; + this.taskId = taskId; + this.updatedCapList = updatedCapList; + } + + public void onStoreCompleteImsRegistrationServiceDescStats(int subId) { + this.subId = subId; + } + } + + private class TestableUceStatsWriter extends UceStatsWriter { + public TestableUceStatsWriter(UceStatsCallback callback) { + super(callback); + } + } + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + mCallback = new Callback(); + mWrite = new TestableUceStatsWriter(mCallback); + } + + @After + public void tearDown() throws Exception { + } + + @Test + @SmallTest + public void setImsRegistrationFeatureTagStats() throws Exception { + List<String> featureTags = new ArrayList<>(); + featureTags.add("+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.im\""); + featureTags.add("+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session\""); + featureTags.add("+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.ftsms\""); + mWrite.setImsRegistrationFeatureTagStats(mSubId, featureTags, mRegistrationTech); + assertEquals(mSubId, mCallback.subId); + for (int index = 0; index < featureTags.size(); index++) { + assertEquals(featureTags.get(index), mCallback.featureTagList.get(index)); + } + assertEquals(mRegistrationTech, mCallback.registrationTech); + } + + @Test + @SmallTest + public void setImsRegistrationServiceDescStats() throws Exception { + List<RcsContactPresenceTuple> tupleList = new ArrayList<>(); + tupleList.add(getContactChatTuple()); + tupleList.add(getContactFtTuple()); + tupleList.add(getContactUnknown1Tuple()); + tupleList.add(getContactUnknown2Tuple()); + mWrite.setImsRegistrationServiceDescStats(mSubId, tupleList, mRegistrationTech); + assertEquals(mSubId, mCallback.subId); + for (int index = 0; index < tupleList.size(); index++) { + assertEquals(tupleList.get(index).getServiceId(), mCallback.serviceIdList.get(index)); + assertEquals(tupleList.get(index).getServiceVersion(), mCallback.versions.get(index)); + } + assertEquals(mRegistrationTech, mCallback.registrationTech); + } + + @Test + @SmallTest + public void setSubscribeEvent() throws Exception { + mWrite.setSubscribeResponse(mSubId, mTaskId, mNetworkResponse); + assertEquals(mSubId, mCallback.subId); + assertEquals(mTaskId, mCallback.taskId); + assertTrue(mCallback.successful); + assertEquals(0, mCallback.commandCode); + assertEquals(mNetworkResponse, mCallback.networkResponse); + } + + @Test + @SmallTest + public void setSubscribeTerminated() throws Exception { + mWrite.setSubscribeResponse(mSubId, mTaskId, mNetworkResponse); + mWrite.setSubscribeTerminated(mSubId, mTaskId, mReason); + assertEquals(mSubId, mCallback.subId); + assertEquals(mTaskId, mCallback.taskId); + assertEquals(mReason, mCallback.reason); + } + + @Test + @SmallTest + public void setUceEvent() throws Exception { + mWrite.setUceEvent(mSubId, mType, mSuccessful, mCommandCode, mNetworkResponse); + assertEquals(mSubId, mCallback.subId); + assertEquals(mType, mCallback.type); + assertEquals(mSuccessful, mCallback.successful); + assertEquals(mCommandCode, mCallback.commandCode); + assertEquals(mNetworkResponse, mCallback.networkResponse); + } + + @Test + @SmallTest + public void setPresenceNotifyEvent() throws Exception { + List<RcsContactUceCapability> updatedCapList = new ArrayList<>(); + RcsContactUceCapability.PresenceBuilder builder = + new RcsContactUceCapability.PresenceBuilder(null, 0, 2); + builder.addCapabilityTuple(getContactChatTuple()); + builder.addCapabilityTuple(getContactCallComposer2Tuple()); + builder.addCapabilityTuple(getContactUnknown1Tuple()); + updatedCapList.add(builder.build()); + + mWrite.setPresenceNotifyEvent(mSubId, mTaskId, updatedCapList); + assertEquals(mSubId, mCallback.subId); + assertEquals(mTaskId, mCallback.taskId); + assertEquals(updatedCapList.size(), mCallback.updatedCapList.size()); + for (int index = 0; index < updatedCapList.size(); index++) { + RcsContactUceCapability input = updatedCapList.get(index); + RcsContactUceCapability output = mCallback.updatedCapList.get(index); + assertEquals(input.getCapabilityTuples().size(), output.getCapabilityTuples().size()); + } + } + + @Test + @SmallTest + public void setPresenceNotifyEvent_withCallComposer2Caps() throws Exception { + RcsContactPresenceTuple tuple = getContactCallComposer2Tuple(); + List<RcsContactUceCapability> updatedCapList = new ArrayList<>(); + RcsContactUceCapability.PresenceBuilder builder = + new RcsContactUceCapability.PresenceBuilder(null, 0, 2); + builder.addCapabilityTuple(getContactCallComposer2Tuple()); + updatedCapList.add(builder.build()); + + mWrite.setPresenceNotifyEvent(mSubId, mTaskId, updatedCapList); + assertEquals(mSubId, mCallback.subId); + assertEquals(mTaskId, mCallback.taskId); + assertEquals(updatedCapList.size(), mCallback.updatedCapList.size()); + } + + @Test + @SmallTest + public void setUnPublish() throws Exception { + mWrite.setUnPublish(mSubId); + assertEquals(mSubId, mCallback.subId); + } + + private RcsContactPresenceTuple getContactChatTuple() { + RcsContactPresenceTuple.Builder builder = + new RcsContactPresenceTuple.Builder("open", RcsContactPresenceTuple.SERVICE_ID_CHAT_V1, + "1.0"); + return builder.build(); + } + + private RcsContactPresenceTuple getContactMmtelTuple() { + RcsContactPresenceTuple.Builder builder = + new RcsContactPresenceTuple.Builder("open", RcsContactPresenceTuple.SERVICE_ID_MMTEL, + "1.0"); + return builder.build(); + } + + private RcsContactPresenceTuple getContactFtTuple() { + RcsContactPresenceTuple.Builder builder = + new RcsContactPresenceTuple.Builder("open", RcsContactPresenceTuple.SERVICE_ID_FT, + "1.0"); + return builder.build(); + } + + private RcsContactPresenceTuple getContactCallComposer2Tuple() { + RcsContactPresenceTuple.Builder builder = + new RcsContactPresenceTuple.Builder("open", + RcsContactPresenceTuple.SERVICE_ID_CALL_COMPOSER, + "2.0"); + return builder.build(); + } + + private RcsContactPresenceTuple getContactUnknown1Tuple() { + RcsContactPresenceTuple.Builder builder = + new RcsContactPresenceTuple.Builder("open", "Unknown1", + "8.0"); + return builder.build(); + } + + private RcsContactPresenceTuple getContactUnknown2Tuple() { + RcsContactPresenceTuple.Builder builder = + new RcsContactPresenceTuple.Builder("open", "Unknown2", + "9.0"); + return builder.build(); + } +} diff --git a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java index bf33103f..1959dd0d 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java @@ -19,7 +19,11 @@ package com.android.ims.rcs.uce.presence.publish; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.refEq; import static org.mockito.Mockito.verify; import android.content.BroadcastReceiver; @@ -39,12 +43,18 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.ims.ImsTestBase; +import com.android.ims.rcs.uce.UceStatsWriter; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; @RunWith(AndroidJUnit4.class) public class DeviceCapabilityListenerTest extends ImsTestBase { @@ -60,6 +70,7 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { @Mock DeviceCapabilityListener.ImsMmTelManagerFactory mImsMmTelMgrFactory; @Mock DeviceCapabilityListener.ImsRcsManagerFactory mImsRcsMgrFactory; @Mock DeviceCapabilityListener.ProvisioningManagerFactory mProvisioningMgrFactory; + @Mock UceStatsWriter mUceStatsWriter; int mSubId = 1; @@ -77,6 +88,10 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { doReturn(true).when(mDeviceCapability).updateVtSetting(anyBoolean()); doReturn(true).when(mDeviceCapability).updateVtSetting(anyBoolean()); doReturn(true).when(mDeviceCapability).updateMmtelCapabilitiesChanged(any()); + + doNothing().when(mUceStatsWriter).setImsRegistrationFeatureTagStats( + anyInt(), anyList(), anyInt()); + doNothing().when(mUceStatsWriter).setStoreCompleteImsRegistrationFeatureTagStats(anyInt()); } @After @@ -183,8 +198,18 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { DeviceCapabilityListener deviceCapListener = createDeviceCapabilityListener(); deviceCapListener.setImsCallbackRegistered(true); RegistrationCallback registrationCallback = deviceCapListener.mRcsRegistrationCallback; + + List<String> list = new ArrayList<>(); + list.add("+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.im\""); + list.add("+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session\""); + list.add("+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.ftsms\""); + Set<String> featureTags = new HashSet<String>(list); + ImsRegistrationAttributes attr = new ImsRegistrationAttributes.Builder( - ImsRegistrationImplBase.REGISTRATION_TECH_LTE).build(); + ImsRegistrationImplBase.REGISTRATION_TECH_LTE) + .setFeatureTags(featureTags) + .build(); + // Notify DeviceCapabilityListener that registered has caused a change and requires publish doReturn(true).when(mDeviceCapability).updateImsRcsRegistered(attr); @@ -195,6 +220,8 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { verify(mDeviceCapability).updateImsRcsRegistered(attr); verify(mCallback).requestPublishFromInternal( PublishController.PUBLISH_TRIGGER_RCS_REGISTERED); + verify(mUceStatsWriter).setImsRegistrationFeatureTagStats(anyInt(), + refEq(list), eq(ImsRegistrationImplBase.REGISTRATION_TECH_LTE)); } @Test @@ -216,6 +243,7 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { verify(mDeviceCapability).updateImsRcsUnregistered(); verify(mCallback).requestPublishFromInternal( PublishController.PUBLISH_TRIGGER_RCS_UNREGISTERED); + verify(mUceStatsWriter).setStoreCompleteImsRegistrationFeatureTagStats(anyInt()); } @Test @@ -237,7 +265,7 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { private DeviceCapabilityListener createDeviceCapabilityListener() { DeviceCapabilityListener deviceCapListener = new DeviceCapabilityListener(mContext, - mSubId, mDeviceCapability, mCallback); + mSubId, mDeviceCapability, mCallback, mUceStatsWriter); deviceCapListener.setImsMmTelManagerFactory(mImsMmTelMgrFactory); deviceCapListener.setImsRcsManagerFactory(mImsRcsMgrFactory); deviceCapListener.setProvisioningMgrFactory(mProvisioningMgrFactory); diff --git a/tests/src/com/android/ims/rcs/uce/presence/publish/PublishControllerImplTest.java b/tests/src/com/android/ims/rcs/uce/presence/publish/PublishControllerImplTest.java index b4c9b873..804702c4 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/publish/PublishControllerImplTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/publish/PublishControllerImplTest.java @@ -43,6 +43,7 @@ import androidx.test.filters.SmallTest; import com.android.ims.RcsFeatureManager; import com.android.ims.rcs.uce.UceController; import com.android.ims.rcs.uce.UceDeviceState.DeviceStateResult; +import com.android.ims.rcs.uce.UceStatsWriter; import com.android.ims.rcs.uce.presence.publish.PublishController.PublishControllerCallback; import com.android.ims.rcs.uce.presence.publish.PublishControllerImpl.DeviceCapListenerFactory; import com.android.ims.rcs.uce.presence.publish.PublishControllerImpl.PublishProcessorFactory; @@ -68,6 +69,7 @@ public class PublishControllerImplTest extends ImsTestBase { @Mock UceController.UceControllerCallback mUceCtrlCallback; @Mock RemoteCallbackList<IRcsUcePublishStateCallback> mPublishStateCallbacks; @Mock DeviceStateResult mDeviceStateResult; + @Mock UceStatsWriter mUceStatsWriter; private int mSubId = 1; @@ -77,7 +79,7 @@ public class PublishControllerImplTest extends ImsTestBase { doReturn(mPublishProcessor).when(mPublishProcessorFactory).createPublishProcessor(any(), eq(mSubId), any(), any()); doReturn(mDeviceCapListener).when(mDeviceCapListenerFactory).createDeviceCapListener(any(), - eq(mSubId), any(), any()); + eq(mSubId), any(), any(), any()); doReturn(mDeviceStateResult).when(mUceCtrlCallback).getDeviceState(); doReturn(false).when(mDeviceStateResult).isRequestForbidden(); } @@ -162,6 +164,8 @@ public class PublishControllerImplTest extends ImsTestBase { @SmallTest public void testUnpublish() throws Exception { PublishControllerImpl publishController = createPublishController(); + //To initialize the public state to publish_ok. + publishController.setCapabilityType(RcsImsCapabilities.CAPABILITY_TYPE_OPTIONS_UCE); publishController.onUnpublish(); @@ -169,6 +173,8 @@ public class PublishControllerImplTest extends ImsTestBase { waitForHandlerAction(handler, 1000); int publishState = publishController.getUcePublishState(); assertEquals(RcsUceAdapter.PUBLISH_STATE_NOT_PUBLISHED, publishState); + verify(mPublishProcessor).resetState(); + verify(mUceStatsWriter).setUnPublish(eq(mSubId)); } @Test @@ -349,7 +355,7 @@ public class PublishControllerImplTest extends ImsTestBase { private PublishControllerImpl createPublishController() { PublishControllerImpl publishController = new PublishControllerImpl(mContext, mSubId, mUceCtrlCallback, Looper.getMainLooper(), mDeviceCapListenerFactory, - mPublishProcessorFactory); + mPublishProcessorFactory, mUceStatsWriter); publishController.setPublishStateCallback(mPublishStateCallbacks); publishController.setCapabilityType(RcsImsCapabilities.CAPABILITY_TYPE_PRESENCE_UCE); return publishController; diff --git a/tests/src/com/android/ims/rcs/uce/presence/publish/PublishProcessorTest.java b/tests/src/com/android/ims/rcs/uce/presence/publish/PublishProcessorTest.java index d83158f5..d894c331 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/publish/PublishProcessorTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/publish/PublishProcessorTest.java @@ -34,6 +34,7 @@ import androidx.test.filters.SmallTest; import com.android.ims.ImsTestBase; import com.android.ims.RcsFeatureManager; +import com.android.ims.rcs.uce.UceStatsWriter; import com.android.ims.rcs.uce.presence.publish.PublishController.PublishControllerCallback; import org.junit.After; @@ -42,6 +43,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import java.util.Optional; @RunWith(AndroidJUnit4.class) public class PublishProcessorTest extends ImsTestBase { @@ -50,6 +52,7 @@ public class PublishProcessorTest extends ImsTestBase { @Mock PublishControllerCallback mPublishCtrlCallback; @Mock PublishProcessorState mProcessorState; @Mock PublishRequestResponse mResponseCallback; + @Mock UceStatsWriter mUceStatsWriter; private int mSub = 1; private long mTaskId = 1L; @@ -144,6 +147,8 @@ public class PublishProcessorTest extends ImsTestBase { doReturn(mTaskId).when(mProcessorState).getCurrentTaskId(); doReturn(mTaskId).when(mResponseCallback).getTaskId(); doReturn(true).when(mResponseCallback).needRetry(); + doReturn(Optional.of(10)).when(mResponseCallback).getCmdErrorCode(); + PublishProcessor publishProcessor = getPublishProcessor(); publishProcessor.onCommandError(mResponseCallback); @@ -154,6 +159,8 @@ public class PublishProcessorTest extends ImsTestBase { verify(mResponseCallback).onDestroy(); verify(mProcessorState).setPublishingFlag(false); verify(mPublishCtrlCallback).clearRequestCanceledTimer(); + verify(mUceStatsWriter).setUceEvent(eq(mSub), eq(UceStatsWriter.PUBLISH_EVENT), eq(true), + eq(10), eq(0)); } @Test @@ -200,6 +207,7 @@ public class PublishProcessorTest extends ImsTestBase { doReturn(mTaskId).when(mResponseCallback).getTaskId(); doReturn(false).when(mResponseCallback).needRetry(); doReturn(true).when(mResponseCallback).isRequestSuccess(); + doReturn(Optional.of(200)).when(mResponseCallback).getNetworkRespSipCode(); PublishProcessor publishProcessor = getPublishProcessor(); publishProcessor.onNetworkResponse(mResponseCallback); @@ -208,6 +216,9 @@ public class PublishProcessorTest extends ImsTestBase { verify(mResponseCallback).onDestroy(); verify(mProcessorState).setPublishingFlag(false); verify(mPublishCtrlCallback).clearRequestCanceledTimer(); + + verify(mUceStatsWriter).setUceEvent(eq(mSub), eq(UceStatsWriter.PUBLISH_EVENT), eq(true), + eq(0), eq(200)); } @Test @@ -223,7 +234,7 @@ public class PublishProcessorTest extends ImsTestBase { private PublishProcessor getPublishProcessor() { PublishProcessor publishProcessor = new PublishProcessor(mContext, mSub, - mDeviceCapabilities, mPublishCtrlCallback); + mDeviceCapabilities, mPublishCtrlCallback, mUceStatsWriter); publishProcessor.setProcessorState(mProcessorState); publishProcessor.onRcsConnected(mRcsFeatureManager); return publishProcessor; diff --git a/tests/src/com/android/ims/rcs/uce/request/OptionsCoordinatorTest.java b/tests/src/com/android/ims/rcs/uce/request/OptionsCoordinatorTest.java index 9c270fbf..1759de5d 100644 --- a/tests/src/com/android/ims/rcs/uce/request/OptionsCoordinatorTest.java +++ b/tests/src/com/android/ims/rcs/uce/request/OptionsCoordinatorTest.java @@ -38,11 +38,13 @@ import androidx.test.filters.SmallTest; import com.android.ims.ImsTestBase; import com.android.ims.rcs.uce.request.UceRequestCoordinator.RequestResult; import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback; +import com.android.ims.rcs.uce.UceStatsWriter; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Optional; import org.junit.After; import org.junit.Before; @@ -57,6 +59,7 @@ public class OptionsCoordinatorTest extends ImsTestBase { @Mock CapabilityRequestResponse mResponse; @Mock RequestManagerCallback mRequestMgrCallback; @Mock IRcsUceControllerCallback mUceCallback; + @Mock UceStatsWriter mUceStatsWriter; private int mSubId = 1; private long mTaskId = 1L; @@ -93,11 +96,14 @@ public class OptionsCoordinatorTest extends ImsTestBase { @Test @SmallTest public void testRequestCommandError() throws Exception { + doReturn(Optional.of(3)).when(mResponse).getCommandError(); OptionsRequestCoordinator coordinator = getOptionsCoordinator(); coordinator.onRequestUpdated(mTaskId, REQUEST_UPDATE_COMMAND_ERROR); verify(mRequest).onFinish(); + verify(mUceStatsWriter).setUceEvent(eq(mSubId), eq(UceStatsWriter.OUTGOING_OPTION_EVENT), + eq(false), eq(3), eq(0)); Collection<UceRequest> requestList = coordinator.getActivatedRequest(); Collection<RequestResult> resultList = coordinator.getFinishedRequest(); @@ -111,6 +117,7 @@ public class OptionsCoordinatorTest extends ImsTestBase { public void testRequestNetworkResponse() throws Exception { OptionsRequestCoordinator coordinator = getOptionsCoordinator(); doReturn(true).when(mResponse).isNetworkResponseOK(); + doReturn(Optional.of(200)).when(mResponse).getNetworkRespSipCode(); final List<RcsContactUceCapability> updatedCapList = new ArrayList<>(); RcsContactUceCapability updatedCapability = getContactUceCapability(); @@ -124,6 +131,8 @@ public class OptionsCoordinatorTest extends ImsTestBase { verify(mResponse).removeUpdatedCapabilities(updatedCapList); verify(mRequest).onFinish(); + verify(mUceStatsWriter).setUceEvent(eq(mSubId), eq(UceStatsWriter.OUTGOING_OPTION_EVENT), + eq(true), eq(0), eq(200)); Collection<UceRequest> requestList = coordinator.getActivatedRequest(); Collection<RequestResult> resultList = coordinator.getFinishedRequest(); @@ -134,9 +143,10 @@ public class OptionsCoordinatorTest extends ImsTestBase { private OptionsRequestCoordinator getOptionsCoordinator() { OptionsRequestCoordinator.Builder builder = new OptionsRequestCoordinator.Builder( - mSubId, Collections.singletonList(mRequest), mRequestMgrCallback); + mSubId, Collections.singletonList(mRequest), mRequestMgrCallback, mUceStatsWriter); builder.setCapabilitiesCallback(mUceCallback); - return builder.build(); + OptionsRequestCoordinator coordinator = builder.build(); + return coordinator; } private RcsContactUceCapability getContactUceCapability() { diff --git a/tests/src/com/android/ims/rcs/uce/request/RemoteOptionsCoordinatorTest.java b/tests/src/com/android/ims/rcs/uce/request/RemoteOptionsCoordinatorTest.java index 1a6ed4a4..80077114 100644 --- a/tests/src/com/android/ims/rcs/uce/request/RemoteOptionsCoordinatorTest.java +++ b/tests/src/com/android/ims/rcs/uce/request/RemoteOptionsCoordinatorTest.java @@ -37,6 +37,7 @@ import com.android.ims.ImsTestBase; import com.android.ims.rcs.uce.request.RemoteOptionsRequest.RemoteOptResponse; import com.android.ims.rcs.uce.request.UceRequestCoordinator.RequestResult; import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback; +import com.android.ims.rcs.uce.UceStatsWriter; import java.util.Collection; import java.util.Collections; @@ -54,6 +55,7 @@ public class RemoteOptionsCoordinatorTest extends ImsTestBase { @Mock RemoteOptResponse mResponse; @Mock RequestManagerCallback mRequestMgrCallback; @Mock IOptionsRequestCallback mOptRequestCallback; + @Mock UceStatsWriter mUceStatsWriter; private int mSubId = 1; private long mTaskId = 1L; @@ -84,6 +86,8 @@ public class RemoteOptionsCoordinatorTest extends ImsTestBase { verify(mOptRequestCallback).respondToCapabilityRequest(updatedCapability, true); verify(mRequest).onFinish(); + verify(mUceStatsWriter).setUceEvent(eq(mSubId), eq(UceStatsWriter.INCOMING_OPTION_EVENT), + eq(true), eq(0), eq(200)); Collection<UceRequest> requestList = coordinator.getActivatedRequest(); Collection<RequestResult> resultList = coordinator.getFinishedRequest(); @@ -94,7 +98,7 @@ public class RemoteOptionsCoordinatorTest extends ImsTestBase { private RemoteOptionsCoordinator getRemoteOptCoordinator() { RemoteOptionsCoordinator.Builder builder = new RemoteOptionsCoordinator.Builder( - mSubId, Collections.singletonList(mRequest), mRequestMgrCallback); + mSubId, Collections.singletonList(mRequest), mRequestMgrCallback, mUceStatsWriter); builder.setOptionsRequestCallback(mOptRequestCallback); return builder.build(); } diff --git a/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java b/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java index 137b4ac7..bcd3c98d 100644 --- a/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java +++ b/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java @@ -39,6 +39,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.net.Uri; +import android.telephony.ims.RcsContactPresenceTuple; import android.telephony.ims.RcsContactUceCapability; import android.telephony.ims.aidl.IRcsUceControllerCallback; @@ -47,6 +48,7 @@ import androidx.test.filters.SmallTest; import com.android.ims.ImsTestBase; import com.android.ims.rcs.uce.UceDeviceState.DeviceStateResult; +import com.android.ims.rcs.uce.UceStatsWriter; import com.android.ims.rcs.uce.request.UceRequestCoordinator.RequestResult; import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback; @@ -70,6 +72,7 @@ public class SubscribeCoordinatorTest extends ImsTestBase { @Mock RequestManagerCallback mRequestMgrCallback; @Mock IRcsUceControllerCallback mUceCallback; @Mock DeviceStateResult mDeviceStateResult; + @Mock UceStatsWriter mUceStatsWriter; private int mSubId = 1; private long mTaskId = 1L; @@ -106,6 +109,7 @@ public class SubscribeCoordinatorTest extends ImsTestBase { @Test @SmallTest public void testRequestCommandError() throws Exception { + doReturn(Optional.of(3)).when(mResponse).getCommandError(); SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); coordinator.onRequestUpdated(mTaskId, REQUEST_UPDATE_COMMAND_ERROR); @@ -114,6 +118,9 @@ public class SubscribeCoordinatorTest extends ImsTestBase { Collection<RequestResult> resultList = coordinator.getFinishedRequest(); assertTrue(requestList.isEmpty()); assertEquals(1, resultList.size()); + + verify(mUceStatsWriter).setUceEvent(eq(mSubId), eq(UceStatsWriter.SUBSCRIBE_EVENT), + eq(false), eq(3), eq(0)); verify(mRequest).onFinish(); } @@ -122,6 +129,7 @@ public class SubscribeCoordinatorTest extends ImsTestBase { public void testRequestNetworkRespSuccess() throws Exception { SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); doReturn(true).when(mResponse).isNetworkResponseOK(); + doReturn(Optional.of(200)).when(mResponse).getNetworkRespSipCode(); coordinator.onRequestUpdated(mTaskId, REQUEST_UPDATE_NETWORK_RESPONSE); @@ -129,11 +137,28 @@ public class SubscribeCoordinatorTest extends ImsTestBase { Collection<RequestResult> resultList = coordinator.getFinishedRequest(); assertEquals(1, requestList.size()); assertTrue(resultList.isEmpty()); + + verify(mUceStatsWriter).setSubscribeResponse(eq(mSubId), eq(mTaskId), eq(200)); + verify(mRequest, never()).onFinish(); } @Test @SmallTest + public void testRequestNetworkRespFailure() throws Exception { + doReturn(Optional.of(400)).when(mResponse).getNetworkRespSipCode(); + + SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); + + coordinator.onRequestUpdated(mTaskId, REQUEST_UPDATE_NETWORK_RESPONSE); + + verify(mUceStatsWriter).setSubscribeResponse(eq(mSubId), eq(mTaskId), eq(400)); + + verify(mRequest).onFinish(); + } + + @Test + @SmallTest public void testRequestNetworkRespError() throws Exception { SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); doReturn(false).when(mResponse).isNetworkResponseOK(); @@ -162,7 +187,8 @@ public class SubscribeCoordinatorTest extends ImsTestBase { SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); final List<RcsContactUceCapability> updatedCapList = new ArrayList<>(); - RcsContactUceCapability updatedCapability = getContactUceCapability(); + RcsContactPresenceTuple tuple = getContactPresenceTuple(); + RcsContactUceCapability updatedCapability = getContactUceCapability(tuple); updatedCapList.add(updatedCapability); doReturn(updatedCapList).when(mResponse).getUpdatedContactCapability(); @@ -171,6 +197,8 @@ public class SubscribeCoordinatorTest extends ImsTestBase { verify(mRequestMgrCallback).saveCapabilities(updatedCapList); verify(mUceCallback).onCapabilitiesReceived(updatedCapList); verify(mResponse).removeUpdatedCapabilities(updatedCapList); + + verify(mUceStatsWriter).setPresenceNotifyEvent(eq(mSubId), eq(mTaskId), any()); } @Test @@ -188,6 +216,8 @@ public class SubscribeCoordinatorTest extends ImsTestBase { verify(mRequestMgrCallback).saveCapabilities(updatedCapList); verify(mUceCallback).onCapabilitiesReceived(updatedCapList); verify(mResponse).removeTerminatedResources(updatedCapList); + + verify(mUceStatsWriter).setPresenceNotifyEvent(eq(mSubId), eq(mTaskId), any()); } @Test @@ -211,12 +241,16 @@ public class SubscribeCoordinatorTest extends ImsTestBase { public void testRequestTerminated() throws Exception { SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); + doReturn("noresource").when(mResponse).getTerminatedReason(); + coordinator.onRequestUpdated(mTaskId, REQUEST_UPDATE_TERMINATED); Collection<UceRequest> requestList = coordinator.getActivatedRequest(); Collection<RequestResult> resultList = coordinator.getFinishedRequest(); assertTrue(requestList.isEmpty()); assertEquals(1, resultList.size()); + + verify(mUceStatsWriter).setSubscribeTerminated(eq(mSubId), eq(mTaskId), eq("noresource")); } @Test @@ -234,8 +268,18 @@ public class SubscribeCoordinatorTest extends ImsTestBase { private SubscribeRequestCoordinator getSubscribeCoordinator() { SubscribeRequestCoordinator.Builder builder = new SubscribeRequestCoordinator.Builder( - mSubId, Collections.singletonList(mRequest), mRequestMgrCallback); + mSubId, Collections.singletonList(mRequest), mRequestMgrCallback, mUceStatsWriter); builder.setCapabilitiesCallback(mUceCallback); + SubscribeRequestCoordinator subCoor = builder.build(); + return subCoor; + } + + private RcsContactUceCapability getContactUceCapability(RcsContactPresenceTuple tuple) { + int requestResult = RcsContactUceCapability.REQUEST_RESULT_FOUND; + RcsContactUceCapability.PresenceBuilder builder = + new RcsContactUceCapability.PresenceBuilder( + mContact, RcsContactUceCapability.SOURCE_TYPE_NETWORK, requestResult); + builder.addCapabilityTuple(tuple); return builder.build(); } @@ -246,4 +290,12 @@ public class SubscribeCoordinatorTest extends ImsTestBase { mContact, RcsContactUceCapability.SOURCE_TYPE_NETWORK, requestResult); return builder.build(); } + + private RcsContactPresenceTuple getContactPresenceTuple() { + RcsContactPresenceTuple.Builder builder = + new RcsContactPresenceTuple.Builder("open", RcsContactPresenceTuple.SERVICE_ID_CHAT_V1, + "1.0"); + return builder.build(); + + } } |