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