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}