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.PersistableBundle; 28 import android.telephony.CarrierConfigManager; 29 import android.telephony.ServiceState; 30 import android.telephony.TelephonyManager; 31 import android.telephony.data.ApnSetting; 32 import android.test.suitebuilder.annotation.SmallTest; 33 34 import com.android.internal.telephony.PhoneConstants; 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.ArrayList; 45 import java.util.List; 46 47 public class ApnSettingTest extends TelephonyTest { 48 49 private PersistableBundle mBundle; 50 51 @Before setUp()52 public void setUp() throws Exception { 53 super.setUp(getClass().getSimpleName()); 54 mBundle = mContextFixture.getCarrierConfigBundle(); 55 } 56 57 @After tearDown()58 public void tearDown() throws Exception { 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 ApnSetting.makeApnSetting( 72 2163, // id 73 "44010", // numeric 74 "sp-mode", // name 75 "spmode.ne.jp", // apn 76 null, // proxy 77 -1, // port 78 null, // mmsc 79 null, // mmsproxy 80 -1, // mmsport 81 "", // user 82 "", // password 83 -1, // authtype 84 apnTypeBitmask, // types 85 ApnSetting.PROTOCOL_IP, // protocol 86 ApnSetting.PROTOCOL_IP, // roaming_protocol 87 carrierEnabled, // carrier_enabled 88 0, // networktype_bitmask 89 0, // profile_id 90 false, // modem_cognitive 91 0, // max_conns 92 0, // wait_time 93 0, // max_conns_time 94 0, // mtu 95 -1, // mvno_type 96 ""); // mnvo_match_data 97 } 98 assertApnSettingsEqual(List<ApnSetting> a1, List<ApnSetting> a2)99 private static void assertApnSettingsEqual(List<ApnSetting> a1, List<ApnSetting> a2) { 100 assertEquals(a1.size(), a2.size()); 101 for (int i = 0; i < a1.size(); ++i) { 102 assertApnSettingEqual(a1.get(i), a2.get(i)); 103 } 104 } 105 assertApnSettingEqual(ApnSetting a1, ApnSetting a2)106 private static void assertApnSettingEqual(ApnSetting a1, ApnSetting a2) { 107 assertEquals(a1.getEntryName(), a2.getEntryName()); 108 assertEquals(a1.getApnName(), a2.getApnName()); 109 assertEquals(a1.getProxyAddressAsString(), a2.getProxyAddressAsString()); 110 assertEquals(a1.getProxyPort(), a2.getProxyPort()); 111 assertEquals(a1.getMmsc(), a2.getMmsc()); 112 assertEquals(a1.getMmsProxyAddressAsString(), a2.getMmsProxyAddressAsString()); 113 assertEquals(a1.getMmsProxyPort(), a2.getMmsProxyPort()); 114 assertEquals(a1.getUser(), a2.getUser()); 115 assertEquals(a1.getPassword(), a2.getPassword()); 116 assertEquals(a1.getAuthType(), a2.getAuthType()); 117 assertEquals(a1.getId(), a2.getId()); 118 assertEquals(a1.getOperatorNumeric(), a2.getOperatorNumeric()); 119 assertEquals(a1.getProtocol(), a2.getProtocol()); 120 assertEquals(a1.getRoamingProtocol(), a2.getRoamingProtocol()); 121 assertEquals(a1.getApnTypeBitmask(), a2.getApnTypeBitmask()); 122 assertEquals(a1.isEnabled(), a2.isEnabled()); 123 assertEquals(a1.getProfileId(), a2.getProfileId()); 124 assertEquals(a1.isPersistent(), a2.isPersistent()); 125 assertEquals(a1.getMaxConns(), a2.getMaxConns()); 126 assertEquals(a1.getWaitTime(), a2.getWaitTime()); 127 assertEquals(a1.getMaxConnsTime(), a2.getMaxConnsTime()); 128 assertEquals(a1.getMtu(), a2.getMtu()); 129 assertEquals(a1.getMvnoType(), a2.getMvnoType()); 130 assertEquals(a1.getMvnoMatchData(), a2.getMvnoMatchData()); 131 assertEquals(a1.getNetworkTypeBitmask(), a2.getNetworkTypeBitmask()); 132 assertEquals(a1.getApnSetId(), a2.getApnSetId()); 133 assertEquals(a1.getSkip464Xlat(), a2.getSkip464Xlat()); 134 } 135 136 @Test 137 @SmallTest testFromString()138 public void testFromString() throws Exception { 139 final int dunTypesBitmask = ApnSetting.TYPE_DUN; 140 final int mmsTypesBitmask = ApnSetting.TYPE_MMS | ApnSetting.TYPE_ALL; 141 142 ApnSetting expectedApn; 143 String testString; 144 145 // A real-world v1 example string. 146 testString = "Vodafone IT,web.omnitel.it,,,,,,,,,222,10,,DUN"; 147 expectedApn = ApnSetting.makeApnSetting( 148 -1, "22210", "Vodafone IT", "web.omnitel.it", "", -1, null, "", -1, "", "", 0, 149 dunTypesBitmask, ApnSetting.PROTOCOL_IP, ApnSetting.PROTOCOL_IP, true, 150 0, 0, false, 0, 0, 0, 0, -1, ""); 151 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 152 153 // A v2 string. 154 testString = "[ApnSettingV2] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,14"; 155 int networkTypeBitmask = 1 << (13 - 1); 156 expectedApn = ApnSetting.makeApnSetting( 157 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 158 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 159 networkTypeBitmask, 0, false, 0, 0, 0, 0, -1, ""); 160 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 161 162 // A v2 string with spaces. 163 testString = "[ApnSettingV2] Name,apn, ,,,,,,,,123,45,,mms|*,IPV6, IP,true,14"; 164 expectedApn = ApnSetting.makeApnSetting( 165 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 166 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 167 networkTypeBitmask, 0, false, 0, 0, 0, 0, -1, ""); 168 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 169 170 // A v3 string. 171 testString = "[ApnSettingV3] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,14,,,,,,,spn,testspn"; 172 expectedApn = ApnSetting.makeApnSetting( 173 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 174 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 175 networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn"); 176 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 177 178 // A v4 string with network type bitmask. 179 testString = 180 "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,6"; 181 networkTypeBitmask = 1 << (6 - 1); 182 expectedApn = ApnSetting.makeApnSetting( 183 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 184 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 185 networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn"); 186 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 187 188 testString = 189 "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn," 190 + "4|5|6|7|8|12|13|14|19"; 191 // The value was calculated by adding "4|5|6|7|8|12|13|14|19". 192 networkTypeBitmask = 276728; 193 expectedApn = ApnSetting.makeApnSetting( 194 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 195 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 196 networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn"); 197 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 198 199 // A v4 string with network type bitmask and compatible bearer bitmask. 200 testString = 201 "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,8,,,,,,,spn,testspn, 6"; 202 networkTypeBitmask = 1 << (6 - 1); 203 expectedApn = ApnSetting.makeApnSetting( 204 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 205 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 206 networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn"); 207 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 208 209 // A v4 string with network type bitmask and incompatible bearer bitmask. 210 testString = 211 "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,9,,,,,,,spn,testspn, 6"; 212 expectedApn = ApnSetting.makeApnSetting( 213 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 214 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 215 networkTypeBitmask, 0, false, 0, 216 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn"); 217 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 218 219 // A v5 string with apnSetId=0 220 testString = 221 "[ApnSettingV5] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,0"; 222 expectedApn = ApnSetting.makeApnSetting( 223 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 224 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 225 0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn"); 226 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 227 228 // A v5 string with apnSetId=3 229 testString = 230 "[ApnSettingV5] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,3"; 231 expectedApn = ApnSetting.makeApnSetting( 232 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 233 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 234 0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn", 3, -1, -1); 235 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 236 237 // A v6 string with carrierId=100 238 testString = 239 "[ApnSettingV5] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,3," 240 + "100"; 241 expectedApn = ApnSetting.makeApnSetting( 242 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 243 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 244 0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn", 3, 100, -1); 245 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 246 247 // A v7 string with skip_464xlat=1 248 testString = 249 "[ApnSettingV7] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,3," 250 + "-1, 1"; 251 expectedApn = ApnSetting.makeApnSetting( 252 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 253 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 254 0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn", 3, -1, 1); 255 assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString)); 256 257 // Return no apn if insufficient fields given. 258 testString = "[ApnSettingV3] Name,apn,,,,,,,,,123, 45,,mms|*"; 259 assertEquals(null, ApnSetting.fromString(testString)); 260 261 testString = "Name,apn,,,,,,,,,123, 45,"; 262 assertEquals(null, ApnSetting.fromString(testString)); 263 } 264 265 @Test 266 @SmallTest testArrayFromString()267 public void testArrayFromString() throws Exception { 268 final int mmsTypesBitmask = ApnSetting.TYPE_MMS; 269 // Test a multiple v3 string. 270 String testString = 271 "[ApnSettingV3] Name,apn,,,,,,,,,123,45,,mms,IPV6,IP,true,14,,,,,,,spn,testspn"; 272 testString += 273 " ;[ApnSettingV3] Name1,apn1,,,,,,,,,123,46,,mms,IPV6,IP,true,12,,,,,,,gid,testGid"; 274 testString += 275 " ;[ApnSettingV3] Name1,apn2,,,,,,,,,123,46,,mms,IPV6,IP,true,12,,,,,,,,"; 276 testString += 277 " ;[ApnSettingV5] Name1,apn2,,,,,,,,,123,46,,mms,IPV6,IP,true,0,,,,,,,,,,3"; 278 List<ApnSetting> expectedApns = new ArrayList<ApnSetting>(); 279 expectedApns.add(ApnSetting.makeApnSetting( 280 -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0, 281 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 282 1 << (13 - 1), 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn")); 283 expectedApns.add(ApnSetting.makeApnSetting( 284 -1, "12346", "Name1", "apn1", "", -1, null, "", -1, "", "", 0, 285 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 286 1 << (12 - 1), 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_GID, "testGid")); 287 expectedApns.add(ApnSetting.makeApnSetting( 288 -1, "12346", "Name1", "apn2", "", -1, null, "", -1, "", "", 0, 289 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 290 1 << (12 - 1), 0, false, 0, 0, 0, 0, -1, "")); 291 expectedApns.add(ApnSetting.makeApnSetting( 292 -1, "12346", "Name1", "apn2", "", -1, null, "", -1, "", "", 0, 293 mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 294 0, 0, false, 0, 0, 0, 0, -1, "", 3, -1, -1)); 295 assertApnSettingsEqual(expectedApns, ApnSetting.arrayFromString(testString)); 296 } 297 298 @Test 299 @SmallTest testToString()300 public void testToString() throws Exception { 301 // Use default apn_set_id constructor. 302 ApnSetting apn = ApnSetting.makeApnSetting( 303 99, "12345", "Name", "apn", null, 10, 304 null, null, -1, "user", "password", 0, 305 ApnSetting.TYPE_DEFAULT, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 306 4096, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, ""); 307 String expected = "[ApnSettingV7] Name, 99, 12345, apn, null, " 308 + "null, null, null, 10, 0, hipri | default, " 309 + "IPV6, IP, true, 0, false, 0, 0, 0, 0, spn, , false, 4096, 0, -1, -1"; 310 assertEquals(expected, apn.toString()); 311 312 final int networkTypeBitmask = 1 << (14 - 1); 313 apn = ApnSetting.makeApnSetting( 314 99, "12345", "Name", "apn", null, 10, 315 null, null, -1, "user", "password", 0, 316 ApnSetting.TYPE_DEFAULT, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true, 317 networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "", 3, -1, 1); 318 expected = "[ApnSettingV7] Name, 99, 12345, apn, null, " 319 + "null, null, null, 10, 0, hipri | default, " 320 + "IPV6, IP, true, 0, false, 0, 0, 0, 0, spn, , false, 8192, 3, -1, 1"; 321 assertEquals(expected, apn.toString()); 322 } 323 324 @Test 325 @SmallTest testIsMetered()326 public void testIsMetered() throws Exception { 327 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 328 new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 329 330 doReturn(false).when(mServiceState).getDataRoaming(); 331 doReturn(1).when(mPhone).getSubId(); 332 333 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_DEFAULT), mPhone)); 334 335 assertTrue(ApnSettingUtils.isMetered( 336 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS), mPhone)); 337 338 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_MMS), mPhone)); 339 340 assertTrue(ApnSettingUtils.isMetered( 341 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_MMS), mPhone)); 342 343 assertTrue(ApnSettingUtils.isMetered( 344 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_DUN), mPhone)); 345 346 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 347 348 assertFalse(ApnSettingUtils.isMetered( 349 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_FOTA), mPhone)); 350 351 assertFalse(ApnSettingUtils.isMetered( 352 createApnSetting(ApnSetting.TYPE_IA | ApnSetting.TYPE_CBS), mPhone)); 353 354 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 355 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 356 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_SUPL, mPhone)); 357 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_CBS, mPhone)); 358 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DUN, mPhone)); 359 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_FOTA, mPhone)); 360 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_IA, mPhone)); 361 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_HIPRI, mPhone)); 362 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_XCAP, mPhone)); 363 364 // Carrier config settings changes. 365 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 366 new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 367 368 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 369 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 370 } 371 372 @Test 373 @SmallTest testIsRoamingMetered()374 public void testIsRoamingMetered() throws Exception { 375 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 376 new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 377 doReturn(true).when(mServiceState).getDataRoaming(); 378 doReturn(1).when(mPhone).getSubId(); 379 380 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_DEFAULT), mPhone)); 381 382 assertTrue(ApnSettingUtils.isMetered( 383 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS), mPhone)); 384 385 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_MMS), mPhone)); 386 387 assertTrue(ApnSettingUtils.isMetered( 388 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_MMS), mPhone)); 389 390 assertTrue(ApnSettingUtils.isMetered( 391 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_DUN), mPhone)); 392 393 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 394 395 assertFalse(ApnSettingUtils.isMetered( 396 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_FOTA), mPhone)); 397 398 assertFalse(ApnSettingUtils.isMetered( 399 createApnSetting(ApnSetting.TYPE_IA | ApnSetting.TYPE_CBS), mPhone)); 400 401 // Carrier config settings changes. 402 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 403 new String[]{PhoneConstants.APN_TYPE_FOTA}); 404 405 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 406 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 407 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_FOTA, mPhone)); 408 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_XCAP, mPhone)); 409 } 410 411 @Test 412 @SmallTest testIsMeteredAnother()413 public void testIsMeteredAnother() throws Exception { 414 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 415 new String[]{PhoneConstants.APN_TYPE_SUPL, PhoneConstants.APN_TYPE_CBS}); 416 417 doReturn(false).when(mServiceState).getDataRoaming(); 418 doReturn(1).when(mPhone).getSubId(); 419 420 assertTrue(ApnSettingUtils.isMetered( 421 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_CBS), mPhone)); 422 423 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_SUPL), mPhone)); 424 425 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_CBS), mPhone)); 426 427 assertTrue(ApnSettingUtils.isMetered( 428 createApnSetting(ApnSetting.TYPE_FOTA | ApnSetting.TYPE_CBS), mPhone)); 429 430 assertTrue(ApnSettingUtils.isMetered( 431 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_IA), mPhone)); 432 433 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 434 435 assertFalse(ApnSettingUtils.isMetered( 436 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_IMS), mPhone)); 437 438 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 439 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_XCAP), mPhone)); 440 } 441 442 @Test 443 @SmallTest testIsRoamingMeteredAnother()444 public void testIsRoamingMeteredAnother() throws Exception { 445 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 446 new String[]{PhoneConstants.APN_TYPE_SUPL, PhoneConstants.APN_TYPE_CBS}); 447 doReturn(true).when(mServiceState).getDataRoaming(); 448 doReturn(2).when(mPhone).getSubId(); 449 450 assertTrue(ApnSettingUtils.isMetered( 451 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_CBS), mPhone)); 452 453 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_SUPL), mPhone)); 454 455 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_CBS), mPhone)); 456 457 assertTrue(ApnSettingUtils.isMetered( 458 createApnSetting(ApnSetting.TYPE_FOTA | ApnSetting.TYPE_CBS), mPhone)); 459 460 assertTrue(ApnSettingUtils.isMetered( 461 createApnSetting(ApnSetting.TYPE_SUPL | ApnSetting.TYPE_IA), mPhone)); 462 463 assertTrue(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 464 465 assertFalse(ApnSettingUtils.isMetered( 466 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_IMS), mPhone)); 467 468 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 469 470 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_SUPL, mPhone)); 471 assertTrue(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_CBS, mPhone)); 472 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DEFAULT, mPhone)); 473 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_MMS, mPhone)); 474 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_DUN, mPhone)); 475 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_FOTA, mPhone)); 476 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_IA, mPhone)); 477 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_HIPRI, mPhone)); 478 assertFalse(ApnSettingUtils.isMeteredApnType(ApnSetting.TYPE_XCAP, mPhone)); 479 } 480 481 @Test 482 @SmallTest testIsMeteredNothingCharged()483 public void testIsMeteredNothingCharged() throws Exception { 484 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 485 new String[]{}); 486 487 doReturn(false).when(mServiceState).getDataRoaming(); 488 doReturn(3).when(mPhone).getSubId(); 489 490 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 491 492 assertFalse(ApnSettingUtils.isMetered( 493 createApnSetting(ApnSetting.TYPE_IMS | ApnSetting.TYPE_MMS), mPhone)); 494 495 assertFalse(ApnSettingUtils.isMetered( 496 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_FOTA), mPhone)); 497 498 assertFalse(ApnSettingUtils.isMetered( 499 createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 500 } 501 502 @Test 503 @SmallTest testIsRoamingMeteredNothingCharged()504 public void testIsRoamingMeteredNothingCharged() throws Exception { 505 mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 506 new String[]{}); 507 doReturn(true).when(mServiceState).getDataRoaming(); 508 doReturn(3).when(mPhone).getSubId(); 509 510 assertFalse(ApnSettingUtils.isMetered(createApnSetting(ApnSetting.TYPE_IMS), mPhone)); 511 512 assertFalse(ApnSettingUtils.isMetered( 513 createApnSetting(ApnSetting.TYPE_IMS | ApnSetting.TYPE_MMS), mPhone)); 514 515 assertFalse(ApnSettingUtils.isMetered( 516 createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_FOTA), mPhone)); 517 518 assertFalse(ApnSettingUtils.isMetered( 519 createApnSetting(ApnSetting.TYPE_ALL), mPhone)); 520 } 521 522 @Test 523 @SmallTest testCanHandleType()524 public void testCanHandleType() throws Exception { 525 String types[] = {"mms"}; 526 527 assertTrue(createApnSetting(ApnSetting.TYPE_ALL) 528 .canHandleType(ApnSetting.TYPE_MMS)); 529 530 assertFalse(createApnSetting(ApnSetting.TYPE_DEFAULT) 531 .canHandleType(ApnSetting.TYPE_MMS)); 532 533 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT) 534 .canHandleType(ApnSetting.TYPE_DEFAULT)); 535 536 // Hipri is asymmetric 537 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT) 538 .canHandleType(ApnSetting.TYPE_HIPRI)); 539 assertFalse(createApnSetting(ApnSetting.TYPE_HIPRI) 540 .canHandleType(ApnSetting.TYPE_DEFAULT)); 541 542 543 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 544 .canHandleType(ApnSetting.TYPE_DEFAULT)); 545 546 assertTrue(createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 547 .canHandleType(ApnSetting.TYPE_MMS)); 548 549 assertFalse(createApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 550 .canHandleType(ApnSetting.TYPE_SUPL)); 551 552 // special IA case - doesn't match wildcards 553 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 554 .canHandleType(ApnSetting.TYPE_IA)); 555 assertTrue(createApnSetting( 556 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_IA) 557 .canHandleType(ApnSetting.TYPE_IA)); 558 559 // same for emergency, mcx, and xcap 560 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 561 .canHandleType(ApnSetting.TYPE_EMERGENCY)); 562 assertTrue(createApnSetting( 563 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_EMERGENCY) 564 .canHandleType(ApnSetting.TYPE_EMERGENCY)); 565 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 566 .canHandleType(ApnSetting.TYPE_MCX)); 567 assertTrue(createApnSetting( 568 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_MCX) 569 .canHandleType(ApnSetting.TYPE_MCX)); 570 assertFalse(createApnSetting(ApnSetting.TYPE_ALL) 571 .canHandleType(ApnSetting.TYPE_XCAP)); 572 assertTrue(createApnSetting( 573 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_XCAP) 574 .canHandleType(ApnSetting.TYPE_XCAP)); 575 576 // check carrier disabled 577 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_ALL) 578 .canHandleType(ApnSetting.TYPE_MMS)); 579 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT) 580 .canHandleType(ApnSetting.TYPE_DEFAULT)); 581 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT) 582 .canHandleType(ApnSetting.TYPE_HIPRI)); 583 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 584 .canHandleType(ApnSetting.TYPE_DEFAULT)); 585 assertFalse(createDisabledApnSetting(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) 586 .canHandleType(ApnSetting.TYPE_MMS)); 587 assertFalse(createDisabledApnSetting( 588 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_IA) 589 .canHandleType(ApnSetting.TYPE_IA)); 590 assertFalse(createDisabledApnSetting( 591 ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS | ApnSetting.TYPE_XCAP) 592 .canHandleType(ApnSetting.TYPE_XCAP)); 593 } 594 595 @Test 596 @SmallTest testEquals()597 public void testEquals() throws Exception { 598 final int dummyInt = 1; 599 final String dummyString = "dummy"; 600 final String[] dummyStringArr = new String[] {"dummy"}; 601 final InetAddress dummyProxyAddress = InetAddress.getByAddress(new byte[]{0, 0, 0, 0}); 602 final Uri dummyUri = Uri.parse("www.google.com"); 603 // base apn 604 ApnSetting baseApn = createApnSetting(ApnSetting.TYPE_MMS | ApnSetting.TYPE_DEFAULT); 605 Field[] fields = ApnSetting.class.getDeclaredFields(); 606 for (Field f : fields) { 607 int modifiers = f.getModifiers(); 608 if (Modifier.isStatic(modifiers) || !Modifier.isFinal(modifiers)) { 609 continue; 610 } 611 f.setAccessible(true); 612 ApnSetting testApn = null; 613 if (int.class.equals(f.getType())) { 614 testApn = ApnSetting.makeApnSetting(baseApn); 615 f.setInt(testApn, dummyInt + f.getInt(testApn)); 616 } else if (boolean.class.equals(f.getType())) { 617 testApn = ApnSetting.makeApnSetting(baseApn); 618 f.setBoolean(testApn, !f.getBoolean(testApn)); 619 } else if (String.class.equals(f.getType())) { 620 testApn = ApnSetting.makeApnSetting(baseApn); 621 f.set(testApn, dummyString); 622 } else if (String[].class.equals(f.getType())) { 623 testApn = ApnSetting.makeApnSetting(baseApn); 624 f.set(testApn, dummyStringArr); 625 } else if (InetAddress.class.equals(f.getType())) { 626 testApn = ApnSetting.makeApnSetting(baseApn); 627 f.set(testApn, dummyProxyAddress); 628 } else if (Uri.class.equals(f.getType())) { 629 testApn = ApnSetting.makeApnSetting(baseApn); 630 f.set(testApn, dummyUri); 631 } else { 632 fail("Unsupported field:" + f.getName()); 633 } 634 if (testApn != null) { 635 assertFalse(f.getName() + " is NOT checked", testApn.equals(baseApn)); 636 } 637 } 638 } 639 640 @Test 641 @SmallTest testEqualsRoamingProtocol()642 public void testEqualsRoamingProtocol() throws Exception { 643 ApnSetting apn1 = ApnSetting.makeApnSetting( 644 1234, 645 "310260", 646 "", 647 "ims", 648 null, 649 -1, 650 null, 651 null, 652 -1, 653 "", 654 "", 655 -1, 656 ApnSetting.TYPE_IMS, 657 ApnSetting.PROTOCOL_IPV6, 658 -1, 659 true, 660 ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131071), 661 0, 662 false, 663 0, 664 0, 665 0, 666 1440, 667 -1, 668 ""); 669 670 ApnSetting apn2 = ApnSetting.makeApnSetting( 671 1235, 672 "310260", 673 "", 674 "ims", 675 null, 676 -1, 677 null, 678 null, 679 -1, 680 "", 681 "", 682 -1, 683 ApnSetting.TYPE_IMS, 684 ApnSetting.PROTOCOL_IPV6, 685 ApnSetting.PROTOCOL_IPV6, 686 true, 687 ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131072), 688 0, 689 false, 690 0, 691 0, 692 0, 693 1440, 694 -1, 695 ""); 696 697 assertTrue(apn1.equals(apn2, false)); 698 assertFalse(apn1.equals(apn2, true)); 699 } 700 701 @Test 702 @SmallTest testCanHandleNetwork()703 public void testCanHandleNetwork() throws Exception { 704 ApnSetting apn1 = ApnSetting.makeApnSetting( 705 1234, 706 "310260", 707 "", 708 "ims", 709 null, 710 -1, 711 null, 712 null, 713 -1, 714 "", 715 "", 716 -1, 717 ApnSetting.TYPE_IMS, 718 ApnSetting.PROTOCOL_IPV6, 719 -1, 720 true, 721 (int) (TelephonyManager.NETWORK_TYPE_BITMASK_LTE 722 | TelephonyManager.NETWORK_TYPE_BITMASK_UMTS), 723 0, 724 false, 725 0, 726 0, 727 0, 728 1440, 729 -1, 730 ""); 731 732 ApnSetting apn2 = ApnSetting.makeApnSetting( 733 1235, 734 "310260", 735 "", 736 "ims", 737 null, 738 -1, 739 null, 740 null, 741 -1, 742 "", 743 "", 744 -1, 745 ApnSetting.TYPE_IMS, 746 ApnSetting.PROTOCOL_IPV6, 747 ApnSetting.PROTOCOL_IPV6, 748 true, 749 (int) (TelephonyManager.NETWORK_TYPE_BITMASK_EDGE 750 | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS), 751 0, 752 false, 753 0, 754 0, 755 0, 756 1440, 757 -1, 758 ""); 759 760 assertFalse(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_1xRTT)); 761 assertTrue(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_LTE)); 762 assertTrue(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_UMTS)); 763 764 assertFalse(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_1xRTT)); 765 assertFalse(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_LTE)); 766 assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_GPRS)); 767 assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_EDGE)); 768 769 assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_GSM)); 770 } 771 } 772