diff options
Diffstat (limited to 'tests/src/com')
11 files changed, 398 insertions, 61 deletions
diff --git a/tests/src/com/android/ims/ContextFixture.java b/tests/src/com/android/ims/ContextFixture.java index e987b387..21dd6348 100644 --- a/tests/src/com/android/ims/ContextFixture.java +++ b/tests/src/com/android/ims/ContextFixture.java @@ -33,6 +33,7 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.res.Resources; import android.net.ConnectivityManager; +import android.os.Handler; import android.os.PersistableBundle; import android.telecom.TelecomManager; import android.telephony.CarrierConfigManager; @@ -131,6 +132,18 @@ public class ContextFixture { } @Override + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, + String broadcastPermission, Handler scheduler) { + return null; + } + + @Override + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, + String broadcastPermission, Handler scheduler, int flags) { + return null; + } + + @Override public void unregisterReceiver(BroadcastReceiver receiver) { } diff --git a/tests/src/com/android/ims/ImsManagerTest.java b/tests/src/com/android/ims/ImsManagerTest.java index 0653908d..ad5051be 100644 --- a/tests/src/com/android/ims/ImsManagerTest.java +++ b/tests/src/com/android/ims/ImsManagerTest.java @@ -119,7 +119,7 @@ public class ImsManagerTest extends ImsTestBase { doReturn(true).when(mSubscriptionManagerProxy).isValidSubscriptionId(anyInt()); doReturn(mSubId).when(mSubscriptionManagerProxy).getActiveSubscriptionIdList(); - doReturn(mSubId).when(mSubscriptionManagerProxy).getSubscriptionIds(anyInt()); + doReturn(mSubId[0]).when(mSubscriptionManagerProxy).getSubscriptionId(anyInt()); doReturn(mPhoneId).when(mSubscriptionManagerProxy).getDefaultVoicePhoneId(); doReturn(-1).when(mSubscriptionManagerProxy).getIntegerSubscriptionProperty(anyInt(), anyString(), anyInt()); @@ -1012,6 +1012,14 @@ public class ImsManagerTest extends ImsTestBase { } + @Test @SmallTest + public void onMemoryAvailableTest() throws Exception{ + ImsManager imsManager = getImsManagerAndInitProvisionedValues(); + int token = 1; + imsManager.onMemoryAvailable(token); + verify(mMmTelFeatureConnection).onMemoryAvailable(eq(token)); + } + private ImsManager getImsManagerAndInitProvisionedValues() { when(mImsConfigImplBaseMock.getConfigInt(anyInt())) .thenAnswer(invocation -> { diff --git a/tests/src/com/android/ims/rcs/uce/UceControllerTest.java b/tests/src/com/android/ims/rcs/uce/UceControllerTest.java index 021a7c10..79702ed5 100644 --- a/tests/src/com/android/ims/rcs/uce/UceControllerTest.java +++ b/tests/src/com/android/ims/rcs/uce/UceControllerTest.java @@ -147,7 +147,7 @@ public class UceControllerTest extends ImsTestBase { List<Uri> uriList = new ArrayList<>(); uceController.requestCapabilities(uriList, mCapabilitiesCallback); - verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L); + verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null); verify(mTaskManager, never()).sendCapabilityRequest(any(), eq(false), any()); } @@ -164,7 +164,7 @@ public class UceControllerTest extends ImsTestBase { uriList.add(Uri.fromParts("sip", "test", null)); uceController.requestCapabilities(uriList, mCapabilitiesCallback); - verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L); + verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L, null); verify(mTaskManager, never()).sendCapabilityRequest(any(), eq(false), any()); } @@ -194,7 +194,7 @@ public class UceControllerTest extends ImsTestBase { Uri contact = Uri.fromParts("sip", "test", null); uceController.requestAvailability(contact, mCapabilitiesCallback); - verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L); + verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null); verify(mTaskManager, never()).sendAvailabilityRequest(any(), any()); } @@ -210,7 +210,7 @@ public class UceControllerTest extends ImsTestBase { Uri contact = Uri.fromParts("sip", "test", null); uceController.requestAvailability(contact, mCapabilitiesCallback); - verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L); + verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L, null); verify(mTaskManager, never()).sendCapabilityRequest(any(), eq(false), any()); } diff --git a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfoTest.java b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfoTest.java index c977a080..de045de4 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfoTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityInfoTest.java @@ -16,6 +16,19 @@ package com.android.ims.rcs.uce.presence.publish; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyBoolean; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.doReturn; + +import android.content.Context; +import android.telephony.CarrierConfigManager; +import android.telephony.TelephonyManager; +import android.telephony.ims.RcsContactPresenceTuple; +import android.util.ArraySet; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -26,6 +39,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.ims.ImsTestBase; +import com.android.ims.rcs.uce.util.UceUtils; import org.junit.After; import org.junit.Before; @@ -33,11 +47,18 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + @RunWith(AndroidJUnit4.class) public class DeviceCapabilityInfoTest extends ImsTestBase { - int mSubId = 1; + @Mock PublishServiceDescTracker mPublishServiceDescTracker; + @Mock Context mMockContext; + String sipNumber = "123456789"; String telNumber = "987654321"; @@ -53,6 +74,22 @@ public class DeviceCapabilityInfoTest extends ImsTestBase { @Test @SmallTest + public void testGetPresenceCapabilityForSameDescription() throws Exception { + DeviceCapabilityInfo deviceCapInfo = createDeviceCapabilityInfo(); + + Set<ServiceDescription> mTestCapability = new ArraySet<>(); + mTestCapability.add(getChatDescription()); + mTestCapability.add(getMmtelDescription()); + mTestCapability.add(getUndefinedDescription()); + + deviceCapInfo.addLastSuccessfulServiceDescription(getMmtelDescription()); + deviceCapInfo.addLastSuccessfulServiceDescription(getChatDescription()); + deviceCapInfo.addLastSuccessfulServiceDescription(getUndefinedDescription()); + assertFalse(deviceCapInfo.isPresenceCapabilityChanged(mTestCapability)); + } + + @Test + @SmallTest public void testGetImsAssociatedUriWithoutPreferTelUri() throws Exception { DeviceCapabilityInfo deviceCapInfo = createDeviceCapabilityInfo(); @@ -90,6 +127,23 @@ public class DeviceCapabilityInfoTest extends ImsTestBase { @Test @SmallTest + public void testGetPresenceCapabilityForSameSizeOfDescription() throws Exception { + DeviceCapabilityInfo deviceCapInfo = createDeviceCapabilityInfo(); + + Set<ServiceDescription> mTestCapability = new ArraySet<>(); + mTestCapability.add(getChatDescription()); + mTestCapability.add(getMmtelDescription()); + mTestCapability.add(getUndefinedDescription()); + + deviceCapInfo.addLastSuccessfulServiceDescription(getMmtelDescription()); + deviceCapInfo.addLastSuccessfulServiceDescription(getChatDescription()); + deviceCapInfo.addLastSuccessfulServiceDescription(getUndefined2Description()); + + assertTrue(deviceCapInfo.isPresenceCapabilityChanged(mTestCapability)); + } + + @Test + @SmallTest public void testGetImsAssociatedUriWithPreferTelUri() throws Exception { DeviceCapabilityInfo deviceCapInfo = createDeviceCapabilityInfo(); @@ -138,7 +192,43 @@ public class DeviceCapabilityInfoTest extends ImsTestBase { number = numberParts[0]; assertEquals(number, telNumber); + } + @Test + @SmallTest + public void testGetLastSuccessfulPresenceTuples() throws Exception { + DeviceCapabilityInfo deviceCapInfo = createDeviceCapabilityInfo(); + + List<RcsContactPresenceTuple> tuples = + deviceCapInfo.getLastSuccessfulPresenceTuplesWithoutContactUri(); + // Verify that the presence tuples are empty when the last capabilities are empty. + assertTrue(tuples.isEmpty()); + + doReturn(null).when(mMockContext).getSystemService(CarrierConfigManager.class); + doReturn(null).when(mMockContext).getSystemService(TelephonyManager.class); + ServiceDescription mmtelDescription = getMmtelDescription(); + deviceCapInfo.addLastSuccessfulServiceDescription(mmtelDescription); + ServiceDescription chatDescription = getChatDescription(); + deviceCapInfo.addLastSuccessfulServiceDescription(chatDescription); + tuples = deviceCapInfo.getLastSuccessfulPresenceTuplesWithoutContactUri(); + assertEquals(2, tuples.size()); + + Uri[] uris = new Uri[1]; + uris[0] = Uri.fromParts(PhoneAccount.SCHEME_SIP, sipNumber, null); + deviceCapInfo.updateRcsAssociatedUri(uris); + List<RcsContactPresenceTuple> expectedTuples = new ArrayList<>(); + expectedTuples.add(mmtelDescription.getTupleBuilder().setContactUri(uris[0]).build()); + expectedTuples.add(chatDescription.getTupleBuilder().setContactUri(uris[0]).build()); + + tuples = deviceCapInfo.getLastSuccessfulPresenceTuplesWithoutContactUri(); + assertTrue(!tuples.isEmpty()); + assertEquals(expectedTuples.size(), tuples.size()); + for (int i = 0; i < tuples.size(); i++) { + assertEquals(expectedTuples.get(i).getServiceId(), tuples.get(i).getServiceId()); + assertEquals(expectedTuples.get(i).getServiceVersion(), + tuples.get(i).getServiceVersion()); + assertNull(tuples.get(i).getContactUri()); + } } private DeviceCapabilityInfo createDeviceCapabilityInfo() { @@ -146,4 +236,40 @@ public class DeviceCapabilityInfoTest extends ImsTestBase { return deviceCapInfo; } + private ServiceDescription getChatDescription() { + ServiceDescription SERVICE_DESCRIPTION_CHAT_SESSION = + new ServiceDescription( + RcsContactPresenceTuple.SERVICE_ID_CHAT_V2, + "2.0" /*version*/, + null /*description*/ + ); + return SERVICE_DESCRIPTION_CHAT_SESSION; + } + + private ServiceDescription getMmtelDescription() { + ServiceDescription SERVICE_DESCRIPTION_MMTEL_VOICE = new ServiceDescription( + RcsContactPresenceTuple.SERVICE_ID_MMTEL, + "1.0" /*version*/, + "Voice Service" /*description*/ + ); + return SERVICE_DESCRIPTION_MMTEL_VOICE; + } + + private ServiceDescription getUndefinedDescription() { + ServiceDescription SERVICE_DESCRIPTION_TEST = new ServiceDescription( + "test", + "1.0" /*version*/, + "Test_Service" /*description*/ + ); + return SERVICE_DESCRIPTION_TEST; + } + + private ServiceDescription getUndefined2Description() { + ServiceDescription SERVICE_DESCRIPTION_TEST2 = new ServiceDescription( + "test1", + "1.0" /*version*/, + "Test_Service" /*description*/ + ); + return SERVICE_DESCRIPTION_TEST2; + } }
\ No newline at end of file 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 2d170ab6..11350393 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 @@ -84,7 +84,6 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { getProvisioningManager(anyInt()); doReturn(true).when(mDeviceCapability).updateTtyPreferredMode(anyInt()); - doReturn(true).when(mDeviceCapability).updateAirplaneMode(anyBoolean()); doReturn(true).when(mDeviceCapability).updateMobileData(anyBoolean()); doReturn(true).when(mDeviceCapability).updateVtSetting(anyBoolean()); doReturn(true).when(mDeviceCapability).updateVtSetting(anyBoolean()); @@ -107,7 +106,8 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { deviceCapListener.initialize(); - verify(mContext).registerReceiver(any(), any()); + verify(mContext).registerReceiver(any(), any(), + eq(android.Manifest.permission.MODIFY_PHONE_STATE), any(), anyInt()); verify(mProvisioningManager).registerProvisioningChangedCallback(any(), any()); } @@ -143,23 +143,6 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { @Test @SmallTest - public void testAirplaneModeChange() throws Exception { - DeviceCapabilityListener deviceCapListener = createDeviceCapabilityListener(); - final BroadcastReceiver receiver = deviceCapListener.mReceiver; - - Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); - receiver.onReceive(mContext, intent); - - Handler handler = deviceCapListener.getHandler(); - waitForHandlerActionDelayed(handler, HANDLER_WAIT_TIMEOUT_MS, HANDLER_SENT_DELAY_MS); - - verify(mDeviceCapability).updateAirplaneMode(anyBoolean()); - verify(mCallback).requestPublishFromInternal( - PublishController.PUBLISH_TRIGGER_AIRPLANE_MODE_CHANGE); - } - - @Test - @SmallTest public void testMmtelRegistration() throws Exception { DeviceCapabilityListener deviceCapListener = createDeviceCapabilityListener(); deviceCapListener.setImsCallbackRegistered(true); @@ -171,7 +154,8 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { waitForHandlerActionDelayed(handler, HANDLER_WAIT_TIMEOUT_MS, HANDLER_SENT_DELAY_MS); verify(mDeviceCapability).updateImsMmtelRegistered(1); - verify(mCallback).requestPublishFromInternal( + // update capability, but not trigger PUBLISH message when MmTel registered. + verify(mCallback, never()).requestPublishFromInternal( PublishController.PUBLISH_TRIGGER_MMTEL_REGISTERED); } @@ -266,6 +250,65 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { verify(mCallback).updateImsUnregistered(); } + @Test + @SmallTest + public void testRcsAndMmtelUnregistration() throws Exception { + DeviceCapabilityListener deviceCapListener = createDeviceCapabilityListener(); + deviceCapListener.setImsCallbackRegistered(true); + + Handler handler = deviceCapListener.getHandler(); + ImsReasonInfo info = new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED, -1, ""); + // RCS unregistered + RegistrationCallback rcsRegiCallback = deviceCapListener.mRcsRegistrationCallback; + + doReturn(true).when(mDeviceCapability).updateImsRcsUnregistered(); + // RCS is unregistered but MMTEL is registered. + doReturn(true).when(mDeviceCapability).isImsRegistered(); + rcsRegiCallback.onUnregistered(info); + + // MMTEL unregistered + RegistrationCallback mmtelRegiCallback = deviceCapListener.mMmtelRegistrationCallback; + // set the Ims is unregistered + doReturn(false).when(mDeviceCapability).isImsRegistered(); + mmtelRegiCallback.onUnregistered(info); + + waitForHandlerActionDelayed(handler, HANDLER_WAIT_TIMEOUT_MS, HANDLER_SENT_DELAY_MS); + + // Do not send internal publish trigger + verify(mCallback, never()).requestPublishFromInternal(anyInt()); + // IMS is unregistered. Verify send ImsUnregistered. + verify(mCallback).updateImsUnregistered(); + } + + @Test + @SmallTest + public void testUnregisterRcsOnlyFromImsRegistration() throws Exception { + DeviceCapabilityListener deviceCapListener = createDeviceCapabilityListener(); + deviceCapListener.setImsCallbackRegistered(true); + Handler handler = deviceCapListener.getHandler(); + + // set the Ims is registered + doReturn(true).when(mDeviceCapability).isImsRegistered(); + ImsReasonInfo info = new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED, -1, ""); + // RCS unregistered + RegistrationCallback rcsRegiCallback = deviceCapListener.mRcsRegistrationCallback; + + doReturn(true).when(mDeviceCapability).updateImsRcsUnregistered(); + // RCS is unregistered but MMTEL is registered. + doReturn(true).when(mDeviceCapability).isImsRegistered(); + rcsRegiCallback.onUnregistered(info); + + waitForHandlerActionDelayed(handler, HANDLER_WAIT_TIMEOUT_MS, HANDLER_SENT_DELAY_MS); + + verify(mDeviceCapability).updateImsRcsUnregistered(); + // Only RCS unregistered. Verify the request of the modify publish is sent. + verify(mCallback).requestPublishFromInternal( + PublishController.PUBLISH_TRIGGER_RCS_URI_CHANGE); + + // Only RCS unregistered. Verify do not send ImsUnregistered. + verify(mCallback, never()).updateImsUnregistered(); + } + private DeviceCapabilityListener createDeviceCapabilityListener() { DeviceCapabilityListener deviceCapListener = new DeviceCapabilityListener(mContext, mSubId, mDeviceCapability, mCallback, mUceStatsWriter); 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 a7e0bbbe..aa145c7c 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 @@ -22,6 +22,8 @@ import static com.android.ims.rcs.uce.presence.publish.PublishController.PUBLISH import static junit.framework.Assert.assertFalse; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; @@ -34,6 +36,7 @@ import android.os.Handler; import android.os.Looper; import android.os.RemoteCallbackList; import android.telephony.ims.RcsUceAdapter; +import android.telephony.ims.SipDetails; import android.telephony.ims.aidl.IImsCapabilityCallback; import android.telephony.ims.aidl.IRcsUcePublishStateCallback; import android.telephony.ims.feature.RcsFeature.RcsImsCapabilities; @@ -137,7 +140,7 @@ public class PublishControllerImplTest extends ImsTestBase { assertEquals(RcsUceAdapter.PUBLISH_STATE_NOT_PUBLISHED, initState); publishController.getPublishControllerCallback().updatePublishRequestResult( - RcsUceAdapter.PUBLISH_STATE_OK, Instant.now(), null); + RcsUceAdapter.PUBLISH_STATE_OK, Instant.now(), null, null); Handler handler = publishController.getPublishHandler(); waitForHandlerAction(handler, 1000); @@ -154,7 +157,7 @@ public class PublishControllerImplTest extends ImsTestBase { assertEquals(RcsUceAdapter.PUBLISH_STATE_NOT_PUBLISHED, initState); publishController.getPublishControllerCallback().updatePublishRequestResult( - RcsUceAdapter.PUBLISH_STATE_PUBLISHING, Instant.now(), null); + RcsUceAdapter.PUBLISH_STATE_PUBLISHING, Instant.now(), null, null); Handler handler = publishController.getPublishHandler(); waitForHandlerAction(handler, 1000); @@ -223,8 +226,10 @@ public class PublishControllerImplTest extends ImsTestBase { public void testPublishUpdated() throws Exception { PublishControllerImpl publishController = createPublishController(); int responseCode = 200; + String responsePhrase = "OK"; - publishController.onPublishUpdated(responseCode, "", 0, ""); + publishController.onPublishUpdated(new SipDetails.Builder(SipDetails.METHOD_PUBLISH) + .setSipResponseCode(responseCode, responsePhrase).build()); Handler handler = publishController.getPublishHandler(); waitForHandlerAction(handler, 1000); @@ -235,14 +240,64 @@ public class PublishControllerImplTest extends ImsTestBase { verify(mPublishProcessor).publishUpdated(captor.capture()); PublishRequestResponse response = captor.getValue(); int expectedCode = response.getNetworkRespSipCode().orElse(-1); + String expectedPhrase = response.getReasonPhrase().orElse(""); assertEquals(responseCode, expectedCode); + assertEquals(responsePhrase, expectedPhrase); + SipDetails details = response.getSipDetails().orElse(null); + assertNotNull(details); + assertEquals(responseCode, details.getResponseCode()); + assertEquals(responsePhrase, details.getResponsePhrase()); + } + + @Test + @SmallTest + public void testPublishUpdatedWithSipDetails() throws Exception { + PublishControllerImpl publishController = createPublishController(); + int responseCode = 200; + String responsePhrase = "OK"; + int reasonHdrCause = 7; + String reasonHdrText = "reasonHeaderText"; + int cseq = 10; + String callId = "TestCallId"; + + publishController.onPublishUpdated(new SipDetails.Builder(SipDetails.METHOD_PUBLISH) + .setCSeq(cseq).setSipResponseCode(responseCode, responsePhrase).setCallId(callId) + .setSipResponseReasonHeader(reasonHdrCause, reasonHdrText).build()); + + Handler handler = publishController.getPublishHandler(); + waitForHandlerAction(handler, 1000); + + ArgumentCaptor<PublishRequestResponse> captor = + ArgumentCaptor.forClass(PublishRequestResponse.class); + + verify(mPublishProcessor).publishUpdated(captor.capture()); + PublishRequestResponse response = captor.getValue(); + int expectedCode = response.getNetworkRespSipCode().orElse(-1); + String expectedPhrase = response.getReasonPhrase().orElse(""); + int expectedReasonCause = response.getReasonHeaderCause().orElse(-1); + String expectedReasonText = response.getReasonHeaderText().orElse(""); + + assertEquals(responseCode, expectedCode); + assertEquals(responsePhrase, expectedPhrase); + assertEquals(reasonHdrCause, expectedReasonCause); + assertEquals(reasonHdrText, expectedReasonText); + + SipDetails details = response.getSipDetails().orElse(null); + assertNotNull(details); + assertEquals(SipDetails.METHOD_PUBLISH, details.getMethod()); + assertEquals(cseq, details.getCSeq()); + assertEquals(responseCode, details.getResponseCode()); + assertEquals(responsePhrase, details.getResponsePhrase()); + assertEquals(reasonHdrCause, details.getReasonHeaderCause()); + assertEquals(reasonHdrText, details.getReasonHeaderText()); + assertEquals(callId, details.getCallId()); } @Test @SmallTest public void testPublishingStateTargetingEnable() throws Exception { doReturn(1).when(mPublishStateCallbacks).getRegisteredCallbackCount(); - Boolean boolObj = new Boolean(true); + Boolean boolObj = Boolean.TRUE; Object uid1 = (Object)boolObj; doReturn(uid1).when(mPublishStateCallbacks).getRegisteredCallbackCookie(anyInt()); @@ -282,7 +337,7 @@ public class PublishControllerImplTest extends ImsTestBase { @SmallTest public void testPublishingStateTargetingDisable() throws Exception { doReturn(1).when(mPublishStateCallbacks).getRegisteredCallbackCount(); - Boolean boolObj = new Boolean(false); + Boolean boolObj = Boolean.FALSE; Object uid1 = (Object)boolObj; doReturn(uid1).when(mPublishStateCallbacks).getRegisteredCallbackCookie(anyInt()); 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 4e8cdfdc..2de47146 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 @@ -30,6 +30,7 @@ import android.content.Context; import android.net.Uri; import android.telephony.ims.RcsContactPresenceTuple; import android.telephony.ims.RcsContactUceCapability; +import android.telephony.ims.SipDetails; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; @@ -82,6 +83,7 @@ public class PublishProcessorTest extends ImsTestBase { doReturn(true).when(mDeviceCapabilities).isImsRegistered(); RcsContactUceCapability capability = getRcsContactUceCapability(); + doReturn(capability).when(mDeviceCapabilities).getChangedPresenceCapability(any()); doReturn(capability).when(mDeviceCapabilities).getDeviceCapabilities(anyInt(), any()); doReturn(mTaskId).when(mResponseCallback).getTaskId(); @@ -112,7 +114,7 @@ public class PublishProcessorTest extends ImsTestBase { PublishProcessor publishProcessor = getPublishProcessor(); publishProcessor.doPublish(PublishController.PUBLISH_TRIGGER_RETRY); - + verify(mDeviceCapabilities).getChangedPresenceCapability(any()); verify(mProcessorState, never()).resetRetryCount(); } @@ -139,7 +141,7 @@ public class PublishProcessorTest extends ImsTestBase { publishProcessor.onNetworkResponse(mResponseCallback); - verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any()); + verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any(), eq(null)); verify(mResponseCallback).onDestroy(); verify(mProcessorState).setPublishingFlag(false); verify(mPublishCtrlCallback).clearRequestCanceledTimer(); @@ -171,6 +173,7 @@ public class PublishProcessorTest extends ImsTestBase { publishProcessor.onCommandError(mResponseCallback); + verify(mDeviceCapabilities).setPresencePublishResult(false); verify(mProcessorState).increaseRetryCount(); verify(mPublishCtrlCallback).requestPublishFromInternal( eq(PublishController.PUBLISH_TRIGGER_RETRY)); @@ -188,11 +191,13 @@ public class PublishProcessorTest extends ImsTestBase { doReturn(mTaskId).when(mProcessorState).getCurrentTaskId(); doReturn(mTaskId).when(mResponseCallback).getTaskId(); doReturn(false).when(mResponseCallback).needRetry(); + doReturn(true).when(mResponseCallback).isRequestSuccess(); PublishProcessor publishProcessor = getPublishProcessor(); publishProcessor.onCommandError(mResponseCallback); - verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any()); + verify(mDeviceCapabilities).setPresencePublishResult(true); + verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any(), eq(null)); verify(mResponseCallback).onDestroy(); verify(mProcessorState).setPublishingFlag(false); verify(mPublishCtrlCallback).clearRequestCanceledTimer(); @@ -209,6 +214,7 @@ public class PublishProcessorTest extends ImsTestBase { publishProcessor.onNetworkResponse(mResponseCallback); + verify(mDeviceCapabilities).setPresencePublishResult(false); verify(mProcessorState).increaseRetryCount(); verify(mPublishCtrlCallback).requestPublishFromInternal( eq(PublishController.PUBLISH_TRIGGER_RETRY)); @@ -226,11 +232,20 @@ public class PublishProcessorTest extends ImsTestBase { doReturn(false).when(mResponseCallback).needRetry(); doReturn(true).when(mResponseCallback).isRequestSuccess(); doReturn(Optional.of(200)).when(mResponseCallback).getNetworkRespSipCode(); + + SipDetails details = new SipDetails.Builder(SipDetails.METHOD_PUBLISH) + .setCSeq(10).setSipResponseCode(200, "OK").setCallId("CallId").build(); + Optional<SipDetails> sipDetails = Optional.ofNullable(details); + doReturn(sipDetails).when(mResponseCallback).getSipDetails(); + PublishProcessor publishProcessor = getPublishProcessor(); publishProcessor.onNetworkResponse(mResponseCallback); + SipDetails actualInfo = sipDetails.orElse(null); - verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any()); + verify(mDeviceCapabilities).setPresencePublishResult(true); + verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any(), + eq(actualInfo)); verify(mResponseCallback).onDestroy(); verify(mProcessorState).setPublishingFlag(false); verify(mPublishCtrlCallback).clearRequestCanceledTimer(); @@ -260,13 +275,21 @@ public class PublishProcessorTest extends ImsTestBase { doReturn(0).when(mResponseCallback).getPublishState(); doReturn("").when(mResponseCallback).getPidfXml(); + SipDetails details = new SipDetails.Builder(SipDetails.METHOD_PUBLISH) + .setCSeq(10).setSipResponseCode(200, "").setCallId("CallId").build(); + Optional<SipDetails> sipDetails = Optional.ofNullable(details); + doReturn(sipDetails).when(mResponseCallback).getSipDetails(); + PublishProcessor publishProcessor = getPublishProcessor(); publishProcessor.publishUpdated(mResponseCallback); + SipDetails actualInfo = sipDetails.orElse(null); + verify(mDeviceCapabilities).setPresencePublishResult(true); verify(mProcessorState).setLastPublishedTime(any()); verify(mProcessorState).resetRetryCount(); - verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any()); + verify(mPublishCtrlCallback).updatePublishRequestResult(anyInt(), any(), any(), + eq(actualInfo)); } private PublishProcessor getPublishProcessor() { diff --git a/tests/src/com/android/ims/rcs/uce/presence/publish/PublishServiceDescTrackerTest.java b/tests/src/com/android/ims/rcs/uce/presence/publish/PublishServiceDescTrackerTest.java index 55006299..52017c7a 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/publish/PublishServiceDescTrackerTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/publish/PublishServiceDescTrackerTest.java @@ -107,7 +107,6 @@ public class PublishServiceDescTrackerTest { t1.updateImsRegistration(imsReg); assertEquals(expectedSet, t1.copyRegistrationCapabilities()); - expectedSet = Collections.singleton( ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION); imsReg = createImsRegistration( @@ -139,6 +138,30 @@ public class PublishServiceDescTrackerTest { FeatureTags.FEATURE_TAG_VIDEO); t1.updateImsRegistration(imsReg); assertEquals(expectedSet, t1.copyRegistrationCapabilities()); + + expectedSet = Collections.singleton( + ServiceDescription.SERVICE_DESCRIPTION_SLM); + imsReg = createImsRegistration( + FeatureTags.FEATURE_TAG_PAGER_MODE, + FeatureTags.FEATURE_TAG_LARGE_MODE, + FeatureTags.FEATURE_TAG_DEFERRED_MESSAGING, + FeatureTags.FEATURE_TAG_LARGE_PAGER_MODE); + t1.updateImsRegistration(imsReg); + assertEquals(expectedSet, t1.copyRegistrationCapabilities()); + + + expectedSet = Collections.singleton( + ServiceDescription.SERVICE_DESCRIPTION_SLM_PAGER_LARGE); + imsReg = createImsRegistration( + FeatureTags.FEATURE_TAG_PAGER_MODE, + FeatureTags.FEATURE_TAG_LARGE_MODE); + t1.updateImsRegistration(imsReg); + assertEquals(expectedSet, t1.copyRegistrationCapabilities()); + + // delete the feature tags for Unregistered + expectedSet = new ArraySet<>(); + t1.updateImsRegistration(Collections.emptySet()); + assertEquals(expectedSet, t1.copyRegistrationCapabilities()); } @SmallTest 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 bcd3c98d..2c0042ea 100644 --- a/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java +++ b/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java @@ -25,14 +25,11 @@ import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDA import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDATE_RESOURCE_TERMINATED; import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDATE_TERMINATED; -import static java.lang.Boolean.TRUE; - import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; @@ -41,6 +38,7 @@ import static org.mockito.Mockito.verify; import android.net.Uri; import android.telephony.ims.RcsContactPresenceTuple; import android.telephony.ims.RcsContactUceCapability; +import android.telephony.ims.SipDetails; import android.telephony.ims.aidl.IRcsUceControllerCallback; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -49,21 +47,23 @@ 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.eab.EabCapabilityResult; import com.android.ims.rcs.uce.request.UceRequestCoordinator.RequestResult; import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback; -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; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Optional; + @RunWith(AndroidJUnit4.class) public class SubscribeCoordinatorTest extends ImsTestBase { @@ -127,6 +127,17 @@ public class SubscribeCoordinatorTest extends ImsTestBase { @Test @SmallTest public void testRequestNetworkRespSuccess() throws Exception { + int responseCode = 200; + String responsePhrase = "OK"; + int reasonHdrCause = 1; + String reasonHdrText = "reasonText"; + int cSeq = 10; + String callId = "TestCallId"; + SipDetails details = new SipDetails.Builder(SipDetails.METHOD_SUBSCRIBE).setCSeq(cSeq) + .setSipResponseCode(responseCode, responsePhrase).setCallId(callId) + .setSipResponseReasonHeader(reasonHdrCause, reasonHdrText).build(); + doReturn(Optional.ofNullable(details)).when(mResponse).getSipDetails(); + SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); doReturn(true).when(mResponse).isNetworkResponseOK(); doReturn(Optional.of(200)).when(mResponse).getNetworkRespSipCode(); @@ -138,8 +149,21 @@ public class SubscribeCoordinatorTest extends ImsTestBase { assertEquals(1, requestList.size()); assertTrue(resultList.isEmpty()); - verify(mUceStatsWriter).setSubscribeResponse(eq(mSubId), eq(mTaskId), eq(200)); + Iterator<RequestResult> requestResults = resultList.iterator(); + while (requestResults.hasNext()) { + RequestResult req = requestResults.next(); + SipDetails receivedInfo = req.getSipDetails().orElse(null); + assertNotNull(receivedInfo); + assertEquals(SipDetails.METHOD_SUBSCRIBE, receivedInfo.getMethod()); + assertEquals(cSeq, receivedInfo.getCSeq()); + assertEquals(responseCode, receivedInfo.getResponseCode()); + assertEquals(responsePhrase, receivedInfo.getResponsePhrase()); + assertEquals(reasonHdrCause, receivedInfo.getReasonHeaderCause()); + assertEquals(reasonHdrText, receivedInfo.getReasonHeaderText()); + assertEquals(callId, receivedInfo.getCallId()); + } + verify(mUceStatsWriter).setSubscribeResponse(eq(mSubId), eq(mTaskId), eq(200)); verify(mRequest, never()).onFinish(); } @@ -150,10 +174,20 @@ public class SubscribeCoordinatorTest extends ImsTestBase { SubscribeRequestCoordinator coordinator = getSubscribeCoordinator(); + List<EabCapabilityResult> eabResultList = new ArrayList<>(); + + Uri contactUri = Uri.fromParts("tel", "123456789", null); + EabCapabilityResult result = new EabCapabilityResult(contactUri, + EabCapabilityResult.EAB_CONTACT_NOT_FOUND_FAILURE, null); + eabResultList.add(result); + + doReturn(eabResultList).when(mRequestMgrCallback). + getCapabilitiesFromCacheIncludingExpired(any()); + coordinator.onRequestUpdated(mTaskId, REQUEST_UPDATE_NETWORK_RESPONSE); verify(mUceStatsWriter).setSubscribeResponse(eq(mSubId), eq(mTaskId), eq(400)); - + verify(mRequestMgrCallback, never()).saveCapabilities(any()); verify(mRequest).onFinish(); } diff --git a/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java b/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java index b4f9cca4..543ad6d2 100644 --- a/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java +++ b/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java @@ -19,7 +19,9 @@ 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.anyInt; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; @@ -28,6 +30,7 @@ import static org.mockito.Mockito.verify; import android.net.Uri; import android.telephony.ims.RcsContactTerminatedReason; import android.telephony.ims.RcsUceAdapter; +import android.telephony.ims.SipDetails; import android.telephony.ims.aidl.ISubscribeResponseCallback; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -36,10 +39,6 @@ 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; @@ -47,6 +46,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import java.util.ArrayList; +import java.util.List; + @RunWith(AndroidJUnit4.class) public class SubscribeRequestTest extends ImsTestBase { @@ -88,6 +90,7 @@ public class SubscribeRequestTest extends ImsTestBase { subscribeRequest.requestCapabilities(uriList); verify(mRequestResponse).setRequestInternalError(RcsUceAdapter.ERROR_GENERIC_FAILURE); + verify(mRequestResponse, never()).setSipDetails(any()); verify(mRequestManagerCallback).notifyRequestError(eq(mCoordId), anyLong()); verify(mSubscribeController, never()).requestCapabilities(any(), any()); } @@ -101,6 +104,7 @@ public class SubscribeRequestTest extends ImsTestBase { callback.onCommandError(COMMAND_CODE_NOT_SUPPORTED); verify(mRequestResponse).setCommandError(COMMAND_CODE_NOT_SUPPORTED); + verify(mRequestResponse, never()).setSipDetails(any(SipDetails.class)); verify(mRequestManagerCallback).notifyCommandError(eq(mCoordId), anyLong()); } @@ -109,12 +113,16 @@ public class SubscribeRequestTest extends ImsTestBase { public void testNetworkResponse() throws Exception { SubscribeRequest subscribeRequest = getSubscribeRequest(); - int sipCode = NetworkSipCode.SIP_CODE_FORBIDDEN; - String reason = "forbidden"; + int sipCode = 200; + String reason = "OK"; + SipDetails details = new SipDetails.Builder(SipDetails.METHOD_SUBSCRIBE).setCSeq(1) + .setSipResponseCode(sipCode, reason).setCallId("callId").build(); + ISubscribeResponseCallback callback = subscribeRequest.getResponseCallback(); - callback.onNetworkResponse(sipCode, reason); + callback.onNetworkResponse(details); - verify(mRequestResponse).setNetworkResponseCode(sipCode, reason); + verify(mRequestResponse).setSipDetails(eq(details)); + verify(mRequestResponse, never()).setNetworkResponseCode(anyInt(), anyString()); verify(mRequestManagerCallback).notifyNetworkResponse(eq(mCoordId), anyLong()); } @@ -130,6 +138,7 @@ public class SubscribeRequestTest extends ImsTestBase { callback.onResourceTerminated(list); verify(mRequestResponse).addTerminatedResource(list); + verify(mRequestResponse, never()).setSipDetails(any()); verify(mRequestManagerCallback).notifyResourceTerminated(eq(mCoordId), anyLong()); } @@ -144,6 +153,7 @@ public class SubscribeRequestTest extends ImsTestBase { callback.onNotifyCapabilitiesUpdate(pidfXml); verify(mRequestResponse).addUpdatedCapabilities(any()); + verify(mRequestResponse, never()).setSipDetails(any()); verify(mRequestManagerCallback).notifyCapabilitiesUpdated(eq(mCoordId), anyLong()); } @@ -159,6 +169,7 @@ public class SubscribeRequestTest extends ImsTestBase { callback.onTerminated(reason, retryAfterMillis); verify(mRequestResponse).setTerminated(reason, retryAfterMillis); + verify(mRequestResponse, never()).setSipDetails(any()); verify(mRequestManagerCallback).notifyTerminated(eq(mCoordId), anyLong()); } diff --git a/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java b/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java index b380eac9..fa8214ed 100644 --- a/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java +++ b/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java @@ -31,6 +31,7 @@ import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDA 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; @@ -133,7 +134,7 @@ public class UceRequestManagerTest extends ImsTestBase { waitForHandlerAction(handler, 500L); verify(mUceRequest, never()).executeRequest(); - verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L); + verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null); } /** @@ -164,7 +165,7 @@ public class UceRequestManagerTest extends ImsTestBase { verify(mCapabilitiesCallback).onCapabilitiesReceived( cachedNumbers.stream().map(EabCapabilityResult::getContactCapabilities).collect( Collectors.toList())); - verify(mCapabilitiesCallback).onComplete(); + verify(mCapabilitiesCallback).onComplete(eq(null)); // The cache should have been hit, so no network requests should have been generated. verify(mRequestRepository, never()).addRequestCoordinator(any()); } @@ -196,7 +197,7 @@ public class UceRequestManagerTest extends ImsTestBase { waitForHandlerAction(handler, 500L); // Extract caps from EabCapabilityResult and ensure the Lists match. verify(mCapabilitiesCallback, never()).onCapabilitiesReceived(any()); - verify(mCapabilitiesCallback, never()).onComplete(); + verify(mCapabilitiesCallback, never()).onComplete(any()); // A network request should have been generated for the expired contact. verify(mRequestRepository).addRequestCoordinator(any()); } @@ -240,7 +241,7 @@ public class UceRequestManagerTest extends ImsTestBase { // Extract caps from EabCapabilityResult and ensure the Lists match. verify(mCapabilitiesCallback).onCapabilitiesReceived( Collections.singletonList(cachedItem.getContactCapabilities())); - verify(mCapabilitiesCallback, never()).onComplete(); + verify(mCapabilitiesCallback, never()).onComplete(any()); // The cache should have been hit, but there was also entry that was not in the cache, so // ensure that is requested. verify(mRequestRepository).addRequestCoordinator(any()); |