1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.telephony.ims; 18 19 import static junit.framework.Assert.assertEquals; 20 import static junit.framework.Assert.assertTrue; 21 22 import static org.mockito.Matchers.eq; 23 import static org.mockito.Mockito.verify; 24 25 import android.os.Parcel; 26 import android.support.test.runner.AndroidJUnit4; 27 import android.telephony.ims.feature.CapabilityChangeRequest; 28 import android.telephony.ims.feature.ImsFeature; 29 import android.telephony.ims.feature.MmTelFeature; 30 import android.telephony.ims.stub.ImsRegistrationImplBase; 31 import android.test.suitebuilder.annotation.SmallTest; 32 33 import com.android.ims.internal.IImsFeatureStatusCallback; 34 35 import org.junit.After; 36 import org.junit.Before; 37 import org.junit.Test; 38 import org.junit.runner.RunWith; 39 import org.mockito.Mock; 40 import org.mockito.Mockito; 41 import org.mockito.MockitoAnnotations; 42 43 @RunWith(AndroidJUnit4.class) 44 public class ImsFeatureTest { 45 46 private TestImsFeature mTestImsFeature; 47 private ImsFeature.CapabilityCallback mCapabilityCallback; 48 49 @Mock 50 private IImsFeatureStatusCallback mTestStatusCallback; 51 @Mock 52 private IImsFeatureStatusCallback mTestStatusCallback2; 53 54 @Before 55 public void setUp() { 56 MockitoAnnotations.initMocks(this); 57 mTestImsFeature = new TestImsFeature(); 58 mCapabilityCallback = Mockito.spy(new ImsFeature.CapabilityCallback()); 59 mTestImsFeature.addCapabilityCallback(mCapabilityCallback); 60 } 61 62 @After 63 public void tearDown() { 64 mTestImsFeature = null; 65 mCapabilityCallback = null; 66 } 67 68 @Test 69 @SmallTest 70 public void testSetCallbackAndNotify() throws Exception { 71 mTestImsFeature.addImsFeatureStatusCallback(mTestStatusCallback); 72 mTestImsFeature.addImsFeatureStatusCallback(mTestStatusCallback2); 73 74 verify(mTestStatusCallback).notifyImsFeatureStatus(eq(ImsFeature.STATE_UNAVAILABLE)); 75 verify(mTestStatusCallback2).notifyImsFeatureStatus(eq(ImsFeature.STATE_UNAVAILABLE)); 76 } 77 78 @Test 79 @SmallTest 80 public void testSetFeatureAndCheckCallback() throws Exception { 81 mTestImsFeature.addImsFeatureStatusCallback(mTestStatusCallback); 82 mTestImsFeature.addImsFeatureStatusCallback(mTestStatusCallback2); 83 84 mTestImsFeature.testSetFeatureState(ImsFeature.STATE_READY); 85 86 verify(mTestStatusCallback).notifyImsFeatureStatus(eq(ImsFeature.STATE_READY)); 87 verify(mTestStatusCallback2).notifyImsFeatureStatus(eq(ImsFeature.STATE_READY)); 88 assertEquals(ImsFeature.STATE_READY, mTestImsFeature.getFeatureState()); 89 } 90 91 @SmallTest 92 @Test 93 public void testCapabilityConfigAdd() throws Exception { 94 ImsFeature.Capabilities c = new ImsFeature.Capabilities(); 95 c.addCapabilities(TestImsFeature.CAPABILITY_TEST_1); 96 97 assertTrue(c.isCapable(TestImsFeature.CAPABILITY_TEST_1)); 98 } 99 100 @SmallTest 101 @Test 102 public void testCapabilityConfigAddMultiple() throws Exception { 103 ImsFeature.Capabilities c = new ImsFeature.Capabilities(); 104 c.addCapabilities(TestImsFeature.CAPABILITY_TEST_1); 105 c.addCapabilities(TestImsFeature.CAPABILITY_TEST_2); 106 107 assertTrue(c.isCapable(TestImsFeature.CAPABILITY_TEST_2)); 108 } 109 110 @SmallTest 111 @Test 112 public void testCapabilityConfigHasMultiple() throws Exception { 113 ImsFeature.Capabilities c = new ImsFeature.Capabilities(); 114 c.addCapabilities(TestImsFeature.CAPABILITY_TEST_1); 115 c.addCapabilities(TestImsFeature.CAPABILITY_TEST_2); 116 117 assertTrue(c.isCapable( 118 TestImsFeature.CAPABILITY_TEST_1 | TestImsFeature.CAPABILITY_TEST_2)); 119 } 120 121 @SmallTest 122 @Test 123 public void testCapabilityConfigRemove() throws Exception { 124 ImsFeature.Capabilities c = new ImsFeature.Capabilities(); 125 c.addCapabilities(TestImsFeature.CAPABILITY_TEST_1); 126 c.addCapabilities(TestImsFeature.CAPABILITY_TEST_2); 127 c.removeCapabilities(TestImsFeature.CAPABILITY_TEST_1); 128 129 assertTrue(c.isCapable(TestImsFeature.CAPABILITY_TEST_2)); 130 } 131 132 @SmallTest 133 @Test 134 public void testSetCapabilityConfig() throws Exception { 135 CapabilityChangeRequest request = new CapabilityChangeRequest(); 136 request.addCapabilitiesToEnableForTech(TestImsFeature.CAPABILITY_TEST_1, 137 ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN); 138 139 mTestImsFeature.requestChangeEnabledCapabilities(request, null); 140 141 assertEquals(request, mTestImsFeature.lastRequest); 142 } 143 144 145 @SmallTest 146 @Test 147 public void testSetCapabilityConfigError() throws Exception { 148 CapabilityChangeRequest request = new CapabilityChangeRequest(); 149 request.addCapabilitiesToEnableForTech(TestImsFeature.CAPABILITY_TEST_1, 150 ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN); 151 152 mTestImsFeature.setCapabilitiesResult = ImsFeature.CAPABILITY_ERROR_GENERIC; 153 mTestImsFeature.requestChangeEnabledCapabilities(request, mCapabilityCallback); 154 155 verify(mCapabilityCallback).onChangeCapabilityConfigurationError( 156 eq(TestImsFeature.CAPABILITY_TEST_1), 157 eq(ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN), 158 eq(ImsFeature.CAPABILITY_ERROR_GENERIC)); 159 assertEquals(request, mTestImsFeature.lastRequest); 160 } 161 162 @SmallTest 163 @Test 164 public void testNotifyCapabilityStatusChanged() throws Exception { 165 ImsFeature.Capabilities status = 166 new ImsFeature.Capabilities(); 167 status.addCapabilities(TestImsFeature.CAPABILITY_TEST_1); 168 status.addCapabilities(TestImsFeature.CAPABILITY_TEST_2); 169 170 mTestImsFeature.capabilitiesStatusChanged(status); 171 172 assertEquals(status.getMask(), mTestImsFeature.queryCapabilityStatus().getMask()); 173 } 174 175 @SmallTest 176 @Test 177 public void testNotifyCapabilityStatusChangedCallback() throws Exception { 178 ImsFeature.Capabilities status = 179 new ImsFeature.Capabilities(); 180 status.addCapabilities(TestImsFeature.CAPABILITY_TEST_1); 181 status.addCapabilities(TestImsFeature.CAPABILITY_TEST_2); 182 183 mTestImsFeature.capabilitiesStatusChanged(status); 184 185 assertEquals(status.getMask(), mTestImsFeature.queryCapabilityStatus().getMask()); 186 verify(mCapabilityCallback).onCapabilitiesStatusChanged(eq(status)); 187 } 188 189 @SmallTest 190 @Test 191 public void testCapabilityChangeContainsFullSets() throws Exception { 192 CapabilityChangeRequest request = new CapabilityChangeRequest(); 193 request.addCapabilitiesToEnableForTech(TestImsFeature.CAPABILITY_TEST_1 194 | TestImsFeature.CAPABILITY_TEST_2, 195 ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN); 196 request.addCapabilitiesToEnableForTech(TestImsFeature.CAPABILITY_TEST_2, 197 ImsRegistrationImplBase.REGISTRATION_TECH_LTE); 198 request.addCapabilitiesToDisableForTech(TestImsFeature.CAPABILITY_TEST_1, 199 ImsRegistrationImplBase.REGISTRATION_TECH_LTE); 200 201 mTestImsFeature.changeEnabledCapabilities(request, /*Callback*/null); 202 203 assertTrue(request.getCapabilitiesToDisable().containsAll( 204 mTestImsFeature.lastRequest.getCapabilitiesToDisable())); 205 assertTrue(request.getCapabilitiesToEnable().containsAll( 206 mTestImsFeature.lastRequest.getCapabilitiesToEnable())); 207 } 208 209 @SmallTest 210 @Test 211 public void testCapabilityChangeRequestParcel() throws Exception { 212 CapabilityChangeRequest request = new CapabilityChangeRequest(); 213 // add some capabilities 214 request.addCapabilitiesToEnableForTech(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, 215 ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN); 216 request.addCapabilitiesToEnableForTech( 217 MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO 218 | MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, 219 ImsRegistrationImplBase.REGISTRATION_TECH_LTE); 220 request.addCapabilitiesToDisableForTech(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT, 221 ImsRegistrationImplBase.REGISTRATION_TECH_LTE); 222 request.addCapabilitiesToDisableForTech(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT, 223 ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN); 224 225 Parcel p = Parcel.obtain(); 226 request.writeToParcel(p, 0); 227 p.setDataPosition(0); 228 CapabilityChangeRequest result = 229 CapabilityChangeRequest.CREATOR.createFromParcel(p); 230 p.recycle(); 231 232 assertEquals(request, result); 233 } 234 } 235