WifiAssociationTest.java revision 2591e00b57b8aedd9e44fecce3f55a2c6a5428c2
1/* 2 * Copyright (C) 2013, 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 android.net.ConnectivityManager; 20import android.net.NetworkInfo.State; 21import android.net.wifi.WifiConfiguration; 22import android.net.wifi.WifiConfiguration.AuthAlgorithm; 23import android.net.wifi.WifiConfiguration.GroupCipher; 24import android.net.wifi.WifiConfiguration.PairwiseCipher; 25import android.net.wifi.WifiConfiguration.Protocol; 26import android.net.wifi.WifiInfo; 27import android.os.Bundle; 28import android.test.suitebuilder.annotation.LargeTest; 29 30import com.android.connectivitymanagertest.ConnectivityManagerTestBase; 31import com.android.connectivitymanagertest.WifiAssociationTestRunner; 32import com.android.connectivitymanagertest.WifiConfigurationHelper; 33 34/** 35 * Test Wi-Fi connection with different configuration 36 * To run this tests: 37 * * adb shell am instrument -e ssid <ssid> -e password <password> \ 38 * -e security-type [OPEN|WEP64|WEP128|WPA_TKIP|WPA2_AES] -e frequency-band [2.4|5.0|auto] 39 * -w com.android.connectivitymanagertest/.WifiAssociationTestRunner" 40 */ 41public class WifiAssociationTest extends ConnectivityManagerTestBase { 42 private String mSsid = null; 43 private String mPassword = null; 44 private String mSecurityType = null; 45 private String mFrequencyBand = null; 46 private int mBand; 47 48 enum SECURITY_TYPE { 49 OPEN, WEP64, WEP128, WPA_TKIP, WPA2_AES 50 } 51 52 public WifiAssociationTest() { 53 super(WifiAssociationTest.class.getSimpleName()); 54 } 55 56 @Override 57 protected void setUp() throws Exception { 58 super.setUp(); 59 WifiAssociationTestRunner runner = (WifiAssociationTestRunner)getInstrumentation(); 60 Bundle arguments = runner.getArguments(); 61 mSecurityType = arguments.getString("security-type"); 62 mSsid = arguments.getString("ssid"); 63 mPassword = arguments.getString("password"); 64 mFrequencyBand = arguments.getString("frequency-band"); 65 mBand = runner.mBand; 66 assertNotNull("security type is empty", mSecurityType); 67 assertNotNull("ssid is empty", mSsid); 68 validateFrequencyBand(); 69 70 // enable wifi and verify wpa_supplicant is started 71 assertTrue("enable Wifi failed", enableWifi()); 72 assertTrue("wifi not connected", waitForNetworkState( 73 ConnectivityManager.TYPE_WIFI, State.CONNECTED, LONG_TIMEOUT)); 74 WifiInfo wi = mWifiManager.getConnectionInfo(); 75 assertNotNull("no active wifi info", wi); 76 assertTrue("failed to ping wpa_supplicant ", mWifiManager.pingSupplicant()); 77 } 78 79 private void validateFrequencyBand() { 80 if (mFrequencyBand != null) { 81 int currentFreq = mWifiManager.getFrequencyBand(); 82 logv("read frequency band: " + currentFreq); 83 assertEquals("specified frequency band does not match operational band of WifiManager", 84 currentFreq, mBand); 85 } 86 } 87 88 @LargeTest 89 public void testWifiAssociation() { 90 assertNotNull("no test ssid", mSsid); 91 WifiConfiguration config = null; 92 SECURITY_TYPE security = SECURITY_TYPE.valueOf(mSecurityType); 93 logv("Security type is " + security.toString()); 94 switch (security) { 95 // set network configurations 96 case OPEN: 97 config = WifiConfigurationHelper.createOpenConfig(mSsid); 98 break; 99 case WEP64: 100 assertNotNull("password is empty", mPassword); 101 // always use hex pair for WEP-40 102 assertTrue(WifiConfigurationHelper.isHex(mPassword, 10)); 103 config = WifiConfigurationHelper.createWepConfig(mSsid, mPassword); 104 config.allowedGroupCiphers.set(GroupCipher.WEP40); 105 break; 106 case WEP128: 107 assertNotNull("password is empty", mPassword); 108 // always use hex pair for WEP-104 109 assertTrue(WifiConfigurationHelper.isHex(mPassword, 26)); 110 config = WifiConfigurationHelper.createWepConfig(mSsid, mPassword); 111 config.allowedGroupCiphers.set(GroupCipher.WEP104); 112 break; 113 case WPA_TKIP: 114 assertNotNull("password is empty", mPassword); 115 config = WifiConfigurationHelper.createPskConfig(mSsid, mPassword); 116 config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); 117 config.allowedProtocols.set(Protocol.WPA); 118 config.allowedPairwiseCiphers.set(PairwiseCipher.TKIP); 119 config.allowedGroupCiphers.set(GroupCipher.TKIP); 120 break; 121 case WPA2_AES: 122 assertNotNull("password is empty", mPassword); 123 config = WifiConfigurationHelper.createPskConfig(mSsid, mPassword); 124 config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); 125 config.allowedProtocols.set(Protocol.RSN); 126 config.allowedPairwiseCiphers.set(PairwiseCipher.CCMP); 127 config.allowedGroupCiphers.set(GroupCipher.CCMP); 128 break; 129 default: 130 fail("Not a valid security type: " + mSecurityType); 131 break; 132 } 133 logv("network config: %s", config.toString()); 134 connectToWifi(config); 135 // verify that connection actually works 136 assertTrue("no network connectivity at end of test", checkNetworkConnectivity()); 137 } 138} 139