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.net.ConnectivityManager; 207fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo; 217fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo.State; 222c15966f8cf6160ad5dcbbde372508de89985829Xia Wangimport android.net.wifi.WifiManager; 23d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhuimport android.os.SystemClock; 244dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotimport android.provider.Settings; 254dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabotimport android.test.suitebuilder.annotation.LargeTest; 264dfa295ad8b75a8c0976e7de078ebe4f654a6a89Brett Chabot 2719306af73a8175e1327101132e26a35c7dfe5168Xia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestBase; 287fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestRunner; 297fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 302591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowepublic class ConnectivityManagerMobileTest extends ConnectivityManagerTestBase { 312591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 322591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe public ConnectivityManagerMobileTest() { 332591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe super(ConnectivityManagerMobileTest.class.getSimpleName()); 342591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 352c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3686e15557c52e2847d2adc8495a281dcf0239506eEric Rowe private String mSsid; 3786e15557c52e2847d2adc8495a281dcf0239506eEric Rowe private String mPassword; 38776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang private boolean mWifiOnlyFlag; 397fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 407fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @Override 417fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void setUp() throws Exception { 427fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang super.setUp(); 437fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang ConnectivityManagerTestRunner mRunner = 447fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang (ConnectivityManagerTestRunner)getInstrumentation(); 4586e15557c52e2847d2adc8495a281dcf0239506eEric Rowe mSsid = mRunner.getWifiSsid(); 4686e15557c52e2847d2adc8495a281dcf0239506eEric Rowe mPassword = mRunner.getWifiPassword(); 4786e15557c52e2847d2adc8495a281dcf0239506eEric Rowe mWifiOnlyFlag = mRunner.isWifiOnly(); 48776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang 497fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Each test case will start with cellular connection 50c09cdce1b05075da808ae080b9905a14a3e1e627Christopher Tate if (Settings.Global.getInt(getInstrumentation().getContext().getContentResolver(), 51c09cdce1b05075da808ae080b9905a14a3e1e627Christopher Tate Settings.Global.AIRPLANE_MODE_ON) == 1) { 522591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv("airplane is not disabled, disable it."); 53d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(false); 542dc2991f5833c9ca72e5e4d1f7bdc1c6c8caca91Xia Wang } 55776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang 56776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 5719306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (!waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 5819306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.CONNECTED, LONG_TIMEOUT)) { 59b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang // Note: When the test fails in setUp(), tearDown is not called. In that case, 60b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang // the activity is destroyed which blocks the next test at "getActivity()". 61b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang // tearDown() is called here to avoid that situation. 62b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang tearDown(); 63b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang fail("Device is not connected to Mobile, setUp failed"); 64b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 65ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang } 667fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 677fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 687fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @Override 697fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void tearDown() throws Exception { 7019306af73a8175e1327101132e26a35c7dfe5168Xia Wang removeConfiguredNetworksAndDisableWifi(); 71d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(false); 727fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang super.tearDown(); 737fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 747fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 75be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // Test case 1: Test enabling Wifi without associating with any AP, no broadcast on network 76be142fc6aae5484b518f6ab29d12f0c086f6fa74Xia Wang // event should be expected. 777fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @LargeTest 787fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void test3GToWifiNotification() { 79776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 802591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv(getName() + " is excluded for wifi-only test"); 81776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 82776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 83d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 84d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // disable WiFi 85d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disable WiFi", disableWifi()); 86d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 87d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for mobile 88d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to wait for mobile connection", waitForNetworkState( 89d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_MOBILE, State.CONNECTED, LONG_TIMEOUT)); 90d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 91d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that we are indeed using mobile 92d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu NetworkInfo ni = mCm.getActiveNetworkInfo(); 93d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertEquals("active network is not mobile", ConnectivityManager.TYPE_MOBILE, ni.getType()); 94d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 95d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu long timestamp = SystemClock.uptimeMillis(); 96d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // now enable WiFi 97d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to enable WiFi", enableWifi()); 98d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that WiFi state settles at disconnected since no AP should be configured 99d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("WiFi state is not DISCONNECTED after enabling", waitForWifiState( 100d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 101d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 102d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that no connectivity change broadcast was sent since we enable wifi 103d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("connectivity has changed since wifi enable", 104d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu timestamp > getLastConnectivityChangeTime()); 105d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 106d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that the device is still connected to MOBILE 1077fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang verifyCellularConnection(); 108d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 109d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no network connectivity at end of test", checkNetworkConnectivity()); 1107fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1117fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1127fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Test case 2: test connection to a given AP 1137fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @LargeTest 1147fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void testConnectToWifi() { 11586e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertNotNull("SSID is null", mSsid); 1167fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 117d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that we are able to connect to the ap 11886e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertTrue("failed to connect to " + mSsid, connectToWifi(mSsid, mPassword)); 119d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that WifiManager reports correct state 12012747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu assertTrue("wifi not enabled", waitForWifiState( 12112747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 122d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that ConnectivityManager reports correct state for Wifi 12312747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu assertTrue("wifi not connected", waitForNetworkState( 12412747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 125d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // below check disbabled since we have bug in what ConnectivityManager returns 126d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// if (!mWifiOnlyFlag) { 127d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// // assert that ConnectivityManager reports correct state for mobile 128d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// assertTrue("mobile not disconnected", waitForNetworkState( 129d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED, LONG_TIMEOUT)); 130d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// } 131d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 132d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no network connectivity at end of test", checkNetworkConnectivity()); 1332c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 1342c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 135d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // Test case 3: connect & reconnect to Wifi with known AP 1362c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 1372c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testConnectToWifWithKnownAP() { 13886e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertNotNull("SSID is null", mSsid); 139d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // enable WiFi 140d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to enable wifi", enableWifi()); 141d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for wifi enable 142d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not enabled", waitForWifiState( 143d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 144d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // Connect to AP 14586e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertTrue("failed to connect to " + mSsid, connectToWifi(mSsid, mPassword)); 146d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify wifi connected as reported by ConnectivityManager 147d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not connected", waitForNetworkState( 148d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 149d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 150d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disable wifi", disableWifi()); 1512c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 1522c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Wait for the Wifi state to be DISABLED 153d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi state not disabled", waitForWifiState( 154d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 155d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // below check disbabled since we have bug in what ConnectivityManager returns 156d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// assertTrue("wifi not disconnected", waitForNetworkState(ConnectivityManager.TYPE_WIFI, 157d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// State.DISCONNECTED, LONG_TIMEOUT)); 158776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 159d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("mobile not connected after wifi disable", waitForNetworkState( 160d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_MOBILE, State.CONNECTED, LONG_TIMEOUT)); 161b97435c94f4d35a70d63e5dcba5415b0110cf2c9Xia Wang } 1622c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 163d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for 30s before restart wifi 164d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu SystemClock.sleep(LONG_TIMEOUT); 165d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to enable wifi after disable", enableWifi()); 1662c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 167d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for wifi enable 168d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not enabled after toggle", waitForWifiState( 169d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 1702c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Wait for Wifi to be connected and mobile to be disconnected 171d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not connected after toggle", waitForNetworkState( 172d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 173d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // below check disbabled since we have bug in what ConnectivityManager returns 174d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// if (!mWifiOnlyFlag) { 175d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// assertTrue("mobile not disconnected after wifi toggle", waitForNetworkState( 176d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED, LONG_TIMEOUT)); 177d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// } 178d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 179d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no network connectivity at end of test", checkNetworkConnectivity()); 1802c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 1812c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 182d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // Test case 4: test disconnect and clear wifi settings 1832c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 1842c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDisconnectWifi() { 18586e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertNotNull("SSID is null", mSsid); 1862c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 187d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // enable WiFi 188d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to enable wifi", enableWifi()); 189d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for wifi enable 190d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not enabled", waitForWifiState( 191d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 1922c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // connect to Wifi 19386e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertTrue("failed to connect to " + mSsid, connectToWifi(mSsid, mPassword)); 1942c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 195d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not connected", waitForNetworkState( 196d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 1972c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 1982c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // clear Wifi 19919306af73a8175e1327101132e26a35c7dfe5168Xia Wang removeConfiguredNetworksAndDisableWifi(); 2002c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 201d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that wifi has been disabled 202d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi state not disabled", waitForWifiState( 203d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 204776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (!mWifiOnlyFlag) { 205d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that mobile is now connected 206d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("mobile not enabled", waitForNetworkState(ConnectivityManager.TYPE_MOBILE, 20719306af73a8175e1327101132e26a35c7dfe5168Xia Wang State.CONNECTED, LONG_TIMEOUT)); 208d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 209d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no network connectivity at end of test", checkNetworkConnectivity()); 2107fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 2117fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 2122c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 213d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // Test case 5: test connectivity with mobile->airplane mode->mobile 2142c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 2152c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDataConnectionWith3GToAmTo3G() { 216776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 2172591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv(getName() + " is excluded for wifi-only test"); 218776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 219776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 220d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // disable wifi 221d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disable wifi", disableWifi()); 222d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi state not disabled", waitForWifiState( 223d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 224d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that we have mobile connection 225d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no mobile connection", waitForNetworkState( 226d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_MOBILE, State.CONNECTED, LONG_TIMEOUT)); 2272c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 228d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // enable airplane mode 229d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(true); 230d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert no active network connection after airplane mode enabled 231d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("still has active network connection", 232d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu waitUntilNoActiveNetworkConnection(LONG_TIMEOUT)); 2332c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2342c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // disable airplane mode 235d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(false); 236d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert there is active network connection after airplane mode disabled 237d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no active network connection after airplane mode disable", 238d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu waitForActiveNetworkConnection(LONG_TIMEOUT)); 239d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 240d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that we have mobile connection 241d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no mobile connection", waitForNetworkState( 242d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_MOBILE, State.CONNECTED, LONG_TIMEOUT)); 243d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 244d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no network connectivity at end of test", checkNetworkConnectivity()); 2452c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 2462c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 247d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // Test case 6: test connectivity with airplane mode on but wifi enabled 2482c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 2492c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDataConnectionOverAMWithWifi() { 25086e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertNotNull("SSID is null", mSsid); 251d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // enable airplane mode 252d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(true); 253d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert there is active network connection after airplane mode disabled 254d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("still has active network connection", 255d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu waitUntilNoActiveNetworkConnection(LONG_TIMEOUT)); 2562c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 257d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // connect to Wifi 25886e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertTrue("failed to connect to " + mSsid, connectToWifi(mSsid, mPassword)); 25912747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu assertTrue("wifi not connected", waitForNetworkState( 26012747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 261d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 262d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no network connectivity after wifi enable", checkNetworkConnectivity()); 2632c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 264d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // disable airplane mode 265d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(false); 2662c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 2672c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 2682c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 7: test connectivity while transit from Wifi->AM->Wifi 2692c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 2702c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testDataConnectionWithWifiToAMToWifi () { 271d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // connect to mTestAccessPoint 27286e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertNotNull("SSID is null", mSsid); 273d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // enable WiFi 274d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to enable wifi", enableWifi()); 275d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for wifi enable 276d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not enabled", waitForWifiState( 277d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 278d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // connect to Wifi 27986e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertTrue("failed to connect to " + mSsid, connectToWifi(mSsid, mPassword)); 28012747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu assertTrue("wifi not connected", waitForNetworkState( 28112747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 2822c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 283d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // enable airplane mode without clearing Wifi 284d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(true); 285d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert there is active network connection after airplane mode disabled 286d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("still has active network connection", 287d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu waitUntilNoActiveNetworkConnection(LONG_TIMEOUT)); 2882c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 289d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // disable airplane mode 290d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mCm.setAirplaneMode(false); 291d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert there is active network connection after airplane mode disabled 292d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no active network connection after airplane mode disable", 293d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu waitForActiveNetworkConnection(LONG_TIMEOUT)); 294d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // assert that we have a Wifi connection 295d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not connected after airplane mode disable", waitForNetworkState( 296d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 297d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 298d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("no network connectivity at end of test", checkNetworkConnectivity()); 2992c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 3002c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 3012c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Test case 8: test wifi state change while connecting/disconnecting to/from an AP 3022c15966f8cf6160ad5dcbbde372508de89985829Xia Wang @LargeTest 3032c15966f8cf6160ad5dcbbde372508de89985829Xia Wang public void testWifiStateChange () { 30486e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertNotNull("SSID is null", mSsid); 305d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // enable WiFi 306d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to enable wifi", enableWifi()); 307d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for wifi enable 308d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi not enabled", waitForWifiState( 309d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_ENABLED, LONG_TIMEOUT)); 310d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // connect to Wifi 31186e15557c52e2847d2adc8495a281dcf0239506eEric Rowe assertTrue("failed to connect to " + mSsid, connectToWifi(mSsid, mPassword)); 31212747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu assertTrue("wifi not connected", waitForNetworkState( 31312747ab3aafc92f3b86da7df2b1d992866cbaf52Guang Zhu ConnectivityManager.TYPE_WIFI, State.CONNECTED, WIFI_CONNECTION_TIMEOUT)); 314d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertNotNull("not associated with any AP", mWifiManager.getConnectionInfo().getBSSID()); 3152c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 316d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // disconnect from the current AP 317d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disconnect from AP", disconnectAP()); 3182c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 319d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // below check disbabled since we have bug in what ConnectivityManager returns 3202c15966f8cf6160ad5dcbbde372508de89985829Xia Wang // Verify the connectivity state for Wifi is DISCONNECTED 321d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// assertTrue(waitForNetworkState(ConnectivityManager.TYPE_WIFI, 322d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu// State.DISCONNECTED, LONG_TIMEOUT)); 3232c15966f8cf6160ad5dcbbde372508de89985829Xia Wang 324d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // disable WiFi 325d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disable wifi", disableWifi()); 326d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi state not disabled", waitForWifiState( 327d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 3282c15966f8cf6160ad5dcbbde372508de89985829Xia Wang } 32958a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe 33058a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe // help function to verify 3G connection 33158a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe private void verifyCellularConnection() { 33258a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe NetworkInfo extraNetInfo = mCm.getActiveNetworkInfo(); 33358a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe assertEquals("network type is not MOBILE", ConnectivityManager.TYPE_MOBILE, 33458a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe extraNetInfo.getType()); 33558a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe assertTrue("not connected to cellular network", extraNetInfo.isConnected()); 33658a3ddf5aafacbd84de7104f07a994bb06a9b374Eric Rowe } 3377fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang} 338