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 com.android.connectivitymanagertest.ConnectivityManagerTestActivity; 20import com.android.connectivitymanagertest.ConnectivityManagerTestRunner; 21 22import android.R; 23import android.app.Activity; 24import android.content.ContentResolver; 25import android.content.Intent; 26import android.content.Context; 27import android.content.res.Resources; 28import android.net.wifi.WifiConfiguration; 29import android.net.wifi.WifiConfiguration.KeyMgmt; 30import android.net.wifi.WifiConfiguration.Status; 31import android.net.wifi.WifiInfo; 32import android.net.wifi.WifiManager; 33import android.net.ConnectivityManager; 34import android.net.DhcpInfo; 35import android.net.NetworkInfo; 36import android.net.NetworkInfo.State; 37import android.os.Handler; 38import android.os.Message; 39import android.provider.Settings; 40import android.test.suitebuilder.annotation.LargeTest; 41import android.test.ActivityInstrumentationTestCase2; 42import android.util.Log; 43 44import com.android.internal.util.AsyncChannel; 45 46import java.util.ArrayList; 47import java.util.HashSet; 48import java.util.List; 49import java.util.Set; 50 51/** 52 * Test Wi-Fi connection with different configuration 53 * To run this tests: 54 * adb shell am instrument -e class 55 * com.android.connectivitymanagertest.functional.WifiConnectionTest 56 * -w com.android.connectivitymanagertest/.ConnectivityManagerTestRunner 57 */ 58public class WifiConnectionTest 59 extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> { 60 private static final String TAG = "WifiConnectionTest"; 61 private static final boolean DEBUG = false; 62 private List<WifiConfiguration> networks = new ArrayList<WifiConfiguration>(); 63 private ConnectivityManagerTestActivity mAct; 64 private ConnectivityManagerTestRunner mRunner; 65 private WifiManager mWifiManager = null; 66 private Set<WifiConfiguration> enabledNetworks = null; 67 68 public WifiConnectionTest() { 69 super(ConnectivityManagerTestActivity.class); 70 } 71 72 @Override 73 public void setUp() throws Exception { 74 super.setUp(); 75 mRunner = ((ConnectivityManagerTestRunner)getInstrumentation()); 76 mWifiManager = (WifiManager) mRunner.getContext().getSystemService(Context.WIFI_SERVICE); 77 78 mAct = getActivity(); 79 80 networks = mAct.loadNetworkConfigurations(); 81 if (DEBUG) { 82 printNetworkConfigurations(); 83 } 84 85 // enable Wifi and verify wpa_supplicant is started 86 assertTrue("enable Wifi failed", mAct.enableWifi()); 87 sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT, 88 "interrupted while waiting for WPA_SUPPLICANT to start"); 89 WifiInfo mConnection = mAct.mWifiManager.getConnectionInfo(); 90 assertNotNull(mConnection); 91 assertTrue("wpa_supplicant is not started ", mAct.mWifiManager.pingSupplicant()); 92 } 93 94 private void printNetworkConfigurations() { 95 log("==== print network configurations parsed from XML file ===="); 96 log("number of access points: " + networks.size()); 97 for (WifiConfiguration config : networks) { 98 log(config.toString()); 99 } 100 } 101 102 @Override 103 public void tearDown() throws Exception { 104 log("tearDown()"); 105 mAct.removeConfiguredNetworksAndDisableWifi(); 106 super.tearDown(); 107 } 108 109 /** 110 * Connect to the provided Wi-Fi network 111 * @param config is the network configuration 112 * @return true if the connection is successful. 113 */ 114 private void connectToWifi(WifiConfiguration config) { 115 // step 1: connect to the test access point 116 assertTrue("failed to connect to " + config.SSID, 117 mAct.connectToWifiWithConfiguration(config)); 118 119 // step 2: verify Wifi state and network state; 120 assertTrue(mAct.waitForNetworkState(ConnectivityManager.TYPE_WIFI, 121 State.CONNECTED, 6 * ConnectivityManagerTestActivity.LONG_TIMEOUT)); 122 123 // step 3: verify the current connected network is the given SSID 124 assertNotNull("Wifi connection returns null", mAct.mWifiManager.getConnectionInfo()); 125 if (DEBUG) { 126 log("config.SSID = " + config.SSID); 127 log("mAct.mWifiManager.getConnectionInfo.getSSID()" + 128 mAct.mWifiManager.getConnectionInfo().getSSID()); 129 } 130 assertTrue(config.SSID.contains(mAct.mWifiManager.getConnectionInfo().getSSID())); 131 } 132 133 private void sleep(long sometime, String errorMsg) { 134 try { 135 Thread.sleep(sometime); 136 } catch (InterruptedException e) { 137 fail(errorMsg); 138 } 139 } 140 141 private void log(String message) { 142 Log.v(TAG, message); 143 } 144 145 @LargeTest 146 public void testWifiConnections() { 147 for (int i = 0; i < networks.size(); i++) { 148 String ssid = networks.get(i).SSID; 149 log("-- START Wi-Fi connection test to : " + ssid + " --"); 150 connectToWifi(networks.get(i)); 151 // wait for 2 minutes between wifi stop and start 152 sleep(ConnectivityManagerTestActivity.WIFI_STOP_START_INTERVAL, 153 "interruped while connected to wifi"); 154 log("-- END Wi-Fi connection test to " + ssid + " -- "); 155 } 156 } 157} 158