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 com.android.connectivitymanagertest.ConnectivityManagerStressTestRunner; 216026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestActivity; 226026d52710d7a6195a33885020d29aa1330fa855Xia Wang 2390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport android.content.Context; 246026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.net.wifi.WifiConfiguration; 256026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.net.wifi.WifiConfiguration.KeyMgmt; 266026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.net.wifi.WifiConfiguration.AuthAlgorithm; 2790e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport android.net.wifi.WifiManager; 2890e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport android.os.Environment; 2973055f12d7764e322f3f83717525a2dba01f9ef9Xia Wangimport android.os.IPowerManager; 3090e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport android.os.PowerManager; 3173055f12d7764e322f3f83717525a2dba01f9ef9Xia Wangimport android.os.ServiceManager; 3273055f12d7764e322f3f83717525a2dba01f9ef9Xia Wangimport android.os.SystemClock; 336026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.test.ActivityInstrumentationTestCase2; 346026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.test.suitebuilder.annotation.LargeTest; 356026d52710d7a6195a33885020d29aa1330fa855Xia Wangimport android.util.Log; 366026d52710d7a6195a33885020d29aa1330fa855Xia Wang 3790e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport java.io.BufferedWriter; 3890e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport java.io.File; 3990e1c782a63475cd9b3973936decf6a4f6c6148fXia Wangimport java.io.FileWriter; 4090e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang 416026d52710d7a6195a33885020d29aa1330fa855Xia Wang/** 426026d52710d7a6195a33885020d29aa1330fa855Xia Wang * Stress the wifi driver as access point. 436026d52710d7a6195a33885020d29aa1330fa855Xia Wang */ 446026d52710d7a6195a33885020d29aa1330fa855Xia Wangpublic class WifiApStress 456026d52710d7a6195a33885020d29aa1330fa855Xia Wang extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> { 466026d52710d7a6195a33885020d29aa1330fa855Xia Wang private final static String TAG = "WifiApStress"; 476026d52710d7a6195a33885020d29aa1330fa855Xia Wang private static String NETWORK_ID = "AndroidAPTest"; 486026d52710d7a6195a33885020d29aa1330fa855Xia Wang private static String PASSWD = "androidwifi"; 4993ca011c60c140facb5a790c25a882a384460a86Xia Wang private final static String OUTPUT_FILE = "WifiStressTestOutput.txt"; 5090e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang private ConnectivityManagerTestActivity mAct; 5190e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang private int iterations; 5290e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang private BufferedWriter mOutputWriter = null; 5390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang private int mLastIteration = 0; 54776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang private boolean mWifiOnlyFlag; 556026d52710d7a6195a33885020d29aa1330fa855Xia Wang 566026d52710d7a6195a33885020d29aa1330fa855Xia Wang public WifiApStress() { 576026d52710d7a6195a33885020d29aa1330fa855Xia Wang super(ConnectivityManagerTestActivity.class); 586026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 596026d52710d7a6195a33885020d29aa1330fa855Xia Wang 606026d52710d7a6195a33885020d29aa1330fa855Xia Wang @Override 616026d52710d7a6195a33885020d29aa1330fa855Xia Wang public void setUp() throws Exception { 626026d52710d7a6195a33885020d29aa1330fa855Xia Wang super.setUp(); 636026d52710d7a6195a33885020d29aa1330fa855Xia Wang mAct = getActivity(); 6490e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang ConnectivityManagerStressTestRunner mRunner = 6590e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang (ConnectivityManagerStressTestRunner)getInstrumentation(); 6690e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang iterations = mRunner.mSoftapIterations; 67776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang mWifiOnlyFlag = mRunner.mWifiOnlyFlag; 6873055f12d7764e322f3f83717525a2dba01f9ef9Xia Wang mAct.turnScreenOn(); 696026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 706026d52710d7a6195a33885020d29aa1330fa855Xia Wang 716026d52710d7a6195a33885020d29aa1330fa855Xia Wang @Override 726026d52710d7a6195a33885020d29aa1330fa855Xia Wang public void tearDown() throws Exception { 7390e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang // write the total number of iterations into output file 7490e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mOutputWriter = new BufferedWriter(new FileWriter(new File( 7590e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang Environment.getExternalStorageDirectory(), OUTPUT_FILE))); 7693ca011c60c140facb5a790c25a882a384460a86Xia Wang mOutputWriter.write(String.format("iteration %d out of %d\n", mLastIteration, iterations)); 7790e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mOutputWriter.flush(); 7890e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mOutputWriter.close(); 796026d52710d7a6195a33885020d29aa1330fa855Xia Wang super.tearDown(); 806026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 816026d52710d7a6195a33885020d29aa1330fa855Xia Wang 826026d52710d7a6195a33885020d29aa1330fa855Xia Wang @LargeTest 836026d52710d7a6195a33885020d29aa1330fa855Xia Wang public void testWifiHotSpot() { 84776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang if (mWifiOnlyFlag) { 85776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang Log.v(TAG, this.getName() + " is excluded for wi-fi only test"); 86776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang return; 87776cca3b3a84cd16bdaccdd43963cc34d923e0a4Xia Wang } 886026d52710d7a6195a33885020d29aa1330fa855Xia Wang WifiConfiguration config = new WifiConfiguration(); 896026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.SSID = NETWORK_ID; 906026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.allowedKeyManagement.set(KeyMgmt.WPA_PSK); 916026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); 926026d52710d7a6195a33885020d29aa1330fa855Xia Wang config.preSharedKey = PASSWD; 936026d52710d7a6195a33885020d29aa1330fa855Xia Wang 946026d52710d7a6195a33885020d29aa1330fa855Xia Wang // If Wifi is enabled, disable it 956026d52710d7a6195a33885020d29aa1330fa855Xia Wang if (mAct.mWifiManager.isWifiEnabled()) { 966026d52710d7a6195a33885020d29aa1330fa855Xia Wang mAct.disableWifi(); 976026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 9890e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang int i; 9990e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang for (i = 0; i < iterations; i++) { 1006026d52710d7a6195a33885020d29aa1330fa855Xia Wang Log.v(TAG, "iteration: " + i); 10190e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mLastIteration = i; 1026026d52710d7a6195a33885020d29aa1330fa855Xia Wang // enable Wifi tethering 1036026d52710d7a6195a33885020d29aa1330fa855Xia Wang assertTrue(mAct.mWifiManager.setWifiApEnabled(config, true)); 1046026d52710d7a6195a33885020d29aa1330fa855Xia Wang // Wait for wifi ap state to be ENABLED 10590e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang assertTrue(mAct.waitForWifiAPState(WifiManager.WIFI_AP_STATE_ENABLED, 1062f19a3103c2cdcf5613eb70493122fb366d509efXia Wang 2 * ConnectivityManagerTestActivity.LONG_TIMEOUT)); 1076026d52710d7a6195a33885020d29aa1330fa855Xia Wang // Wait for wifi tethering result 10890e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang assertEquals(ConnectivityManagerTestActivity.SUCCESS, 10990e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mAct.waitForTetherStateChange(2*ConnectivityManagerTestActivity.SHORT_TIMEOUT)); 1106026d52710d7a6195a33885020d29aa1330fa855Xia Wang // Allow the wifi tethering to be enabled for 10 seconds 1116026d52710d7a6195a33885020d29aa1330fa855Xia Wang try { 1126026d52710d7a6195a33885020d29aa1330fa855Xia Wang Thread.sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT); 1136026d52710d7a6195a33885020d29aa1330fa855Xia Wang } catch (Exception e) { 1146026d52710d7a6195a33885020d29aa1330fa855Xia Wang fail("thread in sleep is interrupted"); 1156026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 1166bffe14c78efa0b56327262543ce2e0dfc024219Xia Wang assertTrue("no uplink data connection after Wi-Fi tethering", mAct.pingTest(null)); 1176bffe14c78efa0b56327262543ce2e0dfc024219Xia Wang // Disable soft AP 1186026d52710d7a6195a33885020d29aa1330fa855Xia Wang assertTrue(mAct.mWifiManager.setWifiApEnabled(config, false)); 119ec841adcf70edfdffce096b039e2cd3930633131Xia Wang // Wait for 30 seconds until Wi-Fi tethering is stopped 120ec841adcf70edfdffce096b039e2cd3930633131Xia Wang try { 121ec841adcf70edfdffce096b039e2cd3930633131Xia Wang Thread.sleep(30 * 1000); 122ec841adcf70edfdffce096b039e2cd3930633131Xia Wang Log.v(TAG, "wait for Wi-Fi tethering to be disabled."); 123ec841adcf70edfdffce096b039e2cd3930633131Xia Wang } catch (Exception e) { 124ec841adcf70edfdffce096b039e2cd3930633131Xia Wang fail("thread in sleep is interrupted"); 125ec841adcf70edfdffce096b039e2cd3930633131Xia Wang } 126ec841adcf70edfdffce096b039e2cd3930633131Xia Wang assertFalse("Wi-Fi AP disable failed", mAct.mWifiManager.isWifiApEnabled()); 1276026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 12890e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang if (i == iterations) { 12990e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang mLastIteration = iterations; 13090e1c782a63475cd9b3973936decf6a4f6c6148fXia Wang } 1316026d52710d7a6195a33885020d29aa1330fa855Xia Wang } 1326026d52710d7a6195a33885020d29aa1330fa855Xia Wang 1336026d52710d7a6195a33885020d29aa1330fa855Xia Wang} 134