Home | History | Annotate | Download | only in telephony
      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