13a5b9323f422134b68a92c36813001ec8bed2866Jack Yu/* 23a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * Copyright (C) 2016 The Android Open Source Project 33a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * 43a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * Licensed under the Apache License, Version 2.0 (the "License"); 53a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * you may not use this file except in compliance with the License. 63a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * You may obtain a copy of the License at 73a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * 83a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * http://www.apache.org/licenses/LICENSE-2.0 93a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * 103a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * Unless required by applicable law or agreed to in writing, software 113a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * distributed under the License is distributed on an "AS IS" BASIS, 123a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * See the License for the specific language governing permissions and 143a5b9323f422134b68a92c36813001ec8bed2866Jack Yu * limitations under the License. 153a5b9323f422134b68a92c36813001ec8bed2866Jack Yu */ 163a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 17e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yupackage com.android.internal.telephony.dataconnection; 183a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 193a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport android.net.LinkProperties; 203a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport android.os.AsyncResult; 213a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport android.os.Handler; 223a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport android.os.HandlerThread; 233a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport android.test.suitebuilder.annotation.SmallTest; 243a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 25e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.DctConstants; 26e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.TelephonyTest; 273a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport com.android.internal.telephony.dataconnection.DataConnection.ConnectionParams; 283a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport com.android.internal.telephony.dataconnection.DataConnection.UpdateLinkPropertyResult; 293a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport com.android.internal.util.IState; 303a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport com.android.internal.util.StateMachine; 313a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 323a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport org.junit.After; 333a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport org.junit.Before; 343a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport org.junit.Test; 353a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport org.mockito.Mock; 363a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 373a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport java.lang.reflect.Method; 383a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport java.util.ArrayList; 393a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport java.util.HashMap; 403a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 413a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 423a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static org.junit.Assert.assertEquals; 433a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static org.junit.Assert.fail; 443a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static org.mockito.Mockito.any; 453a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static org.mockito.Mockito.doReturn; 463a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static org.mockito.Mockito.eq; 473a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static org.mockito.Mockito.times; 483a5b9323f422134b68a92c36813001ec8bed2866Jack Yuimport static org.mockito.Mockito.verify; 493a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 503a5b9323f422134b68a92c36813001ec8bed2866Jack Yupublic class DcControllerTest extends TelephonyTest { 513a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 523a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final int DATA_CONNECTION_ACTIVE_PH_LINK_DORMANT = 1; 533a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final int EVENT_DATA_STATE_CHANGED = 0x00040007; 543a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 553a5b9323f422134b68a92c36813001ec8bed2866Jack Yu @Mock 563a5b9323f422134b68a92c36813001ec8bed2866Jack Yu DataConnection mDc; 573a5b9323f422134b68a92c36813001ec8bed2866Jack Yu @Mock 583a5b9323f422134b68a92c36813001ec8bed2866Jack Yu HashMap<ApnContext, ConnectionParams> mApnContexts; 593a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 603a5b9323f422134b68a92c36813001ec8bed2866Jack Yu UpdateLinkPropertyResult mResult; 613a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 623a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private DcController mDcc; 637e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private DcControllerTestHandler mDcControllerTestHandler; 643a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 653a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private class DcControllerTestHandler extends HandlerThread { 663a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 673a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private DcControllerTestHandler(String name) { 683a5b9323f422134b68a92c36813001ec8bed2866Jack Yu super(name); 693a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 703a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 713a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private Handler mHandler; 723a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 733a5b9323f422134b68a92c36813001ec8bed2866Jack Yu @Override 743a5b9323f422134b68a92c36813001ec8bed2866Jack Yu public void onLooperPrepared() { 753a5b9323f422134b68a92c36813001ec8bed2866Jack Yu mHandler = new Handler(); 763a5b9323f422134b68a92c36813001ec8bed2866Jack Yu mDcc = DcController.makeDcc(mPhone, mDcTracker, mHandler); 773a5b9323f422134b68a92c36813001ec8bed2866Jack Yu setReady(true); 783a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 793a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 803a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 813a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private IState getCurrentState() { 823a5b9323f422134b68a92c36813001ec8bed2866Jack Yu try { 833a5b9323f422134b68a92c36813001ec8bed2866Jack Yu Method method = StateMachine.class.getDeclaredMethod("getCurrentState"); 843a5b9323f422134b68a92c36813001ec8bed2866Jack Yu method.setAccessible(true); 853a5b9323f422134b68a92c36813001ec8bed2866Jack Yu return (IState) method.invoke(mDcc); 863a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } catch (Exception e) { 873a5b9323f422134b68a92c36813001ec8bed2866Jack Yu fail(e.toString()); 883a5b9323f422134b68a92c36813001ec8bed2866Jack Yu return null; 893a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 903a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 913a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 923a5b9323f422134b68a92c36813001ec8bed2866Jack Yu @Before 933a5b9323f422134b68a92c36813001ec8bed2866Jack Yu public void setUp() throws Exception { 943a5b9323f422134b68a92c36813001ec8bed2866Jack Yu super.setUp(getClass().getSimpleName()); 953a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 963a5b9323f422134b68a92c36813001ec8bed2866Jack Yu doReturn("fake.action_detached").when(mPhone).getActionDetached(); 973a5b9323f422134b68a92c36813001ec8bed2866Jack Yu mDc.mApnContexts = mApnContexts; 983a5b9323f422134b68a92c36813001ec8bed2866Jack Yu doReturn(1).when(mApnContexts).size(); 993a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 1003a5b9323f422134b68a92c36813001ec8bed2866Jack Yu LinkProperties lp = new LinkProperties(); 1013a5b9323f422134b68a92c36813001ec8bed2866Jack Yu mResult = new UpdateLinkPropertyResult(lp); 1023a5b9323f422134b68a92c36813001ec8bed2866Jack Yu doReturn(mResult).when(mDc).updateLinkProperty(any(DataCallResponse.class)); 1033a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 1047e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcControllerTestHandler = new DcControllerTestHandler(TAG); 1057e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcControllerTestHandler.start(); 1063a5b9323f422134b68a92c36813001ec8bed2866Jack Yu waitUntilReady(); 1073a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 1083a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 1093a5b9323f422134b68a92c36813001ec8bed2866Jack Yu @After 1103a5b9323f422134b68a92c36813001ec8bed2866Jack Yu public void tearDown() throws Exception { 1117e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcControllerTestHandler.quitSafely(); 1123a5b9323f422134b68a92c36813001ec8bed2866Jack Yu super.tearDown(); 1133a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 1143a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 1153a5b9323f422134b68a92c36813001ec8bed2866Jack Yu @Test 1163a5b9323f422134b68a92c36813001ec8bed2866Jack Yu @SmallTest 1173a5b9323f422134b68a92c36813001ec8bed2866Jack Yu public void testDataDormant() { 1183a5b9323f422134b68a92c36813001ec8bed2866Jack Yu assertEquals("DccDefaultState", getCurrentState().getName()); 1193a5b9323f422134b68a92c36813001ec8bed2866Jack Yu ArrayList<DataCallResponse> l = new ArrayList<DataCallResponse>(); 1203a5b9323f422134b68a92c36813001ec8bed2866Jack Yu DataCallResponse dcResponse = DcTrackerTest.createDataCallResponse(); 1213a5b9323f422134b68a92c36813001ec8bed2866Jack Yu dcResponse.active = DATA_CONNECTION_ACTIVE_PH_LINK_DORMANT; 1223a5b9323f422134b68a92c36813001ec8bed2866Jack Yu l.add(dcResponse); 1233a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 1243a5b9323f422134b68a92c36813001ec8bed2866Jack Yu mDc.mCid = 1; 1253a5b9323f422134b68a92c36813001ec8bed2866Jack Yu mDcc.addActiveDcByCid(mDc); 1263a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 1273a5b9323f422134b68a92c36813001ec8bed2866Jack Yu mDcc.sendMessage(EVENT_DATA_STATE_CHANGED, new AsyncResult(null, l, null)); 1283a5b9323f422134b68a92c36813001ec8bed2866Jack Yu waitForMs(100); 1293a5b9323f422134b68a92c36813001ec8bed2866Jack Yu 1303a5b9323f422134b68a92c36813001ec8bed2866Jack Yu verify(mDcTracker, times(1)).sendStopNetStatPoll(eq(DctConstants.Activity.DORMANT)); 1313a5b9323f422134b68a92c36813001ec8bed2866Jack Yu } 1323a5b9323f422134b68a92c36813001ec8bed2866Jack Yu}