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