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 19b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport android.app.IAlarmManager; 20b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport android.content.Context; 2159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.content.Intent; 2262f7e2b54fb3ad9f1139ceaf3b15966c000a9135Jack Yuimport android.os.AsyncResult; 2359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.os.Bundle; 24dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport android.os.Handler; 25b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yuimport android.os.HandlerThread; 26b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport android.os.IBinder; 27dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport android.os.Message; 28e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.os.Parcel; 29b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport android.os.SystemClock; 3059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.os.UserHandle; 313374f09335e5b7681af05a35dd7454b565f8bb72Jordan Liuimport android.platform.test.annotations.Postsubmit; 32e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.telephony.CellInfo; 33e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.telephony.CellInfoGsm; 3466fb0378fd913dfe564c8e31b5ef379592242615Jack Yuimport android.telephony.ServiceState; 35e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport android.telephony.SignalStrength; 36ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yuimport android.telephony.SubscriptionManager; 37cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yuimport android.telephony.gsm.GsmCellLocation; 3844b9d5b470fb45c0f59073f56cb48a2501996259Jack Yuimport android.test.suitebuilder.annotation.MediumTest; 39f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padaweimport android.test.suitebuilder.annotation.SmallTest; 40f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padaweimport android.util.Pair; 410a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 42dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; 43b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yuimport com.android.internal.telephony.dataconnection.DcTracker; 440a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport com.android.internal.telephony.test.SimulatedCommands; 456a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yuimport com.android.internal.telephony.uicc.IccCardApplicationStatus; 460a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 47b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.junit.After; 48b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.junit.Before; 49b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.junit.Test; 50b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.mockito.ArgumentCaptor; 51b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.mockito.Mock; 52b4237f12fd73204e9775909e03d9277e59d94766fionaxu 53b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport java.util.ArrayList; 54e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 55b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 56b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport static org.junit.Assert.assertEquals; 57b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport static org.junit.Assert.assertFalse; 58b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport static org.junit.Assert.assertTrue; 59dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport static org.mockito.Matchers.any; 60b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport static org.mockito.Matchers.anyLong; 61e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Matchers.anyString; 62e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.anyInt; 63d9fa90aaab09dae08df2a097ac4d61cedb98672aJack Yuimport static org.mockito.Mockito.atLeast; 64e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.doReturn; 65e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.eq; 66dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport static org.mockito.Mockito.times; 67e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport static org.mockito.Mockito.verify; 680a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 69f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajanpublic class ServiceStateTrackerTest extends TelephonyTest { 7062f7e2b54fb3ad9f1139ceaf3b15966c000a9135Jack Yu 710a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @Mock 72b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu private DcTracker mDct; 73ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu @Mock 74ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu private ProxyController mProxyController; 75f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Mock 76f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private Handler mTestHandler; 77b4237f12fd73204e9775909e03d9277e59d94766fionaxu @Mock 78b4237f12fd73204e9775909e03d9277e59d94766fionaxu protected IAlarmManager mAlarmManager; 790a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 800a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan private ServiceStateTracker sst; 81dbe4d7749d5524be575f629486874acdae721138Amit Mahajan private ServiceStateTrackerTestHandler mSSTTestHandler; 820a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 83f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_REGISTERED_TO_NETWORK = 1; 84f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_SUBSCRIPTION_INFO_READY = 2; 85f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_ROAMING_ON = 3; 86f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_ROAMING_OFF = 4; 87f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_DATA_CONNECTION_ATTACHED = 5; 88f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_DATA_CONNECTION_DETACHED = 6; 89f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_DATA_RAT_CHANGED = 7; 90f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_PS_RESTRICT_ENABLED = 8; 91f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_PS_RESTRICT_DISABLED = 9; 92f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 93b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu private class ServiceStateTrackerTestHandler extends HandlerThread { 94b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 95b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu private ServiceStateTrackerTestHandler(String name) { 96b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu super(name); 97b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu } 98b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 99b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu @Override 100b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu public void onLooperPrepared() { 101e2507b53266017e219a079f514801fe72ee90229Jack Yu sst = new ServiceStateTracker(mPhone, mSimulatedCommands); 102f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan setReady(true); 103b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu } 104b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu } 105b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 1060a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @Before 1070a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void setUp() throws Exception { 108b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 109b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu logd("ServiceStateTrackerTest +Setup!"); 110f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan super.setUp("ServiceStateTrackerTest"); 1110a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 112ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu doReturn(true).when(mDct).isDisconnected(); 113b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu mPhone.mDcTracker = mDct; 1140a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1159c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(ProxyController.class, "sProxyController", null, mProxyController); 116ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu 11759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu mContextFixture.putStringArrayResource( 118b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu com.android.internal.R.array.config_sameNamedOperatorConsideredRoaming, 119b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu new String[]{"123456"}); 120b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 12159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu mContextFixture.putStringArrayResource( 122b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu com.android.internal.R.array.config_operatorConsideredNonRoaming, 123b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu new String[]{"123456"}); 124b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 12566fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 12666fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA); 12766fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 12866fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setDataRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA); 12966fb0378fd913dfe564c8e31b5ef379592242615Jack Yu 13038ca51d0f643405df51e78fce6c546424e9f410dShishir Agrawal int dds = SubscriptionManager.getDefaultDataSubscriptionId(); 13159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu doReturn(dds).when(mPhone).getSubId(); 13259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 133dbe4d7749d5524be575f629486874acdae721138Amit Mahajan mSSTTestHandler = new ServiceStateTrackerTestHandler(getClass().getSimpleName()); 134dbe4d7749d5524be575f629486874acdae721138Amit Mahajan mSSTTestHandler.start(); 1355d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan waitUntilReady(); 13644b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu waitForMs(600); 137b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu logd("ServiceStateTrackerTest -Setup!"); 1380a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1390a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1400a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @After 1410a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void tearDown() throws Exception { 1420a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan sst = null; 1437e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mSSTTestHandler.quitSafely(); 144f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan super.tearDown(); 1450a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1460a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1476a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu @Test 14844b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 1490a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void testSetRadioPower() { 150e2507b53266017e219a079f514801fe72ee90229Jack Yu boolean oldState = mSimulatedCommands.getRadioState().isOn(); 1510a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan sst.setRadioPower(!oldState); 152ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu waitForMs(100); 153e2507b53266017e219a079f514801fe72ee90229Jack Yu assertTrue(oldState != mSimulatedCommands.getRadioState().isOn()); 1540d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu } 1550d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1560d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu @Test 1570d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu @MediumTest 1580d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu public void testSetRadioPowerFromCarrier() { 1590d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // Carrier disable radio power 1600d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPowerFromCarrier(false); 1610d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1620d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(mSimulatedCommands.getRadioState().isOn()); 1630d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getDesiredPowerState()); 1640d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(sst.getPowerStateFromCarrier()); 1650d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1660d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // User toggle radio power will not overrides carrier settings 1670d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPower(true); 1680d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1690d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(mSimulatedCommands.getRadioState().isOn()); 1700d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getDesiredPowerState()); 1710d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(sst.getPowerStateFromCarrier()); 1720d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1730d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // Carrier re-enable radio power 1740d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPowerFromCarrier(true); 1750d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1760d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(mSimulatedCommands.getRadioState().isOn()); 1770d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getDesiredPowerState()); 1780d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getPowerStateFromCarrier()); 1790d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1800d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // User toggle radio power off (airplane mode) and set carrier on 1810d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPower(false); 1820d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPowerFromCarrier(true); 1830d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1840d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(mSimulatedCommands.getRadioState().isOn()); 1850d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(sst.getDesiredPowerState()); 1860d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getPowerStateFromCarrier()); 1870a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1880a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1896a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu @Test 19044b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 1917e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan public void testRilTrafficAfterSetRadioPower() { 1927d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt sst.setRadioPower(true); 1937d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getOperatorCallCount = mSimulatedCommands.getGetOperatorCallCount(); 1947d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getDataRegistrationStateCallCount = 1957d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetDataRegistrationStateCallCount(); 1967d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getVoiceRegistrationStateCallCount = 1977d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetVoiceRegistrationStateCallCount(); 1987d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getNetworkSelectionModeCallCount = 1997d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetNetworkSelectionModeCallCount(); 2007d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt sst.setRadioPower(false); 2017d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt 2027d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt waitForMs(500); 2037d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt sst.pollState(); 2047d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt waitForMs(250); 2057d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt 2067e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan // This test was meant to be for *no* ril traffic. However, RADIO_STATE_CHANGED is 2077e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan // considered a modem triggered action and that causes a pollState() to be done 2087e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getOperatorCallCount + 1, mSimulatedCommands.getGetOperatorCallCount()); 2097e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getDataRegistrationStateCallCount + 1, 2107d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetDataRegistrationStateCallCount()); 2117e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getVoiceRegistrationStateCallCount + 1, 2127d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetVoiceRegistrationStateCallCount()); 2137e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getNetworkSelectionModeCallCount + 1, 2147d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetNetworkSelectionModeCallCount()); 215b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt 216b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt // Note that if the poll is triggered by a network change notification 217b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt // and the modem is supposed to be off, we should still do the poll 218b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt mSimulatedCommands.notifyVoiceNetworkStateChanged(); 219b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt waitForMs(250); 220b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt 2217e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getOperatorCallCount + 2 , mSimulatedCommands.getGetOperatorCallCount()); 2227e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getDataRegistrationStateCallCount + 2, 223b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt mSimulatedCommands.getGetDataRegistrationStateCallCount()); 2247e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getVoiceRegistrationStateCallCount + 2, 225b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt mSimulatedCommands.getGetVoiceRegistrationStateCallCount()); 2267e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getNetworkSelectionModeCallCount + 2, 227b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt mSimulatedCommands.getGetNetworkSelectionModeCallCount()); 2287d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt } 2297d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt 2307d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt @Test 2317d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt @MediumTest 23259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu public void testSpnUpdateShowPlmnOnly() { 23359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu doReturn(0x02).when(mSimRecords).getDisplayRule(anyString()); 234153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN). 235153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan when(mUiccCardApplication3gpp).getState(); 23659d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 23759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_NETWORK_STATE_CHANGED, null)); 23859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 23944b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu waitForMs(750); 24059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 24159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); 242d9fa90aaab09dae08df2a097ac4d61cedb98672aJack Yu verify(mContextFixture.getTestDouble(), atLeast(2)). 24359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu sendStickyBroadcastAsUser(intentArgumentCaptor.capture(), eq(UserHandle.ALL)); 24459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 24559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu // We only want to verify the intent SPN_STRINGS_UPDATED_ACTION. 246d9fa90aaab09dae08df2a097ac4d61cedb98672aJack Yu Intent intent = intentArgumentCaptor.getValue(); 24759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION, intent.getAction()); 24859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(Intent.FLAG_RECEIVER_REPLACE_PENDING, intent.getFlags()); 24959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 25059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu Bundle b = intent.getExtras(); 25159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 25259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu // For boolean we need to make sure the key exists first 25359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertTrue(b.containsKey(TelephonyIntents.EXTRA_SHOW_SPN)); 25459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertFalse(b.getBoolean(TelephonyIntents.EXTRA_SHOW_SPN)); 25559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 25659d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(null, b.getString(TelephonyIntents.EXTRA_SPN)); 25759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(null, b.getString(TelephonyIntents.EXTRA_DATA_SPN)); 25859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 25959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu // For boolean we need to make sure the key exists first 26059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertTrue(b.containsKey(TelephonyIntents.EXTRA_SHOW_PLMN)); 26159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertTrue(b.getBoolean(TelephonyIntents.EXTRA_SHOW_PLMN)); 26259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 26359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(SimulatedCommands.FAKE_LONG_NAME, b.getString(TelephonyIntents.EXTRA_PLMN)); 26466fb0378fd913dfe564c8e31b5ef379592242615Jack Yu 26566fb0378fd913dfe564c8e31b5ef379592242615Jack Yu ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 26666fb0378fd913dfe564c8e31b5ef379592242615Jack Yu verify(mTelephonyManager).setDataNetworkTypeForPhone(anyInt(), intArgumentCaptor.capture()); 26766fb0378fd913dfe564c8e31b5ef379592242615Jack Yu assertEquals(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA, 26866fb0378fd913dfe564c8e31b5ef379592242615Jack Yu intArgumentCaptor.getValue().intValue()); 26959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu } 27059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 2716a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu @Test 27244b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 273e2507b53266017e219a079f514801fe72ee90229Jack Yu public void testCellInfoList() { 274e2507b53266017e219a079f514801fe72ee90229Jack Yu Parcel p = Parcel.obtain(); 275e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(1); 276e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(1); 277e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(2); 278e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeLong(1453510289108L); 279e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(310); 280e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(260); 281e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(123); 282e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(456); 283e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(99); 284e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(3); 285e2507b53266017e219a079f514801fe72ee90229Jack Yu p.setDataPosition(0); 286e2507b53266017e219a079f514801fe72ee90229Jack Yu 287e2507b53266017e219a079f514801fe72ee90229Jack Yu CellInfoGsm cellInfo = CellInfoGsm.CREATOR.createFromParcel(p); 288e2507b53266017e219a079f514801fe72ee90229Jack Yu 289e2507b53266017e219a079f514801fe72ee90229Jack Yu ArrayList<CellInfo> list = new ArrayList(); 290e2507b53266017e219a079f514801fe72ee90229Jack Yu list.add(cellInfo); 291e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu mSimulatedCommands.setCellInfoList(list); 292e2507b53266017e219a079f514801fe72ee90229Jack Yu 293e2507b53266017e219a079f514801fe72ee90229Jack Yu assertEquals(sst.getAllCellInfo(), list); 294e2507b53266017e219a079f514801fe72ee90229Jack Yu } 295e2507b53266017e219a079f514801fe72ee90229Jack Yu 296e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu @Test 29744b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 298e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu public void testImsRegState() { 299e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu // Simulate IMS registered 3007e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mSimulatedCommands.setImsRegistrationState(new int[]{1, PhoneConstants.PHONE_TYPE_GSM}); 301e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 302e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_IMS_STATE_CHANGED, null)); 303e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu waitForMs(200); 304e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 305e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu assertTrue(sst.isImsRegistered()); 306e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 307e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu // Simulate IMS unregistered 3087e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mSimulatedCommands.setImsRegistrationState(new int[]{0, PhoneConstants.PHONE_TYPE_GSM}); 309e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 310e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_IMS_STATE_CHANGED, null)); 311e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu waitForMs(200); 312e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 313e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu assertFalse(sst.isImsRegistered()); 314e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu } 315e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 3163374f09335e5b7681af05a35dd7454b565f8bb72Jordan Liu @Postsubmit 317e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu @Test 31844b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 319e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu public void testSignalStrength() { 320e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength ss = new SignalStrength( 321e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 30, // gsmSignalStrength 322e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 0, // gsmBitErrorRate 323e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // cdmaDbm 324e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // cdmaEcio 325e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // evdoDbm 326e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // evdoEcio 327e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // evdoSnr 328e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 99, // lteSignalStrength 329e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteRsrp 330e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteRsrq 331e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteRssnr 332e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteCqi 333e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // tdScdmaRscp 334e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu true // gsmFlag 335e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu ); 336e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 3370b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.setSignalStrength(ss); 3380b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.notifySignalStrength(); 33948a5ba5d3cc80ffaaa82caed6f2344166da99c08Jack Yu waitForMs(300); 340e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu assertEquals(sst.getSignalStrength(), ss); 3410b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength().isGsm(), true); 3420b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan 3430b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan // switch to CDMA 3440b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan doReturn(false).when(mPhone).isPhoneTypeGsm(); 3450b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan doReturn(true).when(mPhone).isPhoneTypeCdmaLte(); 3460b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan sst.updatePhoneType(); 3470b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan sst.mSS.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE); 3480b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan 3490b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.notifySignalStrength(); 3500b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan waitForMs(200); 3510b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength(), ss); 3520b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength().isGsm(), true); 3530b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan 3540b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan // notify signal strength again, but this time data RAT is not LTE 3550b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan sst.mSS.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD); 3560b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.notifySignalStrength(); 3570b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan waitForMs(200); 3580b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength(), ss); 3590b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength().isGsm(), false); 360e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu } 361e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 362cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu @Test 36344b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 364cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu public void testGsmCellLocation() { 365cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu 366cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_GET_LOC_DONE, 367cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu new AsyncResult(null, new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", 368cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu "10", "11", "12", "13", "14", "15"}, null))); 369cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu 370cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu waitForMs(200); 371cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu GsmCellLocation cl = (GsmCellLocation) sst.getCellLocation(); 372cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu assertEquals(2, cl.getLac()); 373cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu assertEquals(3, cl.getCid()); 374cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu } 375dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 376dbe4d7749d5524be575f629486874acdae721138Amit Mahajan @Test 377dbe4d7749d5524be575f629486874acdae721138Amit Mahajan @MediumTest 378dbe4d7749d5524be575f629486874acdae721138Amit Mahajan public void testUpdatePhoneType() { 379dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(false).when(mPhone).isPhoneTypeGsm(); 380dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(true).when(mPhone).isPhoneTypeCdmaLte(); 381dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM).when(mCdmaSSM). 382dbe4d7749d5524be575f629486874acdae721138Amit Mahajan getCdmaSubscriptionSource(); 383dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 384dbe4d7749d5524be575f629486874acdae721138Amit Mahajan logd("Calling updatePhoneType"); 385dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // switch to CDMA 386dbe4d7749d5524be575f629486874acdae721138Amit Mahajan sst.updatePhoneType(); 387dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 388dbe4d7749d5524be575f629486874acdae721138Amit Mahajan ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 389dbe4d7749d5524be575f629486874acdae721138Amit Mahajan verify(mRuimRecords).registerForRecordsLoaded(eq(sst), integerArgumentCaptor.capture(), 390dbe4d7749d5524be575f629486874acdae721138Amit Mahajan any(Object.class)); 391dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 392dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // response for mRuimRecords.registerForRecordsLoaded() 393dbe4d7749d5524be575f629486874acdae721138Amit Mahajan Message msg = Message.obtain(); 394dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.what = integerArgumentCaptor.getValue(); 395dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.obj = new AsyncResult(null, null, null); 396dbe4d7749d5524be575f629486874acdae721138Amit Mahajan sst.sendMessage(msg); 397dbe4d7749d5524be575f629486874acdae721138Amit Mahajan waitForMs(100); 398dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 399dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // on RUIM_RECORDS_LOADED, sst is expected to call following apis 400dbe4d7749d5524be575f629486874acdae721138Amit Mahajan verify(mRuimRecords, times(1)).isProvisioned(); 401dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 402dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // switch back to GSM 403dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(true).when(mPhone).isPhoneTypeGsm(); 404dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(false).when(mPhone).isPhoneTypeCdmaLte(); 405dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 406dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // response for mRuimRecords.registerForRecordsLoaded() can be sent after switching to GSM 407dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg = Message.obtain(); 408dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.what = integerArgumentCaptor.getValue(); 409dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.obj = new AsyncResult(null, null, null); 410dbe4d7749d5524be575f629486874acdae721138Amit Mahajan sst.sendMessage(msg); 411dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 412dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // There's no easy way to check if the msg was handled or discarded. Wait to make sure sst 413dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // did not crash, and then verify that the functions called records loaded are not called 414dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // again 415dbe4d7749d5524be575f629486874acdae721138Amit Mahajan waitForMs(200); 416dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 417dbe4d7749d5524be575f629486874acdae721138Amit Mahajan verify(mRuimRecords, times(1)).isProvisioned(); 418dbe4d7749d5524be575f629486874acdae721138Amit Mahajan } 419f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 420f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 421f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 422f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForVoiceRoamingOn() throws Exception { 423f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForVoiceRoamingOn(mTestHandler, EVENT_ROAMING_ON, null); 424f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 425f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming and trigger events to notify handler registered 426f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 427f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 428f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 429f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 430f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 431f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 432f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 433f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 434f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 435f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 436f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_ON, messageArgumentCaptor.getValue().what); 437f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 438f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 439f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 440f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 441f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 442f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 443f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 444f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 445f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 446f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForVoiceRoamingOn(mTestHandler); 447f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 448f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 449f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 450f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 451f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 452f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 453f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 454f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 455f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 456f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 457f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 458f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 459f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 460f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 461f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForVoiceRoamingOff() throws Exception { 462f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 463f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 464f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 465f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 466f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 467f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 468f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 469f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 470f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForVoiceRoamingOff(mTestHandler, EVENT_ROAMING_OFF, null); 471f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 472f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 473f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 474f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 475f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 476f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 477f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 478f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 479f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 480f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 481f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 482f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 483f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_OFF, messageArgumentCaptor.getValue().what); 484f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 485f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 486f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 487f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 488f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 489f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 490f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 491f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 492f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 493f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForVoiceRoamingOff(mTestHandler); 494f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 495f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 496f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 497f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 498f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 499f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 500f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 501f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 502f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 503f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 504f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 505f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 506f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 507f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 508f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataRoamingOn() throws Exception { 509f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataRoamingOn(mTestHandler, EVENT_ROAMING_ON, null); 510f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 511f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming and trigger events to notify handler registered 512f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 513f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 514f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 515f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 516f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 517f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 518f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 519f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 520f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 521f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 522f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_ON, messageArgumentCaptor.getValue().what); 523f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 524f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 525f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 526f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 527f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 528f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 529f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 530f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 531f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 532f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataRoamingOn(mTestHandler); 533f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 534f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 535f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 536f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 537f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 538f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 539f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 540f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 541f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 542f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 543f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 544f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 545f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 546f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 547f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataRoamingOff() throws Exception { 548f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 549f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 550f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 551f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 552f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 553f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 554f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 555f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 556f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataRoamingOff(mTestHandler, EVENT_ROAMING_OFF, null); 557f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 558f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 559f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 560f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 561f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 562f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 563f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 564f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 565f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 566f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 567f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 568f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 569f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_OFF, messageArgumentCaptor.getValue().what); 570f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 571f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 572f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 573f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 574f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 575f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 576f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 577f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 578f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 579f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataRoamingOff(mTestHandler); 580f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 581f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 582f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 583f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 584f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 585f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 586f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 587f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 588f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 589f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 590f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 591f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 592f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 593f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 594f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataConnAttach() throws Exception { 595f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Initially set service state out of service 596f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 597f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 598f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 599f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 600f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 6013e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe waitForMs(100); 6023e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe 603f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataConnectionAttached(mTestHandler, EVENT_DATA_CONNECTION_ATTACHED, null); 604f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 605f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service and trigger events to post message on handler 606f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 607f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 608f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 609f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 6102dd874066ed871c8adf50f58e4b025d525db78ebJack Yu waitForMs(200); 611f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 612f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 613f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 614f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 615f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_DATA_CONNECTION_ATTACHED, messageArgumentCaptor.getValue().what); 616f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 617f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service 618f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 619f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 620f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 621f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 622f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 623f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 624f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 625f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataConnectionAttached(mTestHandler); 626f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 627f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service 628f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 629f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 630f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 631f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 632f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 633f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 634f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 635f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 636f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 637f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 638f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 639f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 640f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataConnDetach() throws Exception { 641f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Initially set service state in service 642f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 643f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 644f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 645f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 646f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 647f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataConnectionDetached(mTestHandler, EVENT_DATA_CONNECTION_DETACHED, null); 648f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 649f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service and trigger events to post message on handler 650f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 651f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 652f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 653f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 654f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 655f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 656f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 657f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 658f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 659f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_DATA_CONNECTION_DETACHED, messageArgumentCaptor.getValue().what); 660f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 661f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service 662f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 663f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 664f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 665f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 666f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 667f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 668f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 669f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataConnectionDetached(mTestHandler); 670f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 671f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service 672f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 673f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 674f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 675f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 676f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 677f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 678f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 679f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 680f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 681f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 682f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 683f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 684f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegisterForDataRegStateOrRatChange() { 685f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe int drs = sst.mSS.RIL_REG_STATE_HOME; 686f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe int rat = sst.mSS.RIL_RADIO_TECHNOLOGY_LTE; 687f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setRilDataRadioTechnology(rat); 688f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setDataRegState(drs); 689f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataRegStateOrRatChanged(mTestHandler, EVENT_DATA_RAT_CHANGED, null); 690f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 691f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 692f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 693f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Verify if message was posted to handler and value of result 694f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 695f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 696f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_DATA_RAT_CHANGED, messageArgumentCaptor.getValue().what); 697f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(new Pair<Integer, Integer>(drs, rat), 698f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ((AsyncResult)messageArgumentCaptor.getValue().obj).result); 699f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 700f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 701f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 702f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 703f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForNetworkAttached() throws Exception { 704f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Initially set service state out of service 705f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 706f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 707f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 708f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 709f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 7103e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe waitForMs(100); 7113e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe 712f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForNetworkAttached(mTestHandler, EVENT_REGISTERED_TO_NETWORK, null); 713f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 714f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service and trigger events to post message on handler 715f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 716f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 717f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 718f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 719f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 720f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 721f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 722f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 723f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 724f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_REGISTERED_TO_NETWORK, messageArgumentCaptor.getValue().what); 725f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 726f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service 727f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 728f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 729f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 730f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 731f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 732f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 733f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 734f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForNetworkAttached(mTestHandler); 735f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 736f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service 737f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 738f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 739f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyVoiceNetworkStateChanged(); 740f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 741f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 742f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 743f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 744f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 745f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 746f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 747f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 748f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 749f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegisterForPsRestrictedEnabled() throws Exception { 750f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mRestrictedState.setPsRestricted(true); 751f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Since PsRestricted is set to true, registerForPsRestrictedEnabled will 752f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // also post message to handler 753f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForPsRestrictedEnabled(mTestHandler, EVENT_PS_RESTRICT_ENABLED, null); 754f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 755f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 756f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 757f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify posted message 758f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 759f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 760f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_PS_RESTRICT_ENABLED, messageArgumentCaptor.getValue().what); 761f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 762f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 763f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 764f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 765f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegisterForPsRestrictedDisabled() throws Exception { 766f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mRestrictedState.setPsRestricted(true); 767f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Since PsRestricted is set to true, registerForPsRestrictedDisabled will 768f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // also post message to handler 769f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForPsRestrictedDisabled(mTestHandler, EVENT_PS_RESTRICT_DISABLED, null); 770f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 771f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 772f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 773f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify posted message 774f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 775f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 776f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_PS_RESTRICT_DISABLED, messageArgumentCaptor.getValue().what); 777f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 778f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 779f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 780f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 781f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegisterForSubscriptionInfoReady() { 782f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForSubscriptionInfoReady(mTestHandler, EVENT_SUBSCRIPTION_INFO_READY, null); 783f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 784f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Call functions which would trigger posting of message on test handler 785f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeGsm(); 786f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.updatePhoneType(); 787f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyOtaProvisionStatusChanged(); 788f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 789f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(200); 790f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 791f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify posted message 792f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 793f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 794f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_SUBSCRIPTION_INFO_READY, messageArgumentCaptor.getValue().what); 795f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 796f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 797f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 798f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 799f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testGetDesiredPowerState() { 800f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.setRadioPower(true); 801f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(sst.getDesiredPowerState(), true); 802f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 803f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 804f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 805f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 806f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testEnableLocationUpdates() throws Exception { 807f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.enableLocationUpdates(); 808f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mSimulatedCommandsVerifier, times(1)).setLocationUpdates(eq(true), 8093e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe any(Message.class)); 810f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 811f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 812f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 813f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 814f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testDisableLocationUpdates() throws Exception { 815f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.disableLocationUpdates(); 816f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mSimulatedCommandsVerifier, times(1)).setLocationUpdates(eq(false), 8173e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe any(Message.class)); 818f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 819f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 820f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 821f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 822f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testGetCurrentDataRegState() throws Exception { 823f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE); 824f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(sst.getCurrentDataConnectionState(), ServiceState.STATE_OUT_OF_SERVICE); 825f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 826f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 827f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 828f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 829f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testIsConcurrentVoiceAndDataAllowed() { 830f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Verify all 3 branches in the function isConcurrentVoiceAndDataAllowed 831f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 832f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setRilVoiceRadioTechnology(sst.mSS.RIL_RADIO_TECHNOLOGY_HSPA); 833f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(true, sst.isConcurrentVoiceAndDataAllowed()); 834f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 835f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeGsm(); 836f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeCdma(); 837f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(false, sst.isConcurrentVoiceAndDataAllowed()); 838f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 839f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeGsm(); 840f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeCdma(); 841f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setCssIndicator(1); 842f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(true, sst.isConcurrentVoiceAndDataAllowed()); 843f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setCssIndicator(0); 844f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(false, sst.isConcurrentVoiceAndDataAllowed()); 845f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 846f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 847f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 848f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 849f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testIsImsRegistered() throws Exception { 850f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setImsRegistrationState(new int[]{1, PhoneConstants.PHONE_TYPE_GSM}); 851f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyImsNetworkStateChanged(); 852f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(200); 853f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(sst.isImsRegistered(), true); 854f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 855f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 856f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 857f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 858f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testIsDeviceShuttingDown() throws Exception { 859f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.requestShutdown(); 860f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(true, sst.isDeviceShuttingDown()); 861f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 862b4237f12fd73204e9775909e03d9277e59d94766fionaxu 863b4237f12fd73204e9775909e03d9277e59d94766fionaxu @Test 864b4237f12fd73204e9775909e03d9277e59d94766fionaxu @SmallTest 865b4237f12fd73204e9775909e03d9277e59d94766fionaxu public void testSetTimeFromNITZStr() throws Exception { 866b4237f12fd73204e9775909e03d9277e59d94766fionaxu doReturn(mAlarmManager).when(mIBinder).queryLocalInterface(anyString()); 867b4237f12fd73204e9775909e03d9277e59d94766fionaxu mServiceManagerMockedServices.put(Context.ALARM_SERVICE, mIBinder); 868b4237f12fd73204e9775909e03d9277e59d94766fionaxu 869b4237f12fd73204e9775909e03d9277e59d94766fionaxu // Mock sending incorrect nitz str from RIL 870b4237f12fd73204e9775909e03d9277e59d94766fionaxu mSimulatedCommands.triggerNITZupdate("38/06/20,00:00:00+0"); 871b4237f12fd73204e9775909e03d9277e59d94766fionaxu waitForMs(100); 872b4237f12fd73204e9775909e03d9277e59d94766fionaxu // AlarmManger.setTime is triggered by SystemClock.setCurrentTimeMillis(). 873b4237f12fd73204e9775909e03d9277e59d94766fionaxu // Verify system time is not set to incorrect NITZ time 874b4237f12fd73204e9775909e03d9277e59d94766fionaxu verify(mAlarmManager, times(0)).setTime(anyLong()); 875b4237f12fd73204e9775909e03d9277e59d94766fionaxu 876b4237f12fd73204e9775909e03d9277e59d94766fionaxu // Mock sending correct nitz str from RIL 877b4237f12fd73204e9775909e03d9277e59d94766fionaxu mSimulatedCommands.triggerNITZupdate("15/06/20,00:00:00+0"); 878b4237f12fd73204e9775909e03d9277e59d94766fionaxu waitForMs(100); 879b4237f12fd73204e9775909e03d9277e59d94766fionaxu verify(mAlarmManager, times(1)).setTime(anyLong()); 880b4237f12fd73204e9775909e03d9277e59d94766fionaxu } 8813374f09335e5b7681af05a35dd7454b565f8bb72Jordan Liu} 882