127b650c406018355a88a41528db7859e232728a0Jack Yu/* 227b650c406018355a88a41528db7859e232728a0Jack Yu * Copyright (C) 2016 The Android Open Source Project 327b650c406018355a88a41528db7859e232728a0Jack Yu * 427b650c406018355a88a41528db7859e232728a0Jack Yu * Licensed under the Apache License, Version 2.0 (the "License"); 527b650c406018355a88a41528db7859e232728a0Jack Yu * you may not use this file except in compliance with the License. 627b650c406018355a88a41528db7859e232728a0Jack Yu * You may obtain a copy of the License at 727b650c406018355a88a41528db7859e232728a0Jack Yu * 827b650c406018355a88a41528db7859e232728a0Jack Yu * http://www.apache.org/licenses/LICENSE-2.0 927b650c406018355a88a41528db7859e232728a0Jack Yu * 1027b650c406018355a88a41528db7859e232728a0Jack Yu * Unless required by applicable law or agreed to in writing, software 1127b650c406018355a88a41528db7859e232728a0Jack Yu * distributed under the License is distributed on an "AS IS" BASIS, 1227b650c406018355a88a41528db7859e232728a0Jack Yu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327b650c406018355a88a41528db7859e232728a0Jack Yu * See the License for the specific language governing permissions and 1427b650c406018355a88a41528db7859e232728a0Jack Yu * limitations under the License. 1527b650c406018355a88a41528db7859e232728a0Jack Yu */ 1627b650c406018355a88a41528db7859e232728a0Jack Yu 17e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yupackage com.android.internal.telephony.dataconnection; 1827b650c406018355a88a41528db7859e232728a0Jack Yu 198e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 200e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yuimport static com.android.internal.telephony.dataconnection.ApnSettingTest.createApnSetting; 218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 228e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertArrayEquals; 238e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertEquals; 248e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertFalse; 258e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertTrue; 268e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.fail; 278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.any; 288e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.anyInt; 298e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.anyLong; 308e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.anyString; 318e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.eq; 328e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.doAnswer; 338e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.doReturn; 348e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.never; 358e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.times; 368e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.verify; 378e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 3827b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.AlarmManager; 3927b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.PendingIntent; 4027b650c406018355a88a41528db7859e232728a0Jack Yuimport android.content.Context; 417d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yuimport android.content.Intent; 4227b650c406018355a88a41528db7859e232728a0Jack Yuimport android.database.Cursor; 4327b650c406018355a88a41528db7859e232728a0Jack Yuimport android.database.MatrixCursor; 4427b650c406018355a88a41528db7859e232728a0Jack Yuimport android.net.LinkProperties; 450979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yuimport android.net.NetworkCapabilities; 460979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yuimport android.net.NetworkRequest; 4727b650c406018355a88a41528db7859e232728a0Jack Yuimport android.net.Uri; 4840cd4e909fd3a8ee462475814a949e08391ff8f5fionaxuimport android.os.AsyncResult; 4927b650c406018355a88a41528db7859e232728a0Jack Yuimport android.os.HandlerThread; 50783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport android.os.IBinder; 5127b650c406018355a88a41528db7859e232728a0Jack Yuimport android.os.Message; 52783061ca03572618c01ce244d70d82fa4328d45ffionaxuimport android.os.PersistableBundle; 535fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajanimport android.provider.Settings; 5427b650c406018355a88a41528db7859e232728a0Jack Yuimport android.provider.Telephony; 55e73ef117c8f5a7ea2feaa9ba8a15ec2de4137c7dJordan Liuimport android.support.test.filters.FlakyTest; 56783061ca03572618c01ce244d70d82fa4328d45ffionaxuimport android.telephony.CarrierConfigManager; 5727b650c406018355a88a41528db7859e232728a0Jack Yuimport android.telephony.ServiceState; 584c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxuimport android.telephony.SubscriptionInfo; 594c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxuimport android.telephony.SubscriptionManager; 6027b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentProvider; 6127b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentResolver; 6227b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.suitebuilder.annotation.MediumTest; 630e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yuimport android.test.suitebuilder.annotation.SmallTest; 640979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yuimport android.util.LocalLog; 6527b650c406018355a88a41528db7859e232728a0Jack Yu 66e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.DctConstants; 67e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.ISub; 68e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.Phone; 69e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.PhoneConstants; 70e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.TelephonyTest; 7127b650c406018355a88a41528db7859e232728a0Jack Yu 7227b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.After; 7327b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Before; 74802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport org.junit.Ignore; 7527b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Test; 7627b650c406018355a88a41528db7859e232728a0Jack Yuimport org.mockito.ArgumentCaptor; 77783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport org.mockito.Mock; 784c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxuimport org.mockito.invocation.InvocationOnMock; 794c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxuimport org.mockito.stubbing.Answer; 8027b650c406018355a88a41528db7859e232728a0Jack Yu 811d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yuimport java.lang.reflect.Method; 8227b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.Arrays; 8327b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.List; 8427b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Matcher; 8527b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Pattern; 8627b650c406018355a88a41528db7859e232728a0Jack Yu 8727b650c406018355a88a41528db7859e232728a0Jack Yupublic class DcTrackerTest extends TelephonyTest { 8827b650c406018355a88a41528db7859e232728a0Jack Yu 8927b650c406018355a88a41528db7859e232728a0Jack Yu private final static String[] sNetworkAttributes = new String[]{ 9027b650c406018355a88a41528db7859e232728a0Jack Yu "mobile,0,0,0,-1,true", "mobile_mms,2,0,2,60000,true", 9127b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_supl,3,0,2,60000,true", "mobile_dun,4,0,2,60000,true", 9227b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_hipri,5,0,3,60000,true", "mobile_fota,10,0,2,60000,true", 9327b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ims,11,0,2,60000,true", "mobile_cbs,12,0,2,60000,true", 9427b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ia,14,0,2,-1,true", "mobile_emergency,15,0,2,-1,true"}; 9527b650c406018355a88a41528db7859e232728a0Jack Yu 961d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu private final static List<String> sApnTypes = Arrays.asList( 9727b650c406018355a88a41528db7859e232728a0Jack Yu "default", "mms", "cbs", "fota", "supl", "ia", "emergency", "dun", "hipri", "ims"); 98ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu private static final int LTE_BEARER_BITMASK = 1 << (ServiceState.RIL_RADIO_TECHNOLOGY_LTE - 1); 99ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu private static final int EHRPD_BEARER_BITMASK = 100ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1 << (ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD - 1); 1018e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_APN1 = "FAKE APN 1"; 1028e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_APN2 = "FAKE APN 2"; 1038e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_APN3 = "FAKE APN 3"; 104ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu public static final String FAKE_APN4 = "FAKE APN 4"; 1055fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan public static final String FAKE_APN5 = "FAKE APN 5"; 1068e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_IFNAME = "FAKE IFNAME"; 1078e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_PCSCF_ADDRESS = "22.33.44.55"; 1088e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_GATEWAY = "11.22.33.44"; 1098e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_DNS = "55.66.77.88"; 1108e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_ADDRESS = "99.88.77.66"; 11127b650c406018355a88a41528db7859e232728a0Jack Yu 112783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 113783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu ISub mIsub; 114783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 115783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu IBinder mBinder; 1160979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @Mock 1170979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu NetworkRequest mNetworkRequest; 1184c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @Mock 1194c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu SubscriptionInfo mSubscriptionInfo; 1200e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Mock 1210e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu ApnContext mApnContext; 1220e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Mock 1230e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu ApnSetting mApnSetting; 1240e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Mock 1250e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu DcAsyncChannel mDcac; 126783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 12727b650c406018355a88a41528db7859e232728a0Jack Yu private DcTracker mDct; 1287e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private DcTrackerTestHandler mDcTrackerTestHandler; 12927b650c406018355a88a41528db7859e232728a0Jack Yu 13027b650c406018355a88a41528db7859e232728a0Jack Yu private AlarmManager mAlarmManager; 13127b650c406018355a88a41528db7859e232728a0Jack Yu 132783061ca03572618c01ce244d70d82fa4328d45ffionaxu private PersistableBundle mBundle; 133783061ca03572618c01ce244d70d82fa4328d45ffionaxu 1344c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu private SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangedListener; 1354c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 13627b650c406018355a88a41528db7859e232728a0Jack Yu private final ApnSettingContentProvider mApnSettingContentProvider = 13727b650c406018355a88a41528db7859e232728a0Jack Yu new ApnSettingContentProvider(); 13827b650c406018355a88a41528db7859e232728a0Jack Yu 13927b650c406018355a88a41528db7859e232728a0Jack Yu private class DcTrackerTestHandler extends HandlerThread { 14027b650c406018355a88a41528db7859e232728a0Jack Yu 14127b650c406018355a88a41528db7859e232728a0Jack Yu private DcTrackerTestHandler(String name) { 14227b650c406018355a88a41528db7859e232728a0Jack Yu super(name); 14327b650c406018355a88a41528db7859e232728a0Jack Yu } 14427b650c406018355a88a41528db7859e232728a0Jack Yu 14527b650c406018355a88a41528db7859e232728a0Jack Yu @Override 14627b650c406018355a88a41528db7859e232728a0Jack Yu public void onLooperPrepared() { 14727b650c406018355a88a41528db7859e232728a0Jack Yu mDct = new DcTracker(mPhone); 14827b650c406018355a88a41528db7859e232728a0Jack Yu setReady(true); 14927b650c406018355a88a41528db7859e232728a0Jack Yu } 15027b650c406018355a88a41528db7859e232728a0Jack Yu } 15127b650c406018355a88a41528db7859e232728a0Jack Yu 15227b650c406018355a88a41528db7859e232728a0Jack Yu private class ApnSettingContentProvider extends MockContentProvider { 15327b650c406018355a88a41528db7859e232728a0Jack Yu 15427b650c406018355a88a41528db7859e232728a0Jack Yu @Override 15527b650c406018355a88a41528db7859e232728a0Jack Yu public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 15627b650c406018355a88a41528db7859e232728a0Jack Yu String sortOrder) { 15727b650c406018355a88a41528db7859e232728a0Jack Yu logd("ApnSettingContentProvider: query"); 15827b650c406018355a88a41528db7859e232728a0Jack Yu logd(" uri = " + uri); 15927b650c406018355a88a41528db7859e232728a0Jack Yu logd(" projection = " + Arrays.toString(projection)); 16027b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selection = " + selection); 16127b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selectionArgs = " + Arrays.toString(selectionArgs)); 16227b650c406018355a88a41528db7859e232728a0Jack Yu logd(" sortOrder = " + sortOrder); 16327b650c406018355a88a41528db7859e232728a0Jack Yu 16427b650c406018355a88a41528db7859e232728a0Jack Yu if (uri.compareTo(Telephony.Carriers.CONTENT_URI) == 0) { 16527b650c406018355a88a41528db7859e232728a0Jack Yu if (projection == null && selectionArgs == null && selection != null) { 16627b650c406018355a88a41528db7859e232728a0Jack Yu 16727b650c406018355a88a41528db7859e232728a0Jack Yu Pattern pattern = Pattern.compile("^numeric = '([0-9]*)'"); 16827b650c406018355a88a41528db7859e232728a0Jack Yu Matcher matcher = pattern.matcher(selection); 16927b650c406018355a88a41528db7859e232728a0Jack Yu if (!matcher.find()) { 17027b650c406018355a88a41528db7859e232728a0Jack Yu logd("Cannot find MCC/MNC from " + selection); 17127b650c406018355a88a41528db7859e232728a0Jack Yu return null; 17227b650c406018355a88a41528db7859e232728a0Jack Yu } 17327b650c406018355a88a41528db7859e232728a0Jack Yu 17427b650c406018355a88a41528db7859e232728a0Jack Yu String plmn = matcher.group(1); 17527b650c406018355a88a41528db7859e232728a0Jack Yu 17627b650c406018355a88a41528db7859e232728a0Jack Yu logd("Query '" + plmn + "' APN settings"); 17727b650c406018355a88a41528db7859e232728a0Jack Yu MatrixCursor mc = new MatrixCursor( 17827b650c406018355a88a41528db7859e232728a0Jack Yu new String[]{Telephony.Carriers._ID, Telephony.Carriers.NUMERIC, 17927b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.NAME, Telephony.Carriers.APN, 18027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROXY, Telephony.Carriers.PORT, 18127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSC, Telephony.Carriers.MMSPROXY, 18227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSPORT, Telephony.Carriers.USER, 18327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PASSWORD, Telephony.Carriers.AUTH_TYPE, 18427b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.TYPE, 18527b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROTOCOL, 18627b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.ROAMING_PROTOCOL, 18727b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CARRIER_ENABLED, Telephony.Carriers.BEARER, 18827b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.BEARER_BITMASK, 18927b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROFILE_ID, 19027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MODEM_COGNITIVE, 19127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS, Telephony.Carriers.WAIT_TIME, 19227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS_TIME, Telephony.Carriers.MTU, 19327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_TYPE, 19427b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_MATCH_DATA}); 19527b650c406018355a88a41528db7859e232728a0Jack Yu 19627b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 19727b650c406018355a88a41528db7859e232728a0Jack Yu 2163, // id 19827b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 19927b650c406018355a88a41528db7859e232728a0Jack Yu "sp-mode", // name 20027b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN1, // apn 20127b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 20227b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 20327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 20427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 20527b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 20627b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 20727b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 20827b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 20927b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 21027b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 21127b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 21227b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 213ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu ServiceState.RIL_RADIO_TECHNOLOGY_LTE, // bearer 21427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 21527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 21627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 21727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 21827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 21927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 22027b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 22127b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 22227b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 22327b650c406018355a88a41528db7859e232728a0Jack Yu }); 22427b650c406018355a88a41528db7859e232728a0Jack Yu 22527b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 22627b650c406018355a88a41528db7859e232728a0Jack Yu 2164, // id 22727b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 22827b650c406018355a88a41528db7859e232728a0Jack Yu "mopera U", // name 22927b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN2, // apn 23027b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 23127b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 23227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 23327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 23427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 23527b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 23627b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 23727b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 23827b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 23927b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 24027b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 24127b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 242ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu ServiceState.RIL_RADIO_TECHNOLOGY_LTE, // bearer, 24327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 24427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 24527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 24627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 24727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 24827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 24927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 25027b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 25127b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 25227b650c406018355a88a41528db7859e232728a0Jack Yu }); 25327b650c406018355a88a41528db7859e232728a0Jack Yu 25427b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 25527b650c406018355a88a41528db7859e232728a0Jack Yu 2165, // id 25627b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 25727b650c406018355a88a41528db7859e232728a0Jack Yu "b-mobile for Nexus", // name 25827b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN3, // apn 25927b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 26027b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 26127b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 26227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 26327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 26427b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 26527b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 2668e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu -1, // authtype 267783061ca03572618c01ce244d70d82fa4328d45ffionaxu "ims", // types 26827b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 26927b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 27027b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 27127b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 27227b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 27327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 27427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 27527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 27627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 27727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 27827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 27927b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 28027b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 28127b650c406018355a88a41528db7859e232728a0Jack Yu }); 28227b650c406018355a88a41528db7859e232728a0Jack Yu 283ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mc.addRow(new Object[]{ 284ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 2166, // id 285ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu plmn, // numeric 286ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "sp-mode ehrpd", // name 287ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu FAKE_APN4, // apn 288ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // proxy 289ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // port 290ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // mmsc 291ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // mmsproxy 292ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // mmsport 293ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // user 294ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // password 295ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu -1, // authtype 296ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "default,supl", // types 297ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "IP", // protocol 298ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "IP", // roaming_protocol 299ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1, // carrier_enabled 300ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD, // bearer 301ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 0, // bearer_bitmask 302ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 0, // profile_id 303ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 0, // modem_cognitive 304ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 0, // max_conns 305ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 0, // wait_time 306ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 0, // max_conns_time 307ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 0, // mtu 308ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "", // mvno_type 309ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu "" // mnvo_match_data 310ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu }); 311ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 3125fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan mc.addRow(new Object[]{ 3135fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 2166, // id 3145fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan plmn, // numeric 3155fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "b-mobile for Nexus", // name 3165fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan FAKE_APN5, // apn 3175fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // proxy 3185fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // port 3195fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // mmsc 3205fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // mmsproxy 3215fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // mmsport 3225fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // user 3235fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // password 3245fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan -1, // authtype 3255fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "dun", // types 3265fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "IP", // protocol 3275fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "IP", // roaming_protocol 3285fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 1, // carrier_enabled 3295fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // bearer 3305fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // bearer_bitmask 3315fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // profile_id 3325fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // modem_cognitive 3335fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // max_conns 3345fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // wait_time 3355fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // max_conns_time 3365fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 0, // mtu 3375fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "", // mvno_type 3385fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan "" // mnvo_match_data 3395fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan }); 34027b650c406018355a88a41528db7859e232728a0Jack Yu return mc; 34127b650c406018355a88a41528db7859e232728a0Jack Yu } 34227b650c406018355a88a41528db7859e232728a0Jack Yu } 34327b650c406018355a88a41528db7859e232728a0Jack Yu 34427b650c406018355a88a41528db7859e232728a0Jack Yu return null; 34527b650c406018355a88a41528db7859e232728a0Jack Yu } 34627b650c406018355a88a41528db7859e232728a0Jack Yu } 34727b650c406018355a88a41528db7859e232728a0Jack Yu 34827b650c406018355a88a41528db7859e232728a0Jack Yu @Before 34927b650c406018355a88a41528db7859e232728a0Jack Yu public void setUp() throws Exception { 35027b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest +Setup!"); 35127b650c406018355a88a41528db7859e232728a0Jack Yu super.setUp(getClass().getSimpleName()); 35227b650c406018355a88a41528db7859e232728a0Jack Yu 35327b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_detached").when(mPhone).getActionDetached(); 35427b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_attached").when(mPhone).getActionAttached(); 355ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState) 356ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu .getRilDataRadioTechnology(); 35727b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("44010").when(mSimRecords).getOperatorNumeric(); 35827b650c406018355a88a41528db7859e232728a0Jack Yu 35927b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array.networkAttributes, 36027b650c406018355a88a41528db7859e232728a0Jack Yu sNetworkAttributes); 36127b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array. 36227b650c406018355a88a41528db7859e232728a0Jack Yu config_mobile_tcp_buffers, new String[]{ 36327b650c406018355a88a41528db7859e232728a0Jack Yu "umts:131072,262144,1452032,4096,16384,399360", 36427b650c406018355a88a41528db7859e232728a0Jack Yu "hspa:131072,262144,2441216,4096,16384,399360", 36527b650c406018355a88a41528db7859e232728a0Jack Yu "hsupa:131072,262144,2441216,4096,16384,399360", 36627b650c406018355a88a41528db7859e232728a0Jack Yu "hsdpa:131072,262144,2441216,4096,16384,399360", 36727b650c406018355a88a41528db7859e232728a0Jack Yu "hspap:131072,262144,2441216,4096,16384,399360", 36827b650c406018355a88a41528db7859e232728a0Jack Yu "edge:16384,32768,131072,4096,16384,65536", 36927b650c406018355a88a41528db7859e232728a0Jack Yu "gprs:4096,8192,24576,4096,8192,24576", 37027b650c406018355a88a41528db7859e232728a0Jack Yu "1xrtt:16384,32768,131070,4096,16384,102400", 37127b650c406018355a88a41528db7859e232728a0Jack Yu "evdo:131072,262144,1048576,4096,16384,524288", 37227b650c406018355a88a41528db7859e232728a0Jack Yu "lte:524288,1048576,8388608,262144,524288,4194304"}); 37327b650c406018355a88a41528db7859e232728a0Jack Yu 3747d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu ((MockContentResolver) mContext.getContentResolver()).addProvider( 37527b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CONTENT_URI.getAuthority(), mApnSettingContentProvider); 37627b650c406018355a88a41528db7859e232728a0Jack Yu 37727b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSimRecords).getRecordsLoaded(); 37827b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(PhoneConstants.State.IDLE).when(mCT).getState(); 37927b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSST).getDesiredPowerState(); 380f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu doReturn(true).when(mSST).getPowerStateFromCarrier(); 3814c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu doAnswer( 3824c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu new Answer<Void>() { 3834c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @Override 3844c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu public Void answer(InvocationOnMock invocation) throws Throwable { 3854c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mOnSubscriptionsChangedListener = 3864c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu (SubscriptionManager.OnSubscriptionsChangedListener) 3874c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu invocation.getArguments()[0]; 3884c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu return null; 3894c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu } 3904c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu } 3914c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu ).when(mSubscriptionManager).addOnSubscriptionsChangedListener(any()); 3924c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt()); 39327b650c406018355a88a41528db7859e232728a0Jack Yu 394783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(1).when(mIsub).getDefaultDataSubId(); 395783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(mIsub).when(mBinder).queryLocalInterface(anyString()); 3961d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu mServiceManagerMockedServices.put("isub", mBinder); 397783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 39891abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu mContextFixture.putStringArrayResource( 39991abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu com.android.internal.R.array.config_cell_retries_per_error_code, 40091abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu new String[]{"36,2"}); 40191abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu 4027d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 403783061ca03572618c01ce244d70d82fa4328d45ffionaxu mBundle = mContextFixture.getCarrierConfigBundle(); 40427b650c406018355a88a41528db7859e232728a0Jack Yu 4050e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 4060e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 4077e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcTrackerTestHandler = new DcTrackerTestHandler(getClass().getSimpleName()); 4087e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcTrackerTestHandler.start(); 40927b650c406018355a88a41528db7859e232728a0Jack Yu waitUntilReady(); 41027b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(600); 41127b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -Setup!"); 41227b650c406018355a88a41528db7859e232728a0Jack Yu } 41327b650c406018355a88a41528db7859e232728a0Jack Yu 41427b650c406018355a88a41528db7859e232728a0Jack Yu @After 41527b650c406018355a88a41528db7859e232728a0Jack Yu public void tearDown() throws Exception { 41627b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -tearDown"); 41727b650c406018355a88a41528db7859e232728a0Jack Yu mDct.removeCallbacksAndMessages(null); 41827b650c406018355a88a41528db7859e232728a0Jack Yu mDct = null; 419ae6e8f99bdb297f906d6dcdc0a385ba27eee47fdJack Yu mDcTrackerTestHandler.quit(); 42027b650c406018355a88a41528db7859e232728a0Jack Yu super.tearDown(); 42127b650c406018355a88a41528db7859e232728a0Jack Yu } 42227b650c406018355a88a41528db7859e232728a0Jack Yu 4237d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Create a successful data response 4243a5b9323f422134b68a92c36813001ec8bed2866Jack Yu public static DataCallResponse createDataCallResponse() { 4257d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4268e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu return new DataCallResponse(0, -1, 1, 2, "IP", FAKE_IFNAME, 4278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu FAKE_ADDRESS, FAKE_DNS, FAKE_GATEWAY, FAKE_PCSCF_ADDRESS, 1440); 4288e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 4298e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 4308e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu private void verifyDataProfile(DataProfile dp, String apn, int profileId, 431ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu int supportedApnTypesBitmap, int type, int bearerBitmask) { 4328e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(profileId, dp.profileId); 4338e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(apn, dp.apn); 4348e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("IP", dp.protocol); 4358e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.authType); 4368e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.user); 4378e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.password); 438ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu assertEquals(type, dp.type); 4398e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.maxConnsTime); 4408e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.maxConns); 4418e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.waitTime); 4428e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertTrue(dp.enabled); 4438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(supportedApnTypesBitmap, dp.supportedApnTypesBitmap); 4448e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("IP", dp.roamingProtocol); 445ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu assertEquals(bearerBitmask, dp.bearerBitmap); 4468e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.mtu); 4478e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.mvnoType); 4488e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.mvnoMatchData); 4498e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertFalse(dp.modemCognitive); 4507d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu } 45127b650c406018355a88a41528db7859e232728a0Jack Yu 4527d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu private void verifyDataConnected(final String apnSetting) { 45327b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(1)).notifyDataConnection(eq(Phone.REASON_CONNECTED), 45427b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.APN_TYPE_DEFAULT)); 45527b650c406018355a88a41528db7859e232728a0Jack Yu 456bff465198e751438912fd301fbf20a8d35da1b95Jack Yu verify(mAlarmManager, times(1)).set(eq(AlarmManager.ELAPSED_REALTIME), anyLong(), 45727b650c406018355a88a41528db7859e232728a0Jack Yu any(PendingIntent.class)); 45827b650c406018355a88a41528db7859e232728a0Jack Yu 4597d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(apnSetting, mDct.getActiveApnString(PhoneConstants.APN_TYPE_DEFAULT)); 46027b650c406018355a88a41528db7859e232728a0Jack Yu assertArrayEquals(new String[]{PhoneConstants.APN_TYPE_DEFAULT}, mDct.getActiveApnTypes()); 46127b650c406018355a88a41528db7859e232728a0Jack Yu 46227b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 46327b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 46427b650c406018355a88a41528db7859e232728a0Jack Yu 46527b650c406018355a88a41528db7859e232728a0Jack Yu LinkProperties linkProperties = mDct.getLinkProperties(PhoneConstants.APN_TYPE_DEFAULT); 46627b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_IFNAME, linkProperties.getInterfaceName()); 46727b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getAddresses().size()); 46827b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_ADDRESS, linkProperties.getAddresses().get(0).getHostAddress()); 46927b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getDnsServers().size()); 47027b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_DNS, linkProperties.getDnsServers().get(0).getHostAddress()); 47127b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_GATEWAY, linkProperties.getRoutes().get(0).getGateway().getHostAddress()); 47227b650c406018355a88a41528db7859e232728a0Jack Yu } 47327b650c406018355a88a41528db7859e232728a0Jack Yu 474fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu private boolean isDataAllowed(DataConnectionReasons dataConnectionReasons) { 4751d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu try { 4763d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu Method method = DcTracker.class.getDeclaredMethod("isDataAllowed", 477fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu DataConnectionReasons.class); 4781d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu method.setAccessible(true); 479fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu return (boolean) method.invoke(mDct, dataConnectionReasons); 4801d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } catch (Exception e) { 4811d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu fail(e.toString()); 4821d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu return false; 4831d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } 4841d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } 4851d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 4867d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Test the normal data call setup scenario. 48727b650c406018355a88a41528db7859e232728a0Jack Yu @Test 48827b650c406018355a88a41528db7859e232728a0Jack Yu @MediumTest 48927b650c406018355a88a41528db7859e232728a0Jack Yu public void testDataSetup() { 49027b650c406018355a88a41528db7859e232728a0Jack Yu 4910979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.setDataEnabled(true); 4920979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 4937d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 4947d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 495fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu DataConnectionReasons dataConnectionReasons = new DataConnectionReasons(); 496fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu boolean allowed = isDataAllowed(dataConnectionReasons); 497fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu assertFalse(dataConnectionReasons.toString(), allowed); 4981d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 4997d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_RECORDS_LOADED"); 5007d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 5017d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 5027d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5037d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 5047d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 5057d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(), 5067d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 5077d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5087d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 5097d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5107d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 5117d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 5127d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 5137d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5147d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 5157d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 5167d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(), 5177d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 5187d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5197d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 5207d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5217d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 5227d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 5237d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(), 5247d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 52527b650c406018355a88a41528db7859e232728a0Jack Yu 5267d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 5277d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5287d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_ENABLE_NEW_APN"); 5297d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // APN id 0 is APN_TYPE_DEFAULT 5307d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.setEnabled(0, true); 5317d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 5327d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 533fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu dataConnectionReasons = new DataConnectionReasons(); 534fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu allowed = isDataAllowed(dataConnectionReasons); 535fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu assertTrue(dataConnectionReasons.toString(), allowed); 5361d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 537f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 5387d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 5397d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 540ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 5418e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 542ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5, 1, LTE_BEARER_BITMASK); 5437d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5447d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verifyDataConnected(FAKE_APN1); 5457d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu } 5467d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5477d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Test the scenario where the first data call setup is failed, and then retry the setup later. 5487d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu @Test 5497d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu @MediumTest 5507d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu public void testDataRetry() { 5510979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 5520979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.setDataEnabled(true); 5530979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 5547d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // LOST_CONNECTION(0x10004) is a non-permanent failure, so we'll retry data setup later. 5558e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu DataCallResponse dcResponse = new DataCallResponse(0x10004, -1, 1, 2, "IP", FAKE_IFNAME, 5568e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu FAKE_ADDRESS, FAKE_DNS, FAKE_GATEWAY, FAKE_PCSCF_ADDRESS, 1440); 5577d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Simulate RIL fails the data call setup 5587d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(false, dcResponse); 55927b650c406018355a88a41528db7859e232728a0Jack Yu 560fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu DataConnectionReasons dataConnectionReasons = new DataConnectionReasons(); 561fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu boolean allowed = isDataAllowed(dataConnectionReasons); 562fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu assertFalse(dataConnectionReasons.toString(), allowed); 5631d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 56427b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_RECORDS_LOADED"); 56527b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 56627b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 56727b650c406018355a88a41528db7859e232728a0Jack Yu 56827b650c406018355a88a41528db7859e232728a0Jack Yu ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 56927b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 57027b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(), 57127b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 57227b650c406018355a88a41528db7859e232728a0Jack Yu 57327b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 57427b650c406018355a88a41528db7859e232728a0Jack Yu 57527b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 57627b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 57727b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 57827b650c406018355a88a41528db7859e232728a0Jack Yu 57927b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 58027b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 58127b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(), 58227b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 58327b650c406018355a88a41528db7859e232728a0Jack Yu 58427b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 58527b650c406018355a88a41528db7859e232728a0Jack Yu 58627b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 58727b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 58827b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(), 58927b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 59027b650c406018355a88a41528db7859e232728a0Jack Yu 59127b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 59227b650c406018355a88a41528db7859e232728a0Jack Yu 59327b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_ENABLE_NEW_APN"); 59427b650c406018355a88a41528db7859e232728a0Jack Yu // APN id 0 is APN_TYPE_DEFAULT 59527b650c406018355a88a41528db7859e232728a0Jack Yu mDct.setEnabled(0, true); 59627b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 5977d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5983d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 599fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu dataConnectionReasons = new DataConnectionReasons(); 600fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu allowed = isDataAllowed(dataConnectionReasons); 601fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu assertTrue(dataConnectionReasons.toString(), allowed); 6021d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 603f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 6047d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 6057d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 606ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 6078e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 608ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5, 1, LTE_BEARER_BITMASK); 6097d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 6107d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Make sure we never notify connected because the data call setup is supposed to fail. 6117d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, never()).notifyDataConnection(eq(Phone.REASON_CONNECTED), 6127d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.APN_TYPE_DEFAULT)); 6137d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 6147d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify the retry manger schedule another data call setup. 6157d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mAlarmManager, times(1)).setExact(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), 6167d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu anyLong(), any(PendingIntent.class)); 6177d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 6187d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // This time we'll let RIL command succeed. 6197d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 6207d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 6217d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Simulate the timer expires. 6227d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu Intent intent = new Intent("com.android.internal.telephony.data-reconnect.default"); 6237d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.putExtra("reconnect_alarm_extra_type", PhoneConstants.APN_TYPE_DEFAULT); 6247d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 0); 6257d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 6267d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mContext.sendBroadcast(intent); 6277d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 6287d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 629f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 6307d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 6318e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 632ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 6338e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 634ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN2, 0, 5, 1, LTE_BEARER_BITMASK); 6357d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 6367d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify connected with APN2 setting. 6377d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verifyDataConnected(FAKE_APN2); 63827b650c406018355a88a41528db7859e232728a0Jack Yu } 639783061ca03572618c01ce244d70d82fa4328d45ffionaxu 640783061ca03572618c01ce244d70d82fa4328d45ffionaxu @Test 641783061ca03572618c01ce244d70d82fa4328d45ffionaxu @MediumTest 642802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @Ignore 643802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @FlakyTest 644783061ca03572618c01ce244d70d82fa4328d45ffionaxu public void testUserDisableData() throws Exception { 645783061ca03572618c01ce244d70d82fa4328d45ffionaxu //step 1: setup two DataCalls one for Metered: default, another one for Non-metered: IMS 646783061ca03572618c01ce244d70d82fa4328d45ffionaxu //set Default and MMS to be metered in the CarrierConfigManager 647783061ca03572618c01ce244d70d82fa4328d45ffionaxu boolean dataEnabled = mDct.getDataEnabled(); 648783061ca03572618c01ce244d70d82fa4328d45ffionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 649783061ca03572618c01ce244d70d82fa4328d45ffionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 650783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(5, true); 651783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(0, true); 652783061ca03572618c01ce244d70d82fa4328d45ffionaxu 653783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_RECORDS_LOADED"); 654783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 655783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 656783061ca03572618c01ce244d70d82fa4328d45ffionaxu 657783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 658783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 659783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 660783061ca03572618c01ce244d70d82fa4328d45ffionaxu 661783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_ENABLED_CMD"); 662783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(true); 663783061ca03572618c01ce244d70d82fa4328d45ffionaxu 664783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 665f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 6668e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 667ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 6688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 669ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5, 1, LTE_BEARER_BITMASK); 670783061ca03572618c01ce244d70d82fa4328d45ffionaxu 671783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_DISABLED_CMD"); 672783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(false); 673783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 674783061ca03572618c01ce244d70d82fa4328d45ffionaxu 675783061ca03572618c01ce244d70d82fa4328d45ffionaxu // expected tear down all metered DataConnections 676783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 677783061ca03572618c01ce244d70d82fa4328d45ffionaxu any(Message.class)); 678783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 679783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 680783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 681783061ca03572618c01ce244d70d82fa4328d45ffionaxu 682783061ca03572618c01ce244d70d82fa4328d45ffionaxu // reset the setting at the end of this test 683783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(dataEnabled); 684783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 685783061ca03572618c01ce244d70d82fa4328d45ffionaxu } 686783061ca03572618c01ce244d70d82fa4328d45ffionaxu 687783061ca03572618c01ce244d70d82fa4328d45ffionaxu @Test 688783061ca03572618c01ce244d70d82fa4328d45ffionaxu @MediumTest 689783061ca03572618c01ce244d70d82fa4328d45ffionaxu public void testUserDisableRoaming() throws Exception { 690783061ca03572618c01ce244d70d82fa4328d45ffionaxu //step 1: setup two DataCalls one for Metered: default, another one for Non-metered: IMS 6913d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 2: set roaming disabled, data is enabled 6923d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 3: under roaming service 6933d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 4: only tear down metered data connections. 6943d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 695783061ca03572618c01ce244d70d82fa4328d45ffionaxu //set Default and MMS to be metered in the CarrierConfigManager 6965b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu boolean roamingEnabled = mDct.getDataRoamingEnabled(); 6973d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu boolean dataEnabled = mDct.getDataEnabled(); 6983d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 6993d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 700783061ca03572618c01ce244d70d82fa4328d45ffionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 701783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(5, true); 702783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(0, true); 703783061ca03572618c01ce244d70d82fa4328d45ffionaxu 704783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_RECORDS_LOADED"); 705783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 706783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 707783061ca03572618c01ce244d70d82fa4328d45ffionaxu 708783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 709783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 710783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 711783061ca03572618c01ce244d70d82fa4328d45ffionaxu 712783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_ENABLED_CMD"); 713783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(true); 714783061ca03572618c01ce244d70d82fa4328d45ffionaxu 7158e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu waitForMs(300); 716f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 7178e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 718ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 7198e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 720ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5, 1, LTE_BEARER_BITMASK); 721783061ca03572618c01ce244d70d82fa4328d45ffionaxu 7223d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //user is in roaming 7233d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu doReturn(true).when(mServiceState).getDataRoaming(); 724783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DISABLE_ROAMING_CMD"); 72521e6af8d6197a071d025733fffeffc157d0085bcfionaxu mDct.setDataRoamingEnabledByUser(false); 726783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_ROAMING_ON)); 727783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 728783061ca03572618c01ce244d70d82fa4328d45ffionaxu 729783061ca03572618c01ce244d70d82fa4328d45ffionaxu // expected tear down all metered DataConnections 7303d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 731783061ca03572618c01ce244d70d82fa4328d45ffionaxu any(Message.class)); 7323d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 7333d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 7343d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 7353d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7363d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu // reset roaming settings / data enabled settings at end of this test 73721e6af8d6197a071d025733fffeffc157d0085bcfionaxu mDct.setDataRoamingEnabledByUser(roamingEnabled); 7383d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.setDataEnabled(dataEnabled); 7393d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 7403d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu } 7413d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7423d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu @Test 7433d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu @MediumTest 7443d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu public void testDataCallOnUserDisableRoaming() throws Exception { 7453d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 1: mock under roaming service and user disabled roaming from settings. 7463d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 2: user toggled data settings on 7473d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 3: only non-metered data call is established 7483d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7495b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu boolean roamingEnabled = mDct.getDataRoamingEnabled(); 7503d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu boolean dataEnabled = mDct.getDataEnabled(); 7510e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(true).when(mServiceState).getDataRoaming(); 7523d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7533d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //set Default and MMS to be metered in the CarrierConfigManager 7543d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 7553d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 7563d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.setEnabled(5, true); 7573d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.setEnabled(0, true); 7580e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 7590e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending DATA_ENABLED_CMD"); 7600e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.setDataEnabled(true); 7613d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7623d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu logd("Sending DISABLE_ROAMING_CMD"); 76321e6af8d6197a071d025733fffeffc157d0085bcfionaxu mDct.setDataRoamingEnabledByUser(false); 7643d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7653d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu logd("Sending EVENT_RECORDS_LOADED"); 7663d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 7673d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 7683d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7693d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 7703d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 7713d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 7723d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7733d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 774f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 7753d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 776ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 7778e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 778ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN3, 2, 64, 0, 0); 7793d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7803d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 781783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 7823d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 783ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu 784ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu // reset roaming settings / data enabled settings at end of this test 78521e6af8d6197a071d025733fffeffc157d0085bcfionaxu mDct.setDataRoamingEnabledByUser(roamingEnabled); 786ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu mDct.setDataEnabled(dataEnabled); 787ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu waitForMs(200); 788783061ca03572618c01ce244d70d82fa4328d45ffionaxu } 7890979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7900979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Test the default data switch scenario. 7910979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @Test 7920979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @MediumTest 7930979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu public void testDDSResetAutoAttach() throws Exception { 7940979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7950979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.setDataEnabled(true); 7960979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7970979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mContextFixture.putBooleanResource( 7980979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu com.android.internal.R.bool.config_auto_attach_data_on_creation, true); 7990979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8000979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 8010979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 802fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu DataConnectionReasons dataConnectionReasons = new DataConnectionReasons(); 803fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu boolean allowed = isDataAllowed(dataConnectionReasons); 804fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu assertFalse(dataConnectionReasons.toString(), allowed); 8050979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8060979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 8070979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mUiccController, times(1)).registerForIccChanged(eq(mDct), 8080979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 8090979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_ICC_CHANGED. 8100979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 8110979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(100); 8120979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8130979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mSimRecords, times(1)).registerForRecordsLoaded(eq(mDct), 8140979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 8150979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_RECORDS_LOADED. 8160979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 8170979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(100); 8180979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8190979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mSST, times(1)).registerForDataConnectionAttached(eq(mDct), 8200979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 8210979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_DATA_CONNECTION_ATTACHED"); 8220979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 8230979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(200); 8240979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 82564fbcce906012e4b429c354ba3a200a6ee410010Lorenzo Colitti NetworkRequest nr = new NetworkRequest.Builder() 82664fbcce906012e4b429c354ba3a200a6ee410010Lorenzo Colitti .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build(); 8270979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu LocalLog l = new LocalLog(100); 8280979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.requestNetwork(nr, l); 8290979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(200); 8300979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8310979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verifyDataConnected(FAKE_APN1); 8320979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8330979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu assertTrue(mDct.getAutoAttachOnCreation()); 8340979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.update(); 8350979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // The auto attach flag should be reset after update 8360979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu assertFalse(mDct.getAutoAttachOnCreation()); 8370979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8380979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mSST, times(1)).registerForDataConnectionDetached(eq(mDct), 8390979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 8400979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_DATA_CONNECTION_DETACHED 8410979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 8420979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(200); 8430979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 8440979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Data should not be allowed since auto attach flag has been reset. 845fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu dataConnectionReasons = new DataConnectionReasons(); 846fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu allowed = isDataAllowed(dataConnectionReasons); 847fe4a960eef43178ab7284e8fd470d83a3b107427Jack Yu assertFalse(dataConnectionReasons.toString(), allowed); 8480979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu } 8494c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8504c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu // Test for API carrierActionSetMeteredApnsEnabled. 85192428df50d736a3d1d0f32779a22c65fcec0efabJordan Liu @FlakyTest 852cc940f429180765b6072a071becae8117e665954Amit Mahajan @Ignore 8534c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @Test 8544c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @MediumTest 8554c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu public void testCarrierActionSetMeteredApnsEnabled() throws Exception { 8564c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 1: setup two DataCalls one for Internet and IMS 8574c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 2: set data is enabled 8584c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 3: cold sim is detected 8594c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 4: all data connection is torn down 8604c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 8614c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 8624c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8634c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu boolean dataEnabled = mDct.getDataEnabled(); 8644c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setDataEnabled(true); 8654c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8664c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setEnabled(5, true); 8674c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setEnabled(0, true); 8684c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8694c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu logd("Sending EVENT_RECORDS_LOADED"); 8704c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 8714c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(200); 8724c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8734c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 8744c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 8754c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(200); 8764c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 877f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 8788e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 879ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 8808e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 881ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5, 1, LTE_BEARER_BITMASK); 8824c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 8834c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 88440cd4e909fd3a8ee462475814a949e08391ff8f5fionaxu Message msg = mDct.obtainMessage(DctConstants.EVENT_SET_CARRIER_DATA_ENABLED); 88540cd4e909fd3a8ee462475814a949e08391ff8f5fionaxu AsyncResult.forMessage(msg).result = false; 88640cd4e909fd3a8ee462475814a949e08391ff8f5fionaxu mDct.sendMessage(msg); 8876a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu 8884c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(100); 8894c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8904c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu // Validate all metered data connections have been torn down 8914c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 8924c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu any(Message.class)); 8934c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 8944c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 8954c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8964c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu // Reset settings at the end of test 8974c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setDataEnabled(dataEnabled); 8984c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(200); 8994c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu } 9000e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9010e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu private void initApns(String targetApn, String[] canHandleTypes) { 9020e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(targetApn).when(mApnContext).getApnType(); 9030e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(true).when(mApnContext).isConnectable(); 9040e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu ApnSetting apnSetting = createApnSetting(canHandleTypes); 9050e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(apnSetting).when(mApnContext).getNextApnSetting(); 9060e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(apnSetting).when(mApnContext).getApnSetting(); 9070e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(mDcac).when(mApnContext).getDcAc(); 9080e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(true).when(mApnContext).isEnabled(); 9090e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(true).when(mApnContext).getDependencyMet(); 9100e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(true).when(mApnContext).isReady(); 9110e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(true).when(mApnContext).hasNoRestrictedRequests(eq(true)); 9120e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 9130e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9140e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu // Test the emergency APN setup. 9150e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Test 9160e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @SmallTest 9170e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu public void testTrySetupDataEmergencyApn() throws Exception { 9180e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu initApns(PhoneConstants.APN_TYPE_EMERGENCY, new String[]{PhoneConstants.APN_TYPE_ALL}); 9190e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); 9200e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9210e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9220e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 923ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), any(DataProfile.class), 9240e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu eq(false), eq(false), any(Message.class)); 9250e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 9260e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9270e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu // Test the unmetered APN setup when data is disabled. 9280e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Test 9290e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @SmallTest 9300e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu public void testTrySetupDataUnmeteredDataDisabled() throws Exception { 9310e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu initApns(PhoneConstants.APN_TYPE_FOTA, new String[]{PhoneConstants.APN_TYPE_ALL}); 9320e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.setDataEnabled(false); 9330e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9340e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 9350e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 9360e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9370e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_RECORDS_LOADED"); 9380e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 9390e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9400e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9410e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 9420e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 9430e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9440e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9450e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); 9460e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9470e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9480e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 949ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), any(DataProfile.class), 9500e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu eq(false), eq(false), any(Message.class)); 9510e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 9520e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9530e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu // Test the metered APN setup when data is disabled. 9540e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Test 9550e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @SmallTest 9560e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu public void testTrySetupMeteredDataDisabled() throws Exception { 9570e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); 9580e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.setDataEnabled(false); 9590e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9600e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 9610e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 9620e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9630e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_RECORDS_LOADED"); 9640e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 9650e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9660e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9670e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 9680e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 9690e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9700e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9710e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); 9720e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9730e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9740e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu verify(mSimulatedCommandsVerifier, times(0)).setupDataCall( 9750e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu anyInt(), any(DataProfile.class), eq(false), eq(false), any(Message.class)); 9760e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 9770e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9780e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu // Test the restricted data request when data is disabled. 9790e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Test 9800e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @SmallTest 9810e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu public void testTrySetupRestrictedDataDisabled() throws Exception { 9820e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); 9830e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(false).when(mApnContext).hasNoRestrictedRequests(eq(true)); 9840e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9850e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.setDataEnabled(false); 9860e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9870e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 9880e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 9890e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9900e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_RECORDS_LOADED"); 9910e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 9920e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9930e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9940e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 9950e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 9960e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 9970e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 9980e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); 9990e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10000e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10010e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 10020e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu anyInt(), any(DataProfile.class), eq(false), eq(false), any(Message.class)); 10030e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 10040e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10050e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu // Test the default data when data is not connectable. 10060e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Test 10070e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @SmallTest 10080e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu public void testTrySetupNotConnectable() throws Exception { 10090e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); 10100e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(false).when(mApnContext).isConnectable(); 10110e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.setDataEnabled(true); 10120e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10130e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 10140e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 10150e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10160e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_RECORDS_LOADED"); 10170e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 10180e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10190e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10200e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 10210e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 10220e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10230e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10240e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); 10250e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10260e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10270e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu verify(mSimulatedCommandsVerifier, times(0)).setupDataCall( 10280e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu anyInt(), any(DataProfile.class), eq(false), eq(false), any(Message.class)); 10290e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 10300e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10310e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu // Test the default data on IWLAN. 10320e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Test 10330e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @SmallTest 10340e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu public void testTrySetupDefaultOnIWLAN() throws Exception { 10350e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); 10360e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN).when(mServiceState) 10370e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu .getRilDataRadioTechnology(); 10380e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.setDataEnabled(true); 10390e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10400e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 10410e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 10420e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10430e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_RECORDS_LOADED"); 10440e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 10450e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10460e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10470e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 10480e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 10490e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10500e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10510e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); 10520e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10530e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10540e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu verify(mSimulatedCommandsVerifier, times(0)).setupDataCall( 10550e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu anyInt(), any(DataProfile.class), eq(false), eq(false), any(Message.class)); 10560e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 10570e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10580e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu // Test the default data when the phone is in ECBM. 10590e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @Test 10600e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu @SmallTest 10610e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu public void testTrySetupDefaultInECBM() throws Exception { 10620e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); 10630e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu doReturn(true).when(mPhone).isInEcm(); 10640e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.setDataEnabled(true); 10650e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10660e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 10670e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 10680e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10690e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_RECORDS_LOADED"); 10700e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 10710e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10720e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10730e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 10740e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 10750e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10760e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10770e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); 10780e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu waitForMs(200); 10790e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu 10800e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu verify(mSimulatedCommandsVerifier, times(0)).setupDataCall( 10810e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu anyInt(), any(DataProfile.class), eq(false), eq(false), any(Message.class)); 10820e5d8e352cb1334da6a3e6b1014307483b7a53abJack Yu } 1083ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1084ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu // Test update waiting apn list when on data rat change 1085ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu @Test 1086ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu @SmallTest 1087ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu public void testUpdateWaitingApnListOnDataRatChange() throws Exception { 1088ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD).when(mServiceState) 1089ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu .getRilDataRadioTechnology(); 1090ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 1091ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 1092ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mDct.setEnabled(0, true); 1093ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mDct.setDataEnabled(true); 1094ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); 1095ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1096ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu logd("Sending EVENT_RECORDS_LOADED"); 1097ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 1098ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu waitForMs(200); 1099ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1100ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 1101ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 1102ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu waitForMs(200); 1103ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1104ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 1105ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu // Verify if RIL command was sent properly. 1106ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verify(mSimulatedCommandsVerifier).setupDataCall( 1107ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 1108ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(false), eq(false), any(Message.class)); 1109ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN4, 0, 5, 2, EHRPD_BEARER_BITMASK); 1110ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 1111ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1112ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu //data rat change from ehrpd to lte 1113ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu logd("Sending EVENT_DATA_RAT_CHANGED"); 1114ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState) 1115ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu .getRilDataRadioTechnology(); 1116ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_RAT_CHANGED, null)); 1117ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu waitForMs(200); 1118ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1119ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu // Verify the disconnected data call due to rat change and retry manger schedule another 1120ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu // data call setup 1121ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 1122ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu any(Message.class)); 1123ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verify(mAlarmManager, times(1)).setExact(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), 1124ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu anyLong(), any(PendingIntent.class)); 1125ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1126ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu // Simulate the timer expires. 1127ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu Intent intent = new Intent("com.android.internal.telephony.data-reconnect.default"); 1128ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu intent.putExtra("reconnect_alarm_extra_type", PhoneConstants.APN_TYPE_DEFAULT); 1129ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 0); 1130ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 1131ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu mContext.sendBroadcast(intent); 1132ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu waitForMs(200); 1133ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu 1134ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu // Verify if RIL command was sent properly. 1135ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verify(mSimulatedCommandsVerifier).setupDataCall( 1136ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 1137ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu eq(false), eq(false), any(Message.class)); 1138ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5, 1, LTE_BEARER_BITMASK); 1139ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 1140ced725ec28e37e37a61bbfa56a931b7f12ab9db7fionaxu } 1141796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 11425fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan // Test for fetchDunApn() 11435fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan @Test 11445fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan @SmallTest 11455fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan public void testFetchDunApn() { 11465fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan logd("Sending EVENT_RECORDS_LOADED"); 11475fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 11485fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan waitForMs(200); 11495fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 11505fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan String dunApnString = "[ApnSettingV3]HOT mobile PC,pc.hotm,,,,,,,,,440,10,,DUN,,,true," 11515fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan + "0,,,,,,,,"; 11525fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan ApnSetting dunApnExpected = ApnSetting.fromString(dunApnString); 11535fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 11545fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan Settings.Global.putString(mContext.getContentResolver(), 11555fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan Settings.Global.TETHER_DUN_APN, dunApnString); 11565fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan // should return APN from Setting 11575fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan ApnSetting dunApn = mDct.fetchDunApn(); 11585fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan assertTrue(dunApnExpected.equals(dunApn)); 11595fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 11605fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan Settings.Global.putString(mContext.getContentResolver(), 11615fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan Settings.Global.TETHER_DUN_APN, null); 11625fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan // should return APN from db 11635fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan dunApn = mDct.fetchDunApn(); 11645fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan assertEquals(FAKE_APN5, dunApn.apn); 11655fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan } 11665fd5bb14cf73b74120041e4cc317684c5a43a67cAmit Mahajan 1167796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu // Test oos 1168796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu @Test 1169796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu @SmallTest 1170796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu public void testDataRatChangeOOS() throws Exception { 1171796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD).when(mServiceState) 1172796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu .getRilDataRadioTechnology(); 1173796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 1174796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT}); 1175796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu mDct.setEnabled(0, true); 1176796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu mDct.setDataEnabled(true); 1177796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); 1178796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 1179796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu logd("Sending EVENT_RECORDS_LOADED"); 1180796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 1181796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu waitForMs(200); 1182796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 1183796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 1184796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 1185796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu waitForMs(200); 1186796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 1187796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 1188796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu // Verify if RIL command was sent properly. 1189796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu verify(mSimulatedCommandsVerifier).setupDataCall( 1190796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu eq(mServiceState.getRilDataRadioTechnology()), dpCaptor.capture(), 1191796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu eq(false), eq(false), any(Message.class)); 1192796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu verifyDataProfile(dpCaptor.getValue(), FAKE_APN4, 0, 5, 2, EHRPD_BEARER_BITMASK); 1193796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 1194796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 1195796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu // Data rat change from ehrpd to unknown due to OOS 1196796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu logd("Sending EVENT_DATA_RAT_CHANGED"); 1197796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN).when(mServiceState) 1198796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu .getRilDataRadioTechnology(); 1199796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_RAT_CHANGED, null)); 1200796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu waitForMs(200); 1201796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 1202796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu // Verify data connection is on 1203796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu verify(mSimulatedCommandsVerifier, times(0)).deactivateDataCall(anyInt(), anyInt(), 1204796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu any(Message.class)); 1205796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 1206796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu // Data rat resume from unknown to ehrpd 1207796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu doReturn(ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD).when(mServiceState) 1208796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu .getRilDataRadioTechnology(); 1209796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_RAT_CHANGED, null)); 1210796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu waitForMs(200); 1211796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu 1212796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu // Verify the same data connection 1213796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu assertEquals(FAKE_APN4, mDct.getActiveApnString(PhoneConstants.APN_TYPE_DEFAULT)); 1214796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 1215796abd05cbdabaa0f0392e7e146265ed8b779410fionaxu } 1216783061ca03572618c01ce244d70d82fa4328d45ffionaxu} 1217