WifiConnectionTest.java revision ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7
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.NetworkState; 21 22import android.R; 23import android.app.Activity; 24import android.content.Intent; 25import android.content.Context; 26import android.content.res.Resources; 27import android.net.wifi.WifiConfiguration; 28import android.net.wifi.WifiInfo; 29import android.net.wifi.WifiManager; 30import android.net.ConnectivityManager; 31import android.net.NetworkInfo; 32import android.net.NetworkInfo.State; 33 34import android.test.suitebuilder.annotation.LargeTest; 35import android.test.ActivityInstrumentationTestCase2; 36import android.util.Log; 37 38import java.util.ArrayList; 39import java.util.List; 40 41/** 42 * Test Wi-Fi connection with different configuration 43 * To run this tests: 44 * adb shell am instrument -e class 45 * com.android.connectivitymanagertest.functional.WifiConnectionTest 46 * -w com.android.connectivitymanagertest/.ConnectivityManagerTestRunner 47 */ 48public class WifiConnectionTest 49 extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> { 50 private static final String TAG = "WifiConnectionTest"; 51 private static final boolean DEBUG = true; 52 private static final String PKG_NAME = "com.android.connectivitymanagertests"; 53 private List<WifiConfiguration> networks = new ArrayList<WifiConfiguration>(); 54 private ConnectivityManagerTestActivity mAct; 55 56 public WifiConnectionTest() { 57 super(PKG_NAME, ConnectivityManagerTestActivity.class); 58 } 59 60 @Override 61 public void setUp() throws Exception { 62 super.setUp(); 63 mAct = getActivity(); 64 networks = mAct.loadNetworkConfigurations(); 65 if (DEBUG) { 66 printNetworkConfigurations(); 67 } 68 69 // enable Wifi and verify wpa_supplicant is started 70 assertTrue("enable Wifi failed", mAct.enableWifi()); 71 try { 72 Thread.sleep( 2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT); 73 } catch (Exception e) { 74 fail("interrupted while waiting for WPA_SUPPLICANT to start"); 75 } 76 WifiInfo mConnection = mAct.mWifiManager.getConnectionInfo(); 77 assertNotNull(mConnection); 78 assertTrue("wpa_supplicant is not started ", mAct.mWifiManager.pingSupplicant()); 79 } 80 81 private void printNetworkConfigurations() { 82 Log.v(TAG, "==== print network configurations parsed from XML file ===="); 83 Log.v(TAG, "number of access points: " + networks.size()); 84 for (WifiConfiguration config : networks) { 85 Log.v(TAG, config.toString()); 86 } 87 } 88 89 @Override 90 public void tearDown() throws Exception { 91 mAct.removeConfiguredNetworksAndDisableWifi(); 92 super.tearDown(); 93 } 94 95 /** 96 * Connect to the provided Wi-Fi network 97 * @param config is the network configuration 98 * @return true if the connection is successful. 99 */ 100 private void connectToWifi(WifiConfiguration config) { 101 // step 1: connect to the test access point 102 assertTrue("failed to connect to " + config.SSID, 103 mAct.connectToWifiWithConfiguration(config)); 104 105 // step 2: verify Wifi state and network state; 106 assertTrue(mAct.waitForWifiState(WifiManager.WIFI_STATE_ENABLED, 107 ConnectivityManagerTestActivity.SHORT_TIMEOUT)); 108 assertTrue(mAct.waitForNetworkState(ConnectivityManager.TYPE_WIFI, 109 State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); 110 111 // step 3: verify the current connected network is the given SSID 112 if (DEBUG) { 113 Log.v(TAG, "config.SSID = " + config.SSID); 114 Log.v(TAG, "mAct.mWifiManager.getConnectionInfo.getSSID()" + 115 mAct.mWifiManager.getConnectionInfo().getSSID()); 116 } 117 assertTrue(config.SSID.contains(mAct.mWifiManager.getConnectionInfo().getSSID())); 118 119 // Maintain the connection for 50 seconds before switching 120 try { 121 Thread.sleep(50*1000); 122 } catch (Exception e) { 123 fail("interrupted while waiting for WPA_SUPPLICANT to start"); 124 } 125 } 126 127 @LargeTest 128 public void testWifiConnections() { 129 for (int i = 0; i < networks.size(); i++) { 130 connectToWifi(networks.get(i)); 131 mAct.removeConfiguredNetworksAndDisableWifi(); 132 } 133 } 134} 135