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 package com.android.internal.telephony;
     17 
     18 import static android.Manifest.permission.READ_PHONE_STATE;
     19 import static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE;
     20 import static android.Manifest.permission.READ_SMS;
     21 
     22 import static org.junit.Assert.assertEquals;
     23 import static org.junit.Assert.assertNull;
     24 import static org.junit.Assert.assertTrue;
     25 import static org.mockito.Matchers.anyInt;
     26 import static org.mockito.Mockito.anyString;
     27 import static org.mockito.Mockito.doReturn;
     28 import static org.mockito.Mockito.eq;
     29 
     30 import android.app.AppOpsManager;
     31 import android.content.Context;
     32 import android.test.suitebuilder.annotation.SmallTest;
     33 
     34 import org.junit.After;
     35 import org.junit.Assert;
     36 import org.junit.Before;
     37 import org.junit.Test;
     38 import org.mockito.Mock;
     39 
     40 public class PhoneSubInfoControllerTest extends TelephonyTest {
     41     private PhoneSubInfoController mPhoneSubInfoControllerUT;
     42     private AppOpsManager mAppOsMgr;
     43 
     44     @Mock
     45     GsmCdmaPhone mSecondPhone;
     46 
     47     @Before
     48     public void setUp() throws Exception {
     49         super.setUp(getClass().getSimpleName());
     50         /* mPhone -> PhoneId: 0 -> SubId:0
     51            mSecondPhone -> PhoneId:1 -> SubId: 1*/
     52         doReturn(0).when(mSubscriptionController).getPhoneId(eq(0));
     53         doReturn(1).when(mSubscriptionController).getPhoneId(eq(1));
     54         doReturn(2).when(mTelephonyManager).getPhoneCount();
     55 
     56         mServiceManagerMockedServices.put("isub", mSubscriptionController);
     57         doReturn(mSubscriptionController).when(mSubscriptionController)
     58                 .queryLocalInterface(anyString());
     59         doReturn(mContext).when(mSecondPhone).getContext();
     60 
     61         mAppOsMgr = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
     62 
     63         mPhoneSubInfoControllerUT = new PhoneSubInfoController(mContext,
     64                 new Phone[]{mPhone, mSecondPhone});
     65     }
     66 
     67     @After
     68     public void tearDown() throws Exception {
     69         super.tearDown();
     70     }
     71 
     72     @Test
     73     @SmallTest
     74     public void testGetDeviceId() {
     75         doReturn("353626073736741").when(mPhone).getDeviceId();
     76         doReturn("353626073736742").when(mSecondPhone).getDeviceId();
     77 
     78         assertEquals("353626073736741", mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG));
     79         assertEquals("353626073736742", mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG));
     80     }
     81 
     82     @Test
     83     @SmallTest
     84     public void testGetDeviceIdWithOutPermission() {
     85         doReturn("353626073736741").when(mPhone).getDeviceId();
     86         doReturn("353626073736742").when(mSecondPhone).getDeviceId();
     87 
     88         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
     89         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
     90         try {
     91             mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG);
     92             Assert.fail("expected Security Exception Thrown");
     93         } catch (Exception ex) {
     94             assertTrue(ex instanceof SecurityException);
     95             assertTrue(ex.getMessage().contains("getDeviceId"));
     96         }
     97 
     98         try {
     99             mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG);
    100             Assert.fail("expected Security Exception Thrown");
    101         } catch (Exception ex) {
    102             assertTrue(ex instanceof SecurityException);
    103             assertTrue(ex.getMessage().contains("getDeviceId"));
    104         }
    105 
    106         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    107         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    108         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    109                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    110 
    111         assertNull(mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG));
    112         assertNull(mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG));
    113 
    114         //case 3: no READ_PRIVILEGED_PHONE_STATE
    115         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    116         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    117                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    118         assertEquals("353626073736741", mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG));
    119         assertEquals("353626073736742", mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG));
    120     }
    121 
    122     @Test
    123     @SmallTest
    124     public void testGetNai() {
    125         doReturn("aaa (at) example.com").when(mPhone).getNai();
    126         assertEquals("aaa (at) example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG));
    127 
    128         doReturn("bbb (at) example.com").when(mSecondPhone).getNai();
    129         assertEquals("bbb (at) example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG));
    130     }
    131 
    132     @Test
    133     @SmallTest
    134     public void testGetNaiWithOutPermission() {
    135         doReturn("aaa (at) example.com").when(mPhone).getNai();
    136         doReturn("bbb (at) example.com").when(mSecondPhone).getNai();
    137 
    138         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    139         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    140         try {
    141             mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG);
    142             Assert.fail("expected Security Exception Thrown");
    143         } catch (Exception ex) {
    144             assertTrue(ex instanceof SecurityException);
    145             assertTrue(ex.getMessage().contains("getNai"));
    146         }
    147 
    148         try {
    149             mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG);
    150             Assert.fail("expected Security Exception Thrown");
    151         } catch (Exception ex) {
    152             assertTrue(ex instanceof SecurityException);
    153             assertTrue(ex.getMessage().contains("getNai"));
    154         }
    155 
    156         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    157         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    158         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    159                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    160 
    161         assertNull(mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG));
    162         assertNull(mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG));
    163 
    164         //case 3: no READ_PRIVILEGED_PHONE_STATE
    165         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    166         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    167                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    168         assertEquals("aaa (at) example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG));
    169         assertEquals("bbb (at) example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG));
    170     }
    171 
    172     @Test
    173     @SmallTest
    174     public void testGetImei() {
    175         doReturn("990000862471854").when(mPhone).getImei();
    176         assertEquals("990000862471854", mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG));
    177 
    178         doReturn("990000862471855").when(mSecondPhone).getImei();
    179         assertEquals("990000862471855", mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG));
    180     }
    181 
    182     @Test
    183     @SmallTest
    184     public void testGetImeiWithOutPermission() {
    185         doReturn("990000862471854").when(mPhone).getImei();
    186         doReturn("990000862471855").when(mSecondPhone).getImei();
    187 
    188         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    189         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    190         try {
    191             mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG);
    192             Assert.fail("expected Security Exception Thrown");
    193         } catch (Exception ex) {
    194             assertTrue(ex instanceof SecurityException);
    195             assertTrue(ex.getMessage().contains("getImei"));
    196         }
    197 
    198         try {
    199             mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG);
    200             Assert.fail("expected Security Exception Thrown");
    201         } catch (Exception ex) {
    202             assertTrue(ex instanceof SecurityException);
    203             assertTrue(ex.getMessage().contains("getImei"));
    204         }
    205 
    206         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    207         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    208         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    209                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    210 
    211         assertNull(mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG));
    212         assertNull(mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG));
    213 
    214         //case 3: no READ_PRIVILEGED_PHONE_STATE
    215         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    216         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    217                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    218         assertEquals("990000862471854", mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG));
    219         assertEquals("990000862471855", mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG));
    220     }
    221 
    222     @Test
    223     @SmallTest
    224     public void testGetDeviceSvn() {
    225         doReturn("00").when(mPhone).getDeviceSvn();
    226         assertEquals("00", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG));
    227 
    228         doReturn("01").when(mSecondPhone).getDeviceSvn();
    229         assertEquals("01", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG));
    230     }
    231 
    232     @Test
    233     @SmallTest
    234     public void testGetDeviceSvnWithOutPermission() {
    235         doReturn("00").when(mPhone).getDeviceSvn();
    236         doReturn("01").when(mSecondPhone).getDeviceSvn();
    237 
    238         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    239         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    240         try {
    241             mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG);
    242             Assert.fail("expected Security Exception Thrown");
    243         } catch (Exception ex) {
    244             assertTrue(ex instanceof SecurityException);
    245             assertTrue(ex.getMessage().contains("getDeviceSvn"));
    246         }
    247 
    248         try {
    249             mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG);
    250             Assert.fail("expected Security Exception Thrown");
    251         } catch (Exception ex) {
    252             assertTrue(ex instanceof SecurityException);
    253             assertTrue(ex.getMessage().contains("getDeviceSvn"));
    254         }
    255 
    256         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    257         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    258         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    259                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    260 
    261         assertNull(mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG));
    262         assertNull(mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG));
    263 
    264         //case 3: no READ_PRIVILEGED_PHONE_STATE
    265         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    266         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    267                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    268         assertEquals("00", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG));
    269         assertEquals("01", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG));
    270     }
    271 
    272     @Test
    273     @SmallTest
    274     public void testGetSubscriberId() {
    275         //IMSI
    276         doReturn("310260426283121").when(mPhone).getSubscriberId();
    277         assertEquals("310260426283121", mPhoneSubInfoControllerUT
    278                 .getSubscriberIdForSubscriber(0, TAG));
    279 
    280         doReturn("310260426283122").when(mSecondPhone).getSubscriberId();
    281         assertEquals("310260426283122", mPhoneSubInfoControllerUT
    282                 .getSubscriberIdForSubscriber(1, TAG));
    283     }
    284 
    285     @Test
    286     @SmallTest
    287     public void testGetSubscriberIdWithOutPermission() {
    288         doReturn("310260426283121").when(mPhone).getSubscriberId();
    289         doReturn("310260426283122").when(mSecondPhone).getSubscriberId();
    290 
    291         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    292         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    293         try {
    294             mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(0, TAG);
    295             Assert.fail("expected Security Exception Thrown");
    296         } catch (Exception ex) {
    297             assertTrue(ex instanceof SecurityException);
    298             assertTrue(ex.getMessage().contains("getSubscriberId"));
    299         }
    300 
    301         try {
    302             mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(1, TAG);
    303             Assert.fail("expected Security Exception Thrown");
    304         } catch (Exception ex) {
    305             assertTrue(ex instanceof SecurityException);
    306             assertTrue(ex.getMessage().contains("getSubscriberId"));
    307         }
    308 
    309         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    310         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    311         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    312                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    313 
    314         assertNull(mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(0, TAG));
    315         assertNull(mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(1, TAG));
    316 
    317         //case 3: no READ_PRIVILEGED_PHONE_STATE
    318         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    319         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    320                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    321         assertEquals("310260426283121",
    322                 mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(0, TAG));
    323         assertEquals("310260426283122",
    324                 mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(1, TAG));
    325     }
    326 
    327     @Test
    328     @SmallTest
    329     public void testGetIccSerialNumber() {
    330         //IccId
    331         doReturn("8991101200003204510").when(mPhone).getIccSerialNumber();
    332         assertEquals("8991101200003204510", mPhoneSubInfoControllerUT
    333                 .getIccSerialNumberForSubscriber(0, TAG));
    334 
    335         doReturn("8991101200003204511").when(mSecondPhone).getIccSerialNumber();
    336         assertEquals("8991101200003204511", mPhoneSubInfoControllerUT
    337                 .getIccSerialNumberForSubscriber(1, TAG));
    338     }
    339 
    340     @Test
    341     @SmallTest
    342     public void testGetIccSerialNumberWithOutPermission() {
    343         doReturn("8991101200003204510").when(mPhone).getIccSerialNumber();
    344         doReturn("8991101200003204511").when(mSecondPhone).getIccSerialNumber();
    345 
    346         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    347         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    348         try {
    349             mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(0, TAG);
    350             Assert.fail("expected Security Exception Thrown");
    351         } catch (Exception ex) {
    352             assertTrue(ex instanceof SecurityException);
    353             assertTrue(ex.getMessage().contains("getIccSerialNumber"));
    354         }
    355 
    356         try {
    357             mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(1, TAG);
    358             Assert.fail("expected Security Exception Thrown");
    359         } catch (Exception ex) {
    360             assertTrue(ex instanceof SecurityException);
    361             assertTrue(ex.getMessage().contains("getIccSerialNumber"));
    362         }
    363 
    364         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    365         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    366         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    367                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    368 
    369         assertNull(mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(0, TAG));
    370         assertNull(mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(1, TAG));
    371 
    372         //case 3: no READ_PRIVILEGED_PHONE_STATE
    373         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    374         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    375                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    376         assertEquals("8991101200003204510", mPhoneSubInfoControllerUT
    377                 .getIccSerialNumberForSubscriber(0, TAG));
    378         assertEquals("8991101200003204511", mPhoneSubInfoControllerUT
    379                 .getIccSerialNumberForSubscriber(1, TAG));
    380     }
    381 
    382     @Test
    383     @SmallTest
    384     public void testLine1Number() {
    385         doReturn("+18051234567").when(mPhone).getLine1Number();
    386         assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG));
    387 
    388         doReturn("+18052345678").when(mSecondPhone).getLine1Number();
    389         assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG));
    390     }
    391 
    392     @Test
    393     @SmallTest
    394     public void testLine1NumberWithOutPermission() {
    395         doReturn("+18051234567").when(mPhone).getLine1Number();
    396         doReturn("+18052345678").when(mSecondPhone).getLine1Number();
    397 
    398         /* case 1: no READ_PRIVILEGED_PHONE_STATE & READ_PHONE_STATE &
    399         READ_SMS and no OP_WRITE_SMS & OP_READ_SMS from appOsMgr */
    400         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    401         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    402                 eq(AppOpsManager.OP_READ_SMS), anyInt(), eq(TAG));
    403         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    404                 eq(AppOpsManager.OP_WRITE_SMS), anyInt(), eq(TAG));
    405         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    406                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    407         try {
    408             mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG);
    409             Assert.fail("expected Security Exception Thrown");
    410         } catch (Exception ex) {
    411             assertTrue(ex instanceof SecurityException);
    412         }
    413 
    414         try {
    415             mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG);
    416             Assert.fail("expected Security Exception Thrown");
    417         } catch (Exception ex) {
    418             assertTrue(ex instanceof SecurityException);
    419         }
    420 
    421         /* case 2: only enable WRITE_SMS permission */
    422         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    423                 eq(AppOpsManager.OP_WRITE_SMS), anyInt(), eq(TAG));
    424         assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG));
    425         assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG));
    426 
    427         /* case 3: only enable READ_PRIVILEGED_PHONE_STATE */
    428         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    429                 eq(AppOpsManager.OP_WRITE_SMS), anyInt(), eq(TAG));
    430         mContextFixture.addCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE);
    431         assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG));
    432         assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG));
    433 
    434         /* case 4: only enable READ_PHONE_STATE permission */
    435         mContextFixture.removeCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE);
    436         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    437         assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG));
    438         assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG));
    439 
    440         /* case 5: enable appOsMgr READ_PHONE_PERMISSION & READ_PHONE_STATE */
    441         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    442                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    443         assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG));
    444         assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG));
    445 
    446         /* case 6: only enable READ_SMS */
    447         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    448                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    449         mContextFixture.removeCallingOrSelfPermission(READ_PHONE_STATE);
    450         mContextFixture.addCallingOrSelfPermission(READ_SMS);
    451         assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG));
    452         assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG));
    453 
    454         /* case 7: enable READ_SMS and OP_READ_SMS */
    455         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    456                 eq(AppOpsManager.OP_READ_SMS), anyInt(), eq(TAG));
    457         assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG));
    458         assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG));
    459     }
    460 
    461     @Test
    462     @SmallTest
    463     public void testLine1AlphaTag() {
    464         doReturn("LINE1_SIM_0").when(mPhone).getLine1AlphaTag();
    465         assertEquals("LINE1_SIM_0", mPhoneSubInfoControllerUT
    466                 .getLine1AlphaTagForSubscriber(0, TAG));
    467 
    468         doReturn("LINE1_SIM_1").when(mSecondPhone).getLine1AlphaTag();
    469         assertEquals("LINE1_SIM_1", mPhoneSubInfoControllerUT
    470                 .getLine1AlphaTagForSubscriber(1, TAG));
    471     }
    472 
    473     @Test
    474     @SmallTest
    475     public void testLine1AlphaTagWithOutPermission() {
    476         doReturn("LINE1_SIM_0").when(mPhone).getLine1AlphaTag();
    477         doReturn("LINE1_SIM_1").when(mSecondPhone).getLine1AlphaTag();
    478 
    479         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    480         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    481         try {
    482             mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(0, TAG);
    483             Assert.fail("expected Security Exception Thrown");
    484         } catch (Exception ex) {
    485             assertTrue(ex instanceof SecurityException);
    486             assertTrue(ex.getMessage().contains("getLine1AlphaTag"));
    487         }
    488 
    489         try {
    490             mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(1, TAG);
    491             Assert.fail("expected Security Exception Thrown");
    492         } catch (Exception ex) {
    493             assertTrue(ex instanceof SecurityException);
    494             assertTrue(ex.getMessage().contains("getLine1AlphaTag"));
    495         }
    496 
    497         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    498         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    499         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    500                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    501 
    502         assertNull(mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(0, TAG));
    503         assertNull(mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(1, TAG));
    504 
    505         //case 3: no READ_PRIVILEGED_PHONE_STATE
    506         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    507         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    508                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    509         assertEquals("LINE1_SIM_0", mPhoneSubInfoControllerUT
    510                 .getLine1AlphaTagForSubscriber(0, TAG));
    511         assertEquals("LINE1_SIM_1", mPhoneSubInfoControllerUT
    512                 .getLine1AlphaTagForSubscriber(1, TAG));
    513     }
    514 
    515     @Test
    516     @SmallTest
    517     public void testMsisdn() {
    518         doReturn("+18051234567").when(mPhone).getMsisdn();
    519         assertEquals("+18051234567", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG));
    520 
    521         doReturn("+18052345678").when(mSecondPhone).getMsisdn();
    522         assertEquals("+18052345678", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG));
    523     }
    524 
    525     @Test
    526     @SmallTest
    527     public void testMsisdnWithOutPermission() {
    528         doReturn("+18051234567").when(mPhone).getMsisdn();
    529         doReturn("+18052345678").when(mSecondPhone).getMsisdn();
    530 
    531         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    532         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    533         try {
    534             mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG);
    535             Assert.fail("expected Security Exception Thrown");
    536         } catch (Exception ex) {
    537             assertTrue(ex instanceof SecurityException);
    538             assertTrue(ex.getMessage().contains("getMsisdn"));
    539         }
    540 
    541         try {
    542             mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG);
    543             Assert.fail("expected Security Exception Thrown");
    544         } catch (Exception ex) {
    545             assertTrue(ex instanceof SecurityException);
    546             assertTrue(ex.getMessage().contains("getMsisdn"));
    547         }
    548 
    549         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    550         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    551         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    552                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    553 
    554         assertNull(mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG));
    555         assertNull(mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG));
    556 
    557         //case 3: no READ_PRIVILEGED_PHONE_STATE
    558         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    559         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    560                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    561         assertEquals("+18051234567", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG));
    562         assertEquals("+18052345678", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG));
    563     }
    564 
    565     @Test
    566     @SmallTest
    567     public void testGetVoiceMailNumber() {
    568         doReturn("+18051234567").when(mPhone).getVoiceMailNumber();
    569         assertEquals("+18051234567", mPhoneSubInfoControllerUT
    570                 .getVoiceMailNumberForSubscriber(0, TAG));
    571 
    572         doReturn("+18052345678").when(mSecondPhone).getVoiceMailNumber();
    573         assertEquals("+18052345678", mPhoneSubInfoControllerUT
    574                 .getVoiceMailNumberForSubscriber(1, TAG));
    575     }
    576 
    577     @Test
    578     @SmallTest
    579     public void testGetVoiceMailNumberWithOutPermission() {
    580         doReturn("+18051234567").when(mPhone).getVoiceMailNumber();
    581         doReturn("+18052345678").when(mSecondPhone).getVoiceMailNumber();
    582 
    583         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    584         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    585         try {
    586             mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(0, TAG);
    587             Assert.fail("expected Security Exception Thrown");
    588         } catch (Exception ex) {
    589             assertTrue(ex instanceof SecurityException);
    590             assertTrue(ex.getMessage().contains("getVoiceMailNumber"));
    591         }
    592 
    593         try {
    594             mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(1, TAG);
    595             Assert.fail("expected Security Exception Thrown");
    596         } catch (Exception ex) {
    597             assertTrue(ex instanceof SecurityException);
    598             assertTrue(ex.getMessage().contains("getVoiceMailNumber"));
    599         }
    600 
    601         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    602         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    603         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    604                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    605 
    606         assertNull(mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(0, TAG));
    607         assertNull(mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(1, TAG));
    608 
    609         //case 3: no READ_PRIVILEGED_PHONE_STATE
    610         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    611         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    612                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    613         assertEquals("+18051234567", mPhoneSubInfoControllerUT
    614                 .getVoiceMailNumberForSubscriber(0, TAG));
    615         assertEquals("+18052345678", mPhoneSubInfoControllerUT
    616                 .getVoiceMailNumberForSubscriber(1, TAG));
    617     }
    618 
    619     @Test
    620     @SmallTest
    621     public void testGetVoiceMailAlphaTag() {
    622         doReturn("VM_SIM_0").when(mPhone).getVoiceMailAlphaTag();
    623         assertEquals("VM_SIM_0", mPhoneSubInfoControllerUT
    624                 .getVoiceMailAlphaTagForSubscriber(0, TAG));
    625 
    626         doReturn("VM_SIM_1").when(mSecondPhone).getVoiceMailAlphaTag();
    627         assertEquals("VM_SIM_1", mPhoneSubInfoControllerUT
    628                 .getVoiceMailAlphaTagForSubscriber(1, TAG));
    629     }
    630 
    631     @Test
    632     @SmallTest
    633     public void testGetVoiceMailAlphaTagWithOutPermission() {
    634         doReturn("VM_SIM_0").when(mPhone).getVoiceMailAlphaTag();
    635         doReturn("VM_SIM_1").when(mSecondPhone).getVoiceMailAlphaTag();
    636 
    637         //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    638         mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
    639         try {
    640             mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(0, TAG);
    641             Assert.fail("expected Security Exception Thrown");
    642         } catch (Exception ex) {
    643             assertTrue(ex instanceof SecurityException);
    644             assertTrue(ex.getMessage().contains("getVoiceMailAlphaTag"));
    645         }
    646 
    647         try {
    648             mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(1, TAG);
    649             Assert.fail("expected Security Exception Thrown");
    650         } catch (Exception ex) {
    651             assertTrue(ex instanceof SecurityException);
    652             assertTrue(ex.getMessage().contains("getVoiceMailAlphaTag"));
    653         }
    654 
    655         //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION
    656         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    657         doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp(
    658                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    659 
    660         assertNull(mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(0, TAG));
    661         assertNull(mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(1, TAG));
    662 
    663         //case 3: no READ_PRIVILEGED_PHONE_STATE
    664         mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE);
    665         doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp(
    666                 eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG));
    667         assertEquals("VM_SIM_0", mPhoneSubInfoControllerUT
    668                 .getVoiceMailAlphaTagForSubscriber(0, TAG));
    669         assertEquals("VM_SIM_1", mPhoneSubInfoControllerUT
    670                 .getVoiceMailAlphaTagForSubscriber(1, TAG));
    671     }
    672 }
    673