Home | History | Annotate | Download | only in functional
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.connectivitymanagertest.functional;
     18 
     19 import com.android.connectivitymanagertest.ConnectivityManagerTestActivity;
     20 
     21 import android.content.Intent;
     22 import android.content.Context;
     23 import android.os.PowerManager;
     24 import android.os.PowerManager.WakeLock;
     25 import android.app.Instrumentation;
     26 import android.os.Handler;
     27 import android.os.Message;
     28 import android.net.ConnectivityManager;
     29 import android.net.NetworkInfo;
     30 import android.net.NetworkInfo.State;
     31 import android.net.NetworkInfo.DetailedState;
     32 import android.net.wifi.WifiManager;
     33 
     34 import android.test.suitebuilder.annotation.LargeTest;
     35 import android.test.ActivityInstrumentationTestCase2;
     36 import com.android.connectivitymanagertest.ConnectivityManagerTestRunner;
     37 import com.android.connectivitymanagertest.NetworkState;
     38 import android.util.Log;
     39 
     40 public class ConnectivityManagerMobileTest
     41     extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> {
     42     private static final String LOG_TAG = "ConnectivityManagerMobileTest";
     43     private static final String PKG_NAME = "com.android.connectivitymanagertest";
     44 
     45     private String TEST_ACCESS_POINT;
     46     private ConnectivityManagerTestActivity cmActivity;
     47     private WakeLock wl;
     48 
     49     public ConnectivityManagerMobileTest() {
     50         super(PKG_NAME, ConnectivityManagerTestActivity.class);
     51     }
     52 
     53     @Override
     54     public void setUp() throws Exception {
     55         super.setUp();
     56         cmActivity = getActivity();
     57         ConnectivityManagerTestRunner mRunner =
     58                 (ConnectivityManagerTestRunner)getInstrumentation();
     59         TEST_ACCESS_POINT = mRunner.TEST_SSID;
     60         PowerManager pm = (PowerManager)getInstrumentation().
     61                 getContext().getSystemService(Context.POWER_SERVICE);
     62         wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "CMWakeLock");
     63         wl.acquire();
     64         // Each test case will start with cellular connection
     65         if (!cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED,
     66                 ConnectivityManagerTestActivity.LONG_TIMEOUT)) {
     67             // Note: When the test fails in setUp(), tearDown is not called. In that case,
     68             // the activity is destroyed which blocks the next test at "getActivity()".
     69             // tearDown() is called hear to avoid that situation.
     70             tearDown();
     71             fail("Device is not connected to Mobile, setUp failed");
     72         }
     73     }
     74 
     75     @Override
     76     public void tearDown() throws Exception {
     77         cmActivity.finish();
     78         Log.v(LOG_TAG, "tear down ConnectivityManagerTestActivity");
     79         wl.release();
     80         cmActivity.removeConfiguredNetworksAndDisableWifi();
     81         super.tearDown();
     82     }
     83 
     84     // help function to verify 3G connection
     85     public void verifyCellularConnection() {
     86         NetworkInfo extraNetInfo = cmActivity.mCM.getActiveNetworkInfo();
     87         assertEquals("network type is not MOBILE", ConnectivityManager.TYPE_MOBILE,
     88                 extraNetInfo.getType());
     89         assertTrue("not connected to cellular network", extraNetInfo.isConnected());
     90         assertTrue("no data connection", cmActivity.mState.equals(State.CONNECTED));
     91     }
     92 
     93     // Test case 1: Test enabling Wifi without associating with any AP
     94     @LargeTest
     95     public void test3GToWifiNotification() {
     96         // To avoid UNKNOWN state when device boots up
     97         cmActivity.enableWifi();
     98         try {
     99             Thread.sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    100         } catch (Exception e) {
    101             Log.v(LOG_TAG, "exception: " + e.toString());
    102         }
    103 
    104         cmActivity.disableWifi();
    105         // As Wifi stays in DISCONNECTED, the connectivity manager will not broadcast
    106         // any network connectivity event for Wifi
    107         NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    108         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, networkInfo.getState(),
    109                 NetworkState.DO_NOTHING, State.CONNECTED);
    110         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    111         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
    112                 NetworkState.DO_NOTHING, State.DISCONNECTED);
    113         // Eanble Wifi
    114         cmActivity.enableWifi();
    115         try {
    116             Thread.sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    117         } catch (Exception e) {
    118             Log.v(LOG_TAG, "exception: " + e.toString());
    119         }
    120 
    121         // validate state and broadcast
    122         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    123             Log.v(LOG_TAG, "the state for WIFI is changed");
    124             Log.v(LOG_TAG, "reason: " +
    125                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    126             assertTrue("state validation fail", false);
    127         }
    128         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
    129             Log.v(LOG_TAG, "the state for MOBILE is changed");
    130             Log.v(LOG_TAG, "reason: " +
    131                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
    132             assertTrue("state validation fail", false);
    133         }
    134         // Verify that the device is still connected to MOBILE
    135         verifyCellularConnection();
    136     }
    137 
    138     // Test case 2: test connection to a given AP
    139     @LargeTest
    140     public void testConnectToWifi() {
    141         assertNotNull("SSID is null", TEST_ACCESS_POINT);
    142         //Prepare for connectivity verification
    143         NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    144         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, networkInfo.getState(),
    145                 NetworkState.TO_DISCONNECTION, State.DISCONNECTED);
    146         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    147         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
    148                 NetworkState.TO_CONNECTION, State.CONNECTED);
    149 
    150         // Enable Wifi and connect to a test access point
    151         assertTrue("failed to connect to " + TEST_ACCESS_POINT,
    152                 cmActivity.connectToWifi(TEST_ACCESS_POINT));
    153 
    154         assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
    155                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    156         Log.v(LOG_TAG, "wifi state is enabled");
    157         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    158                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    159         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED,
    160                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    161 
    162         // validate states
    163         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    164             Log.v(LOG_TAG, "Wifi state transition validation failed.");
    165             Log.v(LOG_TAG, "reason: " +
    166                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    167             assertTrue(false);
    168         }
    169         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
    170             Log.v(LOG_TAG, "Mobile state transition validation failed.");
    171             Log.v(LOG_TAG, "reason: " +
    172                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
    173             assertTrue(false);
    174         }
    175     }
    176 
    177     // Test case 3: connect to Wifi with known AP
    178     @LargeTest
    179     public void testConnectToWifWithKnownAP() {
    180         assertNotNull("SSID is null", TEST_ACCESS_POINT);
    181         // Connect to TEST_ACCESS_POINT
    182         assertTrue("failed to connect to " + TEST_ACCESS_POINT,
    183                 cmActivity.connectToWifi(TEST_ACCESS_POINT));
    184         assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
    185                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    186         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    187                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    188 
    189         try {
    190             Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    191         } catch (Exception e) {
    192             Log.v(LOG_TAG, "exception: " + e.toString());
    193         }
    194 
    195         // Disable Wifi
    196         Log.v(LOG_TAG, "Disable Wifi");
    197         if (!cmActivity.disableWifi()) {
    198             Log.v(LOG_TAG, "disable Wifi failed");
    199             return;
    200         }
    201 
    202         // Wait for the Wifi state to be DISABLED
    203         assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_DISABLED,
    204                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    205         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED,
    206                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    207         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED,
    208                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    209 
    210         //Prepare for connectivity state verification
    211         NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    212         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
    213                                               networkInfo.getState(), NetworkState.DO_NOTHING,
    214                                               State.DISCONNECTED);
    215         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    216         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
    217                 NetworkState.TO_CONNECTION, State.CONNECTED);
    218 
    219         // Enable Wifi again
    220         Log.v(LOG_TAG, "Enable Wifi again");
    221         cmActivity.enableWifi();
    222 
    223         // Wait for Wifi to be connected and mobile to be disconnected
    224         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    225                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    226         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED,
    227                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    228 
    229         // validate wifi states
    230         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    231             Log.v(LOG_TAG, "Wifi state transition validation failed.");
    232             Log.v(LOG_TAG, "reason: " +
    233                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    234             assertTrue(false);
    235         }
    236     }
    237 
    238     // Test case 4:  test disconnect Wifi
    239     @LargeTest
    240     public void testDisconnectWifi() {
    241         assertNotNull("SSID is null", TEST_ACCESS_POINT);
    242 
    243         // connect to Wifi
    244         assertTrue("failed to connect to " + TEST_ACCESS_POINT,
    245                    cmActivity.connectToWifi(TEST_ACCESS_POINT));
    246 
    247         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    248             ConnectivityManagerTestActivity.LONG_TIMEOUT));
    249 
    250         // Wait for a few seconds to avoid the state that both Mobile and Wifi is connected
    251         try {
    252             Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    253         } catch (Exception e) {
    254             Log.v(LOG_TAG, "exception: " + e.toString());
    255         }
    256 
    257         NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    258         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
    259                                               networkInfo.getState(),
    260                                               NetworkState.TO_CONNECTION,
    261                                               State.CONNECTED);
    262         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    263         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
    264                 NetworkState.TO_DISCONNECTION, State.DISCONNECTED);
    265 
    266         // clear Wifi
    267         cmActivity.removeConfiguredNetworksAndDisableWifi();
    268 
    269         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED,
    270                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    271         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED,
    272                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    273 
    274         // validate states
    275         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    276             Log.v(LOG_TAG, "Wifi state transition validation failed.");
    277             Log.v(LOG_TAG, "reason: " +
    278                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    279             assertTrue(false);
    280         }
    281         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
    282             Log.v(LOG_TAG, "Mobile state transition validation failed.");
    283             Log.v(LOG_TAG, "reason: " +
    284                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
    285             assertTrue(false);
    286         }
    287     }
    288 
    289     // Test case 5: test connectivity from 3G to airplane mode, then to 3G again
    290     @LargeTest
    291     public void testDataConnectionWith3GToAmTo3G() {
    292         //Prepare for state verification
    293         NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    294         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
    295                                               networkInfo.getState(),
    296                                               NetworkState.TO_DISCONNECTION,
    297                                               State.DISCONNECTED);
    298         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    299         assertEquals(State.DISCONNECTED, networkInfo.getState());
    300         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
    301                 NetworkState.DO_NOTHING, State.DISCONNECTED);
    302 
    303         // Enable airplane mode
    304         cmActivity.setAirplaneMode(getInstrumentation().getContext(), true);
    305         try {
    306             Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    307         } catch (Exception e) {
    308             Log.v(LOG_TAG, "exception: " + e.toString());
    309         }
    310 
    311         // Validate the state transition
    312         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    313             Log.v(LOG_TAG, "Wifi state transition validation failed.");
    314             Log.v(LOG_TAG, "reason: " +
    315                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    316             assertTrue(false);
    317         }
    318         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
    319             Log.v(LOG_TAG, "Mobile state transition validation failed.");
    320             Log.v(LOG_TAG, "reason: " +
    321                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
    322             assertTrue(false);
    323         }
    324 
    325         // reset state recorder
    326         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    327         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
    328                                               networkInfo.getState(),
    329                                               NetworkState.TO_CONNECTION,
    330                                               State.CONNECTED);
    331         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    332         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
    333                 NetworkState.DO_NOTHING, State.DISCONNECTED);
    334 
    335         // disable airplane mode
    336         cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
    337 
    338         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED,
    339                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    340 
    341         // Validate the state transition
    342         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
    343             Log.v(LOG_TAG, "Mobile state transition validation failed.");
    344             Log.v(LOG_TAG, "reason: " +
    345                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
    346             assertTrue(false);
    347         }
    348         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    349           Log.v(LOG_TAG, "Wifi state transition validation failed.");
    350           Log.v(LOG_TAG, "reason: " +
    351                   cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    352           assertTrue(false);
    353         }
    354     }
    355 
    356     // Test case 6: test connectivity with airplane mode Wifi connected
    357     @LargeTest
    358     public void testDataConnectionOverAMWithWifi() {
    359         assertNotNull("SSID is null", TEST_ACCESS_POINT);
    360         // Eanble airplane mode
    361         cmActivity.setAirplaneMode(getInstrumentation().getContext(), true);
    362 
    363         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED,
    364                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    365 
    366         NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    367         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
    368                                               networkInfo.getState(),
    369                                               NetworkState.DO_NOTHING,
    370                                               State.DISCONNECTED);
    371         networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    372         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
    373                                               NetworkState.TO_CONNECTION, State.CONNECTED);
    374 
    375         // Connect to Wifi
    376         assertTrue("failed to connect to " + TEST_ACCESS_POINT,
    377                    cmActivity.connectToWifi(TEST_ACCESS_POINT));
    378         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    379                             ConnectivityManagerTestActivity.LONG_TIMEOUT));
    380 
    381         // validate state and broadcast
    382         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    383             Log.v(LOG_TAG, "state validate for Wifi failed");
    384             Log.v(LOG_TAG, "reason: " +
    385                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    386             assertTrue("State validation failed", false);
    387         }
    388         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
    389             Log.v(LOG_TAG, "state validation for Mobile failed");
    390             Log.v(LOG_TAG, "reason: " +
    391                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
    392             assertTrue("state validation failed", false);
    393         }
    394         cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
    395     }
    396 
    397     // Test case 7: test connectivity while transit from Wifi->AM->Wifi
    398     @LargeTest
    399     public void testDataConnectionWithWifiToAMToWifi () {
    400         // Connect to TEST_ACCESS_POINT
    401         assertNotNull("SSID is null", TEST_ACCESS_POINT);
    402         // Connect to Wifi
    403         assertTrue("failed to connect to " + TEST_ACCESS_POINT,
    404                 cmActivity.connectToWifi(TEST_ACCESS_POINT));
    405 
    406         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    407                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    408 
    409         try {
    410             Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    411         } catch (Exception e) {
    412             Log.v(LOG_TAG, "exception: " + e.toString());
    413         }
    414 
    415         // Enable airplane mode without clearing Wifi
    416         cmActivity.setAirplaneMode(getInstrumentation().getContext(), true);
    417 
    418         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED,
    419                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    420 
    421         try {
    422             Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    423         } catch (Exception e) {
    424             Log.v(LOG_TAG, "exception: " + e.toString());
    425         }
    426 
    427         // Prepare for state validation
    428         NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    429         assertEquals(State.DISCONNECTED, networkInfo.getState());
    430         cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI,
    431                 networkInfo.getState(), NetworkState.TO_CONNECTION, State.CONNECTED);
    432 
    433         // Disable airplane mode
    434         cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
    435 
    436         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    437                             ConnectivityManagerTestActivity.LONG_TIMEOUT));
    438         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED,
    439                             ConnectivityManagerTestActivity.LONG_TIMEOUT));
    440 
    441         // validate the state transition
    442         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
    443             Log.v(LOG_TAG, "Wifi state transition validation failed.");
    444             Log.v(LOG_TAG, "reason: " +
    445                     cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
    446             assertTrue(false);
    447         }
    448     }
    449 
    450     // Test case 8: test wifi state change while connecting/disconnecting to/from an AP
    451     @LargeTest
    452     public void testWifiStateChange () {
    453         assertNotNull("SSID is null", TEST_ACCESS_POINT);
    454         //Connect to TEST_ACCESS_POINT
    455         assertTrue("failed to connect to " + TEST_ACCESS_POINT,
    456                    cmActivity.connectToWifi(TEST_ACCESS_POINT));
    457         assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
    458                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    459         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
    460                             ConnectivityManagerTestActivity.LONG_TIMEOUT));
    461         assertNotNull("Not associated with any AP",
    462                       cmActivity.mWifiManager.getConnectionInfo().getBSSID());
    463 
    464         try {
    465             Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
    466         } catch (Exception e) {
    467             Log.v(LOG_TAG, "exception: " + e.toString());
    468         }
    469 
    470         // Disconnect from the current AP
    471         Log.v(LOG_TAG, "disconnect from the AP");
    472         if (!cmActivity.disconnectAP()) {
    473             Log.v(LOG_TAG, "failed to disconnect from " + TEST_ACCESS_POINT);
    474         }
    475 
    476         // Verify the connectivity state for Wifi is DISCONNECTED
    477         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED,
    478                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    479 
    480         if (!cmActivity.disableWifi()) {
    481             Log.v(LOG_TAG, "disable Wifi failed");
    482             return;
    483         }
    484         assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_DISABLED,
    485                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
    486     }
    487 }
    488