DcTrackerTest.java revision bff465198e751438912fd301fbf20a8d35da1b95
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; 208e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertArrayEquals; 228e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertEquals; 238e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertFalse; 248e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.assertTrue; 258e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.junit.Assert.fail; 268e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.any; 278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.anyInt; 288e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.anyLong; 298e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.anyString; 308e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Matchers.eq; 318e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.doAnswer; 328e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.doReturn; 338e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.never; 348e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.times; 358e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport static org.mockito.Mockito.verify; 368e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 3727b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.AlarmManager; 3827b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.PendingIntent; 39fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxuimport android.content.ContentResolver; 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; 53fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxuimport 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; 630979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yuimport android.util.LocalLog; 6427b650c406018355a88a41528db7859e232728a0Jack Yu 65e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.DctConstants; 66e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.ISub; 67e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.Phone; 68e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.PhoneConstants; 69e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.TelephonyTest; 70fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxuimport com.android.internal.telephony.TestApplication; 713d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxuimport com.android.internal.telephony.dataconnection.DcTracker.DataAllowFailReason; 7227b650c406018355a88a41528db7859e232728a0Jack Yu 7327b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.After; 7427b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Before; 75802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport org.junit.Ignore; 7627b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Test; 7727b650c406018355a88a41528db7859e232728a0Jack Yuimport org.mockito.ArgumentCaptor; 78783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport org.mockito.Mock; 794c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxuimport org.mockito.invocation.InvocationOnMock; 804c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxuimport org.mockito.stubbing.Answer; 8127b650c406018355a88a41528db7859e232728a0Jack Yu 821d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yuimport java.lang.reflect.Method; 8327b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.Arrays; 8427b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.List; 8527b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Matcher; 8627b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Pattern; 8727b650c406018355a88a41528db7859e232728a0Jack Yu 8827b650c406018355a88a41528db7859e232728a0Jack Yupublic class DcTrackerTest extends TelephonyTest { 8927b650c406018355a88a41528db7859e232728a0Jack Yu 9027b650c406018355a88a41528db7859e232728a0Jack Yu private final static String[] sNetworkAttributes = new String[]{ 9127b650c406018355a88a41528db7859e232728a0Jack Yu "mobile,0,0,0,-1,true", "mobile_mms,2,0,2,60000,true", 9227b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_supl,3,0,2,60000,true", "mobile_dun,4,0,2,60000,true", 9327b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_hipri,5,0,3,60000,true", "mobile_fota,10,0,2,60000,true", 9427b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ims,11,0,2,60000,true", "mobile_cbs,12,0,2,60000,true", 9527b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ia,14,0,2,-1,true", "mobile_emergency,15,0,2,-1,true"}; 9627b650c406018355a88a41528db7859e232728a0Jack Yu 971d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu private final static List<String> sApnTypes = Arrays.asList( 9827b650c406018355a88a41528db7859e232728a0Jack Yu "default", "mms", "cbs", "fota", "supl", "ia", "emergency", "dun", "hipri", "ims"); 9927b650c406018355a88a41528db7859e232728a0Jack Yu 1008e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_APN1 = "FAKE APN 1"; 1018e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_APN2 = "FAKE APN 2"; 1028e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_APN3 = "FAKE APN 3"; 1038e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_IFNAME = "FAKE IFNAME"; 1048e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_PCSCF_ADDRESS = "22.33.44.55"; 1058e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_GATEWAY = "11.22.33.44"; 1068e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_DNS = "55.66.77.88"; 1078e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public static final String FAKE_ADDRESS = "99.88.77.66"; 10827b650c406018355a88a41528db7859e232728a0Jack Yu 109783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 110783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu ISub mIsub; 111783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 112783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu IBinder mBinder; 1130979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @Mock 1140979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu NetworkRequest mNetworkRequest; 1154c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @Mock 1164c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu SubscriptionInfo mSubscriptionInfo; 117783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 11827b650c406018355a88a41528db7859e232728a0Jack Yu private DcTracker mDct; 1197e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private DcTrackerTestHandler mDcTrackerTestHandler; 12027b650c406018355a88a41528db7859e232728a0Jack Yu 12127b650c406018355a88a41528db7859e232728a0Jack Yu private AlarmManager mAlarmManager; 12227b650c406018355a88a41528db7859e232728a0Jack Yu 123783061ca03572618c01ce244d70d82fa4328d45ffionaxu private PersistableBundle mBundle; 124783061ca03572618c01ce244d70d82fa4328d45ffionaxu 1254c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu private SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangedListener; 1264c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 12727b650c406018355a88a41528db7859e232728a0Jack Yu private final ApnSettingContentProvider mApnSettingContentProvider = 12827b650c406018355a88a41528db7859e232728a0Jack Yu new ApnSettingContentProvider(); 12927b650c406018355a88a41528db7859e232728a0Jack Yu 13027b650c406018355a88a41528db7859e232728a0Jack Yu private class DcTrackerTestHandler extends HandlerThread { 13127b650c406018355a88a41528db7859e232728a0Jack Yu 13227b650c406018355a88a41528db7859e232728a0Jack Yu private DcTrackerTestHandler(String name) { 13327b650c406018355a88a41528db7859e232728a0Jack Yu super(name); 13427b650c406018355a88a41528db7859e232728a0Jack Yu } 13527b650c406018355a88a41528db7859e232728a0Jack Yu 13627b650c406018355a88a41528db7859e232728a0Jack Yu @Override 13727b650c406018355a88a41528db7859e232728a0Jack Yu public void onLooperPrepared() { 13827b650c406018355a88a41528db7859e232728a0Jack Yu mDct = new DcTracker(mPhone); 13927b650c406018355a88a41528db7859e232728a0Jack Yu setReady(true); 14027b650c406018355a88a41528db7859e232728a0Jack Yu } 14127b650c406018355a88a41528db7859e232728a0Jack Yu } 14227b650c406018355a88a41528db7859e232728a0Jack Yu 14327b650c406018355a88a41528db7859e232728a0Jack Yu private class ApnSettingContentProvider extends MockContentProvider { 14427b650c406018355a88a41528db7859e232728a0Jack Yu 14527b650c406018355a88a41528db7859e232728a0Jack Yu @Override 14627b650c406018355a88a41528db7859e232728a0Jack Yu public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 14727b650c406018355a88a41528db7859e232728a0Jack Yu String sortOrder) { 14827b650c406018355a88a41528db7859e232728a0Jack Yu logd("ApnSettingContentProvider: query"); 14927b650c406018355a88a41528db7859e232728a0Jack Yu logd(" uri = " + uri); 15027b650c406018355a88a41528db7859e232728a0Jack Yu logd(" projection = " + Arrays.toString(projection)); 15127b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selection = " + selection); 15227b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selectionArgs = " + Arrays.toString(selectionArgs)); 15327b650c406018355a88a41528db7859e232728a0Jack Yu logd(" sortOrder = " + sortOrder); 15427b650c406018355a88a41528db7859e232728a0Jack Yu 15527b650c406018355a88a41528db7859e232728a0Jack Yu if (uri.compareTo(Telephony.Carriers.CONTENT_URI) == 0) { 15627b650c406018355a88a41528db7859e232728a0Jack Yu if (projection == null && selectionArgs == null && selection != null) { 15727b650c406018355a88a41528db7859e232728a0Jack Yu 15827b650c406018355a88a41528db7859e232728a0Jack Yu Pattern pattern = Pattern.compile("^numeric = '([0-9]*)'"); 15927b650c406018355a88a41528db7859e232728a0Jack Yu Matcher matcher = pattern.matcher(selection); 16027b650c406018355a88a41528db7859e232728a0Jack Yu if (!matcher.find()) { 16127b650c406018355a88a41528db7859e232728a0Jack Yu logd("Cannot find MCC/MNC from " + selection); 16227b650c406018355a88a41528db7859e232728a0Jack Yu return null; 16327b650c406018355a88a41528db7859e232728a0Jack Yu } 16427b650c406018355a88a41528db7859e232728a0Jack Yu 16527b650c406018355a88a41528db7859e232728a0Jack Yu String plmn = matcher.group(1); 16627b650c406018355a88a41528db7859e232728a0Jack Yu 16727b650c406018355a88a41528db7859e232728a0Jack Yu logd("Query '" + plmn + "' APN settings"); 16827b650c406018355a88a41528db7859e232728a0Jack Yu MatrixCursor mc = new MatrixCursor( 16927b650c406018355a88a41528db7859e232728a0Jack Yu new String[]{Telephony.Carriers._ID, Telephony.Carriers.NUMERIC, 17027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.NAME, Telephony.Carriers.APN, 17127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROXY, Telephony.Carriers.PORT, 17227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSC, Telephony.Carriers.MMSPROXY, 17327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSPORT, Telephony.Carriers.USER, 17427b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PASSWORD, Telephony.Carriers.AUTH_TYPE, 17527b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.TYPE, 17627b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROTOCOL, 17727b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.ROAMING_PROTOCOL, 17827b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CARRIER_ENABLED, Telephony.Carriers.BEARER, 17927b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.BEARER_BITMASK, 18027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROFILE_ID, 18127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MODEM_COGNITIVE, 18227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS, Telephony.Carriers.WAIT_TIME, 18327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS_TIME, Telephony.Carriers.MTU, 18427b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_TYPE, 18527b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_MATCH_DATA}); 18627b650c406018355a88a41528db7859e232728a0Jack Yu 18727b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 18827b650c406018355a88a41528db7859e232728a0Jack Yu 2163, // id 18927b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 19027b650c406018355a88a41528db7859e232728a0Jack Yu "sp-mode", // name 19127b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN1, // apn 19227b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 19327b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 19427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 19527b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 19627b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 19727b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 19827b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 19927b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 20027b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 20127b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 20227b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 20327b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 20427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 20527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 20627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 20727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 20827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 20927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 21027b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 21127b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 21227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 21327b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 21427b650c406018355a88a41528db7859e232728a0Jack Yu }); 21527b650c406018355a88a41528db7859e232728a0Jack Yu 21627b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 21727b650c406018355a88a41528db7859e232728a0Jack Yu 2164, // id 21827b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 21927b650c406018355a88a41528db7859e232728a0Jack Yu "mopera U", // name 22027b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN2, // apn 22127b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 22227b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 22327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 22427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 22527b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 22627b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 22727b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 22827b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 22927b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 23027b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 23127b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 23227b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 23327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 23427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 23527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 23627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 23727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 23827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 23927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 24027b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 24127b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 24227b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 24327b650c406018355a88a41528db7859e232728a0Jack Yu }); 24427b650c406018355a88a41528db7859e232728a0Jack Yu 24527b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 24627b650c406018355a88a41528db7859e232728a0Jack Yu 2165, // id 24727b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 24827b650c406018355a88a41528db7859e232728a0Jack Yu "b-mobile for Nexus", // name 24927b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN3, // apn 25027b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 25127b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 25227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 25327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 25427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 25527b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 25627b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 2578e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu -1, // authtype 258783061ca03572618c01ce244d70d82fa4328d45ffionaxu "ims", // types 25927b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 26027b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 26127b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 26227b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 26327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 26427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 26527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 26627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 26727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 26827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 26927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 27027b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 27127b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 27227b650c406018355a88a41528db7859e232728a0Jack Yu }); 27327b650c406018355a88a41528db7859e232728a0Jack Yu 27427b650c406018355a88a41528db7859e232728a0Jack Yu return mc; 27527b650c406018355a88a41528db7859e232728a0Jack Yu } 27627b650c406018355a88a41528db7859e232728a0Jack Yu } 27727b650c406018355a88a41528db7859e232728a0Jack Yu 27827b650c406018355a88a41528db7859e232728a0Jack Yu return null; 27927b650c406018355a88a41528db7859e232728a0Jack Yu } 28027b650c406018355a88a41528db7859e232728a0Jack Yu } 28127b650c406018355a88a41528db7859e232728a0Jack Yu 28227b650c406018355a88a41528db7859e232728a0Jack Yu @Before 28327b650c406018355a88a41528db7859e232728a0Jack Yu public void setUp() throws Exception { 284fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxu // set the lazy cp to the real content provider in order to use the real settings 285fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxu ContentResolver realContentResolver = TestApplication.getAppContext().getContentResolver(); 286fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxu Settings.Global.getInt(realContentResolver, Settings.Global.MOBILE_DATA, 1); 287fe809fa371e9eab6d3b89fd2dad38c5f1479e6fefionaxu 28827b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest +Setup!"); 28927b650c406018355a88a41528db7859e232728a0Jack Yu super.setUp(getClass().getSimpleName()); 29027b650c406018355a88a41528db7859e232728a0Jack Yu 29127b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_detached").when(mPhone).getActionDetached(); 29227b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_attached").when(mPhone).getActionAttached(); 29327b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("44010").when(mSimRecords).getOperatorNumeric(); 29427b650c406018355a88a41528db7859e232728a0Jack Yu 29527b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array.networkAttributes, 29627b650c406018355a88a41528db7859e232728a0Jack Yu sNetworkAttributes); 29727b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array. 29827b650c406018355a88a41528db7859e232728a0Jack Yu config_mobile_tcp_buffers, new String[]{ 29927b650c406018355a88a41528db7859e232728a0Jack Yu "umts:131072,262144,1452032,4096,16384,399360", 30027b650c406018355a88a41528db7859e232728a0Jack Yu "hspa:131072,262144,2441216,4096,16384,399360", 30127b650c406018355a88a41528db7859e232728a0Jack Yu "hsupa:131072,262144,2441216,4096,16384,399360", 30227b650c406018355a88a41528db7859e232728a0Jack Yu "hsdpa:131072,262144,2441216,4096,16384,399360", 30327b650c406018355a88a41528db7859e232728a0Jack Yu "hspap:131072,262144,2441216,4096,16384,399360", 30427b650c406018355a88a41528db7859e232728a0Jack Yu "edge:16384,32768,131072,4096,16384,65536", 30527b650c406018355a88a41528db7859e232728a0Jack Yu "gprs:4096,8192,24576,4096,8192,24576", 30627b650c406018355a88a41528db7859e232728a0Jack Yu "1xrtt:16384,32768,131070,4096,16384,102400", 30727b650c406018355a88a41528db7859e232728a0Jack Yu "evdo:131072,262144,1048576,4096,16384,524288", 30827b650c406018355a88a41528db7859e232728a0Jack Yu "lte:524288,1048576,8388608,262144,524288,4194304"}); 30927b650c406018355a88a41528db7859e232728a0Jack Yu 3107d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu ((MockContentResolver) mContext.getContentResolver()).addProvider( 31127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CONTENT_URI.getAuthority(), mApnSettingContentProvider); 31227b650c406018355a88a41528db7859e232728a0Jack Yu 31327b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSimRecords).getRecordsLoaded(); 31427b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(PhoneConstants.State.IDLE).when(mCT).getState(); 31527b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSST).getDesiredPowerState(); 316f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu doReturn(true).when(mSST).getPowerStateFromCarrier(); 3174c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu doAnswer( 3184c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu new Answer<Void>() { 3194c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @Override 3204c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu public Void answer(InvocationOnMock invocation) throws Throwable { 3214c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mOnSubscriptionsChangedListener = 3224c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu (SubscriptionManager.OnSubscriptionsChangedListener) 3234c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu invocation.getArguments()[0]; 3244c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu return null; 3254c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu } 3264c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu } 3274c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu ).when(mSubscriptionManager).addOnSubscriptionsChangedListener(any()); 3284c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt()); 32927b650c406018355a88a41528db7859e232728a0Jack Yu 330783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(1).when(mIsub).getDefaultDataSubId(); 331783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(mIsub).when(mBinder).queryLocalInterface(anyString()); 3321d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu mServiceManagerMockedServices.put("isub", mBinder); 333783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 33491abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu mContextFixture.putStringArrayResource( 33591abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu com.android.internal.R.array.config_cell_retries_per_error_code, 33691abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu new String[]{"36,2"}); 33791abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu 3387d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 339783061ca03572618c01ce244d70d82fa4328d45ffionaxu mBundle = mContextFixture.getCarrierConfigBundle(); 34027b650c406018355a88a41528db7859e232728a0Jack Yu 3417e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcTrackerTestHandler = new DcTrackerTestHandler(getClass().getSimpleName()); 3427e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcTrackerTestHandler.start(); 34327b650c406018355a88a41528db7859e232728a0Jack Yu waitUntilReady(); 34427b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(600); 34527b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -Setup!"); 34627b650c406018355a88a41528db7859e232728a0Jack Yu } 34727b650c406018355a88a41528db7859e232728a0Jack Yu 34827b650c406018355a88a41528db7859e232728a0Jack Yu @After 34927b650c406018355a88a41528db7859e232728a0Jack Yu public void tearDown() throws Exception { 35027b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -tearDown"); 35127b650c406018355a88a41528db7859e232728a0Jack Yu mDct.removeCallbacksAndMessages(null); 35227b650c406018355a88a41528db7859e232728a0Jack Yu mDct = null; 3537e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mDcTrackerTestHandler.quitSafely(); 35427b650c406018355a88a41528db7859e232728a0Jack Yu super.tearDown(); 35527b650c406018355a88a41528db7859e232728a0Jack Yu } 35627b650c406018355a88a41528db7859e232728a0Jack Yu 3577d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Create a successful data response 3583a5b9323f422134b68a92c36813001ec8bed2866Jack Yu public static DataCallResponse createDataCallResponse() { 3597d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3608e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu return new DataCallResponse(0, -1, 1, 2, "IP", FAKE_IFNAME, 3618e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu FAKE_ADDRESS, FAKE_DNS, FAKE_GATEWAY, FAKE_PCSCF_ADDRESS, 1440); 3628e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 3638e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 3648e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu private void verifyDataProfile(DataProfile dp, String apn, int profileId, 3658e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu int supportedApnTypesBitmap) { 3668e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(profileId, dp.profileId); 3678e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(apn, dp.apn); 3688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("IP", dp.protocol); 3698e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.authType); 3708e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.user); 3718e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.password); 3728e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.type); 3738e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.maxConnsTime); 3748e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.maxConns); 3758e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.waitTime); 3768e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertTrue(dp.enabled); 3778e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(supportedApnTypesBitmap, dp.supportedApnTypesBitmap); 3788e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("IP", dp.roamingProtocol); 3798e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.bearerBitmap); 3808e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals(0, dp.mtu); 3818e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.mvnoType); 3828e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertEquals("", dp.mvnoMatchData); 3838e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu assertFalse(dp.modemCognitive); 3847d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu } 38527b650c406018355a88a41528db7859e232728a0Jack Yu 3867d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu private void verifyDataConnected(final String apnSetting) { 38727b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(1)).notifyDataConnection(eq(Phone.REASON_CONNECTED), 38827b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.APN_TYPE_DEFAULT)); 38927b650c406018355a88a41528db7859e232728a0Jack Yu 390bff465198e751438912fd301fbf20a8d35da1b95Jack Yu verify(mAlarmManager, times(1)).set(eq(AlarmManager.ELAPSED_REALTIME), anyLong(), 39127b650c406018355a88a41528db7859e232728a0Jack Yu any(PendingIntent.class)); 39227b650c406018355a88a41528db7859e232728a0Jack Yu 3937d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(apnSetting, mDct.getActiveApnString(PhoneConstants.APN_TYPE_DEFAULT)); 39427b650c406018355a88a41528db7859e232728a0Jack Yu assertArrayEquals(new String[]{PhoneConstants.APN_TYPE_DEFAULT}, mDct.getActiveApnTypes()); 39527b650c406018355a88a41528db7859e232728a0Jack Yu assertTrue(mDct.getAnyDataEnabled()); 39627b650c406018355a88a41528db7859e232728a0Jack Yu 39727b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 39827b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 39927b650c406018355a88a41528db7859e232728a0Jack Yu 40027b650c406018355a88a41528db7859e232728a0Jack Yu LinkProperties linkProperties = mDct.getLinkProperties(PhoneConstants.APN_TYPE_DEFAULT); 40127b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_IFNAME, linkProperties.getInterfaceName()); 40227b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getAddresses().size()); 40327b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_ADDRESS, linkProperties.getAddresses().get(0).getHostAddress()); 40427b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getDnsServers().size()); 40527b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_DNS, linkProperties.getDnsServers().get(0).getHostAddress()); 40627b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_GATEWAY, linkProperties.getRoutes().get(0).getGateway().getHostAddress()); 40727b650c406018355a88a41528db7859e232728a0Jack Yu } 40827b650c406018355a88a41528db7859e232728a0Jack Yu 4093d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu private boolean isDataAllowed(DataAllowFailReason dataAllowFailReasons) { 4101d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu try { 4113d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu Method method = DcTracker.class.getDeclaredMethod("isDataAllowed", 4123d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu DataAllowFailReason.class); 4131d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu method.setAccessible(true); 4143d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu return (boolean) method.invoke(mDct, dataAllowFailReasons); 4151d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } catch (Exception e) { 4161d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu fail(e.toString()); 4171d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu return false; 4181d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } 4191d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } 4201d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 4217d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Test the normal data call setup scenario. 42227b650c406018355a88a41528db7859e232728a0Jack Yu @Test 42327b650c406018355a88a41528db7859e232728a0Jack Yu @MediumTest 42427b650c406018355a88a41528db7859e232728a0Jack Yu public void testDataSetup() { 42527b650c406018355a88a41528db7859e232728a0Jack Yu 4260979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.setDataEnabled(true); 4270979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 4287d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 4297d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4303d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu DataAllowFailReason failureReason = new DataAllowFailReason(); 4313d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu boolean allowed = isDataAllowed(failureReason); 4323d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertFalse(failureReason.getDataAllowFailReason(), allowed); 4331d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 4347d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_RECORDS_LOADED"); 4357d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 4367d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 4377d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4387d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 4397d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 4407d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(), 4417d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 4427d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4437d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 4447d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4457d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 4467d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 4477d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 4487d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4497d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 4507d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 4517d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(), 4527d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 4537d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4547d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 4557d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4567d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 4577d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 4587d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(), 4597d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 46027b650c406018355a88a41528db7859e232728a0Jack Yu 4617d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 4627d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4637d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_ENABLE_NEW_APN"); 4647d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // APN id 0 is APN_TYPE_DEFAULT 4657d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.setEnabled(0, true); 4667d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 4677d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4683d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu failureReason.clearAllReasons(); 4693d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu allowed = isDataAllowed(failureReason); 4703d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertTrue(failureReason.getDataAllowFailReason(), allowed); 4711d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 472f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 4737d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 4747d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 4758e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), dpCaptor.capture(), 4768e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 4778e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5); 4787d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4797d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verifyDataConnected(FAKE_APN1); 4807d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu } 4817d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4827d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Test the scenario where the first data call setup is failed, and then retry the setup later. 4837d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu @Test 4847d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu @MediumTest 4857d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu public void testDataRetry() { 4860979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 4870979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.setDataEnabled(true); 4880979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 4897d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // LOST_CONNECTION(0x10004) is a non-permanent failure, so we'll retry data setup later. 4908e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu DataCallResponse dcResponse = new DataCallResponse(0x10004, -1, 1, 2, "IP", FAKE_IFNAME, 4918e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu FAKE_ADDRESS, FAKE_DNS, FAKE_GATEWAY, FAKE_PCSCF_ADDRESS, 1440); 4927d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Simulate RIL fails the data call setup 4937d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(false, dcResponse); 49427b650c406018355a88a41528db7859e232728a0Jack Yu 4953d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu DataAllowFailReason failureReason = new DataAllowFailReason(); 4963d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu boolean allowed = isDataAllowed(failureReason); 4973d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertFalse(failureReason.getDataAllowFailReason(), allowed); 4981d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 49927b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_RECORDS_LOADED"); 50027b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 50127b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 50227b650c406018355a88a41528db7859e232728a0Jack Yu 50327b650c406018355a88a41528db7859e232728a0Jack Yu ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 50427b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 50527b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(), 50627b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 50727b650c406018355a88a41528db7859e232728a0Jack Yu 50827b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 50927b650c406018355a88a41528db7859e232728a0Jack Yu 51027b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 51127b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 51227b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 51327b650c406018355a88a41528db7859e232728a0Jack Yu 51427b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 51527b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 51627b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(), 51727b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 51827b650c406018355a88a41528db7859e232728a0Jack Yu 51927b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 52027b650c406018355a88a41528db7859e232728a0Jack Yu 52127b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 52227b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 52327b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(), 52427b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 52527b650c406018355a88a41528db7859e232728a0Jack Yu 52627b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 52727b650c406018355a88a41528db7859e232728a0Jack Yu 52827b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_ENABLE_NEW_APN"); 52927b650c406018355a88a41528db7859e232728a0Jack Yu // APN id 0 is APN_TYPE_DEFAULT 53027b650c406018355a88a41528db7859e232728a0Jack Yu mDct.setEnabled(0, true); 53127b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 5327d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5333d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 5343d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu failureReason.clearAllReasons(); 5353d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu allowed = isDataAllowed(failureReason); 5363d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertTrue(failureReason.getDataAllowFailReason(), allowed); 5371d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 538f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 5397d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 5407d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 5418e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), dpCaptor.capture(), 5428e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 5438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5); 5447d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5457d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Make sure we never notify connected because the data call setup is supposed to fail. 5467d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, never()).notifyDataConnection(eq(Phone.REASON_CONNECTED), 5477d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.APN_TYPE_DEFAULT)); 5487d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5497d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify the retry manger schedule another data call setup. 5507d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mAlarmManager, times(1)).setExact(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), 5517d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu anyLong(), any(PendingIntent.class)); 5527d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5537d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // This time we'll let RIL command succeed. 5547d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 5557d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5567d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Simulate the timer expires. 5577d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu Intent intent = new Intent("com.android.internal.telephony.data-reconnect.default"); 5587d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.putExtra("reconnect_alarm_extra_type", PhoneConstants.APN_TYPE_DEFAULT); 5597d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 0); 5607d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 5617d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mContext.sendBroadcast(intent); 5627d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 5637d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 564f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 5657d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 5668e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 5678e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), dpCaptor.capture(), 5688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 5698e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verifyDataProfile(dpCaptor.getValue(), FAKE_APN2, 0, 5); 5707d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5717d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify connected with APN2 setting. 5727d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verifyDataConnected(FAKE_APN2); 57327b650c406018355a88a41528db7859e232728a0Jack Yu } 574783061ca03572618c01ce244d70d82fa4328d45ffionaxu 575783061ca03572618c01ce244d70d82fa4328d45ffionaxu @Test 576783061ca03572618c01ce244d70d82fa4328d45ffionaxu @MediumTest 577802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @Ignore 578802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @FlakyTest 579783061ca03572618c01ce244d70d82fa4328d45ffionaxu public void testUserDisableData() throws Exception { 580783061ca03572618c01ce244d70d82fa4328d45ffionaxu //step 1: setup two DataCalls one for Metered: default, another one for Non-metered: IMS 581783061ca03572618c01ce244d70d82fa4328d45ffionaxu //set Default and MMS to be metered in the CarrierConfigManager 582783061ca03572618c01ce244d70d82fa4328d45ffionaxu boolean dataEnabled = mDct.getDataEnabled(); 583783061ca03572618c01ce244d70d82fa4328d45ffionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 584783061ca03572618c01ce244d70d82fa4328d45ffionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 585783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(5, true); 586783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(0, true); 587783061ca03572618c01ce244d70d82fa4328d45ffionaxu 588783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_RECORDS_LOADED"); 589783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 590783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 591783061ca03572618c01ce244d70d82fa4328d45ffionaxu 592783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 593783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 594783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 595783061ca03572618c01ce244d70d82fa4328d45ffionaxu 596783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_ENABLED_CMD"); 597783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(true); 598783061ca03572618c01ce244d70d82fa4328d45ffionaxu 599783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 600f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 6018e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 6028e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), dpCaptor.capture(), 6038e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 6048e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5); 605783061ca03572618c01ce244d70d82fa4328d45ffionaxu 606783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_DISABLED_CMD"); 607783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(false); 608783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 609783061ca03572618c01ce244d70d82fa4328d45ffionaxu 610783061ca03572618c01ce244d70d82fa4328d45ffionaxu // expected tear down all metered DataConnections 611783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 612783061ca03572618c01ce244d70d82fa4328d45ffionaxu any(Message.class)); 613783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 614783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 615783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 616783061ca03572618c01ce244d70d82fa4328d45ffionaxu 617783061ca03572618c01ce244d70d82fa4328d45ffionaxu // reset the setting at the end of this test 618783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(dataEnabled); 619783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 620783061ca03572618c01ce244d70d82fa4328d45ffionaxu } 621783061ca03572618c01ce244d70d82fa4328d45ffionaxu 622783061ca03572618c01ce244d70d82fa4328d45ffionaxu @Test 623783061ca03572618c01ce244d70d82fa4328d45ffionaxu @MediumTest 624783061ca03572618c01ce244d70d82fa4328d45ffionaxu public void testUserDisableRoaming() throws Exception { 625783061ca03572618c01ce244d70d82fa4328d45ffionaxu //step 1: setup two DataCalls one for Metered: default, another one for Non-metered: IMS 6263d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 2: set roaming disabled, data is enabled 6273d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 3: under roaming service 6283d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 4: only tear down metered data connections. 6293d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 630783061ca03572618c01ce244d70d82fa4328d45ffionaxu //set Default and MMS to be metered in the CarrierConfigManager 6315b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu boolean roamingEnabled = mDct.getDataRoamingEnabled(); 6323d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu boolean dataEnabled = mDct.getDataEnabled(); 6333d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 6343d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 635783061ca03572618c01ce244d70d82fa4328d45ffionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 636783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(5, true); 637783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(0, true); 638783061ca03572618c01ce244d70d82fa4328d45ffionaxu 639783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_RECORDS_LOADED"); 640783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 641783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 642783061ca03572618c01ce244d70d82fa4328d45ffionaxu 643783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 644783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 645783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 646783061ca03572618c01ce244d70d82fa4328d45ffionaxu 647783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_ENABLED_CMD"); 648783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(true); 649783061ca03572618c01ce244d70d82fa4328d45ffionaxu 6508e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu waitForMs(300); 651f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 6528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 6538e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), dpCaptor.capture(), 6548e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 6558e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5); 656783061ca03572618c01ce244d70d82fa4328d45ffionaxu 6573d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //user is in roaming 6583d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu doReturn(true).when(mServiceState).getDataRoaming(); 659783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DISABLE_ROAMING_CMD"); 6605b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu mDct.setDataRoamingEnabled(false); 661783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_ROAMING_ON)); 662783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 663783061ca03572618c01ce244d70d82fa4328d45ffionaxu 664783061ca03572618c01ce244d70d82fa4328d45ffionaxu // expected tear down all metered DataConnections 6653d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 666783061ca03572618c01ce244d70d82fa4328d45ffionaxu any(Message.class)); 6673d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 6683d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 6693d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 6703d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 6713d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu // reset roaming settings / data enabled settings at end of this test 6725b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu mDct.setDataRoamingEnabled(roamingEnabled); 6733d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.setDataEnabled(dataEnabled); 6743d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 6753d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu } 6763d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 67792428df50d736a3d1d0f32779a22c65fcec0efabJordan Liu @FlakyTest 6783d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu @Test 6793d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu @MediumTest 6803d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu public void testDataCallOnUserDisableRoaming() throws Exception { 6813d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 1: mock under roaming service and user disabled roaming from settings. 6823d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 2: user toggled data settings on 6833d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //step 3: only non-metered data call is established 6843d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 6855b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu boolean roamingEnabled = mDct.getDataRoamingEnabled(); 6863d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu boolean dataEnabled = mDct.getDataEnabled(); 6873d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 6883d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu //set Default and MMS to be metered in the CarrierConfigManager 6893d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, 6903d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 6913d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.setEnabled(5, true); 6923d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.setEnabled(0, true); 6933d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu doReturn(true).when(mServiceState).getDataRoaming(); 6943d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 6953d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu logd("Sending DISABLE_ROAMING_CMD"); 6965b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu mDct.setDataRoamingEnabled(false); 6973d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 6983d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu logd("Sending EVENT_RECORDS_LOADED"); 6993d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 7003d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 7013d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7023d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 7033d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 7043d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 7053d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7063d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu logd("Sending DATA_ENABLED_CMD"); 7073d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu mDct.setDataEnabled(true); 7083d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7093d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu waitForMs(200); 710f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 7113d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 7128e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), dpCaptor.capture(), 7138e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 7148e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verifyDataProfile(dpCaptor.getValue(), FAKE_APN3, 2, 64); 7153d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu 7163d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 717783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 7183d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 719ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu 720ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu // reset roaming settings / data enabled settings at end of this test 7215b83d07ba19e20cf2811824cc2bed96953d1134dJack Yu mDct.setDataRoamingEnabled(roamingEnabled); 722ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu mDct.setDataEnabled(dataEnabled); 723ecb75ffc91e7036ae87c5f0488fa871d4e079922Jack Yu waitForMs(200); 724783061ca03572618c01ce244d70d82fa4328d45ffionaxu } 7250979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7260979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Test the default data switch scenario. 7270979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @Test 7280979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu @MediumTest 7290979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu public void testDDSResetAutoAttach() throws Exception { 7300979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7310979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.setDataEnabled(true); 7320979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7330979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mContextFixture.putBooleanResource( 7340979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu com.android.internal.R.bool.config_auto_attach_data_on_creation, true); 7350979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7360979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 7370979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7383d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu DataAllowFailReason failureReason = new DataAllowFailReason(); 7393d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu boolean allowed = isDataAllowed(failureReason); 7403d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertFalse(failureReason.getDataAllowFailReason(), allowed); 7410979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7420979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 7430979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mUiccController, times(1)).registerForIccChanged(eq(mDct), 7440979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 7450979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_ICC_CHANGED. 7460979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 7470979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(100); 7480979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7490979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mSimRecords, times(1)).registerForRecordsLoaded(eq(mDct), 7500979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 7510979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_RECORDS_LOADED. 7520979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 7530979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(100); 7540979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7550979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mSST, times(1)).registerForDataConnectionAttached(eq(mDct), 7560979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 7570979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_DATA_CONNECTION_ATTACHED"); 7580979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 7590979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(200); 7600979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 76164fbcce906012e4b429c354ba3a200a6ee410010Lorenzo Colitti NetworkRequest nr = new NetworkRequest.Builder() 76264fbcce906012e4b429c354ba3a200a6ee410010Lorenzo Colitti .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build(); 7630979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu LocalLog l = new LocalLog(100); 7640979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.requestNetwork(nr, l); 7650979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(200); 7660979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7670979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verifyDataConnected(FAKE_APN1); 7680979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7690979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu assertTrue(mDct.getAutoAttachOnCreation()); 7700979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.update(); 7710979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // The auto attach flag should be reset after update 7720979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu assertFalse(mDct.getAutoAttachOnCreation()); 7730979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7740979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu verify(mSST, times(1)).registerForDataConnectionDetached(eq(mDct), 7750979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu intArgumentCaptor.capture(), eq(null)); 7760979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Ideally this should send EVENT_DATA_CONNECTION_DETACHED 7770979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null)); 7780979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu waitForMs(200); 7790979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu 7800979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu // Data should not be allowed since auto attach flag has been reset. 7813d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu failureReason.clearAllReasons(); 7823d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu allowed = isDataAllowed(failureReason); 7833d8c0f70a6fa7a53fda3c5d592de0ac3aa247e3cfionaxu assertFalse(failureReason.getDataAllowFailReason(), allowed); 7840979b71e48405cab10bdf1d1b4170cfce72838a7Jack Yu } 7854c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 7864c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu // Test for API carrierActionSetMeteredApnsEnabled. 78792428df50d736a3d1d0f32779a22c65fcec0efabJordan Liu @FlakyTest 7884c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @Test 7894c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu @MediumTest 7904c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu public void testCarrierActionSetMeteredApnsEnabled() throws Exception { 7914c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 1: setup two DataCalls one for Internet and IMS 7924c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 2: set data is enabled 7934c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 3: cold sim is detected 7944c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu //step 4: all data connection is torn down 7954c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 7964c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 7974c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 7984c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu boolean dataEnabled = mDct.getDataEnabled(); 7994c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setDataEnabled(true); 8004c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8014c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setEnabled(5, true); 8024c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setEnabled(0, true); 8034c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8044c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu logd("Sending EVENT_RECORDS_LOADED"); 8054c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 8064c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(200); 8074c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8084c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 8094c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 8104c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(200); 8114c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 812f9339819516dbe67fb8fcef846a0ae4441ef17bdPaul Duffin ArgumentCaptor<DataProfile> dpCaptor = ArgumentCaptor.forClass(DataProfile.class); 8138e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verify(mSimulatedCommandsVerifier, times(2)).setupDataCall( 8148e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), dpCaptor.capture(), 8158e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu eq(false), eq(false), any(Message.class)); 8168e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu verifyDataProfile(dpCaptor.getValue(), FAKE_APN1, 0, 5); 8174c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 8184c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 81940cd4e909fd3a8ee462475814a949e08391ff8f5fionaxu Message msg = mDct.obtainMessage(DctConstants.EVENT_SET_CARRIER_DATA_ENABLED); 82040cd4e909fd3a8ee462475814a949e08391ff8f5fionaxu AsyncResult.forMessage(msg).result = false; 82140cd4e909fd3a8ee462475814a949e08391ff8f5fionaxu mDct.sendMessage(msg); 8226a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu 8234c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(100); 8244c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8254c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu // Validate all metered data connections have been torn down 8264c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 8274c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu any(Message.class)); 8284c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 8294c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 8304c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu 8314c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu // Reset settings at the end of test 8324c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu mDct.setDataEnabled(dataEnabled); 8334c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu waitForMs(200); 8344c31e4c0d2db31fe84081aa6f1e2bcc08b31f9d3fionaxu } 835783061ca03572618c01ce244d70d82fa4328d45ffionaxu} 836