ServiceStateTrackerTest.java revision dbe4d7749d5524be575f629486874acdae721138
10a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan/*
29c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu * Copyright (C) 2016 The Android Open Source Project
30a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan *
40a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * Licensed under the Apache License, Version 2.0 (the "License");
50a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * you may not use this file except in compliance with the License.
60a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * You may obtain a copy of the License at
70a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan *
80a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan *      http://www.apache.org/licenses/LICENSE-2.0
90a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan *
100a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * Unless required by applicable law or agreed to in writing, software
110a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * distributed under the License is distributed on an "AS IS" BASIS,
120a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * See the License for the specific language governing permissions and
140a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * limitations under the License.
150a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan */
160a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
170a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanpackage com.android.internal.telephony;
180a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
1959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.content.Intent;
2062f7e2b54fb3ad9f1139ceaf3b15966c000a9135Jack Yuimport android.os.AsyncResult;
2159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.os.Bundle;
22dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport android.os.Handler;
23b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yuimport android.os.HandlerThread;
24dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport android.os.Message;
25e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.os.Parcel;
2659d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.os.UserHandle;
27e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.telephony.CellInfo;
28e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.telephony.CellInfoGsm;
2966fb0378fd913dfe564c8e31b5ef379592242615Jack Yuimport android.telephony.ServiceState;
30e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport android.telephony.SignalStrength;
31ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yuimport android.telephony.SubscriptionManager;
32cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yuimport android.telephony.gsm.GsmCellLocation;
3344b9d5b470fb45c0f59073f56cb48a2501996259Jack Yuimport android.test.suitebuilder.annotation.MediumTest;
340a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
35dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
36b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yuimport com.android.internal.telephony.dataconnection.DcTracker;
370a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport com.android.internal.telephony.test.SimulatedCommands;
386a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yuimport com.android.internal.telephony.uicc.IccCardApplicationStatus;
390a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
4059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs;
410a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport static org.junit.Assert.*;
42e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
43dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport static org.mockito.Matchers.any;
44e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Matchers.anyString;
45e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.anyInt;
46d9fa90aaab09dae08df2a097ac4d61cedb98672aJack Yuimport static org.mockito.Mockito.atLeast;
47e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.doReturn;
48e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.eq;
49dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport static org.mockito.Mockito.times;
50e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.verify;
510a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
520a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport org.junit.After;
530a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport org.junit.Before;
540a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport org.junit.Test;
5559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport org.mockito.ArgumentCaptor;
560a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport org.mockito.Mock;
570a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
58e2507b53266017e219a079f514801fe72ee90229Jack Yuimport java.util.ArrayList;
590a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
60f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajanpublic class ServiceStateTrackerTest extends TelephonyTest {
6162f7e2b54fb3ad9f1139ceaf3b15966c000a9135Jack Yu
620a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    @Mock
63b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu    private DcTracker mDct;
64ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu    @Mock
65ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu    private ProxyController mProxyController;
660a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
670a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    private ServiceStateTracker sst;
68dbe4d7749d5524be575f629486874acdae721138Amit Mahajan    private ServiceStateTrackerTestHandler mSSTTestHandler;
690a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
70b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu    private class ServiceStateTrackerTestHandler extends HandlerThread {
71b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu
72b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        private ServiceStateTrackerTestHandler(String name) {
73b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu            super(name);
74b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        }
75b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu
76b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        @Override
77b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        public void onLooperPrepared() {
78e2507b53266017e219a079f514801fe72ee90229Jack Yu            sst = new ServiceStateTracker(mPhone, mSimulatedCommands);
79f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan            setReady(true);
80b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        }
81b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu    }
82b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu
830a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    @Before
840a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    public void setUp() throws Exception {
85b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu
86b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        logd("ServiceStateTrackerTest +Setup!");
87f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan        super.setUp("ServiceStateTrackerTest");
880a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
89ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu        doReturn(true).when(mDct).isDisconnected();
90b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        mPhone.mDcTracker = mDct;
910a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
929c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu        replaceInstance(ProxyController.class, "sProxyController", null, mProxyController);
93ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu
9459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        mContextFixture.putStringArrayResource(
95b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu                com.android.internal.R.array.config_sameNamedOperatorConsideredRoaming,
96b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu                new String[]{"123456"});
97b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu
9859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        mContextFixture.putStringArrayResource(
99b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu                com.android.internal.R.array.config_operatorConsideredNonRoaming,
100b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu                new String[]{"123456"});
101b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu
10266fb0378fd913dfe564c8e31b5ef379592242615Jack Yu        mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME);
10366fb0378fd913dfe564c8e31b5ef379592242615Jack Yu        mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA);
10466fb0378fd913dfe564c8e31b5ef379592242615Jack Yu        mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME);
10566fb0378fd913dfe564c8e31b5ef379592242615Jack Yu        mSimulatedCommands.setDataRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA);
10666fb0378fd913dfe564c8e31b5ef379592242615Jack Yu
10738ca51d0f643405df51e78fce6c546424e9f410dShishir Agrawal        int dds = SubscriptionManager.getDefaultDataSubscriptionId();
10859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        doReturn(dds).when(mPhone).getSubId();
10959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
110dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        mSSTTestHandler = new ServiceStateTrackerTestHandler(getClass().getSimpleName());
111dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        mSSTTestHandler.start();
1125d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan        waitUntilReady();
11344b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu        waitForMs(600);
114b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu        logd("ServiceStateTrackerTest -Setup!");
1150a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    }
1160a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
1170a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    @After
1180a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    public void tearDown() throws Exception {
1190a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan        sst = null;
120f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan        super.tearDown();
1210a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    }
1220a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
1236a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu    @Test
12444b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu    @MediumTest
1250a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    public void testSetRadioPower() {
126e2507b53266017e219a079f514801fe72ee90229Jack Yu        boolean oldState = mSimulatedCommands.getRadioState().isOn();
1270a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan        sst.setRadioPower(!oldState);
128ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu        waitForMs(100);
129e2507b53266017e219a079f514801fe72ee90229Jack Yu        assertTrue(oldState != mSimulatedCommands.getRadioState().isOn());
1300a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan    }
1310a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan
1326a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu    @Test
13344b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu    @MediumTest
1347d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt    public void testNoRilTrafficAfterSetRadioPower() {
1357d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        sst.setRadioPower(true);
1367d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        final int getOperatorCallCount = mSimulatedCommands.getGetOperatorCallCount();
1377d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        final int getDataRegistrationStateCallCount =
1387d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt                mSimulatedCommands.getGetDataRegistrationStateCallCount();
1397d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        final int getVoiceRegistrationStateCallCount =
1407d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt                mSimulatedCommands.getGetVoiceRegistrationStateCallCount();
1417d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        final int getNetworkSelectionModeCallCount =
1427d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt                mSimulatedCommands.getGetNetworkSelectionModeCallCount();
1437d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        sst.setRadioPower(false);
1447d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt
1457d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        waitForMs(500);
1467d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        sst.pollState();
1477d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        waitForMs(250);
1487d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt
1497d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        assertEquals(getOperatorCallCount, mSimulatedCommands.getGetOperatorCallCount());
1507d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        assertEquals(getDataRegistrationStateCallCount,
1517d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt                mSimulatedCommands.getGetDataRegistrationStateCallCount());
1527d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        assertEquals(getVoiceRegistrationStateCallCount,
1537d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt                mSimulatedCommands.getGetVoiceRegistrationStateCallCount());
1547d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt        assertEquals(getNetworkSelectionModeCallCount,
1557d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt                mSimulatedCommands.getGetNetworkSelectionModeCallCount());
1567d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt    }
1577d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt
1587d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt    @Test
1597d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt    @MediumTest
16059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu    public void testSpnUpdateShowPlmnOnly() {
16159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        doReturn(0x02).when(mSimRecords).getDisplayRule(anyString());
162153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan        doReturn(IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN).
163153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan                when(mUiccCardApplication3gpp).getState();
16459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
16559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_NETWORK_STATE_CHANGED, null));
16659d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
16744b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu        waitForMs(750);
16859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
16959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
170d9fa90aaab09dae08df2a097ac4d61cedb98672aJack Yu        verify(mContextFixture.getTestDouble(), atLeast(2)).
17159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu                sendStickyBroadcastAsUser(intentArgumentCaptor.capture(), eq(UserHandle.ALL));
17259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
17359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        // We only want to verify the intent SPN_STRINGS_UPDATED_ACTION.
174d9fa90aaab09dae08df2a097ac4d61cedb98672aJack Yu        Intent intent = intentArgumentCaptor.getValue();
17559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertEquals(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION, intent.getAction());
17659d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertEquals(Intent.FLAG_RECEIVER_REPLACE_PENDING, intent.getFlags());
17759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
17859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        Bundle b = intent.getExtras();
17959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
18059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        // For boolean we need to make sure the key exists first
18159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertTrue(b.containsKey(TelephonyIntents.EXTRA_SHOW_SPN));
18259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertFalse(b.getBoolean(TelephonyIntents.EXTRA_SHOW_SPN));
18359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
18459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertEquals(null, b.getString(TelephonyIntents.EXTRA_SPN));
18559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertEquals(null, b.getString(TelephonyIntents.EXTRA_DATA_SPN));
18659d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
18759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        // For boolean we need to make sure the key exists first
18859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertTrue(b.containsKey(TelephonyIntents.EXTRA_SHOW_PLMN));
18959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertTrue(b.getBoolean(TelephonyIntents.EXTRA_SHOW_PLMN));
19059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
19159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu        assertEquals(SimulatedCommands.FAKE_LONG_NAME, b.getString(TelephonyIntents.EXTRA_PLMN));
19266fb0378fd913dfe564c8e31b5ef379592242615Jack Yu
19366fb0378fd913dfe564c8e31b5ef379592242615Jack Yu        ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
19466fb0378fd913dfe564c8e31b5ef379592242615Jack Yu        verify(mTelephonyManager).setDataNetworkTypeForPhone(anyInt(), intArgumentCaptor.capture());
19566fb0378fd913dfe564c8e31b5ef379592242615Jack Yu        assertEquals(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA,
19666fb0378fd913dfe564c8e31b5ef379592242615Jack Yu                intArgumentCaptor.getValue().intValue());
19759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu    }
19859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu
1996a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu    @Test
20044b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu    @MediumTest
201e2507b53266017e219a079f514801fe72ee90229Jack Yu    public void testCellInfoList() {
202e2507b53266017e219a079f514801fe72ee90229Jack Yu        Parcel p = Parcel.obtain();
203e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(1);
204e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(1);
205e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(2);
206e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeLong(1453510289108L);
207e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(310);
208e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(260);
209e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(123);
210e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(456);
211e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(99);
212e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.writeInt(3);
213e2507b53266017e219a079f514801fe72ee90229Jack Yu        p.setDataPosition(0);
214e2507b53266017e219a079f514801fe72ee90229Jack Yu
215e2507b53266017e219a079f514801fe72ee90229Jack Yu        CellInfoGsm cellInfo = CellInfoGsm.CREATOR.createFromParcel(p);
216e2507b53266017e219a079f514801fe72ee90229Jack Yu
217e2507b53266017e219a079f514801fe72ee90229Jack Yu        ArrayList<CellInfo> list = new ArrayList();
218e2507b53266017e219a079f514801fe72ee90229Jack Yu        list.add(cellInfo);
219e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        mSimulatedCommands.setCellInfoList(list);
220e2507b53266017e219a079f514801fe72ee90229Jack Yu
221e2507b53266017e219a079f514801fe72ee90229Jack Yu        assertEquals(sst.getAllCellInfo(), list);
222e2507b53266017e219a079f514801fe72ee90229Jack Yu    }
223e2507b53266017e219a079f514801fe72ee90229Jack Yu
224e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu    @Test
22544b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu    @MediumTest
226e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu    public void testImsRegState() {
227e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        // Simulate IMS registered
228e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        mSimulatedCommands.setImsRegistrationState(new int[]{1});
229e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
230e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_IMS_STATE_CHANGED, null));
231e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        waitForMs(200);
232e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
233e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        assertTrue(sst.isImsRegistered());
234e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
235e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        // Simulate IMS unregistered
236e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        mSimulatedCommands.setImsRegistrationState(new int[]{0});
237e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
238e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_IMS_STATE_CHANGED, null));
239e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        waitForMs(200);
240e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
241e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        assertFalse(sst.isImsRegistered());
242e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu    }
243e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
244e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu    @Test
24544b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu    @MediumTest
246e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu    public void testSignalStrength() {
247e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        SignalStrength ss = new SignalStrength(
248e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                30, // gsmSignalStrength
249e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                0,  // gsmBitErrorRate
250e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                -1, // cdmaDbm
251e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                -1, // cdmaEcio
252e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                -1, // evdoDbm
253e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                -1, // evdoEcio
254e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                -1, // evdoSnr
255e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                99, // lteSignalStrength
256e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                SignalStrength.INVALID,     // lteRsrp
257e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                SignalStrength.INVALID,     // lteRsrq
258e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                SignalStrength.INVALID,     // lteRssnr
259e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                SignalStrength.INVALID,     // lteCqi
260e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                SignalStrength.INVALID,     // tdScdmaRscp
261e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                true                        // gsmFlag
262e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        );
263e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
264e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_SIGNAL_STRENGTH_UPDATE,
265e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu                new AsyncResult(null, ss, null)));
266e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        waitForMs(200);
267e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu        assertEquals(sst.getSignalStrength(), ss);
268e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu    }
269e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu
270cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu    @Test
27144b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu    @MediumTest
272cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu    public void testGsmCellLocation() {
273cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu
274cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu        sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_GET_LOC_DONE,
275cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu                new AsyncResult(null, new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9",
276cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu                        "10", "11", "12", "13", "14", "15"}, null)));
277cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu
278cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu        waitForMs(200);
279cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu        GsmCellLocation cl = (GsmCellLocation) sst.getCellLocation();
280cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu        assertEquals(2, cl.getLac());
281cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu        assertEquals(3, cl.getCid());
282cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu    }
283dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
284dbe4d7749d5524be575f629486874acdae721138Amit Mahajan    @Test
285dbe4d7749d5524be575f629486874acdae721138Amit Mahajan    @MediumTest
286dbe4d7749d5524be575f629486874acdae721138Amit Mahajan    public void testUpdatePhoneType() {
287dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        doReturn(false).when(mPhone).isPhoneTypeGsm();
288dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        doReturn(true).when(mPhone).isPhoneTypeCdmaLte();
289dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        doReturn(CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM).when(mCdmaSSM).
290dbe4d7749d5524be575f629486874acdae721138Amit Mahajan                getCdmaSubscriptionSource();
291dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
292dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        logd("Calling updatePhoneType");
293dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // switch to CDMA
294dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        sst.updatePhoneType();
295dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
296dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
297dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        verify(mRuimRecords).registerForRecordsLoaded(eq(sst), integerArgumentCaptor.capture(),
298dbe4d7749d5524be575f629486874acdae721138Amit Mahajan                any(Object.class));
299dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
300dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // response for mRuimRecords.registerForRecordsLoaded()
301dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        Message msg = Message.obtain();
302dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        msg.what = integerArgumentCaptor.getValue();
303dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        msg.obj = new AsyncResult(null, null, null);
304dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        sst.sendMessage(msg);
305dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        waitForMs(100);
306dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
307dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // on RUIM_RECORDS_LOADED, sst is expected to call following apis
308dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        verify(mRuimRecords, times(1)).isProvisioned();
309dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        verify(mPhone, times(1)).prepareEri();
310dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
311dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // switch back to GSM
312dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        doReturn(true).when(mPhone).isPhoneTypeGsm();
313dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        doReturn(false).when(mPhone).isPhoneTypeCdmaLte();
314dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
315dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // response for mRuimRecords.registerForRecordsLoaded() can be sent after switching to GSM
316dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        msg = Message.obtain();
317dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        msg.what = integerArgumentCaptor.getValue();
318dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        msg.obj = new AsyncResult(null, null, null);
319dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        sst.sendMessage(msg);
320dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
321dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // There's no easy way to check if the msg was handled or discarded. Wait to make sure sst
322dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // did not crash, and then verify that the functions called records loaded are not called
323dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        // again
324dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        waitForMs(200);
325dbe4d7749d5524be575f629486874acdae721138Amit Mahajan
326dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        verify(mRuimRecords, times(1)).isProvisioned();
327dbe4d7749d5524be575f629486874acdae721138Amit Mahajan        verify(mPhone, times(1)).prepareEri();
328dbe4d7749d5524be575f629486874acdae721138Amit Mahajan    }
3290a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan}
330