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