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 1937a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 2037a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu 2137a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.junit.Assert.assertEquals; 2237a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.junit.Assert.assertFalse; 2337a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.junit.Assert.assertTrue; 2437a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Matchers.any; 2537a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Matchers.anyLong; 2637a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Matchers.anyString; 27b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajanimport static org.mockito.Matchers.nullable; 2837a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Mockito.anyInt; 2937a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Mockito.doReturn; 3037a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Mockito.eq; 3137a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Mockito.spy; 3237a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Mockito.times; 3337a3e51d244774ba156a88cf101432b62c8a42a3Jack Yuimport static org.mockito.Mockito.verify; 3437a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu 35b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport android.app.IAlarmManager; 36b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport android.content.Context; 3759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.content.Intent; 3849c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yuimport android.hardware.radio.V1_0.CellIdentityGsm; 3949c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yuimport android.hardware.radio.V1_0.CellInfoType; 4049c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yuimport android.hardware.radio.V1_0.VoiceRegStateResult; 4162f7e2b54fb3ad9f1139ceaf3b15966c000a9135Jack Yuimport android.os.AsyncResult; 4259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.os.Bundle; 43dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport android.os.Handler; 44b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yuimport android.os.HandlerThread; 45dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport android.os.Message; 46e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.os.Parcel; 478e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindranimport android.os.Process; 4859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yuimport android.os.UserHandle; 498e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindranimport android.os.WorkSource; 50e73ef117c8f5a7ea2feaa9ba8a15ec2de4137c7dJordan Liuimport android.support.test.filters.FlakyTest; 51e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.telephony.CellInfo; 52e2507b53266017e219a079f514801fe72ee90229Jack Yuimport android.telephony.CellInfoGsm; 5366fb0378fd913dfe564c8e31b5ef379592242615Jack Yuimport android.telephony.ServiceState; 54e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yuimport android.telephony.SignalStrength; 55ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yuimport android.telephony.SubscriptionManager; 56cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yuimport android.telephony.gsm.GsmCellLocation; 5744b9d5b470fb45c0f59073f56cb48a2501996259Jack Yuimport android.test.suitebuilder.annotation.MediumTest; 58f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padaweimport android.test.suitebuilder.annotation.SmallTest; 59f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padaweimport android.util.Pair; 600a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 61dbe4d7749d5524be575f629486874acdae721138Amit Mahajanimport com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; 62b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yuimport com.android.internal.telephony.dataconnection.DcTracker; 630a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport com.android.internal.telephony.test.SimulatedCommands; 646a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yuimport com.android.internal.telephony.uicc.IccCardApplicationStatus; 650a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 66b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.junit.After; 67b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.junit.Before; 68b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.junit.Test; 69b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.mockito.ArgumentCaptor; 70b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport org.mockito.Mock; 71b4237f12fd73204e9775909e03d9277e59d94766fionaxu 72b4237f12fd73204e9775909e03d9277e59d94766fionaxuimport java.util.ArrayList; 7349c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yuimport java.util.List; 74e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 75f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajanpublic class ServiceStateTrackerTest extends TelephonyTest { 7662f7e2b54fb3ad9f1139ceaf3b15966c000a9135Jack Yu 770a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @Mock 78b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu private DcTracker mDct; 79ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu @Mock 80ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu private ProxyController mProxyController; 81f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Mock 82f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private Handler mTestHandler; 83b4237f12fd73204e9775909e03d9277e59d94766fionaxu @Mock 84b4237f12fd73204e9775909e03d9277e59d94766fionaxu protected IAlarmManager mAlarmManager; 850a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 860a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan private ServiceStateTracker sst; 87dbe4d7749d5524be575f629486874acdae721138Amit Mahajan private ServiceStateTrackerTestHandler mSSTTestHandler; 880a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 89f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_REGISTERED_TO_NETWORK = 1; 90f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_SUBSCRIPTION_INFO_READY = 2; 91f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_ROAMING_ON = 3; 92f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_ROAMING_OFF = 4; 93f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_DATA_CONNECTION_ATTACHED = 5; 94f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_DATA_CONNECTION_DETACHED = 6; 95f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_DATA_RAT_CHANGED = 7; 96f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_PS_RESTRICT_ENABLED = 8; 97f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe private static final int EVENT_PS_RESTRICT_DISABLED = 9; 98f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 99b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu private class ServiceStateTrackerTestHandler extends HandlerThread { 100b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 101b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu private ServiceStateTrackerTestHandler(String name) { 102b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu super(name); 103b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu } 104b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 105b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu @Override 106b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu public void onLooperPrepared() { 107e2507b53266017e219a079f514801fe72ee90229Jack Yu sst = new ServiceStateTracker(mPhone, mSimulatedCommands); 108f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan setReady(true); 109b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu } 110b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu } 111b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 1120a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @Before 1130a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void setUp() throws Exception { 114b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 115b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu logd("ServiceStateTrackerTest +Setup!"); 116f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan super.setUp("ServiceStateTrackerTest"); 1170a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 118ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu doReturn(true).when(mDct).isDisconnected(); 119b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu mPhone.mDcTracker = mDct; 1200a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1219c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(ProxyController.class, "sProxyController", null, mProxyController); 122ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu 12359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu mContextFixture.putStringArrayResource( 124b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu com.android.internal.R.array.config_sameNamedOperatorConsideredRoaming, 125b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu new String[]{"123456"}); 126b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 12759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu mContextFixture.putStringArrayResource( 128b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu com.android.internal.R.array.config_operatorConsideredNonRoaming, 129b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu new String[]{"123456"}); 130b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu 13166fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 13266fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA); 13366fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 13466fb0378fd913dfe564c8e31b5ef379592242615Jack Yu mSimulatedCommands.setDataRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA); 13566fb0378fd913dfe564c8e31b5ef379592242615Jack Yu 13638ca51d0f643405df51e78fce6c546424e9f410dShishir Agrawal int dds = SubscriptionManager.getDefaultDataSubscriptionId(); 13759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu doReturn(dds).when(mPhone).getSubId(); 13859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 139dbe4d7749d5524be575f629486874acdae721138Amit Mahajan mSSTTestHandler = new ServiceStateTrackerTestHandler(getClass().getSimpleName()); 140dbe4d7749d5524be575f629486874acdae721138Amit Mahajan mSSTTestHandler.start(); 1415d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan waitUntilReady(); 14244b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu waitForMs(600); 143b6514b21f3d8ed47a088b741a18fe0b1de2308eaJack Yu logd("ServiceStateTrackerTest -Setup!"); 1440a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1450a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1460a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @After 1470a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void tearDown() throws Exception { 1480a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan sst = null; 149ae6e8f99bdb297f906d6dcdc0a385ba27eee47fdJack Yu mSSTTestHandler.quit(); 150f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan super.tearDown(); 1510a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1520a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1536a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu @Test 15444b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 1550a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void testSetRadioPower() { 156e2507b53266017e219a079f514801fe72ee90229Jack Yu boolean oldState = mSimulatedCommands.getRadioState().isOn(); 1570a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan sst.setRadioPower(!oldState); 158ddc28e1e7dd574c22f19c5b1b251aa4c7ea74fd7Jack Yu waitForMs(100); 159e2507b53266017e219a079f514801fe72ee90229Jack Yu assertTrue(oldState != mSimulatedCommands.getRadioState().isOn()); 1600d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu } 1610d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1620d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu @Test 1630d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu @MediumTest 1640d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu public void testSetRadioPowerFromCarrier() { 1650d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // Carrier disable radio power 1660d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPowerFromCarrier(false); 1670d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1680d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(mSimulatedCommands.getRadioState().isOn()); 1690d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getDesiredPowerState()); 1700d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(sst.getPowerStateFromCarrier()); 1710d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1720d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // User toggle radio power will not overrides carrier settings 1730d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPower(true); 1740d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1750d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(mSimulatedCommands.getRadioState().isOn()); 1760d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getDesiredPowerState()); 1770d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(sst.getPowerStateFromCarrier()); 1780d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1790d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // Carrier re-enable radio power 1800d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPowerFromCarrier(true); 1810d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1820d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(mSimulatedCommands.getRadioState().isOn()); 1830d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getDesiredPowerState()); 1840d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getPowerStateFromCarrier()); 1850d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu 1860d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu // User toggle radio power off (airplane mode) and set carrier on 1870d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPower(false); 1880d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu sst.setRadioPowerFromCarrier(true); 1890d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu waitForMs(100); 1900d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(mSimulatedCommands.getRadioState().isOn()); 1910d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertFalse(sst.getDesiredPowerState()); 1920d5e6cc0fdfb839d63abe1e7eb85eee1b5942108fionaxu assertTrue(sst.getPowerStateFromCarrier()); 1930a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1940a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1956a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu @Test 19644b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 1977e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan public void testRilTrafficAfterSetRadioPower() { 1987d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt sst.setRadioPower(true); 1997d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getOperatorCallCount = mSimulatedCommands.getGetOperatorCallCount(); 2007d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getDataRegistrationStateCallCount = 2017d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetDataRegistrationStateCallCount(); 2027d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getVoiceRegistrationStateCallCount = 2037d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetVoiceRegistrationStateCallCount(); 2047d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt final int getNetworkSelectionModeCallCount = 2057d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetNetworkSelectionModeCallCount(); 2067d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt sst.setRadioPower(false); 2077d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt 2087d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt waitForMs(500); 2097d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt sst.pollState(); 2107d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt waitForMs(250); 2117d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt 2127e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan // This test was meant to be for *no* ril traffic. However, RADIO_STATE_CHANGED is 2137e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan // considered a modem triggered action and that causes a pollState() to be done 2147e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getOperatorCallCount + 1, mSimulatedCommands.getGetOperatorCallCount()); 2157e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getDataRegistrationStateCallCount + 1, 2167d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetDataRegistrationStateCallCount()); 2177e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getVoiceRegistrationStateCallCount + 1, 2187d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetVoiceRegistrationStateCallCount()); 2197e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getNetworkSelectionModeCallCount + 1, 2207d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt mSimulatedCommands.getGetNetworkSelectionModeCallCount()); 221b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt 222b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt // Note that if the poll is triggered by a network change notification 223b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt // and the modem is supposed to be off, we should still do the poll 22437a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 225b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt waitForMs(250); 226b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt 2277e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getOperatorCallCount + 2 , mSimulatedCommands.getGetOperatorCallCount()); 2287e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getDataRegistrationStateCallCount + 2, 229b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt mSimulatedCommands.getGetDataRegistrationStateCallCount()); 2307e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getVoiceRegistrationStateCallCount + 2, 231b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt mSimulatedCommands.getGetVoiceRegistrationStateCallCount()); 2327e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan assertEquals(getNetworkSelectionModeCallCount + 2, 233b9e8a7d21c671240b387bb6b8e8314aa710c0d57Robert Greenwalt mSimulatedCommands.getGetNetworkSelectionModeCallCount()); 2347d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt } 2357d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt 236516010d13181808ca8205316a419b615e5a9fe5eShuoq @FlakyTest 2377d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt @Test 2387d592679b92a2fb35514193f2f95cd0138035050Robert Greenwalt @MediumTest 23959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu public void testSpnUpdateShowPlmnOnly() { 24059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu doReturn(0x02).when(mSimRecords).getDisplayRule(anyString()); 241153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN). 242153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan when(mUiccCardApplication3gpp).getState(); 24359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 24459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_NETWORK_STATE_CHANGED, null)); 24559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 24644b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu waitForMs(750); 24759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 24859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); 24949c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu verify(mContextFixture.getTestDouble(), times(3)) 25049c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu .sendStickyBroadcastAsUser(intentArgumentCaptor.capture(), eq(UserHandle.ALL)); 25159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 25259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu // We only want to verify the intent SPN_STRINGS_UPDATED_ACTION. 25349c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu List<Intent> intents = intentArgumentCaptor.getAllValues(); 25449c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu logd("Total " + intents.size() + " intents"); 25549c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu for (Intent intent : intents) { 25649c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu logd(" " + intent.getAction()); 25749c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu } 25849c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu Intent intent = intents.get(2); 25959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION, intent.getAction()); 26059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 26159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu Bundle b = intent.getExtras(); 26259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 26359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu // For boolean we need to make sure the key exists first 26459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertTrue(b.containsKey(TelephonyIntents.EXTRA_SHOW_SPN)); 26559d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertFalse(b.getBoolean(TelephonyIntents.EXTRA_SHOW_SPN)); 26659d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 26759d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(null, b.getString(TelephonyIntents.EXTRA_SPN)); 26859d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(null, b.getString(TelephonyIntents.EXTRA_DATA_SPN)); 26959d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 27059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu // For boolean we need to make sure the key exists first 27159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertTrue(b.containsKey(TelephonyIntents.EXTRA_SHOW_PLMN)); 27259d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertTrue(b.getBoolean(TelephonyIntents.EXTRA_SHOW_PLMN)); 27359d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 27459d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu assertEquals(SimulatedCommands.FAKE_LONG_NAME, b.getString(TelephonyIntents.EXTRA_PLMN)); 27566fb0378fd913dfe564c8e31b5ef379592242615Jack Yu 27666fb0378fd913dfe564c8e31b5ef379592242615Jack Yu ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 27766fb0378fd913dfe564c8e31b5ef379592242615Jack Yu verify(mTelephonyManager).setDataNetworkTypeForPhone(anyInt(), intArgumentCaptor.capture()); 27866fb0378fd913dfe564c8e31b5ef379592242615Jack Yu assertEquals(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA, 27966fb0378fd913dfe564c8e31b5ef379592242615Jack Yu intArgumentCaptor.getValue().intValue()); 28059d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu } 28159d1e823d9aa8bc80ec6fd552fd85384bdfa75cdJack Yu 2826a787228dd7f63fbf035a49a3fc6eb784d6e4dc8Jack Yu @Test 28344b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 284e2507b53266017e219a079f514801fe72ee90229Jack Yu public void testCellInfoList() { 285e2507b53266017e219a079f514801fe72ee90229Jack Yu Parcel p = Parcel.obtain(); 286e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(1); 287e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(1); 288e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(2); 289e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeLong(1453510289108L); 290e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(310); 291e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(260); 292e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(123); 293e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(456); 294e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(99); 295e2507b53266017e219a079f514801fe72ee90229Jack Yu p.writeInt(3); 296e2507b53266017e219a079f514801fe72ee90229Jack Yu p.setDataPosition(0); 297e2507b53266017e219a079f514801fe72ee90229Jack Yu 298e2507b53266017e219a079f514801fe72ee90229Jack Yu CellInfoGsm cellInfo = CellInfoGsm.CREATOR.createFromParcel(p); 299e2507b53266017e219a079f514801fe72ee90229Jack Yu 300e2507b53266017e219a079f514801fe72ee90229Jack Yu ArrayList<CellInfo> list = new ArrayList(); 301e2507b53266017e219a079f514801fe72ee90229Jack Yu list.add(cellInfo); 302e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu mSimulatedCommands.setCellInfoList(list); 303e2507b53266017e219a079f514801fe72ee90229Jack Yu 3048e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran WorkSource workSource = new WorkSource(Process.myUid(), 3058e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran mContext.getPackageName()); 3068e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran assertEquals(sst.getAllCellInfo(workSource), list); 307e2507b53266017e219a079f514801fe72ee90229Jack Yu } 308e2507b53266017e219a079f514801fe72ee90229Jack Yu 309e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu @Test 31044b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 311e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu public void testImsRegState() { 312e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu // Simulate IMS registered 3137e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mSimulatedCommands.setImsRegistrationState(new int[]{1, PhoneConstants.PHONE_TYPE_GSM}); 314e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 315e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_IMS_STATE_CHANGED, null)); 316e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu waitForMs(200); 317e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 318e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu assertTrue(sst.isImsRegistered()); 319e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 320e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu // Simulate IMS unregistered 3217e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mSimulatedCommands.setImsRegistrationState(new int[]{0, PhoneConstants.PHONE_TYPE_GSM}); 322e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 323e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_IMS_STATE_CHANGED, null)); 324e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu waitForMs(200); 325e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 326e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu assertFalse(sst.isImsRegistered()); 327e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu } 328e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 329e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu @Test 33044b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 331e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu public void testSignalStrength() { 332e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength ss = new SignalStrength( 333e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 30, // gsmSignalStrength 334e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 0, // gsmBitErrorRate 335e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // cdmaDbm 336e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // cdmaEcio 337e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // evdoDbm 338e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // evdoEcio 339e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu -1, // evdoSnr 340e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 99, // lteSignalStrength 341e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteRsrp 342e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteRsrq 343e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteRssnr 344e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // lteCqi 345e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu SignalStrength.INVALID, // tdScdmaRscp 346e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu true // gsmFlag 347e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu ); 348e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 3490b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.setSignalStrength(ss); 3500b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.notifySignalStrength(); 35148a5ba5d3cc80ffaaa82caed6f2344166da99c08Jack Yu waitForMs(300); 352e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu assertEquals(sst.getSignalStrength(), ss); 3530b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength().isGsm(), true); 3540b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan 3550b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan // switch to CDMA 3560b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan doReturn(false).when(mPhone).isPhoneTypeGsm(); 3570b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan doReturn(true).when(mPhone).isPhoneTypeCdmaLte(); 3580b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan sst.updatePhoneType(); 3590b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan sst.mSS.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE); 3600b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan 3610b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.notifySignalStrength(); 362d39e96c42430661190208747b02f48953cdb58c4Jack Yu waitForMs(300); 3630b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength(), ss); 3640b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength().isGsm(), true); 3650b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan 3660b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan // notify signal strength again, but this time data RAT is not LTE 367d39e96c42430661190208747b02f48953cdb58c4Jack Yu sst.mSS.setRilVoiceRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT); 3680b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan sst.mSS.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD); 3690b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan mSimulatedCommands.notifySignalStrength(); 370d39e96c42430661190208747b02f48953cdb58c4Jack Yu waitForMs(300); 3710b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength(), ss); 3720b24cf9fa32362616f3c55da9c0ec768c4bd174bAmit Mahajan assertEquals(sst.getSignalStrength().isGsm(), false); 373e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu } 374e5e0593e54a4e1009190dab5d6fd507dca0e341eJack Yu 375cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu @Test 37644b9d5b470fb45c0f59073f56cb48a2501996259Jack Yu @MediumTest 377cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu public void testGsmCellLocation() { 378cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu 37949c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu VoiceRegStateResult result = new VoiceRegStateResult(); 38049c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu result.cellIdentity.cellInfoType = CellInfoType.GSM; 38149c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu result.cellIdentity.cellIdentityGsm.add(new CellIdentityGsm()); 38249c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu result.cellIdentity.cellIdentityGsm.get(0).lac = 2; 38349c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu result.cellIdentity.cellIdentityGsm.get(0).cid = 3; 38449c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu 385cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu sst.sendMessage(sst.obtainMessage(ServiceStateTracker.EVENT_GET_LOC_DONE, 38649c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu new AsyncResult(null, result, null))); 387cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu 388cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu waitForMs(200); 38949c99113d77ca6f34f6a0c9d3e0049cddd3e754eJack Yu WorkSource workSource = new WorkSource(Process.myUid(), mContext.getPackageName()); 3908e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran GsmCellLocation cl = (GsmCellLocation) sst.getCellLocation(workSource); 391cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu assertEquals(2, cl.getLac()); 392cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu assertEquals(3, cl.getCid()); 393cde20aa353bb14806a9fe0445c51398cd3ab13c6Jack Yu } 394dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 395dbe4d7749d5524be575f629486874acdae721138Amit Mahajan @Test 396dbe4d7749d5524be575f629486874acdae721138Amit Mahajan @MediumTest 397dbe4d7749d5524be575f629486874acdae721138Amit Mahajan public void testUpdatePhoneType() { 398dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(false).when(mPhone).isPhoneTypeGsm(); 399dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(true).when(mPhone).isPhoneTypeCdmaLte(); 400dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM).when(mCdmaSSM). 401dbe4d7749d5524be575f629486874acdae721138Amit Mahajan getCdmaSubscriptionSource(); 402dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 403dbe4d7749d5524be575f629486874acdae721138Amit Mahajan logd("Calling updatePhoneType"); 404dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // switch to CDMA 405dbe4d7749d5524be575f629486874acdae721138Amit Mahajan sst.updatePhoneType(); 406dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 407dbe4d7749d5524be575f629486874acdae721138Amit Mahajan ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 408dbe4d7749d5524be575f629486874acdae721138Amit Mahajan verify(mRuimRecords).registerForRecordsLoaded(eq(sst), integerArgumentCaptor.capture(), 409b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Object.class)); 410dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 411dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // response for mRuimRecords.registerForRecordsLoaded() 412dbe4d7749d5524be575f629486874acdae721138Amit Mahajan Message msg = Message.obtain(); 413dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.what = integerArgumentCaptor.getValue(); 414dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.obj = new AsyncResult(null, null, null); 415dbe4d7749d5524be575f629486874acdae721138Amit Mahajan sst.sendMessage(msg); 416dbe4d7749d5524be575f629486874acdae721138Amit Mahajan waitForMs(100); 417dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 418dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // on RUIM_RECORDS_LOADED, sst is expected to call following apis 419dbe4d7749d5524be575f629486874acdae721138Amit Mahajan verify(mRuimRecords, times(1)).isProvisioned(); 420dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 421dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // switch back to GSM 422dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(true).when(mPhone).isPhoneTypeGsm(); 423dbe4d7749d5524be575f629486874acdae721138Amit Mahajan doReturn(false).when(mPhone).isPhoneTypeCdmaLte(); 424dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 425dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // response for mRuimRecords.registerForRecordsLoaded() can be sent after switching to GSM 426dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg = Message.obtain(); 427dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.what = integerArgumentCaptor.getValue(); 428dbe4d7749d5524be575f629486874acdae721138Amit Mahajan msg.obj = new AsyncResult(null, null, null); 429dbe4d7749d5524be575f629486874acdae721138Amit Mahajan sst.sendMessage(msg); 430dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 431dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // There's no easy way to check if the msg was handled or discarded. Wait to make sure sst 432dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // did not crash, and then verify that the functions called records loaded are not called 433dbe4d7749d5524be575f629486874acdae721138Amit Mahajan // again 434dbe4d7749d5524be575f629486874acdae721138Amit Mahajan waitForMs(200); 435dbe4d7749d5524be575f629486874acdae721138Amit Mahajan 436dbe4d7749d5524be575f629486874acdae721138Amit Mahajan verify(mRuimRecords, times(1)).isProvisioned(); 437dbe4d7749d5524be575f629486874acdae721138Amit Mahajan } 438f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 439f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 440f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 441f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForVoiceRoamingOn() throws Exception { 442f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForVoiceRoamingOn(mTestHandler, EVENT_ROAMING_ON, null); 443f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 444f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming and trigger events to notify handler registered 445f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 446f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 447f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 44837a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 449f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 45085a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 451f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 452f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 453f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 454f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 455f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_ON, messageArgumentCaptor.getValue().what); 456f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 457f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 458f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 459f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 46037a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 461f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 462f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 463f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 464f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 465f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForVoiceRoamingOn(mTestHandler); 466f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 467f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 468f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 469f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 47037a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 471f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 47285a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 473f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 474f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 475f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 476f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 477f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 478f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 479f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 480f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForVoiceRoamingOff() throws Exception { 481f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 482f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 483f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 484f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 48537a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 486f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 487f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 488f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 489f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForVoiceRoamingOff(mTestHandler, EVENT_ROAMING_OFF, null); 490f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 491f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 492f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 493f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 494f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 49537a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 496f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 49785a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 498f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 499f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 500f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 501f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 502f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_OFF, messageArgumentCaptor.getValue().what); 503f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 504f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 505f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 506f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 50737a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 508f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 509f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 510f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 511f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 512f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForVoiceRoamingOff(mTestHandler); 513f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 514f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 515f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 516f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 51737a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 518f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 519f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 520f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 521f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 522f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 523f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 524f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 525f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 526f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 527f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataRoamingOn() throws Exception { 528f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataRoamingOn(mTestHandler, EVENT_ROAMING_ON, null); 529f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 530f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming and trigger events to notify handler registered 531f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 532f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 533f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 53437a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 535f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 53685a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 537f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 538f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 539f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 540f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 541f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_ON, messageArgumentCaptor.getValue().what); 542f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 543f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 544f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 545f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 54637a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 547f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 548f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 549f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 550f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 551f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataRoamingOn(mTestHandler); 552f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 553f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 554f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 555f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 55637a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 557f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 55885a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 559f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 560f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 561f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 562f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 563f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 564f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 565f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 566f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataRoamingOff() throws Exception { 567f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 568f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 569f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 570f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 57137a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 572f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 573f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 574f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 575f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataRoamingOff(mTestHandler, EVENT_ROAMING_OFF, null); 576f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 577f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 578f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 579f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 580f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 58137a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 582f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 583f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 584f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 585f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 586f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 587f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 588f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_ROAMING_OFF, messageArgumentCaptor.getValue().what); 589f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 590f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Enable roaming 591f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 592f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 59337a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 594f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 595f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 596f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 597f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 598f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataRoamingOff(mTestHandler); 599f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 600f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Disable roaming 601f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME); 602f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_HOME); 60337a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 604f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 605f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 606f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 607f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 608f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 609f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 610f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 611f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 612f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 6139e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran public void testRegAndInvalidregForDataConnAttach() throws Exception { 6149e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // Initially set service state out of service 6159e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran doReturn(true).when(mPhone).isPhoneTypeGsm(); 6169e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(23); 6179e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(23); 6189e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 6199e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6209e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 6219e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6229e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran sst.registerForDataConnectionAttached(mTestHandler, EVENT_DATA_CONNECTION_ATTACHED, null); 6239e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6249e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // set service state in service and trigger events to post message on handler 6259e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 6269e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 6279e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 6289e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6299e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(200); 6309e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6319e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // verify if registered handler has message posted to it 6329e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 6339e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 6349e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran assertEquals(EVENT_DATA_CONNECTION_ATTACHED, messageArgumentCaptor.getValue().what); 6359e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6369e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // set service state out of service 6379e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(-1); 6389e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(-1); 6399e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 6409e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6419e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 6429e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6439e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // Unregister registrant 6449e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran sst.unregisterForDataConnectionAttached(mTestHandler); 6459e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6469e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // set service state in service 6479e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 6489e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 6499e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 6509e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6519e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 6529e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 6539e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // verify that no new message posted to handler 6549e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 6559e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran } 656b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan 6579e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran @Test 6589e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran @MediumTest 659f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataConnAttach() throws Exception { 660f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Initially set service state out of service 661f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 662f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 663f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 66437a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 665f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 6663e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe waitForMs(100); 6673e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe 668f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataConnectionAttached(mTestHandler, EVENT_DATA_CONNECTION_ATTACHED, null); 669f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 670f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service and trigger events to post message on handler 671f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 672f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 67337a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 674f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 6752dd874066ed871c8adf50f58e4b025d525db78ebJack Yu waitForMs(200); 676f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 677f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 678f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 679f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 680f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_DATA_CONNECTION_ATTACHED, messageArgumentCaptor.getValue().what); 681f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 682f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service 683f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 684f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 68537a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 686f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 687f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 688f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 689f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 690f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataConnectionAttached(mTestHandler); 691f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 692f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service 693f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 694f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 69537a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 696f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 697f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 698f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 699f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 700f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 701f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 702f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 703f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 704f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 705f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForDataConnDetach() throws Exception { 706f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Initially set service state in service 707f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 708f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 709f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 71037a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 711f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 712f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataConnectionDetached(mTestHandler, EVENT_DATA_CONNECTION_DETACHED, null); 713f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 714f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service and trigger events to post message on handler 715f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 716f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 71737a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 718f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 71985a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 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_DATA_CONNECTION_DETACHED, messageArgumentCaptor.getValue().what); 725f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 726f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service 727f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 728f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 72937a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 730f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 731f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 732f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 733f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 734f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForDataConnectionDetached(mTestHandler); 735f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 736f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service 737f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 738f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 73937a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 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 testRegisterForDataRegStateOrRatChange() { 750f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe int drs = sst.mSS.RIL_REG_STATE_HOME; 751f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe int rat = sst.mSS.RIL_RADIO_TECHNOLOGY_LTE; 752f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setRilDataRadioTechnology(rat); 753f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setDataRegState(drs); 754f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForDataRegStateOrRatChanged(mTestHandler, EVENT_DATA_RAT_CHANGED, null); 755f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 756f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 757f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 758f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Verify if message was posted to handler and value of result 759f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 760f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 761f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_DATA_RAT_CHANGED, messageArgumentCaptor.getValue().what); 762f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(new Pair<Integer, Integer>(drs, rat), 763f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ((AsyncResult)messageArgumentCaptor.getValue().obj).result); 764f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 765f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 766f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 767f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 768f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegAndUnregForNetworkAttached() throws Exception { 769f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Initially set service state out of service 770f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 771f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 772f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 77337a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 774f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 7753e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe waitForMs(100); 7763e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe 777f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForNetworkAttached(mTestHandler, EVENT_REGISTERED_TO_NETWORK, null); 778f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 779f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service and trigger events to post message on handler 780f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 781f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 78237a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 783f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 784f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 785f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 786f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify if registered handler has message posted to it 787f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 788f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 789f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_REGISTERED_TO_NETWORK, messageArgumentCaptor.getValue().what); 790f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 791f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state out of service 792f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 793f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_UNKNOWN); 79437a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 795f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 796f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 797f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 798f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Unregister registrant 799f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.unregisterForNetworkAttached(mTestHandler); 800f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 801f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // set service state in service 802f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 803f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 80437a3e51d244774ba156a88cf101432b62c8a42a3Jack Yu mSimulatedCommands.notifyNetworkStateChanged(); 805f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 806f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 807f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 808f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify that no new message posted to handler 809f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler, times(1)).sendMessageAtTime(any(Message.class), anyLong()); 810f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 811f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 812f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 813f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 8149e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran public void testRegAndInvalidRegForNetworkAttached() throws Exception { 8159e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // Initially set service state out of service 8169e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran doReturn(true).when(mPhone).isPhoneTypeGsm(); 8179e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(23); 8189e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(23); 8199e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 8209e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8219e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 8229e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8239e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran sst.registerForNetworkAttached(mTestHandler, EVENT_REGISTERED_TO_NETWORK, null); 8249e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8259e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // set service state in service and trigger events to post message on handler 8269e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 8279e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 8289e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 8299e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8309e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 8319e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8329e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // verify if registered handler has message posted to it 8339e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 8349e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 8359e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran assertEquals(EVENT_REGISTERED_TO_NETWORK, messageArgumentCaptor.getValue().what); 8369e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8379e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // set service state out of service 8389e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(-1); 8399e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(-1); 8409e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 8419e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8429e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 8439e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8449e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // Unregister registrant 8459e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran sst.unregisterForNetworkAttached(mTestHandler); 8469e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8479e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8489e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 8499e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8509e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran sst.registerForNetworkAttached(mTestHandler, EVENT_REGISTERED_TO_NETWORK, null); 8519e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8529e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // set service state in service 8539e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING); 8549e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING); 8559e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran mSimulatedCommands.notifyNetworkStateChanged(); 8569e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8579e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran waitForMs(100); 8589e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8599e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran // verify if registered handler has message posted to it 8609e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 861cef2ab5e676f7a8187e5cddaa1d2547b13f48f39Jack Yu verify(mTestHandler, times(2)).sendMessageAtTime(messageArgumentCaptor.capture(), 862cef2ab5e676f7a8187e5cddaa1d2547b13f48f39Jack Yu anyLong()); 8639e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran assertEquals(EVENT_REGISTERED_TO_NETWORK, messageArgumentCaptor.getValue().what); 8649e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran } 8659e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran 8669e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran @Test 8679e9476e236db1d3f43c73b8adb8a8a4823b747f1Sooraj Sasindran @MediumTest 868f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegisterForPsRestrictedEnabled() throws Exception { 869f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mRestrictedState.setPsRestricted(true); 870f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Since PsRestricted is set to true, registerForPsRestrictedEnabled will 871f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // also post message to handler 872f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForPsRestrictedEnabled(mTestHandler, EVENT_PS_RESTRICT_ENABLED, null); 873f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 874f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 875f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 876f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify posted message 877f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 878f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 879f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_PS_RESTRICT_ENABLED, messageArgumentCaptor.getValue().what); 880f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 881f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 882f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 883f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 884f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegisterForPsRestrictedDisabled() throws Exception { 885f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mRestrictedState.setPsRestricted(true); 886f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Since PsRestricted is set to true, registerForPsRestrictedDisabled will 887f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // also post message to handler 888f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForPsRestrictedDisabled(mTestHandler, EVENT_PS_RESTRICT_DISABLED, null); 889f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 890f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(100); 891f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 892f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify posted message 893f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 894f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 895f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_PS_RESTRICT_DISABLED, messageArgumentCaptor.getValue().what); 896f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 897f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 898f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 899f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 900ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong public void testOnRestrictedStateChanged() throws Exception { 901ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ServiceStateTracker spySst = spy(sst); 902ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong doReturn(true).when(mPhone).isPhoneTypeGsm(); 903ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong doReturn(IccCardApplicationStatus.AppState.APPSTATE_READY).when( 904ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong mUiccCardApplication3gpp).getState(); 905a18eb87506359758fb67899525d0737d98923b8dSanket Padawe 906a18eb87506359758fb67899525d0737d98923b8dSanket Padawe ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 907a18eb87506359758fb67899525d0737d98923b8dSanket Padawe verify(mSimulatedCommandsVerifier).setOnRestrictedStateChanged(any(Handler.class), 908a18eb87506359758fb67899525d0737d98923b8dSanket Padawe intArgumentCaptor.capture(), eq(null)); 909a18eb87506359758fb67899525d0737d98923b8dSanket Padawe // Since spy() creates a copy of sst object we need to call 910a18eb87506359758fb67899525d0737d98923b8dSanket Padawe // setOnRestrictedStateChanged() explicitly. 911a18eb87506359758fb67899525d0737d98923b8dSanket Padawe mSimulatedCommands.setOnRestrictedStateChanged(spySst, 912a18eb87506359758fb67899525d0737d98923b8dSanket Padawe intArgumentCaptor.getValue().intValue(), null); 913ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong 914ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // Combination of restricted state and expected notification type. 915ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong final int CS_ALL[] = {RILConstants.RIL_RESTRICTED_STATE_CS_ALL, 916ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ServiceStateTracker.CS_ENABLED}; 917ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong final int CS_NOR[] = {RILConstants.RIL_RESTRICTED_STATE_CS_NORMAL, 918ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ServiceStateTracker.CS_NORMAL_ENABLED}; 919ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong final int CS_EME[] = {RILConstants.RIL_RESTRICTED_STATE_CS_EMERGENCY, 920ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ServiceStateTracker.CS_EMERGENCY_ENABLED}; 921ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong final int CS_NON[] = {RILConstants.RIL_RESTRICTED_STATE_NONE, 922ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ServiceStateTracker.CS_DISABLED}; 923ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong final int PS_ALL[] = {RILConstants.RIL_RESTRICTED_STATE_PS_ALL, 924ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ServiceStateTracker.PS_ENABLED}; 925ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong final int PS_NON[] = {RILConstants.RIL_RESTRICTED_STATE_NONE, 926ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ServiceStateTracker.PS_DISABLED}; 927ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong 928ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong int notifyCount = 0; 929ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs not restricted -> cs emergency/normal restricted 930ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_ALL); 931ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs emergency/normal restricted -> cs normal restricted 932ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_NOR); 933ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs normal restricted -> cs emergency restricted 934ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_EME); 935ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs emergency restricted -> cs not restricted 936ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_NON); 937ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs not restricted -> cs normal restricted 938ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_NOR); 939ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs normal restricted -> cs emergency/normal restricted 940ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_ALL); 941ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs emergency/normal restricted -> cs emergency restricted 942ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_EME); 943ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs emergency restricted -> cs emergency/normal restricted 944ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_ALL); 945ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs emergency/normal restricted -> cs not restricted 946ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_NON); 947ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs not restricted -> cs emergency restricted 948ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_EME); 949ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs emergency restricted -> cs normal restricted 950ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_NOR); 951ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // cs normal restricted -> cs not restricted 952ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, CS_NON); 953ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong 954ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // ps not restricted -> ps restricted 955ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, PS_ALL); 956ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong // ps restricted -> ps not restricted 957ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong internalCheckForRestrictedStateChange(spySst, ++notifyCount, PS_NON); 958ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong } 959ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong 960ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong private void internalCheckForRestrictedStateChange(ServiceStateTracker serviceStateTracker, 961ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong int times, int[] restrictedState) { 962ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong mSimulatedCommands.triggerRestrictedStateChanged(restrictedState[0]); 963ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong waitForMs(100); 964ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 965ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong verify(serviceStateTracker, times(times)).setNotification(intArgumentCaptor.capture()); 966ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong assertEquals(intArgumentCaptor.getValue().intValue(), restrictedState[1]); 967ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong } 968ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong 969ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong @Test 970ed5af31ed3ace33d69ff77767daad816ef989c11Wenting Xiong @MediumTest 971f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testRegisterForSubscriptionInfoReady() { 972f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.registerForSubscriptionInfoReady(mTestHandler, EVENT_SUBSCRIPTION_INFO_READY, null); 973f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 974f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Call functions which would trigger posting of message on test handler 975f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeGsm(); 976f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.updatePhoneType(); 977f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyOtaProvisionStatusChanged(); 978f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 979f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(200); 980f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 981f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // verify posted message 982f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 983f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong()); 984f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(EVENT_SUBSCRIPTION_INFO_READY, messageArgumentCaptor.getValue().what); 985f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 986f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 987f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 988f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 989f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testGetDesiredPowerState() { 990f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.setRadioPower(true); 991f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(sst.getDesiredPowerState(), true); 992f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 993f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 994f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 995f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 996f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testEnableLocationUpdates() throws Exception { 997f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.enableLocationUpdates(); 998f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mSimulatedCommandsVerifier, times(1)).setLocationUpdates(eq(true), 9993e17ed857f92e8e4bce2c7f72c160285963bbb45Sanket Padawe any(Message.class)); 1000f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 1001f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 1002f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 1003f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 1004f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testDisableLocationUpdates() throws Exception { 1005f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.disableLocationUpdates(); 1006f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe verify(mSimulatedCommandsVerifier, times(1)).setLocationUpdates(eq(false), 1007b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Message.class)); 1008f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 1009f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 1010f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 1011f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 1012f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testGetCurrentDataRegState() throws Exception { 1013f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE); 1014f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(sst.getCurrentDataConnectionState(), ServiceState.STATE_OUT_OF_SERVICE); 1015f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 1016f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 1017f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 1018f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 1019f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testIsConcurrentVoiceAndDataAllowed() { 1020f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe // Verify all 3 branches in the function isConcurrentVoiceAndDataAllowed 1021f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeGsm(); 1022f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setRilVoiceRadioTechnology(sst.mSS.RIL_RADIO_TECHNOLOGY_HSPA); 1023f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(true, sst.isConcurrentVoiceAndDataAllowed()); 1024f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 1025f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeGsm(); 1026f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(true).when(mPhone).isPhoneTypeCdma(); 1027f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(false, sst.isConcurrentVoiceAndDataAllowed()); 1028f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 1029f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeGsm(); 1030f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe doReturn(false).when(mPhone).isPhoneTypeCdma(); 1031f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setCssIndicator(1); 1032f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(true, sst.isConcurrentVoiceAndDataAllowed()); 1033f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.mSS.setCssIndicator(0); 1034f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(false, sst.isConcurrentVoiceAndDataAllowed()); 1035f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 1036f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 1037f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 1038f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @MediumTest 1039f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testIsImsRegistered() throws Exception { 1040f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.setImsRegistrationState(new int[]{1, PhoneConstants.PHONE_TYPE_GSM}); 1041f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe mSimulatedCommands.notifyImsNetworkStateChanged(); 1042f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe waitForMs(200); 1043f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(sst.isImsRegistered(), true); 1044f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 1045f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe 1046f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @Test 1047f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe @SmallTest 1048f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe public void testIsDeviceShuttingDown() throws Exception { 1049f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe sst.requestShutdown(); 1050f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe assertEquals(true, sst.isDeviceShuttingDown()); 1051f32222bd7bf1e3e619b1451b46f7f4aa94474ba1Sanket Padawe } 1052b4237f12fd73204e9775909e03d9277e59d94766fionaxu 1053b4237f12fd73204e9775909e03d9277e59d94766fionaxu @Test 1054b4237f12fd73204e9775909e03d9277e59d94766fionaxu @SmallTest 1055b4237f12fd73204e9775909e03d9277e59d94766fionaxu public void testSetTimeFromNITZStr() throws Exception { 1056b4237f12fd73204e9775909e03d9277e59d94766fionaxu doReturn(mAlarmManager).when(mIBinder).queryLocalInterface(anyString()); 1057b4237f12fd73204e9775909e03d9277e59d94766fionaxu mServiceManagerMockedServices.put(Context.ALARM_SERVICE, mIBinder); 1058b4237f12fd73204e9775909e03d9277e59d94766fionaxu 1059b4237f12fd73204e9775909e03d9277e59d94766fionaxu // Mock sending incorrect nitz str from RIL 1060b4237f12fd73204e9775909e03d9277e59d94766fionaxu mSimulatedCommands.triggerNITZupdate("38/06/20,00:00:00+0"); 106185a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 1062b4237f12fd73204e9775909e03d9277e59d94766fionaxu // AlarmManger.setTime is triggered by SystemClock.setCurrentTimeMillis(). 1063b4237f12fd73204e9775909e03d9277e59d94766fionaxu // Verify system time is not set to incorrect NITZ time 1064b4237f12fd73204e9775909e03d9277e59d94766fionaxu verify(mAlarmManager, times(0)).setTime(anyLong()); 1065b4237f12fd73204e9775909e03d9277e59d94766fionaxu 1066b4237f12fd73204e9775909e03d9277e59d94766fionaxu // Mock sending correct nitz str from RIL 1067b4237f12fd73204e9775909e03d9277e59d94766fionaxu mSimulatedCommands.triggerNITZupdate("15/06/20,00:00:00+0"); 106885a3c169a2e5e0b793c127ece9e34dac1c00206aNaveen Kalla waitForMs(200); 1069b4237f12fd73204e9775909e03d9277e59d94766fionaxu verify(mAlarmManager, times(1)).setTime(anyLong()); 1070b4237f12fd73204e9775909e03d9277e59d94766fionaxu } 10718e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran} 1072