DcTrackerTest.java revision 783e33ac9e332b7eefa6bb125fbdb82e0c928c73
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 1727b650c406018355a88a41528db7859e232728a0Jack Yupackage com.android.internal.telephony; 1827b650c406018355a88a41528db7859e232728a0Jack Yu 1927b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.AlarmManager; 2027b650c406018355a88a41528db7859e232728a0Jack Yuimport android.app.PendingIntent; 2127b650c406018355a88a41528db7859e232728a0Jack Yuimport android.content.Context; 2227b650c406018355a88a41528db7859e232728a0Jack Yuimport android.database.Cursor; 2327b650c406018355a88a41528db7859e232728a0Jack Yuimport android.database.MatrixCursor; 2427b650c406018355a88a41528db7859e232728a0Jack Yuimport android.net.LinkProperties; 2527b650c406018355a88a41528db7859e232728a0Jack Yuimport android.net.Uri; 2627b650c406018355a88a41528db7859e232728a0Jack Yuimport android.os.HandlerThread; 27783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport android.os.IBinder; 2827b650c406018355a88a41528db7859e232728a0Jack Yuimport android.os.Message; 29783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport android.os.ServiceManager; 3027b650c406018355a88a41528db7859e232728a0Jack Yuimport android.provider.Telephony; 3127b650c406018355a88a41528db7859e232728a0Jack Yuimport android.telephony.ServiceState; 3227b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentProvider; 3327b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentResolver; 3427b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.suitebuilder.annotation.MediumTest; 3527b650c406018355a88a41528db7859e232728a0Jack Yu 3627b650c406018355a88a41528db7859e232728a0Jack Yuimport com.android.internal.telephony.dataconnection.DataCallResponse; 3727b650c406018355a88a41528db7859e232728a0Jack Yuimport com.android.internal.telephony.dataconnection.DcTracker; 3827b650c406018355a88a41528db7859e232728a0Jack Yu 3927b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.After; 4027b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Before; 4127b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Test; 4227b650c406018355a88a41528db7859e232728a0Jack Yuimport org.mockito.ArgumentCaptor; 43783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport org.mockito.Mock; 4427b650c406018355a88a41528db7859e232728a0Jack Yu 4527b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.Arrays; 46783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport java.util.HashMap; 4727b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.List; 4827b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Matcher; 4927b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Pattern; 5027b650c406018355a88a41528db7859e232728a0Jack Yu 5127b650c406018355a88a41528db7859e232728a0Jack Yuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 5227b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertArrayEquals; 5327b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertEquals; 5427b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertTrue; 5527b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.any; 5627b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.anyLong; 57783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport static org.mockito.Matchers.anyString; 5827b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.eq; 5927b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.doReturn; 6027b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.times; 6127b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.verify; 6227b650c406018355a88a41528db7859e232728a0Jack Yu 6327b650c406018355a88a41528db7859e232728a0Jack Yupublic class DcTrackerTest extends TelephonyTest { 6427b650c406018355a88a41528db7859e232728a0Jack Yu 6527b650c406018355a88a41528db7859e232728a0Jack Yu private final static String[] sNetworkAttributes = new String[]{ 6627b650c406018355a88a41528db7859e232728a0Jack Yu "mobile,0,0,0,-1,true", "mobile_mms,2,0,2,60000,true", 6727b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_supl,3,0,2,60000,true", "mobile_dun,4,0,2,60000,true", 6827b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_hipri,5,0,3,60000,true", "mobile_fota,10,0,2,60000,true", 6927b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ims,11,0,2,60000,true", "mobile_cbs,12,0,2,60000,true", 7027b650c406018355a88a41528db7859e232728a0Jack Yu "mobile_ia,14,0,2,-1,true", "mobile_emergency,15,0,2,-1,true"}; 7127b650c406018355a88a41528db7859e232728a0Jack Yu 7227b650c406018355a88a41528db7859e232728a0Jack Yu private final List<String> sApnTypes = Arrays.asList( 7327b650c406018355a88a41528db7859e232728a0Jack Yu "default", "mms", "cbs", "fota", "supl", "ia", "emergency", "dun", "hipri", "ims"); 7427b650c406018355a88a41528db7859e232728a0Jack Yu 7527b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_APN1 = "FAKE APN 1"; 7627b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_APN2 = "FAKE APN 2"; 7727b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_APN3 = "FAKE APN 3"; 7827b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_IFNAME = "FAKE IFNAME"; 7927b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_PCSCF_ADDRESS = "22.33.44.55"; 8027b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_GATEWAY = "11.22.33.44"; 8127b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_DNS = "55.66.77.88"; 8227b650c406018355a88a41528db7859e232728a0Jack Yu private final String FAKE_ADDRESS = "99.88.77.66"; 8327b650c406018355a88a41528db7859e232728a0Jack Yu 84783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 85783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu ISub mIsub; 86783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 87783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu HashMap<String, IBinder> mServiceCache; 88783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu @Mock 89783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu IBinder mBinder; 90783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 91783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 9227b650c406018355a88a41528db7859e232728a0Jack Yu private DcTracker mDct; 9327b650c406018355a88a41528db7859e232728a0Jack Yu 9427b650c406018355a88a41528db7859e232728a0Jack Yu private AlarmManager mAlarmManager; 9527b650c406018355a88a41528db7859e232728a0Jack Yu 9627b650c406018355a88a41528db7859e232728a0Jack Yu private final ApnSettingContentProvider mApnSettingContentProvider = 9727b650c406018355a88a41528db7859e232728a0Jack Yu new ApnSettingContentProvider(); 9827b650c406018355a88a41528db7859e232728a0Jack Yu 9927b650c406018355a88a41528db7859e232728a0Jack Yu private class DcTrackerTestHandler extends HandlerThread { 10027b650c406018355a88a41528db7859e232728a0Jack Yu 10127b650c406018355a88a41528db7859e232728a0Jack Yu private DcTrackerTestHandler(String name) { 10227b650c406018355a88a41528db7859e232728a0Jack Yu super(name); 10327b650c406018355a88a41528db7859e232728a0Jack Yu } 10427b650c406018355a88a41528db7859e232728a0Jack Yu 10527b650c406018355a88a41528db7859e232728a0Jack Yu @Override 10627b650c406018355a88a41528db7859e232728a0Jack Yu public void onLooperPrepared() { 10727b650c406018355a88a41528db7859e232728a0Jack Yu mDct = new DcTracker(mPhone); 10827b650c406018355a88a41528db7859e232728a0Jack Yu setReady(true); 10927b650c406018355a88a41528db7859e232728a0Jack Yu } 11027b650c406018355a88a41528db7859e232728a0Jack Yu } 11127b650c406018355a88a41528db7859e232728a0Jack Yu 11227b650c406018355a88a41528db7859e232728a0Jack Yu private class ApnSettingContentProvider extends MockContentProvider { 11327b650c406018355a88a41528db7859e232728a0Jack Yu 11427b650c406018355a88a41528db7859e232728a0Jack Yu @Override 11527b650c406018355a88a41528db7859e232728a0Jack Yu public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 11627b650c406018355a88a41528db7859e232728a0Jack Yu String sortOrder) { 11727b650c406018355a88a41528db7859e232728a0Jack Yu logd("ApnSettingContentProvider: query"); 11827b650c406018355a88a41528db7859e232728a0Jack Yu logd(" uri = " + uri); 11927b650c406018355a88a41528db7859e232728a0Jack Yu logd(" projection = " + Arrays.toString(projection)); 12027b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selection = " + selection); 12127b650c406018355a88a41528db7859e232728a0Jack Yu logd(" selectionArgs = " + Arrays.toString(selectionArgs)); 12227b650c406018355a88a41528db7859e232728a0Jack Yu logd(" sortOrder = " + sortOrder); 12327b650c406018355a88a41528db7859e232728a0Jack Yu 12427b650c406018355a88a41528db7859e232728a0Jack Yu if (uri.compareTo(Telephony.Carriers.CONTENT_URI) == 0) { 12527b650c406018355a88a41528db7859e232728a0Jack Yu if (projection == null && selectionArgs == null && selection != null) { 12627b650c406018355a88a41528db7859e232728a0Jack Yu 12727b650c406018355a88a41528db7859e232728a0Jack Yu Pattern pattern = Pattern.compile("^numeric = '([0-9]*)'"); 12827b650c406018355a88a41528db7859e232728a0Jack Yu Matcher matcher = pattern.matcher(selection); 12927b650c406018355a88a41528db7859e232728a0Jack Yu if (!matcher.find()) { 13027b650c406018355a88a41528db7859e232728a0Jack Yu logd("Cannot find MCC/MNC from " + selection); 13127b650c406018355a88a41528db7859e232728a0Jack Yu return null; 13227b650c406018355a88a41528db7859e232728a0Jack Yu } 13327b650c406018355a88a41528db7859e232728a0Jack Yu 13427b650c406018355a88a41528db7859e232728a0Jack Yu String plmn = matcher.group(1); 13527b650c406018355a88a41528db7859e232728a0Jack Yu 13627b650c406018355a88a41528db7859e232728a0Jack Yu logd("Query '" + plmn + "' APN settings"); 13727b650c406018355a88a41528db7859e232728a0Jack Yu MatrixCursor mc = new MatrixCursor( 13827b650c406018355a88a41528db7859e232728a0Jack Yu new String[]{Telephony.Carriers._ID, Telephony.Carriers.NUMERIC, 13927b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.NAME, Telephony.Carriers.APN, 14027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROXY, Telephony.Carriers.PORT, 14127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSC, Telephony.Carriers.MMSPROXY, 14227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MMSPORT, Telephony.Carriers.USER, 14327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PASSWORD, Telephony.Carriers.AUTH_TYPE, 14427b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.TYPE, 14527b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROTOCOL, 14627b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.ROAMING_PROTOCOL, 14727b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CARRIER_ENABLED, Telephony.Carriers.BEARER, 14827b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.BEARER_BITMASK, 14927b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.PROFILE_ID, 15027b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MODEM_COGNITIVE, 15127b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS, Telephony.Carriers.WAIT_TIME, 15227b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MAX_CONNS_TIME, Telephony.Carriers.MTU, 15327b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_TYPE, 15427b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.MVNO_MATCH_DATA}); 15527b650c406018355a88a41528db7859e232728a0Jack Yu 15627b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 15727b650c406018355a88a41528db7859e232728a0Jack Yu 2163, // id 15827b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 15927b650c406018355a88a41528db7859e232728a0Jack Yu "sp-mode", // name 16027b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN1, // apn 16127b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 16227b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 16327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 16427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 16527b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 16627b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 16727b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 16827b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 16927b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 17027b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 17127b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 17227b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 17327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 17427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 17527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 17627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 17727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 17827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 17927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 18027b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 18127b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 18227b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 18327b650c406018355a88a41528db7859e232728a0Jack Yu }); 18427b650c406018355a88a41528db7859e232728a0Jack Yu 18527b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 18627b650c406018355a88a41528db7859e232728a0Jack Yu 2164, // id 18727b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 18827b650c406018355a88a41528db7859e232728a0Jack Yu "mopera U", // name 18927b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN2, // apn 19027b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 19127b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 19227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 19327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 19427b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 19527b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 19627b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 19727b650c406018355a88a41528db7859e232728a0Jack Yu -1, // authtype 19827b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 19927b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 20027b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 20127b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 20227b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 20327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 20427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 20527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 20627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 20727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 20827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 20927b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 21027b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 21127b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 21227b650c406018355a88a41528db7859e232728a0Jack Yu }); 21327b650c406018355a88a41528db7859e232728a0Jack Yu 21427b650c406018355a88a41528db7859e232728a0Jack Yu mc.addRow(new Object[]{ 21527b650c406018355a88a41528db7859e232728a0Jack Yu 2165, // id 21627b650c406018355a88a41528db7859e232728a0Jack Yu plmn, // numeric 21727b650c406018355a88a41528db7859e232728a0Jack Yu "b-mobile for Nexus", // name 21827b650c406018355a88a41528db7859e232728a0Jack Yu FAKE_APN3, // apn 21927b650c406018355a88a41528db7859e232728a0Jack Yu "", // proxy 22027b650c406018355a88a41528db7859e232728a0Jack Yu "", // port 22127b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsc 22227b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsproxy 22327b650c406018355a88a41528db7859e232728a0Jack Yu "", // mmsport 22427b650c406018355a88a41528db7859e232728a0Jack Yu "", // user 22527b650c406018355a88a41528db7859e232728a0Jack Yu "", // password 22627b650c406018355a88a41528db7859e232728a0Jack Yu 3, // authtype 22727b650c406018355a88a41528db7859e232728a0Jack Yu "default,supl", // types 22827b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // protocol 22927b650c406018355a88a41528db7859e232728a0Jack Yu "IP", // roaming_protocol 23027b650c406018355a88a41528db7859e232728a0Jack Yu 1, // carrier_enabled 23127b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer 23227b650c406018355a88a41528db7859e232728a0Jack Yu 0, // bearer_bitmask 23327b650c406018355a88a41528db7859e232728a0Jack Yu 0, // profile_id 23427b650c406018355a88a41528db7859e232728a0Jack Yu 0, // modem_cognitive 23527b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns 23627b650c406018355a88a41528db7859e232728a0Jack Yu 0, // wait_time 23727b650c406018355a88a41528db7859e232728a0Jack Yu 0, // max_conns_time 23827b650c406018355a88a41528db7859e232728a0Jack Yu 0, // mtu 23927b650c406018355a88a41528db7859e232728a0Jack Yu "", // mvno_type 24027b650c406018355a88a41528db7859e232728a0Jack Yu "" // mnvo_match_data 24127b650c406018355a88a41528db7859e232728a0Jack Yu }); 24227b650c406018355a88a41528db7859e232728a0Jack Yu 24327b650c406018355a88a41528db7859e232728a0Jack Yu return mc; 24427b650c406018355a88a41528db7859e232728a0Jack Yu } 24527b650c406018355a88a41528db7859e232728a0Jack Yu } 24627b650c406018355a88a41528db7859e232728a0Jack Yu 24727b650c406018355a88a41528db7859e232728a0Jack Yu return null; 24827b650c406018355a88a41528db7859e232728a0Jack Yu } 24927b650c406018355a88a41528db7859e232728a0Jack Yu } 25027b650c406018355a88a41528db7859e232728a0Jack Yu 25127b650c406018355a88a41528db7859e232728a0Jack Yu @Before 25227b650c406018355a88a41528db7859e232728a0Jack Yu public void setUp() throws Exception { 25327b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest +Setup!"); 25427b650c406018355a88a41528db7859e232728a0Jack Yu super.setUp(getClass().getSimpleName()); 25527b650c406018355a88a41528db7859e232728a0Jack Yu 25627b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_detached").when(mPhone).getActionDetached(); 25727b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("fake.action_attached").when(mPhone).getActionAttached(); 25827b650c406018355a88a41528db7859e232728a0Jack Yu doReturn("44010").when(mSimRecords).getOperatorNumeric(); 25927b650c406018355a88a41528db7859e232728a0Jack Yu 26027b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array.networkAttributes, 26127b650c406018355a88a41528db7859e232728a0Jack Yu sNetworkAttributes); 26227b650c406018355a88a41528db7859e232728a0Jack Yu mContextFixture.putStringArrayResource(com.android.internal.R.array. 26327b650c406018355a88a41528db7859e232728a0Jack Yu config_mobile_tcp_buffers, new String[]{ 26427b650c406018355a88a41528db7859e232728a0Jack Yu "umts:131072,262144,1452032,4096,16384,399360", 26527b650c406018355a88a41528db7859e232728a0Jack Yu "hspa:131072,262144,2441216,4096,16384,399360", 26627b650c406018355a88a41528db7859e232728a0Jack Yu "hsupa:131072,262144,2441216,4096,16384,399360", 26727b650c406018355a88a41528db7859e232728a0Jack Yu "hsdpa:131072,262144,2441216,4096,16384,399360", 26827b650c406018355a88a41528db7859e232728a0Jack Yu "hspap:131072,262144,2441216,4096,16384,399360", 26927b650c406018355a88a41528db7859e232728a0Jack Yu "edge:16384,32768,131072,4096,16384,65536", 27027b650c406018355a88a41528db7859e232728a0Jack Yu "gprs:4096,8192,24576,4096,8192,24576", 27127b650c406018355a88a41528db7859e232728a0Jack Yu "1xrtt:16384,32768,131070,4096,16384,102400", 27227b650c406018355a88a41528db7859e232728a0Jack Yu "evdo:131072,262144,1048576,4096,16384,524288", 27327b650c406018355a88a41528db7859e232728a0Jack Yu "lte:524288,1048576,8388608,262144,524288,4194304"}); 27427b650c406018355a88a41528db7859e232728a0Jack Yu 27527b650c406018355a88a41528db7859e232728a0Jack Yu ((MockContentResolver) mContextFixture.getTestDouble().getContentResolver()).addProvider( 27627b650c406018355a88a41528db7859e232728a0Jack Yu Telephony.Carriers.CONTENT_URI.getAuthority(), mApnSettingContentProvider); 27727b650c406018355a88a41528db7859e232728a0Jack Yu 27827b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSimRecords).getRecordsLoaded(); 27927b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(PhoneConstants.State.IDLE).when(mCT).getState(); 28027b650c406018355a88a41528db7859e232728a0Jack Yu doReturn(true).when(mSST).getDesiredPowerState(); 28127b650c406018355a88a41528db7859e232728a0Jack Yu 282783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(1).when(mIsub).getDefaultDataSubId(); 283783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(mIsub).when(mBinder).queryLocalInterface(anyString()); 284783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu doReturn(mBinder).when(mServiceCache).get(anyString()); 285783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu replaceInstance(ServiceManager.class, "sCache", null, mServiceCache); 286783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu 28727b650c406018355a88a41528db7859e232728a0Jack Yu mAlarmManager = (AlarmManager) mContextFixture.getTestDouble(). 28827b650c406018355a88a41528db7859e232728a0Jack Yu getSystemService(Context.ALARM_SERVICE); 28927b650c406018355a88a41528db7859e232728a0Jack Yu 29027b650c406018355a88a41528db7859e232728a0Jack Yu new DcTrackerTestHandler(getClass().getSimpleName()).start(); 29127b650c406018355a88a41528db7859e232728a0Jack Yu waitUntilReady(); 29227b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(600); 29327b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -Setup!"); 29427b650c406018355a88a41528db7859e232728a0Jack Yu } 29527b650c406018355a88a41528db7859e232728a0Jack Yu 29627b650c406018355a88a41528db7859e232728a0Jack Yu @After 29727b650c406018355a88a41528db7859e232728a0Jack Yu public void tearDown() throws Exception { 29827b650c406018355a88a41528db7859e232728a0Jack Yu logd("DcTrackerTest -tearDown"); 29927b650c406018355a88a41528db7859e232728a0Jack Yu mDct.removeCallbacksAndMessages(null); 30027b650c406018355a88a41528db7859e232728a0Jack Yu mDct = null; 30127b650c406018355a88a41528db7859e232728a0Jack Yu super.tearDown(); 30227b650c406018355a88a41528db7859e232728a0Jack Yu } 30327b650c406018355a88a41528db7859e232728a0Jack Yu 30427b650c406018355a88a41528db7859e232728a0Jack Yu void verifyDataConnected() { 30527b650c406018355a88a41528db7859e232728a0Jack Yu verify(mSimulatedCommandsVerifier, times(1)).setupDataCall( 30627b650c406018355a88a41528db7859e232728a0Jack Yu eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN1), 30727b650c406018355a88a41528db7859e232728a0Jack Yu eq(""), eq(""), eq(0), eq("IP"), any(Message.class)); 30827b650c406018355a88a41528db7859e232728a0Jack Yu 30927b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(1)).notifyDataConnection(eq(Phone.REASON_CONNECTED), 31027b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.APN_TYPE_DEFAULT)); 31127b650c406018355a88a41528db7859e232728a0Jack Yu 31227b650c406018355a88a41528db7859e232728a0Jack Yu verify(mAlarmManager, times(1)).set(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), anyLong(), 31327b650c406018355a88a41528db7859e232728a0Jack Yu any(PendingIntent.class)); 31427b650c406018355a88a41528db7859e232728a0Jack Yu 31527b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_APN1, mDct.getActiveApnString(PhoneConstants.APN_TYPE_DEFAULT)); 31627b650c406018355a88a41528db7859e232728a0Jack Yu assertArrayEquals(new String[]{PhoneConstants.APN_TYPE_DEFAULT}, mDct.getActiveApnTypes()); 31727b650c406018355a88a41528db7859e232728a0Jack Yu assertTrue(mDct.getAnyDataEnabled()); 31827b650c406018355a88a41528db7859e232728a0Jack Yu assertTrue(mDct.getDataEnabled()); 31927b650c406018355a88a41528db7859e232728a0Jack Yu 32027b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState()); 32127b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); 32227b650c406018355a88a41528db7859e232728a0Jack Yu 32327b650c406018355a88a41528db7859e232728a0Jack Yu LinkProperties linkProperties = mDct.getLinkProperties(PhoneConstants.APN_TYPE_DEFAULT); 32427b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_IFNAME, linkProperties.getInterfaceName()); 32527b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getAddresses().size()); 32627b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_ADDRESS, linkProperties.getAddresses().get(0).getHostAddress()); 32727b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(1, linkProperties.getDnsServers().size()); 32827b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_DNS, linkProperties.getDnsServers().get(0).getHostAddress()); 32927b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(FAKE_GATEWAY, linkProperties.getRoutes().get(0).getGateway().getHostAddress()); 33027b650c406018355a88a41528db7859e232728a0Jack Yu } 33127b650c406018355a88a41528db7859e232728a0Jack Yu 33227b650c406018355a88a41528db7859e232728a0Jack Yu @Test 33327b650c406018355a88a41528db7859e232728a0Jack Yu @MediumTest 33427b650c406018355a88a41528db7859e232728a0Jack Yu public void testDataSetup() { 33527b650c406018355a88a41528db7859e232728a0Jack Yu 33627b650c406018355a88a41528db7859e232728a0Jack Yu DataCallResponse dcResponse = new DataCallResponse(); 33727b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.version = 11; 33827b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.status = 0; 33927b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.suggestedRetryTime = -1; 34027b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.cid = 1; 34127b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.active = 2; 34227b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.type = "IP"; 34327b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.ifname = FAKE_IFNAME; 34427b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.mtu = 1440; 34527b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.addresses = new String[]{FAKE_ADDRESS}; 34627b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.dnses = new String[]{FAKE_DNS}; 34727b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.gateways = new String[]{FAKE_GATEWAY}; 34827b650c406018355a88a41528db7859e232728a0Jack Yu dcResponse.pcscf = new String[]{FAKE_PCSCF_ADDRESS}; 34927b650c406018355a88a41528db7859e232728a0Jack Yu 35027b650c406018355a88a41528db7859e232728a0Jack Yu mSimulatedCommands.setDataCallResponse(dcResponse); 35127b650c406018355a88a41528db7859e232728a0Jack Yu 35227b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_RECORDS_LOADED"); 35327b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); 35427b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 35527b650c406018355a88a41528db7859e232728a0Jack Yu 35627b650c406018355a88a41528db7859e232728a0Jack Yu ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 35727b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 35827b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(), 35927b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 36027b650c406018355a88a41528db7859e232728a0Jack Yu 36127b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 36227b650c406018355a88a41528db7859e232728a0Jack Yu 36327b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); 36427b650c406018355a88a41528db7859e232728a0Jack Yu mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); 36527b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 36627b650c406018355a88a41528db7859e232728a0Jack Yu 36727b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 36827b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 36927b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(), 37027b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 37127b650c406018355a88a41528db7859e232728a0Jack Yu 37227b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 37327b650c406018355a88a41528db7859e232728a0Jack Yu 37427b650c406018355a88a41528db7859e232728a0Jack Yu apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class); 37527b650c406018355a88a41528db7859e232728a0Jack Yu verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection( 37627b650c406018355a88a41528db7859e232728a0Jack Yu eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(), 37727b650c406018355a88a41528db7859e232728a0Jack Yu eq(PhoneConstants.DataState.DISCONNECTED)); 37827b650c406018355a88a41528db7859e232728a0Jack Yu 37927b650c406018355a88a41528db7859e232728a0Jack Yu assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues()); 38027b650c406018355a88a41528db7859e232728a0Jack Yu 38127b650c406018355a88a41528db7859e232728a0Jack Yu logd("Sending EVENT_ENABLE_NEW_APN"); 38227b650c406018355a88a41528db7859e232728a0Jack Yu // APN id 0 is APN_TYPE_DEFAULT 38327b650c406018355a88a41528db7859e232728a0Jack Yu mDct.setEnabled(0, true); 38427b650c406018355a88a41528db7859e232728a0Jack Yu waitForMs(200); 38527b650c406018355a88a41528db7859e232728a0Jack Yu verifyDataConnected(); 38627b650c406018355a88a41528db7859e232728a0Jack Yu } 38727b650c406018355a88a41528db7859e232728a0Jack Yu}