DcTrackerTest.java revision 7d6d7d6cb68ee37b4bee33588ba2594e9cf0c197
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;
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;
30783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport android.os.ServiceManager;
3127b650c406018355a88a41528db7859e232728a0Jack Yuimport android.provider.Telephony;
3227b650c406018355a88a41528db7859e232728a0Jack Yuimport android.telephony.ServiceState;
3327b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentProvider;
3427b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.mock.MockContentResolver;
3527b650c406018355a88a41528db7859e232728a0Jack Yuimport android.test.suitebuilder.annotation.MediumTest;
3627b650c406018355a88a41528db7859e232728a0Jack Yu
3727b650c406018355a88a41528db7859e232728a0Jack Yuimport com.android.internal.telephony.dataconnection.DataCallResponse;
3827b650c406018355a88a41528db7859e232728a0Jack Yuimport com.android.internal.telephony.dataconnection.DcTracker;
3927b650c406018355a88a41528db7859e232728a0Jack Yu
4027b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.After;
4127b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Before;
4227b650c406018355a88a41528db7859e232728a0Jack Yuimport org.junit.Test;
4327b650c406018355a88a41528db7859e232728a0Jack Yuimport org.mockito.ArgumentCaptor;
44783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport org.mockito.Mock;
4527b650c406018355a88a41528db7859e232728a0Jack Yu
4627b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.Arrays;
47783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport java.util.HashMap;
4827b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.List;
4927b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Matcher;
5027b650c406018355a88a41528db7859e232728a0Jack Yuimport java.util.regex.Pattern;
5127b650c406018355a88a41528db7859e232728a0Jack Yu
5227b650c406018355a88a41528db7859e232728a0Jack Yuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs;
5327b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertArrayEquals;
5427b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertEquals;
5527b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.junit.Assert.assertTrue;
5627b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.any;
5727b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.anyLong;
58783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yuimport static org.mockito.Matchers.anyString;
5927b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Matchers.eq;
6027b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.doReturn;
617d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yuimport static org.mockito.Mockito.never;
6227b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.times;
6327b650c406018355a88a41528db7859e232728a0Jack Yuimport static org.mockito.Mockito.verify;
6427b650c406018355a88a41528db7859e232728a0Jack Yu
6527b650c406018355a88a41528db7859e232728a0Jack Yupublic class DcTrackerTest extends TelephonyTest {
6627b650c406018355a88a41528db7859e232728a0Jack Yu
6727b650c406018355a88a41528db7859e232728a0Jack Yu    private final static String[] sNetworkAttributes = new String[]{
6827b650c406018355a88a41528db7859e232728a0Jack Yu            "mobile,0,0,0,-1,true", "mobile_mms,2,0,2,60000,true",
6927b650c406018355a88a41528db7859e232728a0Jack Yu            "mobile_supl,3,0,2,60000,true", "mobile_dun,4,0,2,60000,true",
7027b650c406018355a88a41528db7859e232728a0Jack Yu            "mobile_hipri,5,0,3,60000,true", "mobile_fota,10,0,2,60000,true",
7127b650c406018355a88a41528db7859e232728a0Jack Yu            "mobile_ims,11,0,2,60000,true", "mobile_cbs,12,0,2,60000,true",
7227b650c406018355a88a41528db7859e232728a0Jack Yu            "mobile_ia,14,0,2,-1,true", "mobile_emergency,15,0,2,-1,true"};
7327b650c406018355a88a41528db7859e232728a0Jack Yu
7427b650c406018355a88a41528db7859e232728a0Jack Yu    private final List<String> sApnTypes = Arrays.asList(
7527b650c406018355a88a41528db7859e232728a0Jack Yu            "default", "mms", "cbs", "fota", "supl", "ia", "emergency", "dun", "hipri", "ims");
7627b650c406018355a88a41528db7859e232728a0Jack Yu
7727b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_APN1 = "FAKE APN 1";
7827b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_APN2 = "FAKE APN 2";
7927b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_APN3 = "FAKE APN 3";
8027b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_IFNAME = "FAKE IFNAME";
8127b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_PCSCF_ADDRESS = "22.33.44.55";
8227b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_GATEWAY = "11.22.33.44";
8327b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_DNS = "55.66.77.88";
8427b650c406018355a88a41528db7859e232728a0Jack Yu    private final String FAKE_ADDRESS = "99.88.77.66";
8527b650c406018355a88a41528db7859e232728a0Jack Yu
86783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu    @Mock
87783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu    ISub mIsub;
88783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu    @Mock
89783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu    HashMap<String, IBinder> mServiceCache;
90783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu    @Mock
91783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu    IBinder mBinder;
92783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu
93783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu
9427b650c406018355a88a41528db7859e232728a0Jack Yu    private DcTracker mDct;
9527b650c406018355a88a41528db7859e232728a0Jack Yu
9627b650c406018355a88a41528db7859e232728a0Jack Yu    private AlarmManager mAlarmManager;
9727b650c406018355a88a41528db7859e232728a0Jack Yu
9827b650c406018355a88a41528db7859e232728a0Jack Yu    private final ApnSettingContentProvider mApnSettingContentProvider =
9927b650c406018355a88a41528db7859e232728a0Jack Yu            new ApnSettingContentProvider();
10027b650c406018355a88a41528db7859e232728a0Jack Yu
10127b650c406018355a88a41528db7859e232728a0Jack Yu    private class DcTrackerTestHandler extends HandlerThread {
10227b650c406018355a88a41528db7859e232728a0Jack Yu
10327b650c406018355a88a41528db7859e232728a0Jack Yu        private DcTrackerTestHandler(String name) {
10427b650c406018355a88a41528db7859e232728a0Jack Yu            super(name);
10527b650c406018355a88a41528db7859e232728a0Jack Yu        }
10627b650c406018355a88a41528db7859e232728a0Jack Yu
10727b650c406018355a88a41528db7859e232728a0Jack Yu        @Override
10827b650c406018355a88a41528db7859e232728a0Jack Yu        public void onLooperPrepared() {
10927b650c406018355a88a41528db7859e232728a0Jack Yu            mDct = new DcTracker(mPhone);
11027b650c406018355a88a41528db7859e232728a0Jack Yu            setReady(true);
11127b650c406018355a88a41528db7859e232728a0Jack Yu        }
11227b650c406018355a88a41528db7859e232728a0Jack Yu    }
11327b650c406018355a88a41528db7859e232728a0Jack Yu
11427b650c406018355a88a41528db7859e232728a0Jack Yu    private class ApnSettingContentProvider extends MockContentProvider {
11527b650c406018355a88a41528db7859e232728a0Jack Yu
11627b650c406018355a88a41528db7859e232728a0Jack Yu        @Override
11727b650c406018355a88a41528db7859e232728a0Jack Yu        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
11827b650c406018355a88a41528db7859e232728a0Jack Yu                            String sortOrder) {
11927b650c406018355a88a41528db7859e232728a0Jack Yu            logd("ApnSettingContentProvider: query");
12027b650c406018355a88a41528db7859e232728a0Jack Yu            logd("   uri = " + uri);
12127b650c406018355a88a41528db7859e232728a0Jack Yu            logd("   projection = " + Arrays.toString(projection));
12227b650c406018355a88a41528db7859e232728a0Jack Yu            logd("   selection = " + selection);
12327b650c406018355a88a41528db7859e232728a0Jack Yu            logd("   selectionArgs = " + Arrays.toString(selectionArgs));
12427b650c406018355a88a41528db7859e232728a0Jack Yu            logd("   sortOrder = " + sortOrder);
12527b650c406018355a88a41528db7859e232728a0Jack Yu
12627b650c406018355a88a41528db7859e232728a0Jack Yu            if (uri.compareTo(Telephony.Carriers.CONTENT_URI) == 0) {
12727b650c406018355a88a41528db7859e232728a0Jack Yu                if (projection == null && selectionArgs == null && selection != null) {
12827b650c406018355a88a41528db7859e232728a0Jack Yu
12927b650c406018355a88a41528db7859e232728a0Jack Yu                    Pattern pattern = Pattern.compile("^numeric = '([0-9]*)'");
13027b650c406018355a88a41528db7859e232728a0Jack Yu                    Matcher matcher = pattern.matcher(selection);
13127b650c406018355a88a41528db7859e232728a0Jack Yu                    if (!matcher.find()) {
13227b650c406018355a88a41528db7859e232728a0Jack Yu                        logd("Cannot find MCC/MNC from " + selection);
13327b650c406018355a88a41528db7859e232728a0Jack Yu                        return null;
13427b650c406018355a88a41528db7859e232728a0Jack Yu                    }
13527b650c406018355a88a41528db7859e232728a0Jack Yu
13627b650c406018355a88a41528db7859e232728a0Jack Yu                    String plmn = matcher.group(1);
13727b650c406018355a88a41528db7859e232728a0Jack Yu
13827b650c406018355a88a41528db7859e232728a0Jack Yu                    logd("Query '" + plmn + "' APN settings");
13927b650c406018355a88a41528db7859e232728a0Jack Yu                    MatrixCursor mc = new MatrixCursor(
14027b650c406018355a88a41528db7859e232728a0Jack Yu                            new String[]{Telephony.Carriers._ID, Telephony.Carriers.NUMERIC,
14127b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.NAME, Telephony.Carriers.APN,
14227b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.PROXY, Telephony.Carriers.PORT,
14327b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.MMSC, Telephony.Carriers.MMSPROXY,
14427b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.MMSPORT, Telephony.Carriers.USER,
14527b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.PASSWORD, Telephony.Carriers.AUTH_TYPE,
14627b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.TYPE,
14727b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.PROTOCOL,
14827b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.ROAMING_PROTOCOL,
14927b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.CARRIER_ENABLED, Telephony.Carriers.BEARER,
15027b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.BEARER_BITMASK,
15127b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.PROFILE_ID,
15227b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.MODEM_COGNITIVE,
15327b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.MAX_CONNS, Telephony.Carriers.WAIT_TIME,
15427b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.MAX_CONNS_TIME, Telephony.Carriers.MTU,
15527b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.MVNO_TYPE,
15627b650c406018355a88a41528db7859e232728a0Jack Yu                                    Telephony.Carriers.MVNO_MATCH_DATA});
15727b650c406018355a88a41528db7859e232728a0Jack Yu
15827b650c406018355a88a41528db7859e232728a0Jack Yu                    mc.addRow(new Object[]{
15927b650c406018355a88a41528db7859e232728a0Jack Yu                            2163,                   // id
16027b650c406018355a88a41528db7859e232728a0Jack Yu                            plmn,                   // numeric
16127b650c406018355a88a41528db7859e232728a0Jack Yu                            "sp-mode",              // name
16227b650c406018355a88a41528db7859e232728a0Jack Yu                            FAKE_APN1,              // apn
16327b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // proxy
16427b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // port
16527b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // mmsc
16627b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // mmsproxy
16727b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // mmsport
16827b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // user
16927b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // password
17027b650c406018355a88a41528db7859e232728a0Jack Yu                            -1,                     // authtype
17127b650c406018355a88a41528db7859e232728a0Jack Yu                            "default,supl",         // types
17227b650c406018355a88a41528db7859e232728a0Jack Yu                            "IP",                   // protocol
17327b650c406018355a88a41528db7859e232728a0Jack Yu                            "IP",                   // roaming_protocol
17427b650c406018355a88a41528db7859e232728a0Jack Yu                            1,                      // carrier_enabled
17527b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // bearer
17627b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // bearer_bitmask
17727b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // profile_id
17827b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // modem_cognitive
17927b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // max_conns
18027b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // wait_time
18127b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // max_conns_time
18227b650c406018355a88a41528db7859e232728a0Jack Yu                            0,                      // mtu
18327b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // mvno_type
18427b650c406018355a88a41528db7859e232728a0Jack Yu                            ""                      // mnvo_match_data
18527b650c406018355a88a41528db7859e232728a0Jack Yu                    });
18627b650c406018355a88a41528db7859e232728a0Jack Yu
18727b650c406018355a88a41528db7859e232728a0Jack Yu                    mc.addRow(new Object[]{
18827b650c406018355a88a41528db7859e232728a0Jack Yu                            2164,                   // id
18927b650c406018355a88a41528db7859e232728a0Jack Yu                            plmn,                   // numeric
19027b650c406018355a88a41528db7859e232728a0Jack Yu                            "mopera U",             // name
19127b650c406018355a88a41528db7859e232728a0Jack Yu                            FAKE_APN2,              // 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                            2165,                   // id
21827b650c406018355a88a41528db7859e232728a0Jack Yu                            plmn,                   // numeric
21927b650c406018355a88a41528db7859e232728a0Jack Yu                            "b-mobile for Nexus",   // name
22027b650c406018355a88a41528db7859e232728a0Jack Yu                            FAKE_APN3,              // apn
22127b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // proxy
22227b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // port
22327b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // mmsc
22427b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // mmsproxy
22527b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // mmsport
22627b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // user
22727b650c406018355a88a41528db7859e232728a0Jack Yu                            "",                     // password
22827b650c406018355a88a41528db7859e232728a0Jack Yu                            3,                      // 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                    return mc;
24627b650c406018355a88a41528db7859e232728a0Jack Yu                }
24727b650c406018355a88a41528db7859e232728a0Jack Yu            }
24827b650c406018355a88a41528db7859e232728a0Jack Yu
24927b650c406018355a88a41528db7859e232728a0Jack Yu            return null;
25027b650c406018355a88a41528db7859e232728a0Jack Yu        }
25127b650c406018355a88a41528db7859e232728a0Jack Yu    }
25227b650c406018355a88a41528db7859e232728a0Jack Yu
25327b650c406018355a88a41528db7859e232728a0Jack Yu    @Before
25427b650c406018355a88a41528db7859e232728a0Jack Yu    public void setUp() throws Exception {
25527b650c406018355a88a41528db7859e232728a0Jack Yu        logd("DcTrackerTest +Setup!");
25627b650c406018355a88a41528db7859e232728a0Jack Yu        super.setUp(getClass().getSimpleName());
25727b650c406018355a88a41528db7859e232728a0Jack Yu
25827b650c406018355a88a41528db7859e232728a0Jack Yu        doReturn("fake.action_detached").when(mPhone).getActionDetached();
25927b650c406018355a88a41528db7859e232728a0Jack Yu        doReturn("fake.action_attached").when(mPhone).getActionAttached();
26027b650c406018355a88a41528db7859e232728a0Jack Yu        doReturn("44010").when(mSimRecords).getOperatorNumeric();
26127b650c406018355a88a41528db7859e232728a0Jack Yu
26227b650c406018355a88a41528db7859e232728a0Jack Yu        mContextFixture.putStringArrayResource(com.android.internal.R.array.networkAttributes,
26327b650c406018355a88a41528db7859e232728a0Jack Yu                sNetworkAttributes);
26427b650c406018355a88a41528db7859e232728a0Jack Yu        mContextFixture.putStringArrayResource(com.android.internal.R.array.
26527b650c406018355a88a41528db7859e232728a0Jack Yu                config_mobile_tcp_buffers, new String[]{
26627b650c406018355a88a41528db7859e232728a0Jack Yu                "umts:131072,262144,1452032,4096,16384,399360",
26727b650c406018355a88a41528db7859e232728a0Jack Yu                "hspa:131072,262144,2441216,4096,16384,399360",
26827b650c406018355a88a41528db7859e232728a0Jack Yu                "hsupa:131072,262144,2441216,4096,16384,399360",
26927b650c406018355a88a41528db7859e232728a0Jack Yu                "hsdpa:131072,262144,2441216,4096,16384,399360",
27027b650c406018355a88a41528db7859e232728a0Jack Yu                "hspap:131072,262144,2441216,4096,16384,399360",
27127b650c406018355a88a41528db7859e232728a0Jack Yu                "edge:16384,32768,131072,4096,16384,65536",
27227b650c406018355a88a41528db7859e232728a0Jack Yu                "gprs:4096,8192,24576,4096,8192,24576",
27327b650c406018355a88a41528db7859e232728a0Jack Yu                "1xrtt:16384,32768,131070,4096,16384,102400",
27427b650c406018355a88a41528db7859e232728a0Jack Yu                "evdo:131072,262144,1048576,4096,16384,524288",
27527b650c406018355a88a41528db7859e232728a0Jack Yu                "lte:524288,1048576,8388608,262144,524288,4194304"});
27627b650c406018355a88a41528db7859e232728a0Jack Yu
2777d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        ((MockContentResolver) mContext.getContentResolver()).addProvider(
27827b650c406018355a88a41528db7859e232728a0Jack Yu                Telephony.Carriers.CONTENT_URI.getAuthority(), mApnSettingContentProvider);
27927b650c406018355a88a41528db7859e232728a0Jack Yu
28027b650c406018355a88a41528db7859e232728a0Jack Yu        doReturn(true).when(mSimRecords).getRecordsLoaded();
28127b650c406018355a88a41528db7859e232728a0Jack Yu        doReturn(PhoneConstants.State.IDLE).when(mCT).getState();
28227b650c406018355a88a41528db7859e232728a0Jack Yu        doReturn(true).when(mSST).getDesiredPowerState();
28327b650c406018355a88a41528db7859e232728a0Jack Yu
284783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu        doReturn(1).when(mIsub).getDefaultDataSubId();
285783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu        doReturn(mIsub).when(mBinder).queryLocalInterface(anyString());
286783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu        doReturn(mBinder).when(mServiceCache).get(anyString());
287783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu        replaceInstance(ServiceManager.class, "sCache", null, mServiceCache);
288783e33ac9e332b7eefa6bb125fbdb82e0c928c73Jack Yu
2897d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
29027b650c406018355a88a41528db7859e232728a0Jack Yu
29127b650c406018355a88a41528db7859e232728a0Jack Yu        new DcTrackerTestHandler(getClass().getSimpleName()).start();
29227b650c406018355a88a41528db7859e232728a0Jack Yu        waitUntilReady();
29327b650c406018355a88a41528db7859e232728a0Jack Yu        waitForMs(600);
29427b650c406018355a88a41528db7859e232728a0Jack Yu        logd("DcTrackerTest -Setup!");
29527b650c406018355a88a41528db7859e232728a0Jack Yu    }
29627b650c406018355a88a41528db7859e232728a0Jack Yu
29727b650c406018355a88a41528db7859e232728a0Jack Yu    @After
29827b650c406018355a88a41528db7859e232728a0Jack Yu    public void tearDown() throws Exception {
29927b650c406018355a88a41528db7859e232728a0Jack Yu        logd("DcTrackerTest -tearDown");
30027b650c406018355a88a41528db7859e232728a0Jack Yu        mDct.removeCallbacksAndMessages(null);
30127b650c406018355a88a41528db7859e232728a0Jack Yu        mDct = null;
30227b650c406018355a88a41528db7859e232728a0Jack Yu        super.tearDown();
30327b650c406018355a88a41528db7859e232728a0Jack Yu    }
30427b650c406018355a88a41528db7859e232728a0Jack Yu
3057d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    // Create a successful data response
3067d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    private DataCallResponse createDataCallResponse() {
3077d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3087d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        DataCallResponse dcResponse = new DataCallResponse();
3097d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3107d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.version = 11;
3117d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.status = 0;
3127d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.suggestedRetryTime = RILConstants.MAX_INT; // No retry suggested by the modem
3137d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.cid = 1;
3147d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.active = 2;
3157d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.type = "IP";
3167d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.ifname = FAKE_IFNAME;
3177d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.mtu = 1440;
3187d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.addresses = new String[]{FAKE_ADDRESS};
3197d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.dnses = new String[]{FAKE_DNS};
3207d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.gateways = new String[]{FAKE_GATEWAY};
3217d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.pcscf = new String[]{FAKE_PCSCF_ADDRESS};
3227d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        return dcResponse;
3237d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    }
32427b650c406018355a88a41528db7859e232728a0Jack Yu
3257d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    private void verifyDataConnected(final String apnSetting) {
32627b650c406018355a88a41528db7859e232728a0Jack Yu        verify(mPhone, times(1)).notifyDataConnection(eq(Phone.REASON_CONNECTED),
32727b650c406018355a88a41528db7859e232728a0Jack Yu                eq(PhoneConstants.APN_TYPE_DEFAULT));
32827b650c406018355a88a41528db7859e232728a0Jack Yu
32927b650c406018355a88a41528db7859e232728a0Jack Yu        verify(mAlarmManager, times(1)).set(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), anyLong(),
33027b650c406018355a88a41528db7859e232728a0Jack Yu                any(PendingIntent.class));
33127b650c406018355a88a41528db7859e232728a0Jack Yu
3327d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        assertEquals(apnSetting, mDct.getActiveApnString(PhoneConstants.APN_TYPE_DEFAULT));
33327b650c406018355a88a41528db7859e232728a0Jack Yu        assertArrayEquals(new String[]{PhoneConstants.APN_TYPE_DEFAULT}, mDct.getActiveApnTypes());
33427b650c406018355a88a41528db7859e232728a0Jack Yu        assertTrue(mDct.getAnyDataEnabled());
33527b650c406018355a88a41528db7859e232728a0Jack Yu        assertTrue(mDct.getDataEnabled());
33627b650c406018355a88a41528db7859e232728a0Jack Yu
33727b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(DctConstants.State.CONNECTED, mDct.getOverallState());
33827b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT));
33927b650c406018355a88a41528db7859e232728a0Jack Yu
34027b650c406018355a88a41528db7859e232728a0Jack Yu        LinkProperties linkProperties = mDct.getLinkProperties(PhoneConstants.APN_TYPE_DEFAULT);
34127b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(FAKE_IFNAME, linkProperties.getInterfaceName());
34227b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(1, linkProperties.getAddresses().size());
34327b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(FAKE_ADDRESS, linkProperties.getAddresses().get(0).getHostAddress());
34427b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(1, linkProperties.getDnsServers().size());
34527b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(FAKE_DNS, linkProperties.getDnsServers().get(0).getHostAddress());
34627b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(FAKE_GATEWAY, linkProperties.getRoutes().get(0).getGateway().getHostAddress());
34727b650c406018355a88a41528db7859e232728a0Jack Yu    }
34827b650c406018355a88a41528db7859e232728a0Jack Yu
3497d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    // Test the normal data call setup scenario.
35027b650c406018355a88a41528db7859e232728a0Jack Yu    @Test
35127b650c406018355a88a41528db7859e232728a0Jack Yu    @MediumTest
35227b650c406018355a88a41528db7859e232728a0Jack Yu    public void testDataSetup() {
35327b650c406018355a88a41528db7859e232728a0Jack Yu
3547d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mSimulatedCommands.setDataCallResponse(true, createDataCallResponse());
3557d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3567d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        logd("Sending EVENT_RECORDS_LOADED");
3577d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null));
3587d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        waitForMs(200);
3597d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3607d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class);
3617d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection(
3627d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(),
3637d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(PhoneConstants.DataState.DISCONNECTED));
3647d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3657d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues());
3667d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3677d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        logd("Sending EVENT_DATA_CONNECTION_ATTACHED");
3687d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null));
3697d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        waitForMs(200);
3707d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3717d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class);
3727d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection(
3737d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(),
3747d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(PhoneConstants.DataState.DISCONNECTED));
3757d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3767d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues());
3777d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3787d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class);
3797d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection(
3807d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(),
3817d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(PhoneConstants.DataState.DISCONNECTED));
38227b650c406018355a88a41528db7859e232728a0Jack Yu
3837d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues());
3847d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3857d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        logd("Sending EVENT_ENABLE_NEW_APN");
3867d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // APN id 0 is APN_TYPE_DEFAULT
3877d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mDct.setEnabled(0, true);
3887d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        waitForMs(200);
3897d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3907d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Verify if RIL command was sent properly.
3917d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mSimulatedCommandsVerifier, times(1)).setupDataCall(
3927d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN1),
3937d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(""), eq(""), eq(0), eq("IP"), any(Message.class));
3947d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3957d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verifyDataConnected(FAKE_APN1);
3967d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    }
3977d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
3987d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    // Test the scenario where the first data call setup is failed, and then retry the setup later.
3997d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    @Test
4007d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    @MediumTest
4017d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu    public void testDataRetry() {
4027d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        DataCallResponse dcResponse = createDataCallResponse();
4037d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // LOST_CONNECTION(0x10004) is a non-permanent failure, so we'll retry data setup later.
4047d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        dcResponse.status = 0x10004;
4057d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Simulate RIL fails the data call setup
4067d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mSimulatedCommands.setDataCallResponse(false, dcResponse);
40727b650c406018355a88a41528db7859e232728a0Jack Yu
40827b650c406018355a88a41528db7859e232728a0Jack Yu        logd("Sending EVENT_RECORDS_LOADED");
40927b650c406018355a88a41528db7859e232728a0Jack Yu        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null));
41027b650c406018355a88a41528db7859e232728a0Jack Yu        waitForMs(200);
41127b650c406018355a88a41528db7859e232728a0Jack Yu
41227b650c406018355a88a41528db7859e232728a0Jack Yu        ArgumentCaptor<String> apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class);
41327b650c406018355a88a41528db7859e232728a0Jack Yu        verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection(
41427b650c406018355a88a41528db7859e232728a0Jack Yu                eq(Phone.REASON_SIM_LOADED), apnTypeArgumentCaptor.capture(),
41527b650c406018355a88a41528db7859e232728a0Jack Yu                eq(PhoneConstants.DataState.DISCONNECTED));
41627b650c406018355a88a41528db7859e232728a0Jack Yu
41727b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues());
41827b650c406018355a88a41528db7859e232728a0Jack Yu
41927b650c406018355a88a41528db7859e232728a0Jack Yu        logd("Sending EVENT_DATA_CONNECTION_ATTACHED");
42027b650c406018355a88a41528db7859e232728a0Jack Yu        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null));
42127b650c406018355a88a41528db7859e232728a0Jack Yu        waitForMs(200);
42227b650c406018355a88a41528db7859e232728a0Jack Yu
42327b650c406018355a88a41528db7859e232728a0Jack Yu        apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class);
42427b650c406018355a88a41528db7859e232728a0Jack Yu        verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection(
42527b650c406018355a88a41528db7859e232728a0Jack Yu                eq(Phone.REASON_DATA_ATTACHED), apnTypeArgumentCaptor.capture(),
42627b650c406018355a88a41528db7859e232728a0Jack Yu                eq(PhoneConstants.DataState.DISCONNECTED));
42727b650c406018355a88a41528db7859e232728a0Jack Yu
42827b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues());
42927b650c406018355a88a41528db7859e232728a0Jack Yu
43027b650c406018355a88a41528db7859e232728a0Jack Yu        apnTypeArgumentCaptor = ArgumentCaptor.forClass(String.class);
43127b650c406018355a88a41528db7859e232728a0Jack Yu        verify(mPhone, times(sNetworkAttributes.length)).notifyDataConnection(
43227b650c406018355a88a41528db7859e232728a0Jack Yu                eq(Phone.REASON_DATA_ENABLED), apnTypeArgumentCaptor.capture(),
43327b650c406018355a88a41528db7859e232728a0Jack Yu                eq(PhoneConstants.DataState.DISCONNECTED));
43427b650c406018355a88a41528db7859e232728a0Jack Yu
43527b650c406018355a88a41528db7859e232728a0Jack Yu        assertEquals(sApnTypes, apnTypeArgumentCaptor.getAllValues());
43627b650c406018355a88a41528db7859e232728a0Jack Yu
43727b650c406018355a88a41528db7859e232728a0Jack Yu        logd("Sending EVENT_ENABLE_NEW_APN");
43827b650c406018355a88a41528db7859e232728a0Jack Yu        // APN id 0 is APN_TYPE_DEFAULT
43927b650c406018355a88a41528db7859e232728a0Jack Yu        mDct.setEnabled(0, true);
44027b650c406018355a88a41528db7859e232728a0Jack Yu        waitForMs(200);
4417d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
4427d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Verify if RIL command was sent properly.
4437d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mSimulatedCommandsVerifier, times(1)).setupDataCall(
4447d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN1),
4457d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(""), eq(""), eq(0), eq("IP"), any(Message.class));
4467d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
4477d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Make sure we never notify connected because the data call setup is supposed to fail.
4487d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mPhone, never()).notifyDataConnection(eq(Phone.REASON_CONNECTED),
4497d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(PhoneConstants.APN_TYPE_DEFAULT));
4507d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
4517d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Verify the retry manger schedule another data call setup.
4527d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mAlarmManager, times(1)).setExact(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP),
4537d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                anyLong(), any(PendingIntent.class));
4547d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
4557d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // This time we'll let RIL command succeed.
4567d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mSimulatedCommands.setDataCallResponse(true, createDataCallResponse());
4577d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
4587d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Simulate the timer expires.
4597d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        Intent intent = new Intent("com.android.internal.telephony.data-reconnect.default");
4607d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        intent.putExtra("reconnect_alarm_extra_type", PhoneConstants.APN_TYPE_DEFAULT);
4617d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 0);
4627d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
4637d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        mContext.sendBroadcast(intent);
4647d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        waitForMs(200);
4657d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
4667d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Verify if RIL command was sent properly.
4677d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verify(mSimulatedCommandsVerifier, times(1)).setupDataCall(
4687d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS), eq(0), eq(FAKE_APN2),
4697d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu                eq(""), eq(""), eq(0), eq("IP"), any(Message.class));
4707d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu
4717d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        // Verify connected with APN2 setting.
4727d6d7d6cb68ee37b4bee33588ba2594e9cf0c197Jack Yu        verifyDataConnected(FAKE_APN2);
47327b650c406018355a88a41528db7859e232728a0Jack Yu    }
47427b650c406018355a88a41528db7859e232728a0Jack Yu}