ConnectivityManagerMobileTest.java revision fc2dbd04005c32360eead803e29df3cc62209cd8
1fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang/*
2fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * Copyright (C) 2010 The Android Open Source Project
3fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang *
4fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * Licensed under the Apache License, Version 2.0 (the "License");
5fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * you may not use this file except in compliance with the License.
6fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * You may obtain a copy of the License at
7fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang *
8fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang *      http://www.apache.org/licenses/LICENSE-2.0
9fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang *
10fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * Unless required by applicable law or agreed to in writing, software
11fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * distributed under the License is distributed on an "AS IS" BASIS,
12fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * See the License for the specific language governing permissions and
14fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * limitations under the License.
15fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang */
16fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang
17fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang
18fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang
197fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangpackage com.android.connectivitymanagertest.functional;
207fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
217fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestActivity;
227fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
237fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.content.Intent;
247fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.content.Context;
257fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.app.Instrumentation;
267fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.os.Handler;
277fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.os.Message;
287fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.ConnectivityManager;
297fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo;
307fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo.State;
317fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo.DetailedState;
327fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
337fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.test.suitebuilder.annotation.LargeTest;
347fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.test.ActivityInstrumentationTestCase2;
357fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestRunner;
367fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.NetworkState;
377fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.util.Log;
387fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport junit.framework.*;
397fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
407fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangpublic class ConnectivityManagerMobileTest
417fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> {
427fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
437fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    private static final String LOG_TAG = "ConnectivityManagerMobileTest";
447fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    private static final String PKG_NAME = "com.android.connectivitymanagertest";
457fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    private static final long WIFI_CONNECTION_TIMEOUT = 30 * 1000;
467fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    private static final long WIFI_NOTIFICATION_TIMEOUT = 10 * 1000;
477fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    private String TEST_ACCESS_POINT;
487fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    private ConnectivityManagerTestActivity cmActivity;
497fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
507fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    public ConnectivityManagerMobileTest() {
517fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        super(PKG_NAME, ConnectivityManagerTestActivity.class);
527fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    }
537fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
547fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    @Override
557fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    public void setUp() throws Exception {
567fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        super.setUp();
577fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity = getActivity();
587fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        ConnectivityManagerTestRunner mRunner =
597fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                (ConnectivityManagerTestRunner)getInstrumentation();
607fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        TEST_ACCESS_POINT = mRunner.TEST_SSID;
617fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // Each test case will start with cellular connection
627fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        verifyCellularConnection();
637fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    }
647fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
657fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    @Override
667fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    public void tearDown() throws Exception {
677fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // clear Wifi after each test case
687fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity.clearWifi();
697fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity.finish();
707fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        Log.v(LOG_TAG, "tear down ConnectivityManager test activity");
717fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        super.tearDown();
727fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    }
737fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
747fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    // help function to verify 3G connection
757fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    public void verifyCellularConnection() {
767fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        NetworkInfo extraNetInfo = cmActivity.mNetworkInfo;
777fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        assertEquals("network type is not MOBILE", ConnectivityManager.TYPE_MOBILE,
787fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            extraNetInfo.getType());
797fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        assertTrue("not connected to cellular network", extraNetInfo.isConnected());
807fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        assertTrue("no data connection", cmActivity.mState.equals(State.CONNECTED));
817fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    }
827fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
837fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    // Test case 1: Test enabling Wifi without associating with any AP
847fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    @LargeTest
857fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    public void test3GToWifiNotification() {
867fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // As Wifi stays in DISCONNECTED, the connectivity manager will not broadcast
877fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // any network connectivity event for Wifi
887fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
897fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, networkInfo.getState(),
907fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                NetworkState.DO_NOTHING, State.CONNECTED);
917fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
927fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
937fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                NetworkState.DO_NOTHING, State.DISCONNECTED);
947fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // Eanble Wifi
957fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity.enableWifi();
967fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        try {
977fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Thread.sleep(WIFI_NOTIFICATION_TIMEOUT);
987fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        } catch (Exception e) {
997fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "exception: " + e.toString());
1007fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        }
1017fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
1027fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // validate state and broadcast
1037fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
1047fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "the state for WIFI is changed");
1057fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "reason: " +
1067fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                    cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
107fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang            assertTrue("state validation fail", false);
1087fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        }
1097fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
1107fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "the state for MOBILE is changed");
1117fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "reason: " +
1127fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                    cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
1137fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            assertTrue(false);
1147fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        }
1157fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // Verify that the device is still connected to MOBILE
1167fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        verifyCellularConnection();
1177fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    }
1187fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
1197fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    // Test case 2: test connection to a given AP
1207fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    @LargeTest
1217fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    public void testConnectToWifi() {
122fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang        assertNotNull("SSID is null", TEST_ACCESS_POINT);
1237fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        //Prepare for connectivity verification
1247fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
1257fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, networkInfo.getState(),
1267fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                NetworkState.TO_DISCONNECTION, State.DISCONNECTED);
1277fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
1287fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
1297fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                NetworkState.TO_CONNECTION, State.CONNECTED);
1307fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
1317fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // Enable Wifi and connect to a test access point
1327fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        assertTrue("failed to connect to " + TEST_ACCESS_POINT,
1337fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                cmActivity.connectToWifi(TEST_ACCESS_POINT));
1347fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        try {
1357fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Thread.sleep(WIFI_CONNECTION_TIMEOUT);
1367fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        } catch (Exception e) {
1377fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "exception: " + e.toString());
1387fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        }
1397fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang
1407fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        // validate states
1417fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
1427fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "Wifi state transition validation failed.");
1437fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "reason: " +
1447fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                    cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
1457fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            assertTrue(false);
1467fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        }
1477fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
1487fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "Mobile state transition validation failed.");
1497fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            Log.v(LOG_TAG, "reason: " +
1507fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang                    cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
1517fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang            assertTrue(false);
1527fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang        }
1537fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang    }
1547fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang}
155