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