1ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang/* 2ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Copyright (C) 2010, The Android Open Source Project 3ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * 4ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * you may not use this file except in compliance with the License. 6ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * You may obtain a copy of the License at 7ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * 8ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * http://www.apache.org/licenses/LICENSE-2.0 9ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * 10ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Unless required by applicable law or agreed to in writing, software 11ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * distributed under the License is distributed on an "AS IS" BASIS, 12ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * See the License for the specific language governing permissions and 14ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * limitations under the License. 15ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang */ 16ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang 17ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wangpackage com.android.connectivitymanagertest.functional; 18ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang 19d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhuimport android.net.wifi.WifiConfiguration; 202591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport android.os.SystemClock; 21ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wangimport android.test.suitebuilder.annotation.LargeTest; 22ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang 23d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhuimport com.android.connectivitymanagertest.ConnectivityManagerTestBase; 242591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport com.android.connectivitymanagertest.WifiConfigurationHelper; 25d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 262591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.BufferedReader; 272591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.File; 282591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.FileReader; 292591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.IOException; 30ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wangimport java.util.List; 31ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang 32ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang/** 33ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Test Wi-Fi connection with different configuration 34ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * To run this tests: 352591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe * adb shell am instrument \ 362591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe * -e class com.android.connectivitymanagertest.functional.WifiConnectionTest \ 372591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe * -w com.android.connectivitymanagertest/.ConnectivityManagerTestRunner 38ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang */ 392591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowepublic class WifiConnectionTest extends ConnectivityManagerTestBase { 402591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe private static final String WIFI_CONFIG_FILE = "/data/wifi_configs.json"; 412591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe private static final long PAUSE_DURATION_MS = 60 * 1000; 422591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 432591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe public WifiConnectionTest() { 442591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe super(WifiConnectionTest.class.getSimpleName()); 452591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 46ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang 47ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang @Override 48ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang public void setUp() throws Exception { 49ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang super.setUp(); 502591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe assertTrue("Failed to enable wifi", enableWifi()); 51ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang } 52ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang 53ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang @Override 54ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang public void tearDown() throws Exception { 5519306af73a8175e1327101132e26a35c7dfe5168Xia Wang removeConfiguredNetworksAndDisableWifi(); 56ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang super.tearDown(); 57ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang } 58ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang 59ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang @LargeTest 60ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang public void testWifiConnections() { 612591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe List<WifiConfiguration> wifiConfigs = loadConfigurations(); 622591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 632591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe printWifiConfigurations(wifiConfigs); 642591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 652591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe assertFalse("No configurations to test against", wifiConfigs.isEmpty()); 662591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 672591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe boolean shouldPause = false; 682591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe for (WifiConfiguration config : wifiConfigs) { 692591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe if (shouldPause) { 702591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv("Pausing for %d seconds", PAUSE_DURATION_MS / 1000); 712591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe SystemClock.sleep(PAUSE_DURATION_MS); 722591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 732591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv("Start wifi connection test to: %s", config.SSID); 742591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe connectToWifi(config); 752591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 76d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // verify that connection actually works 772591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe assertTrue("No connectivity at end of test", checkNetworkConnectivity()); 782591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 792591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe // Disconnect and remove the network 802591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe assertTrue("Unable to remove network", disconnectAP()); 812591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv("End wifi connection test to: %s", config.SSID); 822591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 832591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe shouldPause = true; 842591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 852591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 862591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 872591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe /** 882591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe * Load the configuration file from the root of the data partition 892591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe */ 902591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe private List<WifiConfiguration> loadConfigurations() { 912591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe BufferedReader reader = null; 922591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe try { 932591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe reader = new BufferedReader(new FileReader(new File(WIFI_CONFIG_FILE))); 942591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe StringBuffer jsonBuffer = new StringBuffer(); 952591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe String line; 962591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe while ((line = reader.readLine()) != null) { 972591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe jsonBuffer.append(line); 982591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 992591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe return WifiConfigurationHelper.parseJson(jsonBuffer.toString()); 1002591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } catch (IllegalArgumentException | IOException e) { 1012591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe throw new AssertionError("Error parsing file", e); 1022591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } finally { 1032591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe if (reader != null) { 1042591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe try { 1052591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe reader.close(); 1062591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } catch (IOException e) { 1072591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe // Ignore 1082591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 109d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu } 110ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang } 111ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang } 1122591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 1132591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe /** 1142591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe * Print the wifi configurations to test against. 1152591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe */ 1162591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe private void printWifiConfigurations(List<WifiConfiguration> wifiConfigs) { 1172591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv("Wifi configurations to be tested"); 1182591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe for (WifiConfiguration config : wifiConfigs) { 1192591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv(config.toString()); 1202591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 1212591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 122ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang} 123