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