16026d52710d7a6195a33885020d29aa1330fa855Xia Wang/* 26026d52710d7a6195a33885020d29aa1330fa855Xia Wang * Copyright (C) 2010, The Android Open Source Project 36026d52710d7a6195a33885020d29aa1330fa855Xia Wang * 46026d52710d7a6195a33885020d29aa1330fa855Xia Wang * Licensed under the Apache License, Version 2.0 (the "License"); 56026d52710d7a6195a33885020d29aa1330fa855Xia Wang * you may not use this file except in compliance with the License. 66026d52710d7a6195a33885020d29aa1330fa855Xia Wang * You may obtain a copy of the License at 76026d52710d7a6195a33885020d29aa1330fa855Xia Wang * 86026d52710d7a6195a33885020d29aa1330fa855Xia Wang * http://www.apache.org/licenses/LICENSE-2.0 96026d52710d7a6195a33885020d29aa1330fa855Xia Wang * 106026d52710d7a6195a33885020d29aa1330fa855Xia Wang * Unless required by applicable law or agreed to in writing, software 116026d52710d7a6195a33885020d29aa1330fa855Xia Wang * distributed under the License is distributed on an "AS IS" BASIS, 126026d52710d7a6195a33885020d29aa1330fa855Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136026d52710d7a6195a33885020d29aa1330fa855Xia Wang * See the License for the specific language governing permissions and 146026d52710d7a6195a33885020d29aa1330fa855Xia Wang * limitations under the License. 156026d52710d7a6195a33885020d29aa1330fa855Xia Wang */ 166026d52710d7a6195a33885020d29aa1330fa855Xia Wang 176026d52710d7a6195a33885020d29aa1330fa855Xia Wangpackage com.android.connectivitymanagertest.stress; 186026d52710d7a6195a33885020d29aa1330fa855Xia Wang 196026d52710d7a6195a33885020d29aa1330fa855Xia Wang 206026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.net.wifi.WifiConfiguration; 216026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.net.wifi.WifiConfiguration.AuthAlgorithm; 222591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport android.net.wifi.WifiConfiguration.KeyMgmt; 2390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport android.net.wifi.WifiManager; 2490e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport android.os.Environment; 256026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.test.suitebuilder.annotation.LargeTest; 262591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 272591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport com.android.connectivitymanagertest.ConnectivityManagerStressTestRunner; 282591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport com.android.connectivitymanagertest.ConnectivityManagerTestBase; 296026d52710d7a6195a33885020d29aa1330fa855Xia Wang 3090e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport java.io.BufferedWriter; 3190e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport java.io.File; 3290e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport java.io.FileWriter; 3390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang 346026d52710d7a6195a33885020d29aa1330fa855Xia Wang/** 35d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu * Stress test setting up device as wifi hotspot 366026d52710d7a6195a33885020d29aa1330fa855Xia Wang */ 372591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowepublic class WifiApStress extends ConnectivityManagerTestBase { 386026d52710d7a6195a33885020d29aa1330fa855Xia Wang private static String NETWORK_ID = "AndroidAPTest"; 396026d52710d7a6195a33885020d29aa1330fa855Xia Wang private static String PASSWD = "androidwifi"; 4093ca011c60c140facb5a790c25a882a384460a86Xia Wang private final static String OUTPUT_FILE = "WifiStressTestOutput.txt"; 41d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu private int mTotalIterations; 4290e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang private BufferedWriter mOutputWriter = null; 4390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang private int mLastIteration = 0; 44776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang private boolean mWifiOnlyFlag; 456026d52710d7a6195a33885020d29aa1330fa855Xia Wang 462591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe public WifiApStress() { 472591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe super(WifiApStress.class.getSimpleName()); 482591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe } 492591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe 506026d52710d7a6195a33885020d29aa1330fa855Xia Wang @Override 51d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu protected void setUp() throws Exception { 526026d52710d7a6195a33885020d29aa1330fa855Xia Wang super.setUp(); 5390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang ConnectivityManagerStressTestRunner mRunner = 5490e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang (ConnectivityManagerStressTestRunner)getInstrumentation(); 55d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mTotalIterations = mRunner.getSoftApInterations(); 56d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mWifiOnlyFlag = mRunner.isWifiOnly(); 5719306af73a8175e1327101132e26a35c7dfe5168Xia Wang turnScreenOn(); 586026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 596026d52710d7a6195a33885020d29aa1330fa855Xia Wang 606026d52710d7a6195a33885020d29aa1330fa855Xia Wang @Override 61d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu protected void tearDown() throws Exception { 6290e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang // write the total number of iterations into output file 6390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mOutputWriter = new BufferedWriter(new FileWriter(new File( 6490e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang Environment.getExternalStorageDirectory(), OUTPUT_FILE))); 65d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mOutputWriter.write(String.format("iteration %d out of %d\n", 66d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mLastIteration + 1, mTotalIterations)); 6790e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mOutputWriter.flush(); 6890e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mOutputWriter.close(); 696026d52710d7a6195a33885020d29aa1330fa855Xia Wang super.tearDown(); 706026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 716026d52710d7a6195a33885020d29aa1330fa855Xia Wang 726026d52710d7a6195a33885020d29aa1330fa855Xia Wang @LargeTest 736026d52710d7a6195a33885020d29aa1330fa855Xia Wang public void testWifiHotSpot() { 74776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 752591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv(getName() + " is excluded for wi-fi only test"); 76776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 77776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 786026d52710d7a6195a33885020d29aa1330fa855Xia Wang WifiConfiguration config = new WifiConfiguration(); 796026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.SSID = NETWORK_ID; 806026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.allowedKeyManagement.set(KeyMgmt.WPA_PSK); 816026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); 826026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.preSharedKey = PASSWD; 836026d52710d7a6195a33885020d29aa1330fa855Xia Wang 84d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // if wifiap enabled, disable it 85d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disable wifi hotspot", 86d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mWifiManager.setWifiApEnabled(config, false)); 87d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi hotspot not enabled", waitForWifiApState( 88d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_AP_STATE_DISABLED, 2 * LONG_TIMEOUT)); 89d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu 90d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // if Wifi is enabled, disable it 9119306af73a8175e1327101132e26a35c7dfe5168Xia Wang if (mWifiManager.isWifiEnabled()) { 92d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disable wifi", disableWifi()); 93d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for the wifi state to be DISABLED 94d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi state not disabled", waitForWifiState( 95d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_STATE_DISABLED, LONG_TIMEOUT)); 966026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 9790e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang int i; 98d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu for (i = 0; i < mTotalIterations; i++) { 992591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe logv("iteration: " + i); 10090e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mLastIteration = i; 1016026d52710d7a6195a33885020d29aa1330fa855Xia Wang // enable Wifi tethering 102d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to enable wifi hotspot", 103d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mWifiManager.setWifiApEnabled(config, true)); 104d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for wifi ap state to be ENABLED 105d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi hotspot not enabled", waitForWifiApState( 106d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_AP_STATE_ENABLED, 2 * LONG_TIMEOUT)); 107d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // wait for wifi tethering result 108d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("tether state not changed", waitForTetherStateChange(LONG_TIMEOUT)); 109d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // allow the wifi tethering to be enabled for 10 seconds 1106026d52710d7a6195a33885020d29aa1330fa855Xia Wang try { 11119306af73a8175e1327101132e26a35c7dfe5168Xia Wang Thread.sleep(2 * SHORT_TIMEOUT); 1126026d52710d7a6195a33885020d29aa1330fa855Xia Wang } catch (Exception e) { 113d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // ignore 1146026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 115b3d55f203101f7e103cb24a9920de587d3c2b4b2Eric Rowe assertTrue("no uplink data connection after Wi-Fi tethering", pingTest()); 116d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu // disable wifi hotspot 117d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("failed to disable wifi hotspot", 118d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu mWifiManager.setWifiApEnabled(config, false)); 119d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertTrue("wifi hotspot not enabled", waitForWifiApState( 120d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu WifiManager.WIFI_AP_STATE_DISABLED, 2 * LONG_TIMEOUT)); 121d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu assertFalse("wifi hotspot still enabled", mWifiManager.isWifiApEnabled()); 12290e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang } 1236026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 1246026d52710d7a6195a33885020d29aa1330fa855Xia Wang 1256026d52710d7a6195a33885020d29aa1330fa855Xia Wang} 126