DcTrackerTest.java revision 783061ca03572618c01ce244d70d82fa4328d45f
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 1927b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.AlarmManager; 2027b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.PendingIntent; 2127b650c406018355a88a41528db7859e232728a0Jack Yuimport android.content.Context; 227d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yuimport android.content.Intent; 2327b650c406018355a88a41528db7859e232728a0Jack Yuimport android.database.Cursor; 2427b650c406018355a88a41528db7859e232728a0Jack Yuimport android.database.MatrixCursor; 2527b650c406018355a88a41528db7859e232728a0Jack Yuimport android.net.LinkProperties; 2627b650c406018355a88a41528db7859e232728a0Jack Yuimport android.net.Uri; 2727b650c406018355a88a41528db7859e232728a0Jack Yuimport android.os.HandlerThread; 28783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport android.os.IBinder; 2927b650c406018355a88a41528db7859e232728a0Jack Yuimport android.os.Message; 30783061ca03572618c01ce244d70d82fa4328d45ffionaxuimport android.os.PersistableBundle; 3127b650c406018355a88a41528db7859e232728a0Jack Yuimport android.provider.Telephony; 32783061ca03572618c01ce244d70d82fa4328d45ffionaxuimport android.telephony.CarrierConfigManager; 3327b650c406018355a88a41528db7859e232728a0Jack Yuimport android.telephony.ServiceState; 3427b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentProvider; 3527b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentResolver; 3627b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.suitebuilder.annotation.MediumTest; 3727b650c406018355a88a41528db7859e232728a0Jack Yu 38e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.DctConstants; 39e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.ISub; 40e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.Phone; 41e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.PhoneConstants; 42e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.RILConstants; 43e8eb48626c3e6ad93c1839b1a9e87030c4b33ce4Jack Yuimport com.android.internal.telephony.TelephonyTest; 4427b650c406018355a88a41528db7859e232728a0Jack Yu 4527b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.After; 4627b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Before; 4727b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Test; 4827b650c406018355a88a41528db7859e232728a0Jack Yuimport org.mockito.ArgumentCaptor; 49783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport org.mockito.Mock; 5027b650c406018355a88a41528db7859e232728a0Jack Yu 511d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yuimport java.lang.reflect.Method; 5227b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.Arrays; 5327b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.List; 5427b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Matcher; 5527b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Pattern; 5627b650c406018355a88a41528db7859e232728a0Jack Yu 5727b650c406018355a88a41528db7859e232728a0Jack Yuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 5827b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertArrayEquals; 5927b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertEquals; 601d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yuimport static org.junit.Assert.assertFalse; 6127b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertTrue; 621d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yuimport static org.junit.Assert.fail; 6327b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.any; 64783061ca03572618c01ce244d70d82fa4328d45ffionaxuimport static org.mockito.Matchers.anyInt; 6527b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.anyLong; 66783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport static org.mockito.Matchers.anyString; 6727b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.eq; 6827b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.doReturn; 697d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yuimport static org.mockito.Mockito.never; 7027b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.times; 7127b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.verify; 7227b650c406018355a88a41528db7859e232728a0Jack Yu 7327b650c406018355a88a41528db7859e232728a0Jack Yupublic class DcTrackerTest extends TelephonyTest { 7427b650c406018355a88a41528db7859e232728a0Jack Yu 7527b650c406018355a88a41528db7859e232728a0Jack Yu private final static String[] sNetworkAttributes = new String[]{ 7627b650c406018355a88a41528db7859e232728a0Jack Yu "mobile,0,0,0,-1,true", "mobile_mms,2,0,2,60000,true", 7727b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_supl,3,0,2,60000,true", "mobile_dun,4,0,2,60000,true", 7827b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_hipri,5,0,3,60000,true", "mobile_fota,10,0,2,60000,true", 7927b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ims,11,0,2,60000,true", "mobile_cbs,12,0,2,60000,true", 8027b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ia,14,0,2,-1,true", "mobile_emergency,15,0,2,-1,true"}; 8127b650c406018355a88a41528db7859e232728a0Jack Yu 821d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu private final static List<String> sApnTypes = Arrays.asList( 8327b650c406018355a88a41528db7859e232728a0Jack Yu "default", "mms", "cbs", "fota", "supl", "ia", "emergency", "dun", "hipri", "ims"); 8427b650c406018355a88a41528db7859e232728a0Jack Yu 853a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_APN1 = "FAKE APN 1"; 863a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_APN2 = "FAKE APN 2"; 873a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_APN3 = "FAKE APN 3"; 883a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_IFNAME = "FAKE IFNAME"; 893a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_PCSCF_ADDRESS = "22.33.44.55"; 903a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_GATEWAY = "11.22.33.44"; 913a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_DNS = "55.66.77.88"; 923a5b9323f422134b68a92c36813001ec8bed2866Jack Yu private static final String FAKE_ADDRESS = "99.88.77.66"; 9327b650c406018355a88a41528db7859e232728a0Jack Yu 94783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 95783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu ISub mIsub; 96783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 97783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu IBinder mBinder; 98783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 9927b650c406018355a88a41528db7859e232728a0Jack Yu private DcTracker mDct; 10027b650c406018355a88a41528db7859e232728a0Jack Yu 10127b650c406018355a88a41528db7859e232728a0Jack Yu private AlarmManager mAlarmManager; 10227b650c406018355a88a41528db7859e232728a0Jack Yu 103783061ca03572618c01ce244d70d82fa4328d45ffionaxu private PersistableBundle mBundle; 104783061ca03572618c01ce244d70d82fa4328d45ffionaxu 10527b650c406018355a88a41528db7859e232728a0Jack Yu private final ApnSettingContentProvider mApnSettingContentProvider = 10627b650c406018355a88a41528db7859e232728a0Jack Yu new ApnSettingContentProvider(); 10727b650c406018355a88a41528db7859e232728a0Jack Yu 10827b650c406018355a88a41528db7859e232728a0Jack Yu private class DcTrackerTestHandler extends HandlerThread { 10927b650c406018355a88a41528db7859e232728a0Jack Yu 11027b650c406018355a88a41528db7859e232728a0Jack Yu private DcTrackerTestHandler(String name) { 11127b650c406018355a88a41528db7859e232728a0Jack Yu super(name); 11227b650c406018355a88a41528db7859e232728a0Jack Yu } 11327b650c406018355a88a41528db7859e232728a0Jack Yu 11427b650c406018355a88a41528db7859e232728a0Jack Yu @Override 11527b650c406018355a88a41528db7859e232728a0Jack Yu public void onLooperPrepared() { 11627b650c406018355a88a41528db7859e232728a0Jack Yu mDct = new DcTracker(mPhone); 11727b650c406018355a88a41528db7859e232728a0Jack Yu setReady(true); 11827b650c406018355a88a41528db7859e232728a0Jack Yu } 11927b650c406018355a88a41528db7859e232728a0Jack Yu } 12027b650c406018355a88a41528db7859e232728a0Jack Yu 12127b650c406018355a88a41528db7859e232728a0Jack Yu private class ApnSettingContentProvider extends MockContentProvider { 12227b650c406018355a88a41528db7859e232728a0Jack Yu 12327b650c406018355a88a41528db7859e232728a0Jack Yu @Override 12427b650c406018355a88a41528db7859e232728a0Jack Yu public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 12527b650c406018355a88a41528db7859e232728a0Jack Yu String sortOrder) { 12627b650c406018355a88a41528db7859e232728a0Jack Yu logd("ApnSettingContentProvider: query"); 12727b650c406018355a88a41528db7859e232728a0Jack Yu logd(" uri = " + uri); 12827b650c406018355a88a41528db7859e232728a0Jack Yu logd(" projection = " + Arrays.toString(projection)); 12927b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selection = " + selection); 13027b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selectionArgs = " + Arrays.toString(selectionArgs)); 13127b650c406018355a88a41528db7859e232728a0Jack Yu logd(" sortOrder = " + sortOrder); 13227b650c406018355a88a41528db7859e232728a0Jack Yu 13327b650c406018355a88a41528db7859e232728a0Jack Yu if (uri.compareTo(Telephony.Carriers.CONTENT_URI) == 0) { 13427b650c406018355a88a41528db7859e232728a0Jack Yu if (projection == null && selectionArgs == null && selection != null) { 13527b650c406018355a88a41528db7859e232728a0Jack Yu 13627b650c406018355a88a41528db7859e232728a0Jack Yu Pattern pattern = Pattern.compile("^numeric = '([0-9]*)'"); 13727b650c406018355a88a41528db7859e232728a0Jack Yu Matcher matcher = pattern.matcher(selection); 13827b650c406018355a88a41528db7859e232728a0Jack Yu if (!matcher.find()) { 13927b650c406018355a88a41528db7859e232728a0Jack Yu logd("Cannot find MCC/MNC from " + selection); 14027b650c406018355a88a41528db7859e232728a0Jack Yu return null; 14127b650c406018355a88a41528db7859e232728a0Jack Yu } 14227b650c406018355a88a41528db7859e232728a0Jack Yu 14327b650c406018355a88a41528db7859e232728a0Jack Yu String plmn = matcher.group(1); 14427b650c406018355a88a41528db7859e232728a0Jack Yu 14527b650c406018355a88a41528db7859e232728a0Jack Yu logd("Query '" + plmn + "' APN settings"); 14627b650c406018355a88a41528db7859e232728a0Jack Yu MatrixCursor mc = new MatrixCursor( 14727b650c406018355a88a41528db7859e232728a0Jack Yu new String[]{Telephony.Carriers._ID, Telephony.Carriers.NUMERIC, 14827b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.NAME, Telephony.Carriers.APN, 14927b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROXY, Telephony.Carriers.PORT, 15027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSC, Telephony.Carriers.MMSPROXY, 15127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSPORT, Telephony.Carriers.USER, 15227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PASSWORD, Telephony.Carriers.AUTH_TYPE, 15327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.TYPE, 15427b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROTOCOL, 15527b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.ROAMING_PROTOCOL, 15627b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CARRIER_ENABLED, Telephony.Carriers.BEARER, 15727b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.BEARER_BITMASK, 15827b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROFILE_ID, 15927b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MODEM_COGNITIVE, 16027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS, Telephony.Carriers.WAIT_TIME, 16127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS_TIME, Telephony.Carriers.MTU, 16227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_TYPE, 16327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_MATCH_DATA}); 16427b650c406018355a88a41528db7859e232728a0Jack Yu 16527b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 16627b650c406018355a88a41528db7859e232728a0Jack Yu 2163, // id 16727b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 16827b650c406018355a88a41528db7859e232728a0Jack Yu "sp-mode", // name 16927b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN1, // apn 17027b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 17127b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 17227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 17327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 17427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 17527b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 17627b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 17727b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 17827b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 17927b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 18027b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 18127b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 18227b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 18327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 18427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 18527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 18627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 18727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 18827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 18927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 19027b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 19127b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 19227b650c406018355a88a41528db7859e232728a0Jack Yu }); 19327b650c406018355a88a41528db7859e232728a0Jack Yu 19427b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 19527b650c406018355a88a41528db7859e232728a0Jack Yu 2164, // id 19627b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 19727b650c406018355a88a41528db7859e232728a0Jack Yu "mopera U", // name 19827b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN2, // apn 19927b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 20027b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 20127b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 20227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 20327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 20427b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 20527b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 20627b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 20727b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 20827b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 20927b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 21027b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 21127b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 21227b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 21327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 21427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 21527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 21627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 21727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 21827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 21927b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 22027b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 22127b650c406018355a88a41528db7859e232728a0Jack Yu }); 22227b650c406018355a88a41528db7859e232728a0Jack Yu 22327b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 22427b650c406018355a88a41528db7859e232728a0Jack Yu 2165, // id 22527b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 22627b650c406018355a88a41528db7859e232728a0Jack Yu "b-mobile for Nexus", // name 22727b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN3, // apn 22827b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 22927b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 23027b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 23127b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 23227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 23327b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 23427b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 23527b650c406018355a88a41528db7859e232728a0Jack Yu 3, // authtype 236783061ca03572618c01ce244d70d82fa4328d45ffionaxu "ims", // types 23727b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 23827b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 23927b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 24027b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 24127b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 24227b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 24327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 24427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 24527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 24627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 24727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 24827b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 24927b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 25027b650c406018355a88a41528db7859e232728a0Jack Yu }); 25127b650c406018355a88a41528db7859e232728a0Jack Yu 25227b650c406018355a88a41528db7859e232728a0Jack Yu return mc; 25327b650c406018355a88a41528db7859e232728a0Jack Yu } 25427b650c406018355a88a41528db7859e232728a0Jack Yu } 25527b650c406018355a88a41528db7859e232728a0Jack Yu 25627b650c406018355a88a41528db7859e232728a0Jack Yu return null; 25727b650c406018355a88a41528db7859e232728a0Jack Yu } 25827b650c406018355a88a41528db7859e232728a0Jack Yu } 25927b650c406018355a88a41528db7859e232728a0Jack Yu 26027b650c406018355a88a41528db7859e232728a0Jack Yu @Before 26127b650c406018355a88a41528db7859e232728a0Jack Yu public void setUp() throws Exception { 26227b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest +Setup!"); 26327b650c406018355a88a41528db7859e232728a0Jack Yu super.setUp(getClass().getSimpleName()); 26427b650c406018355a88a41528db7859e232728a0Jack Yu 26527b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_detached").when(mPhone).getActionDetached(); 26627b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_attached").when(mPhone).getActionAttached(); 26727b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("44010").when(mSimRecords).getOperatorNumeric(); 26827b650c406018355a88a41528db7859e232728a0Jack Yu 26927b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array.networkAttributes, 27027b650c406018355a88a41528db7859e232728a0Jack Yu sNetworkAttributes); 27127b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array. 27227b650c406018355a88a41528db7859e232728a0Jack Yu config_mobile_tcp_buffers, new String[]{ 27327b650c406018355a88a41528db7859e232728a0Jack Yu "umts:131072,262144,1452032,4096,16384,399360", 27427b650c406018355a88a41528db7859e232728a0Jack Yu "hspa:131072,262144,2441216,4096,16384,399360", 27527b650c406018355a88a41528db7859e232728a0Jack Yu "hsupa:131072,262144,2441216,4096,16384,399360", 27627b650c406018355a88a41528db7859e232728a0Jack Yu "hsdpa:131072,262144,2441216,4096,16384,399360", 27727b650c406018355a88a41528db7859e232728a0Jack Yu "hspap:131072,262144,2441216,4096,16384,399360", 27827b650c406018355a88a41528db7859e232728a0Jack Yu "edge:16384,32768,131072,4096,16384,65536", 27927b650c406018355a88a41528db7859e232728a0Jack Yu "gprs:4096,8192,24576,4096,8192,24576", 28027b650c406018355a88a41528db7859e232728a0Jack Yu "1xrtt:16384,32768,131070,4096,16384,102400", 28127b650c406018355a88a41528db7859e232728a0Jack Yu "evdo:131072,262144,1048576,4096,16384,524288", 28227b650c406018355a88a41528db7859e232728a0Jack Yu "lte:524288,1048576,8388608,262144,524288,4194304"}); 28327b650c406018355a88a41528db7859e232728a0Jack Yu 2847d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu ((MockContentResolver) mContext.getContentResolver()).addProvider( 28527b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CONTENT_URI.getAuthority(), mApnSettingContentProvider); 28627b650c406018355a88a41528db7859e232728a0Jack Yu 28727b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSimRecords).getRecordsLoaded(); 28827b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(PhoneConstants.State.IDLE).when(mCT).getState(); 28927b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSST).getDesiredPowerState(); 29027b650c406018355a88a41528db7859e232728a0Jack Yu 291783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(1).when(mIsub).getDefaultDataSubId(); 292783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(mIsub).when(mBinder).queryLocalInterface(anyString()); 2931d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu mServiceManagerMockedServices.put("isub", mBinder); 294783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 29591abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu mContextFixture.putStringArrayResource( 29691abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu com.android.internal.R.array.config_cell_retries_per_error_code, 29791abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu new String[]{"36,2"}); 29891abb5484d609dd4f117dd3dc234fe9a1b619c91Jack Yu 2997d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 300783061ca03572618c01ce244d70d82fa4328d45ffionaxu mBundle = mContextFixture.getCarrierConfigBundle(); 30127b650c406018355a88a41528db7859e232728a0Jack Yu 30227b650c406018355a88a41528db7859e232728a0Jack Yu new DcTrackerTestHandler(getClass().getSimpleName()).start(); 30327b650c406018355a88a41528db7859e232728a0Jack Yu waitUntilReady(); 30427b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(600); 30527b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -Setup!"); 30627b650c406018355a88a41528db7859e232728a0Jack Yu } 30727b650c406018355a88a41528db7859e232728a0Jack Yu 30827b650c406018355a88a41528db7859e232728a0Jack Yu @After 30927b650c406018355a88a41528db7859e232728a0Jack Yu public void tearDown() throws Exception { 31027b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -tearDown"); 31127b650c406018355a88a41528db7859e232728a0Jack Yu mDct.removeCallbacksAndMessages(null); 31227b650c406018355a88a41528db7859e232728a0Jack Yu mDct = null; 31327b650c406018355a88a41528db7859e232728a0Jack Yu super.tearDown(); 31427b650c406018355a88a41528db7859e232728a0Jack Yu } 31527b650c406018355a88a41528db7859e232728a0Jack Yu 3167d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Create a successful data response 3173a5b9323f422134b68a92c36813001ec8bed2866Jack Yu public static DataCallResponse createDataCallResponse() { 3187d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3197d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu DataCallResponse dcResponse = new DataCallResponse(); 3207d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3217d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.version = 11; 3227d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.status = 0; 3237d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.suggestedRetryTime = RILConstants.MAX_INT; // No retry suggested by the modem 3247d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.cid = 1; 3257d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.active = 2; 3267d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.type = "IP"; 3277d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.ifname = FAKE_IFNAME; 3287d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.mtu = 1440; 3297d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.addresses = new String[]{FAKE_ADDRESS}; 3307d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.dnses = new String[]{FAKE_DNS}; 3317d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.gateways = new String[]{FAKE_GATEWAY}; 3327d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.pcscf = new String[]{FAKE_PCSCF_ADDRESS}; 3337d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu return dcResponse; 3347d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu } 33527b650c406018355a88a41528db7859e232728a0Jack Yu 3367d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu private void verifyDataConnected(final String apnSetting) { 33727b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(1)).notifyDataConnection(eq(Phone.REASON_CONNECTED), 33827b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.APN_TYPE_DEFAULT)); 33927b650c406018355a88a41528db7859e232728a0Jack Yu 34027b650c406018355a88a41528db7859e232728a0Jack Yu verify(mAlarmManager, times(1)).set(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), anyLong(), 34127b650c406018355a88a41528db7859e232728a0Jack Yu any(PendingIntent.class)); 34227b650c406018355a88a41528db7859e232728a0Jack Yu 3437d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(apnSetting, mDct.getActiveApnString(PhoneConstants.APN_TYPE_DEFAULT)); 34427b650c406018355a88a41528db7859e232728a0Jack Yu assertArrayEquals(new String[]{PhoneConstants.APN_TYPE_DEFAULT}, mDct.getActiveApnTypes()); 34527b650c406018355a88a41528db7859e232728a0Jack Yu assertTrue(mDct.getAnyDataEnabled()); 34627b650c406018355a88a41528db7859e232728a0Jack Yu assertTrue(mDct.getDataEnabled()); 34727b650c406018355a88a41528db7859e232728a0Jack Yu 34827b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 34927b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 35027b650c406018355a88a41528db7859e232728a0Jack Yu 35127b650c406018355a88a41528db7859e232728a0Jack Yu LinkProperties linkProperties = mDct.getLinkProperties(PhoneConstants.APN_TYPE_DEFAULT); 35227b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_IFNAME, linkProperties.getInterfaceName()); 35327b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getAddresses().size()); 35427b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_ADDRESS, linkProperties.getAddresses().get(0).getHostAddress()); 35527b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getDnsServers().size()); 35627b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_DNS, linkProperties.getDnsServers().get(0).getHostAddress()); 35727b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_GATEWAY, linkProperties.getRoutes().get(0).getGateway().getHostAddress()); 35827b650c406018355a88a41528db7859e232728a0Jack Yu } 35927b650c406018355a88a41528db7859e232728a0Jack Yu 3601d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu private boolean isDataAllowed(StringBuilder sb) { 3611d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu try { 3621d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu Method method = DcTracker.class.getDeclaredMethod("isDataAllowed", StringBuilder.class); 3631d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu method.setAccessible(true); 3641d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu return (boolean) method.invoke(mDct, sb); 3651d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } catch (Exception e) { 3661d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu fail(e.toString()); 3671d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu return false; 3681d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } 3691d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu } 3701d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 3717d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Test the normal data call setup scenario. 37227b650c406018355a88a41528db7859e232728a0Jack Yu @Test 37327b650c406018355a88a41528db7859e232728a0Jack Yu @MediumTest 37427b650c406018355a88a41528db7859e232728a0Jack Yu public void testDataSetup() { 37527b650c406018355a88a41528db7859e232728a0Jack Yu 3767d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 3777d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3781d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu StringBuilder sb = new StringBuilder(); 3791d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu boolean allowed = isDataAllowed(sb); 3801d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu assertFalse(sb.toString(), allowed); 3811d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 3827d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_RECORDS_LOADED"); 3837d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 3847d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 3857d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3867d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 3877d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 3887d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(), 3897d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 3907d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3917d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 3927d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3937d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 3947d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 3957d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 3967d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 3977d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 3987d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 3997d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(), 4007d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 4017d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4027d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 4037d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4047d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 4057d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 4067d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(), 4077d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 40827b650c406018355a88a41528db7859e232728a0Jack Yu 4097d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 4107d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4117d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu logd("Sending EVENT_ENABLE_NEW_APN"); 4127d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // APN id 0 is APN_TYPE_DEFAULT 4137d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mDct.setEnabled(0, true); 4147d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 4157d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4161d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu sb.setLength(0); 4171d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu allowed = isDataAllowed(sb); 4181d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu assertTrue(sb.toString(), allowed); 4191d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 4207d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 4217d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 4227d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN1), 4237d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(""), eq(""), eq(0), eq("IP"), any(Message.class)); 4247d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4257d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verifyDataConnected(FAKE_APN1); 4267d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu } 4277d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4287d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Test the scenario where the first data call setup is failed, and then retry the setup later. 4297d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu @Test 4307d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu @MediumTest 4317d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu public void testDataRetry() { 4327d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu DataCallResponse dcResponse = createDataCallResponse(); 4337d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // LOST_CONNECTION(0x10004) is a non-permanent failure, so we'll retry data setup later. 4347d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu dcResponse.status = 0x10004; 4357d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Simulate RIL fails the data call setup 4367d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(false, dcResponse); 43727b650c406018355a88a41528db7859e232728a0Jack Yu 4381d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu StringBuilder sb = new StringBuilder(); 4391d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu boolean allowed = isDataAllowed(sb); 4401d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu assertFalse(sb.toString(), allowed); 4411d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 44227b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_RECORDS_LOADED"); 44327b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 44427b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 44527b650c406018355a88a41528db7859e232728a0Jack Yu 44627b650c406018355a88a41528db7859e232728a0Jack Yu ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 44727b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 44827b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(), 44927b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 45027b650c406018355a88a41528db7859e232728a0Jack Yu 45127b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 45227b650c406018355a88a41528db7859e232728a0Jack Yu 45327b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 45427b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 45527b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 45627b650c406018355a88a41528db7859e232728a0Jack Yu 45727b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 45827b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 45927b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(), 46027b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 46127b650c406018355a88a41528db7859e232728a0Jack Yu 46227b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 46327b650c406018355a88a41528db7859e232728a0Jack Yu 46427b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 46527b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 46627b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(), 46727b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 46827b650c406018355a88a41528db7859e232728a0Jack Yu 46927b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 47027b650c406018355a88a41528db7859e232728a0Jack Yu 47127b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_ENABLE_NEW_APN"); 47227b650c406018355a88a41528db7859e232728a0Jack Yu // APN id 0 is APN_TYPE_DEFAULT 47327b650c406018355a88a41528db7859e232728a0Jack Yu mDct.setEnabled(0, true); 47427b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 4757d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4761d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu sb.setLength(0); 4771d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu allowed = isDataAllowed(sb); 4781d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu assertTrue(sb.toString(), allowed); 4791d70c5957152ac4c8541f530e42ce596ca3f11d5Jack Yu 4807d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 4817d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 4827d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN1), 4837d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(""), eq(""), eq(0), eq("IP"), any(Message.class)); 4847d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4857d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Make sure we never notify connected because the data call setup is supposed to fail. 4867d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mPhone, never()).notifyDataConnection(eq(Phone.REASON_CONNECTED), 4877d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(PhoneConstants.APN_TYPE_DEFAULT)); 4887d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4897d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify the retry manger schedule another data call setup. 4907d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mAlarmManager, times(1)).setExact(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), 4917d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu anyLong(), any(PendingIntent.class)); 4927d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4937d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // This time we'll let RIL command succeed. 4947d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mSimulatedCommands.setDataCallResponse(true, createDataCallResponse()); 4957d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 4967d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Simulate the timer expires. 4977d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu Intent intent = new Intent("com.android.internal.telephony.data-reconnect.default"); 4987d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.putExtra("reconnect_alarm_extra_type", PhoneConstants.APN_TYPE_DEFAULT); 4997d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 0); 5007d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 5017d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu mContext.sendBroadcast(intent); 5027d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu waitForMs(200); 5037d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5047d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify if RIL command was sent properly. 5057d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 5067d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN2), 5077d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu eq(""), eq(""), eq(0), eq("IP"), any(Message.class)); 5087d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu 5097d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu // Verify connected with APN2 setting. 5107d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu verifyDataConnected(FAKE_APN2); 51127b650c406018355a88a41528db7859e232728a0Jack Yu } 512783061ca03572618c01ce244d70d82fa4328d45ffionaxu 513783061ca03572618c01ce244d70d82fa4328d45ffionaxu @Test 514783061ca03572618c01ce244d70d82fa4328d45ffionaxu @MediumTest 515783061ca03572618c01ce244d70d82fa4328d45ffionaxu public void testUserDisableData() throws Exception { 516783061ca03572618c01ce244d70d82fa4328d45ffionaxu //step 1: setup two DataCalls one for Metered: default, another one for Non-metered: IMS 517783061ca03572618c01ce244d70d82fa4328d45ffionaxu //set Default and MMS to be metered in the CarrierConfigManager 518783061ca03572618c01ce244d70d82fa4328d45ffionaxu boolean dataEnabled = mDct.getDataEnabled(); 519783061ca03572618c01ce244d70d82fa4328d45ffionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 520783061ca03572618c01ce244d70d82fa4328d45ffionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 521783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(5, true); 522783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(0, true); 523783061ca03572618c01ce244d70d82fa4328d45ffionaxu 524783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_RECORDS_LOADED"); 525783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 526783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 527783061ca03572618c01ce244d70d82fa4328d45ffionaxu 528783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 529783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 530783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 531783061ca03572618c01ce244d70d82fa4328d45ffionaxu 532783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_ENABLED_CMD"); 533783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(true); 534783061ca03572618c01ce244d70d82fa4328d45ffionaxu 535783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 536783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 537783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN1), 538783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(""), eq(""), eq(0), eq("IP"), any(Message.class)); 539783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 540783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(2), eq(FAKE_APN3), 541783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(""), eq(""), eq(3), eq("IP"), any(Message.class)); 542783061ca03572618c01ce244d70d82fa4328d45ffionaxu 543783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_DISABLED_CMD"); 544783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(false); 545783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 546783061ca03572618c01ce244d70d82fa4328d45ffionaxu 547783061ca03572618c01ce244d70d82fa4328d45ffionaxu // expected tear down all metered DataConnections 548783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 549783061ca03572618c01ce244d70d82fa4328d45ffionaxu any(Message.class)); 550783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 551783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 552783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 553783061ca03572618c01ce244d70d82fa4328d45ffionaxu 554783061ca03572618c01ce244d70d82fa4328d45ffionaxu // reset the setting at the end of this test 555783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(dataEnabled); 556783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 557783061ca03572618c01ce244d70d82fa4328d45ffionaxu } 558783061ca03572618c01ce244d70d82fa4328d45ffionaxu 559783061ca03572618c01ce244d70d82fa4328d45ffionaxu @Test 560783061ca03572618c01ce244d70d82fa4328d45ffionaxu @MediumTest 561783061ca03572618c01ce244d70d82fa4328d45ffionaxu public void testUserDisableRoaming() throws Exception { 562783061ca03572618c01ce244d70d82fa4328d45ffionaxu //step 1: setup two DataCalls one for Metered: default, another one for Non-metered: IMS 563783061ca03572618c01ce244d70d82fa4328d45ffionaxu //set Default and MMS to be metered in the CarrierConfigManager 564783061ca03572618c01ce244d70d82fa4328d45ffionaxu boolean roamingEnabled = mDct.getDataOnRoamingEnabled(); 565783061ca03572618c01ce244d70d82fa4328d45ffionaxu mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, 566783061ca03572618c01ce244d70d82fa4328d45ffionaxu new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); 567783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(5, true); 568783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setEnabled(0, true); 569783061ca03572618c01ce244d70d82fa4328d45ffionaxu 570783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_RECORDS_LOADED"); 571783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 572783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 573783061ca03572618c01ce244d70d82fa4328d45ffionaxu 574783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 575783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 576783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 577783061ca03572618c01ce244d70d82fa4328d45ffionaxu 578783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DATA_ENABLED_CMD"); 579783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataEnabled(true); 580783061ca03572618c01ce244d70d82fa4328d45ffionaxu 581783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 582783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 583783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN1), 584783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(""), eq(""), eq(0), eq("IP"), any(Message.class)); 585783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 586783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(2), eq(FAKE_APN3), 587783061ca03572618c01ce244d70d82fa4328d45ffionaxu eq(""), eq(""), eq(3), eq("IP"), any(Message.class)); 588783061ca03572618c01ce244d70d82fa4328d45ffionaxu 589783061ca03572618c01ce244d70d82fa4328d45ffionaxu logd("Sending DISABLE_ROAMING_CMD"); 590783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataOnRoamingEnabled(false); 591783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_ROAMING_ON)); 592783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 593783061ca03572618c01ce244d70d82fa4328d45ffionaxu 594783061ca03572618c01ce244d70d82fa4328d45ffionaxu // expected tear down all metered DataConnections 595783061ca03572618c01ce244d70d82fa4328d45ffionaxu verify(mSimulatedCommandsVerifier, times(1)).deactivateDataCall(anyInt(), anyInt(), 596783061ca03572618c01ce244d70d82fa4328d45ffionaxu any(Message.class)); 597783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 598783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.IDLE, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 599783061ca03572618c01ce244d70d82fa4328d45ffionaxu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS)); 600783061ca03572618c01ce244d70d82fa4328d45ffionaxu 601783061ca03572618c01ce244d70d82fa4328d45ffionaxu // reset roaming settings at end of this test 602783061ca03572618c01ce244d70d82fa4328d45ffionaxu mDct.setDataOnRoamingEnabled(roamingEnabled); 603783061ca03572618c01ce244d70d82fa4328d45ffionaxu waitForMs(200); 604783061ca03572618c01ce244d70d82fa4328d45ffionaxu } 605783061ca03572618c01ce244d70d82fa4328d45ffionaxu} 606