118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu/* 218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * Copyright (C) 2016 The Android Open Source Project 318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * 418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * Licensed under the Apache License, Version 2.0 (the "License"); 518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * you may not use this file except in compliance with the License. 618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * You may obtain a copy of the License at 718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * 818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * http://www.apache.org/licenses/LICENSE-2.0 918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * 1018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * Unless required by applicable law or agreed to in writing, software 1118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * distributed under the License is distributed on an "AS IS" BASIS, 1218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * See the License for the specific language governing permissions and 1418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu * limitations under the License. 1518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu */ 1618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxupackage com.android.internal.telephony; 1718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 1818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport android.app.AppOpsManager; 1918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport android.content.Context; 2018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport org.junit.After; 2118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport org.junit.Assert; 2218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport org.junit.Before; 2318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 2418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static android.Manifest.permission.READ_PHONE_STATE; 2518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE; 2618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static android.Manifest.permission.READ_SMS; 2718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static org.junit.Assert.assertEquals; 2818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static org.junit.Assert.assertNull; 2918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static org.junit.Assert.assertTrue; 3018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static org.mockito.Matchers.anyInt; 3118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static org.mockito.Mockito.anyString; 3218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static org.mockito.Mockito.doReturn; 3318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport static org.mockito.Mockito.eq; 3418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport org.junit.Test; 3518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport org.mockito.Mock; 3618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 3718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 3818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxuimport android.test.suitebuilder.annotation.SmallTest; 3918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 4018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxupublic class PhoneSubInfoControllerTest extends TelephonyTest { 4118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu private PhoneSubInfoController mPhoneSubInfoControllerUT; 4218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu private AppOpsManager mAppOsMgr; 4318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 4418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Mock 4518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu GsmCdmaPhone mSecondPhone; 4618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 4718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Before 4818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void setUp() throws Exception { 4918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu super.setUp(getClass().getSimpleName()); 5018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* mPhone -> PhoneId: 0 -> SubId:0 5118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mSecondPhone -> PhoneId:1 -> SubId: 1*/ 5218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(0).when(mSubscriptionController).getPhoneId(eq(0)); 5318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(1).when(mSubscriptionController).getPhoneId(eq(1)); 5418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(2).when(mTelephonyManager).getPhoneCount(); 5518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 5618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mServiceManagerMockedServices.put("isub", mSubscriptionController); 5718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(mSubscriptionController).when(mSubscriptionController) 5818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .queryLocalInterface(anyString()); 5918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(mContext).when(mSecondPhone).getContext(); 6018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 6118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mAppOsMgr = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE); 6218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 6318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT = new PhoneSubInfoController(mContext, 6418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu new Phone[]{mPhone, mSecondPhone}); 6518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 6618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 6718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @After 6818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void tearDown() throws Exception { 6918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu super.tearDown(); 7018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 7118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 7218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 7318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 7418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetDeviceId() { 7518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("353626073736741").when(mPhone).getDeviceId(); 7618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("353626073736742").when(mSecondPhone).getDeviceId(); 7718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 7818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("353626073736741", mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG)); 7918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("353626073736742", mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG)); 8018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 8118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 8218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 8318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 8418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetDeviceIdWithOutPermission() { 8518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("353626073736741").when(mPhone).getDeviceId(); 8618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("353626073736742").when(mSecondPhone).getDeviceId(); 8718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 8818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 8918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 9018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 9118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG); 9218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 9318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 9418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 9518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getDeviceId", ex.getMessage()); 9618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 9718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 9818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 9918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG); 10018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 10118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 10218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 10318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getDeviceId", ex.getMessage()); 10418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 10518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 10618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 10718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 10818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 10918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 11018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 11118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG)); 11218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG)); 11318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 11418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 11518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 11618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 11718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 11818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("353626073736741", mPhoneSubInfoControllerUT.getDeviceIdForPhone(0, TAG)); 11918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("353626073736742", mPhoneSubInfoControllerUT.getDeviceIdForPhone(1, TAG)); 12018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 12118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 12218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 12318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 12418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetNai() { 12518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("aaa@example.com").when(mPhone).getNai(); 12618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("aaa@example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG)); 12718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 12818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("bbb@example.com").when(mSecondPhone).getNai(); 12918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("bbb@example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG)); 13018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 13118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 13218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 13318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 13418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetNaiWithOutPermission() { 13518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("aaa@example.com").when(mPhone).getNai(); 13618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("bbb@example.com").when(mSecondPhone).getNai(); 13718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 13818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 13918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 14018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 14118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG); 14218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 14318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 14418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 14518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getNai", ex.getMessage()); 14618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 14718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 14818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 14918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG); 15018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 15118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 15218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 15318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getNai", ex.getMessage()); 15418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 15518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 15618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 15718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 15818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 15918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 16018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 16118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG)); 16218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG)); 16318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 16418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 16518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 16618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 16718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 16818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("aaa@example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(0, TAG)); 16918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("bbb@example.com", mPhoneSubInfoControllerUT.getNaiForSubscriber(1, TAG)); 17018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 17118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 17218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 17318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 17418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetImei() { 17518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("990000862471854").when(mPhone).getImei(); 17618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("990000862471854", mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG)); 17718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 17818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("990000862471855").when(mSecondPhone).getImei(); 17918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("990000862471855", mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG)); 18018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 18118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 18218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 18318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 18418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetImeiWithOutPermission() { 18518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("990000862471854").when(mPhone).getImei(); 18618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("990000862471855").when(mSecondPhone).getImei(); 18718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 18818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 18918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 19018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 19118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG); 19218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 19318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 19418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 19518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getImei", ex.getMessage()); 19618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 19718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 19818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 19918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG); 20018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 20118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 20218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 20318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getImei", ex.getMessage()); 20418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 20518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 20618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 20718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 20818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 20918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 21018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 21118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG)); 21218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG)); 21318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 21418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 21518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 21618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 21718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 21818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("990000862471854", mPhoneSubInfoControllerUT.getImeiForSubscriber(0, TAG)); 21918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("990000862471855", mPhoneSubInfoControllerUT.getImeiForSubscriber(1, TAG)); 22018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 22118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 22218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 22318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 22418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetDeviceSvn() { 22518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("00").when(mPhone).getDeviceSvn(); 22618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("00", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG)); 22718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 22818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("01").when(mSecondPhone).getDeviceSvn(); 22918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("01", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG)); 23018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 23118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 23218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 23318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 23418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetDeviceSvnWithOutPermission() { 23518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("00").when(mPhone).getDeviceSvn(); 23618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("01").when(mSecondPhone).getDeviceSvn(); 23718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 23818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 23918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 24018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 24118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG); 24218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 24318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 24418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 24518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getDeviceSvn", ex.getMessage()); 24618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 24718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 24818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 24918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG); 25018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 25118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 25218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 25318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getDeviceSvn", ex.getMessage()); 25418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 25518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 25618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 25718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 25818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 25918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 26018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 26118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG)); 26218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG)); 26318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 26418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 26518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 26618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 26718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 26818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("00", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(0, TAG)); 26918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("01", mPhoneSubInfoControllerUT.getDeviceSvnUsingSubId(1, TAG)); 27018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 27118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 27218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 27318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 27418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetSubscriberId() { 27518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //IMSI 27618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("310260426283121").when(mPhone).getSubscriberId(); 27718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("310260426283121", mPhoneSubInfoControllerUT 27818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getSubscriberIdForSubscriber(0, TAG)); 27918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 28018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("310260426283122").when(mSecondPhone).getSubscriberId(); 28118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("310260426283122", mPhoneSubInfoControllerUT 28218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getSubscriberIdForSubscriber(1, TAG)); 28318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 28418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 28518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 28618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 28718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetSubscriberIdWithOutPermission() { 28818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("310260426283121").when(mPhone).getSubscriberId(); 28918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("310260426283122").when(mSecondPhone).getSubscriberId(); 29018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 29118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 29218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 29318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 29418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(0, TAG); 29518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 29618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 29718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 29818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getSubscriberId", ex.getMessage()); 29918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 30018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 30118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 30218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(1, TAG); 30318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 30418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 30518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 30618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getSubscriberId", ex.getMessage()); 30718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 30818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 30918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 31018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 31118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 31218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 31318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 31418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(0, TAG)); 31518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(1, TAG)); 31618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 31718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 31818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 31918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 32018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 32118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("310260426283121", 32218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(0, TAG)); 32318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("310260426283122", 32418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getSubscriberIdForSubscriber(1, TAG)); 32518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 32618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 32718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 32818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 32918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetIccSerialNumber() { 33018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //IccId 33118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("8991101200003204510").when(mPhone).getIccSerialNumber(); 33218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("8991101200003204510", mPhoneSubInfoControllerUT 33318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getIccSerialNumberForSubscriber(0, TAG)); 33418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 33518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("8991101200003204511").when(mSecondPhone).getIccSerialNumber(); 33618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("8991101200003204511", mPhoneSubInfoControllerUT 33718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getIccSerialNumberForSubscriber(1, TAG)); 33818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 33918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 34018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 34118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 34218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetIccSerialNumberWithOutPermission() { 34318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("8991101200003204510").when(mPhone).getIccSerialNumber(); 34418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("8991101200003204511").when(mSecondPhone).getIccSerialNumber(); 34518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 34618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 34718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 34818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 34918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(0, TAG); 35018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 35118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 35218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 35318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getIccSerialNumber", ex.getMessage()); 35418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 35518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 35618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 35718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(1, TAG); 35818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 35918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 36018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 36118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getIccSerialNumber", ex.getMessage()); 36218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 36318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 36418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 36518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 36618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 36718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 36818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 36918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(0, TAG)); 37018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getIccSerialNumberForSubscriber(1, TAG)); 37118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 37218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 37318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 37418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 37518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 37618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("8991101200003204510", mPhoneSubInfoControllerUT 37718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getIccSerialNumberForSubscriber(0, TAG)); 37818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("8991101200003204511", mPhoneSubInfoControllerUT 37918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getIccSerialNumberForSubscriber(1, TAG)); 38018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 38118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 38218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 38318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 38418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testLine1Number() { 38518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18051234567").when(mPhone).getLine1Number(); 38618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG)); 38718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 38818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18052345678").when(mSecondPhone).getLine1Number(); 38918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG)); 39018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 39118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 39218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 39318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 39418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testLine1NumberWithOutPermission() { 39518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18051234567").when(mPhone).getLine1Number(); 39618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18052345678").when(mSecondPhone).getLine1Number(); 39718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 39818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* case 1: no READ_PRIVILEGED_PHONE_STATE & READ_PHONE_STATE & 39918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu READ_SMS and no OP_WRITE_SMS & OP_READ_SMS from appOsMgr */ 40018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 40118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 40218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_SMS), anyInt(), eq(TAG)); 40318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 40418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_WRITE_SMS), anyInt(), eq(TAG)); 40518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 40618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 40718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 40818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG); 40918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 41018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 41118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 41218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 41318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 41418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 41518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG); 41618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 41718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 41818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 41918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 42018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 42118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* case 2: only enable WRITE_SMS permission */ 42218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 42318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_WRITE_SMS), anyInt(), eq(TAG)); 42418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG)); 42518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG)); 42618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 42718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* case 3: only enable READ_PRIVILEGED_PHONE_STATE */ 42818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 42918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_WRITE_SMS), anyInt(), eq(TAG)); 43018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE); 43118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG)); 43218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG)); 43318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 43418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* case 4: only enable READ_PHONE_STATE permission */ 43518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE); 43618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 43718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG)); 43818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG)); 43918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 44018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* case 5: enable appOsMgr READ_PHONE_PERMISSION & READ_PHONE_STATE */ 44118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 44218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 44318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG)); 44418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG)); 44518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 44618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* case 6: only enable READ_SMS */ 44718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 44818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 44918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(READ_PHONE_STATE); 45018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_SMS); 45118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG)); 45218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG)); 45318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 45418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu /* case 7: enable READ_SMS and OP_READ_SMS */ 45518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 45618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_SMS), anyInt(), eq(TAG)); 45718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(0, TAG)); 45818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT.getLine1NumberForSubscriber(1, TAG)); 45918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 46018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 46118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 46218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 46318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testLine1AlphaTag() { 46418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("LINE1_SIM_0").when(mPhone).getLine1AlphaTag(); 46518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("LINE1_SIM_0", mPhoneSubInfoControllerUT 46618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getLine1AlphaTagForSubscriber(0, TAG)); 46718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 46818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("LINE1_SIM_1").when(mSecondPhone).getLine1AlphaTag(); 46918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("LINE1_SIM_1", mPhoneSubInfoControllerUT 47018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getLine1AlphaTagForSubscriber(1, TAG)); 47118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 47218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 47318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 47418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 47518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testLine1AlphaTagWithOutPermission() { 47618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("LINE1_SIM_0").when(mPhone).getLine1AlphaTag(); 47718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("LINE1_SIM_1").when(mSecondPhone).getLine1AlphaTag(); 47818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 47918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 48018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 48118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 48218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(0, TAG); 48318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 48418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 48518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 48618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getLine1AlphaTag", ex.getMessage()); 48718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 48818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 48918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 49018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(1, TAG); 49118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 49218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 49318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 49418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getLine1AlphaTag", ex.getMessage()); 49518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 49618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 49718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 49818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 49918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 50018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 50118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 50218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(0, TAG)); 50318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getLine1AlphaTagForSubscriber(1, TAG)); 50418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 50518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 50618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 50718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 50818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 50918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("LINE1_SIM_0", mPhoneSubInfoControllerUT 51018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getLine1AlphaTagForSubscriber(0, TAG)); 51118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("LINE1_SIM_1", mPhoneSubInfoControllerUT 51218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getLine1AlphaTagForSubscriber(1, TAG)); 51318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 51418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 51518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 51618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 51718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testMsisdn() { 51818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18051234567").when(mPhone).getMsisdn(); 51918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG)); 52018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 52118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18052345678").when(mSecondPhone).getMsisdn(); 52218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG)); 52318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 52418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 52518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 52618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 52718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testMsisdnWithOutPermission() { 52818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18051234567").when(mPhone).getMsisdn(); 52918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18052345678").when(mSecondPhone).getMsisdn(); 53018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 53118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 53218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 53318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 53418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG); 53518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 53618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 53718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 53818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getMsisdn", ex.getMessage()); 53918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 54018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 54118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 54218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG); 54318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 54418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 54518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 54618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getMsisdn", ex.getMessage()); 54718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 54818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 54918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 55018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 55118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 55218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 55318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 55418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG)); 55518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG)); 55618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 55718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 55818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 55918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 56018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 56118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(0, TAG)); 56218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT.getMsisdnForSubscriber(1, TAG)); 56318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 56418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 56518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 56618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 56718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetVoiceMailNumber() { 56818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18051234567").when(mPhone).getVoiceMailNumber(); 56918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT 57018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailNumberForSubscriber(0, TAG)); 57118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 57218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18052345678").when(mSecondPhone).getVoiceMailNumber(); 57318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT 57418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailNumberForSubscriber(1, TAG)); 57518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 57618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 57718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 57818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 57918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetVoiceMailNumberWithOutPermission() { 58018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18051234567").when(mPhone).getVoiceMailNumber(); 58118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("+18052345678").when(mSecondPhone).getVoiceMailNumber(); 58218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 58318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 58418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 58518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 58618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(0, TAG); 58718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 58818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 58918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 59018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getVoiceMailNumber", ex.getMessage()); 59118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 59218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 59318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 59418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(1, TAG); 59518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 59618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 59718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 59818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getVoiceMailNumber", ex.getMessage()); 59918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 60018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 60118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 60218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 60318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 60418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 60518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 60618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(0, TAG)); 60718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getVoiceMailNumberForSubscriber(1, TAG)); 60818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 60918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 61018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 61118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 61218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 61318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18051234567", mPhoneSubInfoControllerUT 61418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailNumberForSubscriber(0, TAG)); 61518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("+18052345678", mPhoneSubInfoControllerUT 61618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailNumberForSubscriber(1, TAG)); 61718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 61818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 61918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 62018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 62118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetVoiceMailAlphaTag() { 62218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("VM_SIM_0").when(mPhone).getVoiceMailAlphaTag(); 62318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("VM_SIM_0", mPhoneSubInfoControllerUT 62418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailAlphaTagForSubscriber(0, TAG)); 62518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 62618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("VM_SIM_1").when(mSecondPhone).getVoiceMailAlphaTag(); 62718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("VM_SIM_1", mPhoneSubInfoControllerUT 62818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailAlphaTagForSubscriber(1, TAG)); 62918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 63018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 63118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @Test 63218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu @SmallTest 63318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu public void testGetVoiceMailAlphaTagWithOutPermission() { 63418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("VM_SIM_0").when(mPhone).getVoiceMailAlphaTag(); 63518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn("VM_SIM_1").when(mSecondPhone).getVoiceMailAlphaTag(); 63618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 63718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 1: no READ_PRIVILEGED_PHONE_STATE, READ_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 63818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); 63918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 64018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(0, TAG); 64118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 64218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 64318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 64418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getVoiceMailAlphaTag", ex.getMessage()); 64518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 64618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 64718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu try { 64818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(1, TAG); 64918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu Assert.fail("expected Security Exception Thrown"); 65018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } catch (Exception ex) { 65118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertTrue(ex instanceof SecurityException); 65218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals(READ_PHONE_STATE + " denied: getVoiceMailAlphaTag", ex.getMessage()); 65318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 65418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 65518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 2: no READ_PRIVILEGED_PHONE_STATE & appOsMgr READ_PHONE_PERMISSION 65618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 65718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ERRORED).when(mAppOsMgr).noteOp( 65818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 65918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 66018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(0, TAG)); 66118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertNull(mPhoneSubInfoControllerUT.getVoiceMailAlphaTagForSubscriber(1, TAG)); 66218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu 66318ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu //case 3: no READ_PRIVILEGED_PHONE_STATE 66418ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu mContextFixture.addCallingOrSelfPermission(READ_PHONE_STATE); 66518ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOsMgr).noteOp( 66618ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), eq(TAG)); 66718ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("VM_SIM_0", mPhoneSubInfoControllerUT 66818ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailAlphaTagForSubscriber(0, TAG)); 66918ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu assertEquals("VM_SIM_1", mPhoneSubInfoControllerUT 67018ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu .getVoiceMailAlphaTagForSubscriber(1, TAG)); 67118ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu } 67218ad8bf07feb9f6a9d187da236f3e56c055e941afionaxu} 673