1 /* 2 * Copyright (C) 2016 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; 18 19 import android.os.Bundle; 20 import android.os.Parcel; 21 import android.telephony.AccessNetworkConstants; 22 import android.telephony.NetworkRegistrationState; 23 import android.telephony.ServiceState; 24 import android.telephony.TelephonyManager; 25 import android.test.suitebuilder.annotation.SmallTest; 26 import android.util.Pair; 27 28 import junit.framework.TestCase; 29 30 import java.util.ArrayList; 31 import java.util.Arrays; 32 33 public class ServiceStateTest extends TestCase { 34 35 @SmallTest 36 public void testRoaming() { 37 ServiceState ss = new ServiceState(); 38 39 ss.setCdmaDefaultRoamingIndicator(1); 40 assertEquals(1, ss.getCdmaDefaultRoamingIndicator()); 41 42 ss.setCdmaEriIconIndex(2); 43 assertEquals(2, ss.getCdmaEriIconIndex()); 44 45 ss.setCdmaEriIconMode(3); 46 assertEquals(3, ss.getCdmaEriIconMode()); 47 48 ss.setCdmaRoamingIndicator(4); 49 assertEquals(4, ss.getCdmaRoamingIndicator()); 50 51 ss.setDataRoamingType(ServiceState.ROAMING_TYPE_DOMESTIC); 52 assertTrue(ss.getDataRoaming()); 53 assertEquals(ServiceState.ROAMING_TYPE_DOMESTIC, ss.getDataRoamingType()); 54 55 ss.setDataRoamingFromRegistration(true); 56 assertTrue(ss.getDataRoamingFromRegistration()); 57 58 ss.setVoiceRoamingType(ServiceState.ROAMING_TYPE_DOMESTIC); 59 assertTrue(ss.getVoiceRoaming()); 60 assertEquals(ServiceState.ROAMING_TYPE_DOMESTIC, ss.getVoiceRoamingType()); 61 } 62 63 @SmallTest 64 public void testRegState() { 65 ServiceState ss = new ServiceState(); 66 67 ss.setDataRegState(ServiceState.STATE_IN_SERVICE); 68 assertEquals(ServiceState.STATE_IN_SERVICE, ss.getDataRegState()); 69 70 ss.setVoiceRegState(ServiceState.STATE_IN_SERVICE); 71 assertEquals(ServiceState.STATE_IN_SERVICE, ss.getVoiceRegState()); 72 } 73 74 @SmallTest 75 public void testBitmaskFromString() { 76 String networkTypeList = "4|7|5|6|12|13|14|19"; 77 int networkTypeBitmask = 1 << (4 - 1) | 1 << (7 - 1) | 1 << (5 - 1) | 1 << (6 - 1) 78 | 1 << (12 - 1) | 1 << (14 - 1) | 1 << (13 - 1) | 1 << (19 - 1); 79 assertEquals(networkTypeBitmask, 80 ServiceState.getBitmaskFromString(networkTypeList)); 81 82 networkTypeList = "13"; 83 networkTypeBitmask = 1 << (13 - 1); 84 assertEquals(networkTypeBitmask, 85 ServiceState.getBitmaskFromString(networkTypeList)); 86 87 networkTypeList = ""; 88 networkTypeBitmask = 0; 89 assertEquals(networkTypeBitmask, 90 ServiceState.getBitmaskFromString(networkTypeList)); 91 } 92 93 @SmallTest 94 public void testConvertNetworkTypeBitmaskToBearerBitmask() { 95 // The value was calculated by adding "4|4|7|5|6|12|14|13|19". 96 int networkTypeBitmask = 276600; 97 // The value was calculated by adding "4|5|6|7|8|12|13|14|19". 98 int bearerBitmask = 276728; 99 assertEquals(bearerBitmask, 100 ServiceState.convertNetworkTypeBitmaskToBearerBitmask(networkTypeBitmask)); 101 102 networkTypeBitmask = 0; 103 bearerBitmask = 0; 104 assertEquals(bearerBitmask, 105 ServiceState.convertNetworkTypeBitmaskToBearerBitmask(networkTypeBitmask)); 106 } 107 108 @SmallTest 109 public void testConvertBearerBitmaskToNetworkTypeBitmask() { 110 // The value was calculated by adding "4|4|7|5|6|12|14|13|19". 111 int networkTypeBitmask = 276600; 112 // The value was calculated by adding "4|5|6|7|8|12|13|14|19". 113 int bearerBitmask = 276728; 114 assertEquals(networkTypeBitmask, 115 ServiceState.convertBearerBitmaskToNetworkTypeBitmask(bearerBitmask)); 116 117 networkTypeBitmask = 0; 118 bearerBitmask = 0; 119 assertEquals(networkTypeBitmask, 120 ServiceState.convertBearerBitmaskToNetworkTypeBitmask(bearerBitmask)); 121 } 122 123 @SmallTest 124 public void testRAT() { 125 ServiceState ss = new ServiceState(); 126 127 ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE); 128 assertEquals(ServiceState.RIL_RADIO_TECHNOLOGY_LTE, ss.getRilDataRadioTechnology()); 129 assertEquals(TelephonyManager.NETWORK_TYPE_LTE, ss.getDataNetworkType()); 130 131 ss.setRilVoiceRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT); 132 assertEquals(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT, ss.getRilVoiceRadioTechnology()); 133 assertEquals(TelephonyManager.NETWORK_TYPE_1xRTT, ss.getVoiceNetworkType()); 134 135 ArrayList<Pair<Integer, Boolean>> rats = new ArrayList<Pair<Integer, Boolean>>(); 136 137 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_IS95A, true)); 138 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_IS95B, true)); 139 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT, true)); 140 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0, true)); 141 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A, true)); 142 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B, true)); 143 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD, true)); 144 145 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_GPRS, false)); 146 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EDGE, false)); 147 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS, false)); 148 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA, false)); 149 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA, false)); 150 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA, false)); 151 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_LTE, false)); 152 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP, false)); 153 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_GSM, false)); 154 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA, false)); 155 rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN, false)); 156 157 for (Pair<Integer, Boolean> rat : rats) { 158 boolean isCdma = rat.second; 159 160 if (isCdma) { 161 assertTrue("RAT " + rat + " should be CDMA", ServiceState.isCdma(rat.first)); 162 assertFalse("RAT " + rat + " should not be GSM", ServiceState.isGsm(rat.first)); 163 } else { 164 assertFalse("RAT " + rat + " should not be CDMA", ServiceState.isCdma(rat.first)); 165 assertTrue("RAT " + rat + " should be GSM", ServiceState.isGsm(rat.first)); 166 } 167 } 168 } 169 @SmallTest 170 public void testGetCellBandwidths() { 171 ServiceState ss = new ServiceState(); 172 173 ss.setCellBandwidths(null); 174 assertTrue(Arrays.equals(ss.getCellBandwidths(), new int[0])); 175 176 int[] cellBandwidths = new int[]{5000, 10000}; 177 ss.setCellBandwidths(cellBandwidths); 178 assertTrue(Arrays.equals(ss.getCellBandwidths(), cellBandwidths)); 179 } 180 181 @SmallTest 182 public void testOperatorName() { 183 ServiceState ss = new ServiceState(); 184 185 ss.setDataOperatorAlphaLong("abc"); 186 assertEquals("abc", ss.getDataOperatorAlphaLong()); 187 188 ss.setDataOperatorName("def", "xyz", "123456"); 189 assertEquals("xyz", ss.getDataOperatorAlphaShort()); 190 191 ss.setOperatorName("long", "short", "numeric"); 192 assertEquals("long", ss.getVoiceOperatorAlphaLong()); 193 assertEquals("short", ss.getVoiceOperatorAlphaShort()); 194 assertEquals("numeric", ss.getVoiceOperatorNumeric()); 195 assertEquals("long", ss.getDataOperatorAlphaLong()); 196 assertEquals("short", ss.getDataOperatorAlphaShort()); 197 assertEquals("numeric", ss.getDataOperatorNumeric()); 198 assertEquals("long", ss.getOperatorAlpha()); 199 200 ss.setOperatorName("", "short", ""); 201 assertEquals("short", ss.getOperatorAlpha()); 202 } 203 204 @SmallTest 205 public void testMisc() { 206 ServiceState ss = new ServiceState(); 207 208 ss.setCssIndicator(100); 209 assertEquals(1, ss.getCssIndicator()); 210 211 ss.setIsManualSelection(true); 212 assertTrue(ss.getIsManualSelection()); 213 214 ss.setCdmaSystemAndNetworkId(123, 456); 215 assertEquals(123, ss.getCdmaSystemId()); 216 assertEquals(456, ss.getCdmaNetworkId()); 217 218 ss.setEmergencyOnly(true); 219 assertTrue(ss.isEmergencyOnly()); 220 } 221 222 @SmallTest 223 public void testParcel() { 224 225 ServiceState ss = new ServiceState(); 226 ss.setVoiceRegState(ServiceState.STATE_IN_SERVICE); 227 ss.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE); 228 ss.setVoiceRoamingType(ServiceState.ROAMING_TYPE_INTERNATIONAL); 229 ss.setDataRoamingType(ServiceState.ROAMING_TYPE_UNKNOWN); 230 ss.setOperatorName("long", "short", "numeric"); 231 ss.setIsManualSelection(true); 232 ss.setRilVoiceRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT); 233 ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0); 234 ss.setCssIndicator(1); 235 ss.setCdmaSystemAndNetworkId(2, 3); 236 ss.setCdmaRoamingIndicator(4); 237 ss.setCdmaDefaultRoamingIndicator(5); 238 ss.setCdmaEriIconIndex(6); 239 ss.setCdmaEriIconMode(7); 240 ss.setEmergencyOnly(true); 241 ss.setDataRoamingFromRegistration(true); 242 ss.setChannelNumber(2100); 243 ss.setCellBandwidths(new int[]{1400, 5000, 10000}); 244 245 Parcel p = Parcel.obtain(); 246 ss.writeToParcel(p, 0); 247 p.setDataPosition(0); 248 249 ServiceState newSs = new ServiceState(p); 250 assertEquals(ss, newSs); 251 } 252 253 @SmallTest 254 public void testBundle() { 255 ServiceState ss = new ServiceState(); 256 ss.setVoiceRegState(ServiceState.STATE_IN_SERVICE); 257 ss.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE); 258 ss.setVoiceRoamingType(ServiceState.ROAMING_TYPE_INTERNATIONAL); 259 ss.setDataRoamingType(ServiceState.ROAMING_TYPE_UNKNOWN); 260 ss.setOperatorName("long", "short", "numeric"); 261 ss.setIsManualSelection(true); 262 ss.setRilVoiceRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT); 263 ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0); 264 ss.setCssIndicator(1); 265 ss.setCdmaSystemAndNetworkId(2, 3); 266 ss.setCdmaRoamingIndicator(4); 267 ss.setCdmaDefaultRoamingIndicator(5); 268 ss.setCdmaEriIconIndex(6); 269 ss.setCdmaEriIconMode(7); 270 ss.setEmergencyOnly(true); 271 ss.setDataRoamingFromRegistration(true); 272 ss.setChannelNumber(2100); 273 ss.setCellBandwidths(new int[]{3, 4, 10}); 274 275 Bundle b = new Bundle(); 276 ss.fillInNotifierBundle(b); 277 ServiceState newSs = ServiceState.newFromBundle(b); 278 279 assertEquals(ss, newSs); 280 } 281 282 @SmallTest 283 public void testNetworkRegistrationState() { 284 NetworkRegistrationState wwanVoiceRegState = new NetworkRegistrationState( 285 AccessNetworkConstants.TransportType.WWAN, NetworkRegistrationState.DOMAIN_CS, 286 0, 0, 0, false, 287 null, null, true, 0, 0, 0); 288 289 290 NetworkRegistrationState wwanDataRegState = new NetworkRegistrationState( 291 AccessNetworkConstants.TransportType.WWAN, NetworkRegistrationState.DOMAIN_PS, 292 0, 0, 0, false, 293 null, null, 0); 294 295 NetworkRegistrationState wlanRegState = new NetworkRegistrationState( 296 AccessNetworkConstants.TransportType.WLAN, NetworkRegistrationState.DOMAIN_PS, 297 0, 0, 0, false, 298 null, null); 299 300 ServiceState ss = new ServiceState(); 301 302 ss.addNetworkRegistrationState(wwanVoiceRegState); 303 ss.addNetworkRegistrationState(wwanDataRegState); 304 ss.addNetworkRegistrationState(wlanRegState); 305 306 assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WWAN, 307 NetworkRegistrationState.DOMAIN_CS), wwanVoiceRegState); 308 assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WWAN, 309 NetworkRegistrationState.DOMAIN_PS), wwanDataRegState); 310 assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WLAN, 311 NetworkRegistrationState.DOMAIN_PS), wlanRegState); 312 313 wwanDataRegState = new NetworkRegistrationState( 314 AccessNetworkConstants.TransportType.WWAN, NetworkRegistrationState.DOMAIN_PS, 315 0, 0, 0, true, 316 null, null, 0); 317 ss.addNetworkRegistrationState(wwanDataRegState); 318 assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WWAN, 319 NetworkRegistrationState.DOMAIN_PS), wwanDataRegState); 320 } 321 322 @SmallTest 323 public void testDuplexMode_notLte() { 324 ServiceState ss = new ServiceState(); 325 ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_GSM); 326 ss.setChannelNumber(2400); 327 328 assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_UNKNOWN); 329 } 330 331 @SmallTest 332 public void testDuplexMode_invalidEarfcn() { 333 ServiceState ss = new ServiceState(); 334 ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE); 335 ss.setChannelNumber(-1); 336 337 assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_UNKNOWN); 338 339 ss.setChannelNumber(Integer.MAX_VALUE); 340 341 assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_UNKNOWN); 342 } 343 344 @SmallTest 345 public void testDuplexMode_FddChannel() { 346 ServiceState ss = new ServiceState(); 347 ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE); 348 ss.setChannelNumber(2400); // band 5 349 350 assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_FDD); 351 } 352 353 @SmallTest 354 public void testDuplexMode_TddChannel() { 355 ServiceState ss = new ServiceState(); 356 ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE); 357 ss.setChannelNumber(36000); // band 33 358 359 assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_TDD); 360 } 361 } 362