1 /* 2 * Copyright (C) 2010 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 com.android.internal.telephony.dataconnection; 18 19 import static junit.framework.Assert.assertFalse; 20 import static junit.framework.Assert.assertTrue; 21 import static junit.framework.Assert.fail; 22 23 import static org.junit.Assert.assertEquals; 24 import static org.mockito.Mockito.doReturn; 25 26 import android.net.Uri; 27 import android.os.Parcel; 28 import android.os.PersistableBundle; 29 import android.telephony.CarrierConfigManager; 30 import android.telephony.ServiceState; 31 import android.telephony.TelephonyManager; 32 import android.telephony.data.ApnSetting; 33 import android.test.suitebuilder.annotation.SmallTest; 34 35 import com.android.internal.telephony.TelephonyTest; 36 37 import org.junit.After; 38 import org.junit.Before; 39 import org.junit.Test; 40 41 import java.lang.reflect.Field; 42 import java.lang.reflect.Modifier; 43 import java.net.InetAddress; 44 import java.util.List; 45 46 public class ApnSettingTest extends TelephonyTest { 47 48 private PersistableBundle mBundle; 49 50 @Before setUp()51 public void setUp() throws Exception { 52 super.setUp(getClass().getSimpleName()); 53 mBundle = mContextFixture.getCarrierConfigBundle(); 54 } 55 56 @After tearDown()57 public void tearDown() throws Exception { 58 mBundle = null; 59 super.tearDown(); 60 } 61 createApnSetting(int apnTypesBitmask)62 static ApnSetting createApnSetting(int apnTypesBitmask) { 63 return createApnSettingInternal(apnTypesBitmask, true); 64 } 65 createDisabledApnSetting(int apnTypesBitmask)66 private static ApnSetting createDisabledApnSetting(int apnTypesBitmask) { 67 return createApnSettingInternal(apnTypesBitmask, false); 68 } 69 createApnSettingInternal(int apnTypeBitmask, boolean carrierEnabled)70 private static ApnSetting createApnSettingInternal(int apnTypeBitmask, boolean carrierEnabled) { 71 return new ApnSetting.Builder() 72 .setId(2163) 73 .setOperatorNumeric("44010") 74 .setEntryName("sp-mode") 75 .setApnName("fake_apn") 76 .setApnTypeBitmask(apnTypeBitmask) 77 .setProtocol(ApnSetting.PROTOCOL_IP) 78 .setRoamingProtocol(ApnSetting.PROTOCOL_IP) 79 .setCarrierEnabled(carrierEnabled) 80 .build(); 81 } 82 assertApnSettingsEqual(List<ApnSetting> a1, List<ApnSetting> a2)83 private static void assertApnSettingsEqual(List<ApnSetting> a1, List<ApnSetting> a2) { 84 assertEquals(a1.size(), a2.size()); 85 for (int i = 0; i < a1.size(); ++i) { 86 assertApnSettingEqual(a1.get(i), a2.get(i)); 87 } 88 } 89 assertApnSettingEqual(ApnSetting a1, ApnSetting a2)90 private static void assertApnSettingEqual(ApnSetting a1, ApnSetting a2) { 91 assertEquals(a1.getEntryName(), a2.getEntryName()); 92 assertEquals(a1.getApnName(), a2.getApnName()); 93 assertEquals(a1.getProxyAddressAsString(), a2.getProxyAddressAsString()); 94 assertEquals(a1.getProxyPort(), a2.getProxyPort()); 95 assertEquals(a1.getMmsc(), a2.getMmsc()); 96 assertEquals(a1.getMmsProxyAddressAsString(), a2.getMmsProxyAddressAsString()); 97 assertEquals(a1.getMmsProxyPort(), a2.getMmsProxyPort()); 98 assertEquals(a1.getUser(), a2.getUser()); 99 assertEquals(a1.getPassword(), a2.getPassword()); 100 assertEquals(a1.getAuthType(), a2.getAuthType()); 101 assertEquals(a1.getId(), a2.getId()); 102 assertEquals(a1.getOperatorNumeric(), a2.getOperatorNumeric()); 103 assertEquals(a1.getProtocol(), a2.getProtocol()); 104 assertEquals(a1.getRoamingProtocol(), a2.getRoamingProtocol()); 105 assertEquals(a1.getApnTypeBitmask(), a2.getApnTypeBitmask()); 106 assertEquals(a1.isEnabled(), a2.isEnabled()); 107 assertEquals(a1.getProfileId(), a2.getProfileId()); 108 assertEquals(a1.isPersistent(), a2.isPersistent()); 109 assertEquals(a1.getMaxConns(), a2.getMaxConns()); 110 assertEquals(a1.getWaitTime(), a2.getWaitTime()); 111 assertEquals(a1.getMaxConnsTime(), a2.getMaxConnsTime()); 112 assertEquals(a1.getMtuV4(), a2.getMtuV4()); 113 assertEquals(a1.getMvnoType(), a2.getMvnoType()); 114 assertEquals(a1.getMvnoMatchData(), a2.getMvnoMatchData()); 115 assertEquals(a1.getNetworkTypeBitmask(), a2.getNetworkTypeBitmask()); 116 assertEquals(a1.getApnSetId(), a2.getApnSetId()); 117 assertEquals(a1.getSkip464Xlat(), a2.getSkip464Xlat()); 118 } 119 120 @Test 121 @SmallTest testIsMetered()122 public void testIsMetered() { 123 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 124 new String[]{ApnSetting.TYPE_DEFAULT_STRING, ApnSetting.TYPE_MMS_STRING}); 125 126 doReturn(false).when(mServiceState).getDataRoaming(); 127 doReturn(1).when(mPhone).getSubId(); 128 129 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_DEFAULT), mPhone)); 130 131 assertTrue(ApnSettingUtils.isMetered( 132 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS), mPhone)); 133 134 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_MMS), mPhone)); 135 136 assertTrue(ApnSettingUtils.isMetered( 137 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_MMS), mPhone)); 138 139 assertTrue(ApnSettingUtils.isMetered( 140 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_DUN), mPhone)); 141 142 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 143 144 assertFalse(ApnSettingUtils.isMetered( 145 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_FOTA), mPhone)); 146 147 assertFalse(ApnSettingUtils.isMetered( 148 createApnSetting(ApnSetting.TYPE_IA | ApnSetting.TYPE_CBS), mPhone)); 149 150 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 151 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 152 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_SUPL, mPhone)); 153 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_CBS, mPhone)); 154 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DUN, mPhone)); 155 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_FOTA, mPhone)); 156 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_IA, mPhone)); 157 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_HIPRI, mPhone)); 158 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_XCAP, mPhone)); 159 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_ENTERPRISE, mPhone)); 160 161 // Carrier config settings changes. 162 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 163 new String[]{ApnSetting.TYPE_DEFAULT_STRING}); 164 165 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 166 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 167 } 168 169 @Test 170 @SmallTest testIsRoamingMetered()171 public void testIsRoamingMetered() { 172 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 173 new String[]{ApnSetting.TYPE_DEFAULT_STRING, ApnSetting.TYPE_MMS_STRING}); 174 doReturn(true).when(mServiceState).getDataRoaming(); 175 doReturn(1).when(mPhone).getSubId(); 176 177 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_DEFAULT), mPhone)); 178 179 assertTrue(ApnSettingUtils.isMetered( 180 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS), mPhone)); 181 182 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_MMS), mPhone)); 183 184 assertTrue(ApnSettingUtils.isMetered( 185 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_MMS), mPhone)); 186 187 assertTrue(ApnSettingUtils.isMetered( 188 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_DUN), mPhone)); 189 190 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 191 192 assertFalse(ApnSettingUtils.isMetered( 193 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_FOTA), mPhone)); 194 195 assertFalse(ApnSettingUtils.isMetered( 196 createApnSetting(ApnSetting.TYPE_IA | ApnSetting.TYPE_CBS), mPhone)); 197 198 // Carrier config settings changes. 199 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 200 new String[]{ApnSetting.TYPE_FOTA_STRING}); 201 202 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 203 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 204 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_FOTA, mPhone)); 205 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_XCAP, mPhone)); 206 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_ENTERPRISE, mPhone)); 207 } 208 209 @Test 210 @SmallTest testIsMeteredAnother()211 public void testIsMeteredAnother() { 212 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 213 new String[]{ApnSetting.TYPE_SUPL_STRING, ApnSetting.TYPE_CBS_STRING}); 214 215 doReturn(false).when(mServiceState).getDataRoaming(); 216 doReturn(1).when(mPhone).getSubId(); 217 218 assertTrue(ApnSettingUtils.isMetered( 219 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_CBS), mPhone)); 220 221 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_SUPL), mPhone)); 222 223 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_CBS), mPhone)); 224 225 assertTrue(ApnSettingUtils.isMetered( 226 createApnSetting(ApnSetting.TYPE_FOTA | ApnSetting.TYPE_CBS), mPhone)); 227 228 assertTrue(ApnSettingUtils.isMetered( 229 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_IA), mPhone)); 230 231 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 232 233 assertFalse(ApnSettingUtils.isMetered( 234 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_IMS), mPhone)); 235 236 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 237 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_XCAP), mPhone)); 238 assertFalse(ApnSettingUtils.isMetered( 239 createApnSetting(ApnSetting.TYPE_ENTERPRISE), mPhone)); 240 } 241 242 @Test 243 @SmallTest testIsRoamingMeteredAnother()244 public void testIsRoamingMeteredAnother() { 245 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 246 new String[]{ApnSetting.TYPE_SUPL_STRING, ApnSetting.TYPE_CBS_STRING}); 247 doReturn(true).when(mServiceState).getDataRoaming(); 248 doReturn(2).when(mPhone).getSubId(); 249 250 assertTrue(ApnSettingUtils.isMetered( 251 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_CBS), mPhone)); 252 253 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_SUPL), mPhone)); 254 255 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_CBS), mPhone)); 256 257 assertTrue(ApnSettingUtils.isMetered( 258 createApnSetting(ApnSetting.TYPE_FOTA | ApnSetting.TYPE_CBS), mPhone)); 259 260 assertTrue(ApnSettingUtils.isMetered( 261 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_IA), mPhone)); 262 263 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 264 265 assertFalse(ApnSettingUtils.isMetered( 266 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_IMS), mPhone)); 267 268 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 269 270 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_SUPL, mPhone)); 271 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_CBS, mPhone)); 272 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 273 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 274 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DUN, mPhone)); 275 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_FOTA, mPhone)); 276 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_IA, mPhone)); 277 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_HIPRI, mPhone)); 278 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_XCAP, mPhone)); 279 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_ENTERPRISE, mPhone)); 280 } 281 282 @Test 283 @SmallTest testIsMeteredNothingCharged()284 public void testIsMeteredNothingCharged() { 285 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 286 new String[]{}); 287 288 doReturn(false).when(mServiceState).getDataRoaming(); 289 doReturn(3).when(mPhone).getSubId(); 290 291 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 292 293 assertFalse(ApnSettingUtils.isMetered( 294 createApnSetting(ApnSetting.TYPE_IMS | ApnSetting.TYPE_MMS), mPhone)); 295 296 assertFalse(ApnSettingUtils.isMetered( 297 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_FOTA), mPhone)); 298 299 assertFalse(ApnSettingUtils.isMetered( 300 createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 301 } 302 303 @Test 304 @SmallTest testIsRoamingMeteredNothingCharged()305 public void testIsRoamingMeteredNothingCharged() { 306 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 307 new String[]{}); 308 doReturn(true).when(mServiceState).getDataRoaming(); 309 doReturn(3).when(mPhone).getSubId(); 310 311 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 312 313 assertFalse(ApnSettingUtils.isMetered( 314 createApnSetting(ApnSetting.TYPE_IMS | ApnSetting.TYPE_MMS), mPhone)); 315 316 assertFalse(ApnSettingUtils.isMetered( 317 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_FOTA), mPhone)); 318 319 assertFalse(ApnSettingUtils.isMetered( 320 createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 321 } 322 323 @Test 324 @SmallTest testCanHandleType()325 public void testCanHandleType() { 326 String types[] = {"mms"}; 327 328 assertTrue(createApnSetting(ApnSetting.TYPE_ALL) 329 .canHandleType(ApnSetting.TYPE_MMS)); 330 331 assertFalse(createApnSetting(ApnSetting.TYPE_DEFAULT) 332 .canHandleType(ApnSetting.TYPE_MMS)); 333 334 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT) 335 .canHandleType(ApnSetting.TYPE_DEFAULT)); 336 337 // Hipri is asymmetric 338 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT) 339 .canHandleType(ApnSetting.TYPE_HIPRI)); 340 assertFalse(createApnSetting(ApnSetting.TYPE_HIPRI) 341 .canHandleType(ApnSetting.TYPE_DEFAULT)); 342 343 344 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 345 .canHandleType(ApnSetting.TYPE_DEFAULT)); 346 347 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 348 .canHandleType(ApnSetting.TYPE_MMS)); 349 350 assertFalse(createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 351 .canHandleType(ApnSetting.TYPE_SUPL)); 352 353 // special IA case - doesn't match wildcards 354 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 355 .canHandleType(ApnSetting.TYPE_IA)); 356 assertTrue(createApnSetting( 357 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_IA) 358 .canHandleType(ApnSetting.TYPE_IA)); 359 360 // same for emergency, mcx, xcap, and enterprise 361 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 362 .canHandleType(ApnSetting.TYPE_EMERGENCY)); 363 assertTrue(createApnSetting( 364 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_EMERGENCY) 365 .canHandleType(ApnSetting.TYPE_EMERGENCY)); 366 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 367 .canHandleType(ApnSetting.TYPE_MCX)); 368 assertTrue(createApnSetting( 369 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_MCX) 370 .canHandleType(ApnSetting.TYPE_MCX)); 371 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 372 .canHandleType(ApnSetting.TYPE_XCAP)); 373 assertTrue(createApnSetting( 374 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_XCAP) 375 .canHandleType(ApnSetting.TYPE_XCAP)); 376 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 377 .canHandleType(ApnSetting.TYPE_ENTERPRISE)); 378 assertTrue(createApnSetting( 379 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_ENTERPRISE) 380 .canHandleType(ApnSetting.TYPE_ENTERPRISE)); 381 382 // check carrier disabled 383 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_ALL) 384 .canHandleType(ApnSetting.TYPE_MMS)); 385 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT) 386 .canHandleType(ApnSetting.TYPE_DEFAULT)); 387 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT) 388 .canHandleType(ApnSetting.TYPE_HIPRI)); 389 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 390 .canHandleType(ApnSetting.TYPE_DEFAULT)); 391 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 392 .canHandleType(ApnSetting.TYPE_MMS)); 393 assertFalse(createDisabledApnSetting( 394 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_IA) 395 .canHandleType(ApnSetting.TYPE_IA)); 396 assertFalse(createDisabledApnSetting( 397 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_XCAP) 398 .canHandleType(ApnSetting.TYPE_XCAP)); 399 assertFalse(createDisabledApnSetting( 400 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_ENTERPRISE) 401 .canHandleType(ApnSetting.TYPE_ENTERPRISE)); 402 } 403 404 @Test 405 @SmallTest testEquals()406 public void testEquals() throws Exception { 407 final int dummyInt = 1; 408 final int dummyLong = 1; 409 final String dummyString = "dummy"; 410 final String[] dummyStringArr = new String[] {"dummy"}; 411 final InetAddress dummyProxyAddress = InetAddress.getByAddress(new byte[]{0, 0, 0, 0}); 412 final Uri dummyUri = Uri.parse("www.google.com"); 413 // base apn 414 ApnSetting baseApn = createApnSetting(ApnSetting.TYPE_MMS | ApnSetting.TYPE_DEFAULT); 415 Field[] fields = ApnSetting.class.getDeclaredFields(); 416 for (Field f : fields) { 417 int modifiers = f.getModifiers(); 418 if (Modifier.isStatic(modifiers) || !Modifier.isFinal(modifiers)) { 419 continue; 420 } 421 f.setAccessible(true); 422 ApnSetting testApn = null; 423 if (int.class.equals(f.getType())) { 424 testApn = ApnSetting.makeApnSetting(baseApn); 425 f.setInt(testApn, dummyInt + f.getInt(testApn)); 426 } else if (long.class.equals(f.getType())) { 427 testApn = ApnSetting.makeApnSetting(baseApn); 428 f.setLong(testApn, dummyLong + f.getLong(testApn)); 429 } else if (boolean.class.equals(f.getType())) { 430 testApn = ApnSetting.makeApnSetting(baseApn); 431 f.setBoolean(testApn, !f.getBoolean(testApn)); 432 } else if (String.class.equals(f.getType())) { 433 testApn = ApnSetting.makeApnSetting(baseApn); 434 f.set(testApn, dummyString); 435 } else if (String[].class.equals(f.getType())) { 436 testApn = ApnSetting.makeApnSetting(baseApn); 437 f.set(testApn, dummyStringArr); 438 } else if (InetAddress.class.equals(f.getType())) { 439 testApn = ApnSetting.makeApnSetting(baseApn); 440 f.set(testApn, dummyProxyAddress); 441 } else if (Uri.class.equals(f.getType())) { 442 testApn = ApnSetting.makeApnSetting(baseApn); 443 f.set(testApn, dummyUri); 444 } else { 445 fail("Unsupported field:" + f.getName()); 446 } 447 if (testApn != null) { 448 assertFalse(f.getName() + " is NOT checked", testApn.equals(baseApn)); 449 } 450 } 451 } 452 453 @Test 454 @SmallTest testEqualsRoamingProtocol()455 public void testEqualsRoamingProtocol() { 456 ApnSetting apn1 = new ApnSetting.Builder() 457 .setId(1234) 458 .setOperatorNumeric("310260") 459 .setEntryName("ims") 460 .setApnName("ims") 461 .setApnTypeBitmask(ApnSetting.TYPE_IMS) 462 .setProtocol(ApnSetting.PROTOCOL_IPV6) 463 .setNetworkTypeBitmask( 464 ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131071)) 465 .setMtuV4(1440) 466 .setCarrierEnabled(true) 467 .build(); 468 469 ApnSetting apn2 = new ApnSetting.Builder() 470 .setId(1235) 471 .setOperatorNumeric("310260") 472 .setEntryName("ims") 473 .setApnName("ims") 474 .setApnTypeBitmask(ApnSetting.TYPE_IMS) 475 .setProtocol(ApnSetting.PROTOCOL_IPV6) 476 .setRoamingProtocol(ApnSetting.PROTOCOL_IPV6) 477 .setNetworkTypeBitmask( 478 ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131072)) 479 .setMtuV4(1440) 480 .setCarrierEnabled(true) 481 .build(); 482 483 assertTrue(apn1.equals(apn2, false)); 484 assertFalse(apn1.equals(apn2, true)); 485 } 486 487 @Test 488 @SmallTest testCanHandleNetwork()489 public void testCanHandleNetwork() { 490 ApnSetting apn1 = new ApnSetting.Builder() 491 .setId(1234) 492 .setOperatorNumeric("310260") 493 .setEntryName("ims") 494 .setApnName("ims") 495 .setApnTypeBitmask(ApnSetting.TYPE_IMS) 496 .setProtocol(ApnSetting.PROTOCOL_IPV6) 497 .setNetworkTypeBitmask((int) (TelephonyManager.NETWORK_TYPE_BITMASK_LTE 498 | TelephonyManager.NETWORK_TYPE_BITMASK_UMTS)) 499 .setMtuV4(1440) 500 .setCarrierEnabled(true) 501 .build(); 502 503 ApnSetting apn2 = new ApnSetting.Builder() 504 .setId(1235) 505 .setOperatorNumeric("310260") 506 .setEntryName("ims") 507 .setApnName("ims") 508 .setApnTypeBitmask(ApnSetting.TYPE_IMS) 509 .setProtocol(ApnSetting.PROTOCOL_IPV6) 510 .setRoamingProtocol(ApnSetting.PROTOCOL_IPV6) 511 .setNetworkTypeBitmask((int) (TelephonyManager.NETWORK_TYPE_BITMASK_EDGE 512 | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS)) 513 .setMtuV4(1440) 514 .setCarrierEnabled(true) 515 .build(); 516 517 assertFalse(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_1xRTT)); 518 assertTrue(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_LTE)); 519 assertTrue(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_UMTS)); 520 521 assertFalse(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_1xRTT)); 522 assertFalse(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_LTE)); 523 assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_GPRS)); 524 assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_EDGE)); 525 526 assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_GSM)); 527 } 528 529 @Test testParcel()530 public void testParcel() { 531 ApnSetting apn = createApnSetting(ApnSetting.TYPE_DEFAULT); 532 533 Parcel parcel = Parcel.obtain(); 534 apn.writeToParcel(parcel, 0 /* flags */); 535 parcel.setDataPosition(0); 536 537 ApnSetting fromParcel = ApnSetting.CREATOR.createFromParcel(parcel); 538 539 assertEquals(apn, fromParcel); 540 541 parcel.recycle(); 542 } 543 544 @Test testBuild_mmsProxyAddrStartsWithHttp()545 public void testBuild_mmsProxyAddrStartsWithHttp() { 546 ApnSetting apn1 = new ApnSetting.Builder() 547 .setId(1234) 548 .setOperatorNumeric("310260") 549 .setEntryName("mms") 550 .setApnName("mms") 551 .setApnTypeBitmask(ApnSetting.TYPE_MMS) 552 .setProtocol(ApnSetting.PROTOCOL_IPV6) 553 .setNetworkTypeBitmask((int) (TelephonyManager.NETWORK_TYPE_BITMASK_LTE 554 | TelephonyManager.NETWORK_TYPE_BITMASK_UMTS)) 555 .setMtuV4(1440) 556 .setCarrierEnabled(true) 557 .setMmsProxyAddress("http://proxy.mobile.att.net") 558 .build(); 559 assertEquals("proxy.mobile.att.net", apn1.getMmsProxyAddressAsString()); 560 561 ApnSetting apn2 = new ApnSetting.Builder() 562 .setId(1235) 563 .setOperatorNumeric("310260") 564 .setEntryName("mms") 565 .setApnName("mms") 566 .setApnTypeBitmask(ApnSetting.TYPE_MMS) 567 .setProtocol(ApnSetting.PROTOCOL_IPV6) 568 .setRoamingProtocol(ApnSetting.PROTOCOL_IPV6) 569 .setNetworkTypeBitmask((int) (TelephonyManager.NETWORK_TYPE_BITMASK_EDGE 570 | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS)) 571 .setMtuV4(1440) 572 .setCarrierEnabled(true) 573 .setMmsProxyAddress("https://proxy.mobile.att.net") 574 .build(); 575 assertEquals("proxy.mobile.att.net", apn2.getMmsProxyAddressAsString()); 576 577 ApnSetting apn3 = new ApnSetting.Builder() 578 .setId(1236) 579 .setOperatorNumeric("310260") 580 .setEntryName("mms") 581 .setApnName("mms") 582 .setApnTypeBitmask(ApnSetting.TYPE_MMS) 583 .setProtocol(ApnSetting.PROTOCOL_IPV6) 584 .setRoamingProtocol(ApnSetting.PROTOCOL_IPV6) 585 .setNetworkTypeBitmask((int) (TelephonyManager.NETWORK_TYPE_BITMASK_EDGE 586 | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS)) 587 .setMtuV4(1440) 588 .setCarrierEnabled(true) 589 .setMmsProxyAddress("proxy.mobile.att.net") 590 .build(); 591 assertEquals("proxy.mobile.att.net", apn3.getMmsProxyAddressAsString()); 592 } 593 } 594