ConnectivityManagerMobileTest.java revision 19306af73a8175e1327101132e26a35c7dfe5168
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 177fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangpackage com.android.connectivitymanagertest.functional; 187fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 197fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.content.Context; 207fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.ConnectivityManager; 217fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo; 227fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo.State; 232c15966f8cf6160ad5dcbbde372508de89985829Xia Wangimport android.net.wifi.WifiManager; 244dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotimport android.os.PowerManager; 254dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotimport android.os.PowerManager.WakeLock; 264dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotimport android.provider.Settings; 274dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotimport android.test.suitebuilder.annotation.LargeTest; 284dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotimport android.util.Log; 294dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabot 3019306af73a8175e1327101132e26a35c7dfe5168Xia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestBase; 317fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestRunner; 327fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.NetworkState; 337fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 344dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotpublic class ConnectivityManagerMobileTest extends 3519306af73a8175e1327101132e26a35c7dfe5168Xia Wang ConnectivityManagerTestBase { 3619306af73a8175e1327101132e26a35c7dfe5168Xia Wang private static final String TAG = "ConnectivityManagerMobileTest"; 372c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 38776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang private String mTestAccessPoint; 392c15966f8cf6160ad5dcbbde372508de89985829Xia Wang private WakeLock wl; 40776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang private boolean mWifiOnlyFlag; 417fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 427fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @Override 437fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void setUp() throws Exception { 447fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang super.setUp(); 457fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang ConnectivityManagerTestRunner mRunner = 467fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang (ConnectivityManagerTestRunner)getInstrumentation(); 47776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang mTestAccessPoint = mRunner.mTestSsid; 48776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang mWifiOnlyFlag = mRunner.mWifiOnlyFlag; 49776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang 502c15966f8cf6160ad5dcbbde372508de89985829Xia Wang PowerManager pm = (PowerManager)getInstrumentation(). 512c15966f8cf6160ad5dcbbde372508de89985829Xia Wang getContext().getSystemService(Context.POWER_SERVICE); 522c15966f8cf6160ad5dcbbde372508de89985829Xia Wang wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "CMWakeLock"); 532c15966f8cf6160ad5dcbbde372508de89985829Xia Wang wl.acquire(); 547fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Each test case will start with cellular connection 55c09cdce1b05075da808ae080b9905a14a3e1e627Christopher Tate if (Settings.Global.getInt(getInstrumentation().getContext().getContentResolver(), 56c09cdce1b05075da808ae080b9905a14a3e1e627Christopher Tate Settings.Global.AIRPLANE_MODE_ON) == 1) { 57a4c2caac05009512213454d329579a79dde11e5fXia Wang log("airplane is not disabled, disable it."); 5819306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(false); 592dc2991f5833c9ca72e5e4d1f7bdc1c6c8caca91Xia Wang } 60776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang 61776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 6219306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 6319306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.CONNECTED, LONG_TIMEOUT)) { 64b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang // Note: When the test fails in setUp(), tearDown is not called. In that case, 65b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang // the activity is destroyed which blocks the next test at "getActivity()". 66b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang // tearDown() is called here to avoid that situation. 67b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang tearDown(); 68b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang fail("Device is not connected to Mobile, setUp failed"); 69b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 70ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang } 717fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 727fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 737fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @Override 747fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void tearDown() throws Exception { 752c15966f8cf6160ad5dcbbde372508de89985829Xia Wang wl.release(); 7619306af73a8175e1327101132e26a35c7dfe5168Xia Wang removeConfiguredNetworksAndDisableWifi(); 7719306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(false); 787fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang super.tearDown(); 797fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 807fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 817fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // help function to verify 3G connection 827fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void verifyCellularConnection() { 8319306af73a8175e1327101132e26a35c7dfe5168Xia Wang NetworkInfo extraNetInfo = mCM.getActiveNetworkInfo(); 847fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertEquals("network type is not MOBILE", ConnectivityManager.TYPE_MOBILE, 85ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang extraNetInfo.getType()); 867fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue("not connected to cellular network", extraNetInfo.isConnected()); 877fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 887fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 89a4c2caac05009512213454d329579a79dde11e5fXia Wang private void log(String message) { 9019306af73a8175e1327101132e26a35c7dfe5168Xia Wang Log.v(TAG, message); 91a4c2caac05009512213454d329579a79dde11e5fXia Wang } 92a4c2caac05009512213454d329579a79dde11e5fXia Wang 93a4c2caac05009512213454d329579a79dde11e5fXia Wang private void sleep(long sleeptime) { 94a4c2caac05009512213454d329579a79dde11e5fXia Wang try { 95a4c2caac05009512213454d329579a79dde11e5fXia Wang Thread.sleep(sleeptime); 96a4c2caac05009512213454d329579a79dde11e5fXia Wang } catch (InterruptedException e) {} 97a4c2caac05009512213454d329579a79dde11e5fXia Wang } 98a4c2caac05009512213454d329579a79dde11e5fXia Wang 99be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // Test case 1: Test enabling Wifi without associating with any AP, no broadcast on network 100be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // event should be expected. 1017fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @LargeTest 1027fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void test3GToWifiNotification() { 103776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 10419306af73a8175e1327101132e26a35c7dfe5168Xia Wang Log.v(TAG, this.getName() + " is excluded for wifi-only test"); 105776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 106776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 107be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // Enable Wi-Fi to avoid initial UNKNOWN state 10819306af73a8175e1327101132e26a35c7dfe5168Xia Wang enableWifi(); 10919306af73a8175e1327101132e26a35c7dfe5168Xia Wang sleep(2 * SHORT_TIMEOUT); 110a4c2caac05009512213454d329579a79dde11e5fXia Wang 111be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // Wi-Fi is disabled 11219306af73a8175e1327101132e26a35c7dfe5168Xia Wang disableWifi(); 1132dc2991f5833c9ca72e5e4d1f7bdc1c6c8caca91Xia Wang 11419306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, 11519306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 11619306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 11719306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.CONNECTED, LONG_TIMEOUT)); 118be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // Wait for 10 seconds for broadcasts to be sent out 119a4c2caac05009512213454d329579a79dde11e5fXia Wang sleep(10 * 1000); 120a4c2caac05009512213454d329579a79dde11e5fXia Wang 121be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // As Wifi stays in DISCONNETED, Mobile statys in CONNECTED, 122be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // the connectivity manager will not broadcast any network connectivity event for Wifi 12319306af73a8175e1327101132e26a35c7dfe5168Xia Wang NetworkInfo networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 12419306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, 125b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang networkInfo.getState(), NetworkState.DO_NOTHING, State.CONNECTED); 12619306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 12719306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 1287fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkState.DO_NOTHING, State.DISCONNECTED); 129be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // Eanble Wifi without associating with any AP 13019306af73a8175e1327101132e26a35c7dfe5168Xia Wang enableWifi(); 13119306af73a8175e1327101132e26a35c7dfe5168Xia Wang sleep(2 * SHORT_TIMEOUT); 1327fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1337fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // validate state and broadcast 13419306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 135a4c2caac05009512213454d329579a79dde11e5fXia Wang log("the state for WIFI is changed"); 136a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 13719306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 138fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang assertTrue("state validation fail", false); 1397fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 14019306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 141a4c2caac05009512213454d329579a79dde11e5fXia Wang log("the state for MOBILE is changed"); 142a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 14319306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 1442c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue("state validation fail", false); 1457fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1467fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Verify that the device is still connected to MOBILE 1477fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang verifyCellularConnection(); 1487fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1497fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1507fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Test case 2: test connection to a given AP 1517fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @LargeTest 1527fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void testConnectToWifi() { 153776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertNotNull("SSID is null", mTestAccessPoint); 154b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang NetworkInfo networkInfo; 155776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 156b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang //Prepare for connectivity verification 15719306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 15819306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, 159b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang networkInfo.getState(), NetworkState.TO_DISCONNECTION, State.DISCONNECTED); 160b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 16119306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 16219306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 1637fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkState.TO_CONNECTION, State.CONNECTED); 1647fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1657fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Enable Wifi and connect to a test access point 166776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertTrue("failed to connect to " + mTestAccessPoint, 16719306af73a8175e1327101132e26a35c7dfe5168Xia Wang connectToWifi(mTestAccessPoint)); 1682c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 16919306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForWifiState(WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 170a4c2caac05009512213454d329579a79dde11e5fXia Wang log("wifi state is enabled"); 17119306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 17219306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 173776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 17419306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 17519306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 176b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 1772c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 1782c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // validate states 17919306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 180a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Wifi state transition validation failed."); 181a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 18219306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 1832c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue(false); 1842c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 185776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 18619306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 187a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Mobile state transition validation failed."); 188a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 18919306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 190b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang assertTrue(false); 191b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 1922c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 1932c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 1942c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 1952c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 3: connect to Wifi with known AP 1962c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 1972c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testConnectToWifWithKnownAP() { 198776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertNotNull("SSID is null", mTestAccessPoint); 199776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang // Connect to mTestAccessPoint 200776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertTrue("failed to connect to " + mTestAccessPoint, 20119306af73a8175e1327101132e26a35c7dfe5168Xia Wang connectToWifi(mTestAccessPoint)); 20219306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForWifiState(WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 20319306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 20419306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 2052c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 20619306af73a8175e1327101132e26a35c7dfe5168Xia Wang sleep(SHORT_TIMEOUT); 2072c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Disable Wifi 208a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Disable Wifi"); 20919306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!disableWifi()) { 210a4c2caac05009512213454d329579a79dde11e5fXia Wang log("disable Wifi failed"); 2112c15966f8cf6160ad5dcbbde372508de89985829Xia Wang return; 2122c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 2132c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2142c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Wait for the Wifi state to be DISABLED 21519306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForWifiState(WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 21619306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, 21719306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 218776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 21919306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 22019306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.CONNECTED, LONG_TIMEOUT)); 221b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 2222c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 223b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang NetworkInfo networkInfo; 224776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 225b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang //Prepare for connectivity state verification 22619306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 22719306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, 228b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang networkInfo.getState(), NetworkState.DO_NOTHING, 229b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang State.DISCONNECTED); 230b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 23119306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 23219306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 2332c15966f8cf6160ad5dcbbde372508de89985829Xia Wang NetworkState.TO_CONNECTION, State.CONNECTED); 2342c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 235a4c2caac05009512213454d329579a79dde11e5fXia Wang // wait for 2 minutes before restart wifi 23619306af73a8175e1327101132e26a35c7dfe5168Xia Wang sleep(WIFI_STOP_START_INTERVAL); 2372c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Enable Wifi again 238a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Enable Wifi again"); 23919306af73a8175e1327101132e26a35c7dfe5168Xia Wang enableWifi(); 2402c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2412c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Wait for Wifi to be connected and mobile to be disconnected 24219306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 24319306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 244776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 24519306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 24619306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 247b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 2482c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2492c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // validate wifi states 25019306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 251a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Wifi state transition validation failed."); 252a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 25319306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 2542c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue(false); 2552c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 2562c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 2572c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2582c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 4: test disconnect Wifi 2592c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 2602c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDisconnectWifi() { 261776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertNotNull("SSID is null", mTestAccessPoint); 2622c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2632c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // connect to Wifi 264776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertTrue("failed to connect to " + mTestAccessPoint, 26519306af73a8175e1327101132e26a35c7dfe5168Xia Wang connectToWifi(mTestAccessPoint)); 2662c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 26719306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 26819306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 2692c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2702c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Wait for a few seconds to avoid the state that both Mobile and Wifi is connected 27119306af73a8175e1327101132e26a35c7dfe5168Xia Wang sleep(SHORT_TIMEOUT); 2727fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 273b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang NetworkInfo networkInfo; 274776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 27519306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 27619306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, 277b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang networkInfo.getState(), 278b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang NetworkState.TO_CONNECTION, 279b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang State.CONNECTED); 280b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 28119306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 28219306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 2832c15966f8cf6160ad5dcbbde372508de89985829Xia Wang NetworkState.TO_DISCONNECTION, State.DISCONNECTED); 2842c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2852c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // clear Wifi 28619306af73a8175e1327101132e26a35c7dfe5168Xia Wang removeConfiguredNetworksAndDisableWifi(); 2872c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 28819306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, 28919306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 290776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 29119306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 29219306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.CONNECTED, LONG_TIMEOUT)); 293b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 2942c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2957fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // validate states 29619306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 297a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Wifi state transition validation failed."); 298a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 29919306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 3007fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue(false); 3017fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 302776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 30319306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 304a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Mobile state transition validation failed."); 305a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 30619306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 307b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang assertTrue(false); 308b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 3097fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 3107fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 3112c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3122c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 5: test connectivity from 3G to airplane mode, then to 3G again 3132c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 3142c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDataConnectionWith3GToAmTo3G() { 315776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 31619306af73a8175e1327101132e26a35c7dfe5168Xia Wang Log.v(TAG, this.getName() + " is excluded for wifi-only test"); 317776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 318776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 3192c15966f8cf6160ad5dcbbde372508de89985829Xia Wang //Prepare for state verification 32019306af73a8175e1327101132e26a35c7dfe5168Xia Wang NetworkInfo networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 32119306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, 3222c15966f8cf6160ad5dcbbde372508de89985829Xia Wang networkInfo.getState(), 3232c15966f8cf6160ad5dcbbde372508de89985829Xia Wang NetworkState.TO_DISCONNECTION, 3242c15966f8cf6160ad5dcbbde372508de89985829Xia Wang State.DISCONNECTED); 32519306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 3262c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertEquals(State.DISCONNECTED, networkInfo.getState()); 3272c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3282c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Enable airplane mode 329a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Enable airplane mode"); 33019306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(true); 33119306af73a8175e1327101132e26a35c7dfe5168Xia Wang sleep(SHORT_TIMEOUT); 3322c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 33319306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 3348efaeb03ea1ecd633f61bdb03bb90393887f08dfXia Wang assertEquals(State.DISCONNECTED, networkInfo.getState()); 335776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang // wait until mobile is turn off 33619306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 33719306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 33819306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 339a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Mobile state transition validation failed."); 340a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 34119306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 3422c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue(false); 3432c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 3442c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3452c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // reset state recorder 34619306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 34719306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, 3482c15966f8cf6160ad5dcbbde372508de89985829Xia Wang networkInfo.getState(), 3492c15966f8cf6160ad5dcbbde372508de89985829Xia Wang NetworkState.TO_CONNECTION, 3502c15966f8cf6160ad5dcbbde372508de89985829Xia Wang State.CONNECTED); 35119306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 35219306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 3532c15966f8cf6160ad5dcbbde372508de89985829Xia Wang NetworkState.DO_NOTHING, State.DISCONNECTED); 3542c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3552c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // disable airplane mode 35619306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(false); 3572c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 35819306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 35919306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.CONNECTED, LONG_TIMEOUT)); 3602c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3612c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Validate the state transition 36219306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 363a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Mobile state transition validation failed."); 364a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 36519306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 3662c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue(false); 3672c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 36819306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 369a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Wifi state transition validation failed."); 370a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 37119306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 3722c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue(false); 3732c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 3742c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 3752c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3762c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 6: test connectivity with airplane mode Wifi connected 3772c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 3782c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDataConnectionOverAMWithWifi() { 379776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 38019306af73a8175e1327101132e26a35c7dfe5168Xia Wang Log.v(TAG, this.getName() + " is excluded for wifi-only test"); 381776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 382776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 383776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertNotNull("SSID is null", mTestAccessPoint); 3842c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Eanble airplane mode 385a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Enable airplane mode"); 38619306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(true); 3872c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 388b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang NetworkInfo networkInfo; 389776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 39019306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 39119306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 39219306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 39319306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, 394b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang networkInfo.getState(), 395b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang NetworkState.DO_NOTHING, 396b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang State.DISCONNECTED); 397b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 39819306af73a8175e1327101132e26a35c7dfe5168Xia Wang networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 39919306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 4002c15966f8cf6160ad5dcbbde372508de89985829Xia Wang NetworkState.TO_CONNECTION, State.CONNECTED); 4012c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4022c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Connect to Wifi 403776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertTrue("failed to connect to " + mTestAccessPoint, 40419306af73a8175e1327101132e26a35c7dfe5168Xia Wang connectToWifi(mTestAccessPoint)); 40519306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 40619306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 4072c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4082c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // validate state and broadcast 40919306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 410a4c2caac05009512213454d329579a79dde11e5fXia Wang log("state validate for Wifi failed"); 411a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 41219306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 4132c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue("State validation failed", false); 4142c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 415776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 41619306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 417a4c2caac05009512213454d329579a79dde11e5fXia Wang log("state validation for Mobile failed"); 418a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 41919306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 420b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang assertTrue("state validation failed", false); 421b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 4222c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 42319306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(false); 4242c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 4252c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4262c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 7: test connectivity while transit from Wifi->AM->Wifi 4272c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 4282c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDataConnectionWithWifiToAMToWifi () { 429776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 43019306af73a8175e1327101132e26a35c7dfe5168Xia Wang Log.v(TAG, this.getName() + " is excluded for wifi-only test"); 431776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 432776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 433776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang // Connect to mTestAccessPoint 434776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertNotNull("SSID is null", mTestAccessPoint); 4352c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Connect to Wifi 436776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertTrue("failed to connect to " + mTestAccessPoint, 43719306af73a8175e1327101132e26a35c7dfe5168Xia Wang connectToWifi(mTestAccessPoint)); 4382c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 43919306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 44019306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 4412c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4422c15966f8cf6160ad5dcbbde372508de89985829Xia Wang try { 44319306af73a8175e1327101132e26a35c7dfe5168Xia Wang Thread.sleep(SHORT_TIMEOUT); 4442c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } catch (Exception e) { 445a4c2caac05009512213454d329579a79dde11e5fXia Wang log("exception: " + e.toString()); 4462c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 4472c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4482c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Enable airplane mode without clearing Wifi 44919306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(true); 4502c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 45119306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, 45219306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 4532c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4542c15966f8cf6160ad5dcbbde372508de89985829Xia Wang try { 45519306af73a8175e1327101132e26a35c7dfe5168Xia Wang Thread.sleep(SHORT_TIMEOUT); 4562c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } catch (Exception e) { 457a4c2caac05009512213454d329579a79dde11e5fXia Wang log("exception: " + e.toString()); 4582c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 4592c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4602c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Prepare for state validation 46119306af73a8175e1327101132e26a35c7dfe5168Xia Wang NetworkInfo networkInfo = mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 4622c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertEquals(State.DISCONNECTED, networkInfo.getState()); 46319306af73a8175e1327101132e26a35c7dfe5168Xia Wang setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, 4642c15966f8cf6160ad5dcbbde372508de89985829Xia Wang networkInfo.getState(), NetworkState.TO_CONNECTION, State.CONNECTED); 4652c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4662c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Disable airplane mode 46719306af73a8175e1327101132e26a35c7dfe5168Xia Wang mCM.setAirplaneMode(false); 4682c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 46919306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 47019306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 471776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 47219306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 47319306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 474b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 4752c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4762c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // validate the state transition 47719306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 478a4c2caac05009512213454d329579a79dde11e5fXia Wang log("Wifi state transition validation failed."); 479a4c2caac05009512213454d329579a79dde11e5fXia Wang log("reason: " + 48019306af73a8175e1327101132e26a35c7dfe5168Xia Wang getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 4812c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertTrue(false); 4822c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 4832c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 4842c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4852c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 8: test wifi state change while connecting/disconnecting to/from an AP 4862c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 4872c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testWifiStateChange () { 488776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertNotNull("SSID is null", mTestAccessPoint); 489776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang //Connect to mTestAccessPoint 490776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang assertTrue("failed to connect to " + mTestAccessPoint, 49119306af73a8175e1327101132e26a35c7dfe5168Xia Wang connectToWifi(mTestAccessPoint)); 49219306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForWifiState(WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 49319306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, 49419306af73a8175e1327101132e26a35c7dfe5168Xia Wang WIFI_CONNECTION_TIMEOUT)); 4952c15966f8cf6160ad5dcbbde372508de89985829Xia Wang assertNotNull("Not associated with any AP", 49619306af73a8175e1327101132e26a35c7dfe5168Xia Wang mWifiManager.getConnectionInfo().getBSSID()); 4972c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 4982c15966f8cf6160ad5dcbbde372508de89985829Xia Wang try { 49919306af73a8175e1327101132e26a35c7dfe5168Xia Wang Thread.sleep(SHORT_TIMEOUT); 5002c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } catch (Exception e) { 501a4c2caac05009512213454d329579a79dde11e5fXia Wang log("exception: " + e.toString()); 5022c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 5032c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 5042c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Disconnect from the current AP 505a4c2caac05009512213454d329579a79dde11e5fXia Wang log("disconnect from the AP"); 50619306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!disconnectAP()) { 507776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang log("failed to disconnect from " + mTestAccessPoint); 5082c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 5092c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 5102c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Verify the connectivity state for Wifi is DISCONNECTED 51119306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, 51219306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.DISCONNECTED, LONG_TIMEOUT)); 5132c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 51419306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!disableWifi()) { 515a4c2caac05009512213454d329579a79dde11e5fXia Wang log("disable Wifi failed"); 5162c15966f8cf6160ad5dcbbde372508de89985829Xia Wang return; 5172c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 51819306af73a8175e1327101132e26a35c7dfe5168Xia Wang assertTrue(waitForWifiState(WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 5192c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 5207fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang} 521