Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90e1c782 authored by Xia Wang's avatar Xia Wang
Browse files

Add Wi-Fi stress tests.

- Wi-Fi scan stress
- Wi-Fi reconnection stress
- Measure Wi-Fi scanning performance:
  . Average scanning time
  . Scanning quality

Change-Id: Ifce496876811816b452aed4ae9642fdb2db44798
parent 92d50202
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -25,6 +25,6 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_PACKAGE_NAME := ConnectivityManagerTest

#LOCAL_INSTRUMENTATION_FOR := connectivitymanagertest
LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)
+6 −1
Original line number Diff line number Diff line
@@ -16,7 +16,8 @@

<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.connectivitymanagertest">
  package="com.android.connectivitymanagertest"
  android:sharedUserId="com.android.uid.test">

    <!-- We add an application tag here just so that we can indicate that
         this package needs to link against the android.test library,
@@ -67,5 +68,9 @@
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.DEVICE_POWER" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

</manifest>
+47 −7
Original line number Diff line number Diff line
@@ -19,8 +19,8 @@ package com.android.connectivitymanagertest;
import android.os.Bundle;
import android.test.InstrumentationTestRunner;
import android.test.InstrumentationTestSuite;
import android.util.Log;
import com.android.connectivitymanagertest.stress.WifiApStress;
import com.android.connectivitymanagertest.stress.WifiStressTest;

import junit.framework.TestSuite;

@@ -34,10 +34,18 @@ import junit.framework.TestSuite;
 */

public class ConnectivityManagerStressTestRunner extends InstrumentationTestRunner {
    public int mSoftapIterations = 100;
    public int mScanIterations = 100;
    public int mReconnectIterations = 100;
    public int mSleepTime = 30 * 1000;  // default sleep time is 30 seconds
    public String mReconnectSsid = "securenetdhcp";
    public String mReconnectPassword = "androidwifi";

    @Override
    public TestSuite getAllTests() {
        TestSuite suite = new InstrumentationTestSuite(this);
        suite.addTestSuite(WifiApStress.class);
        suite.addTestSuite(WifiStressTest.class);
        return suite;
    }

@@ -49,14 +57,46 @@ public class ConnectivityManagerStressTestRunner extends InstrumentationTestRunn
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        String stressValue = (String) icicle.get("stressnum");
        if (stressValue != null) {
            int iteration = Integer.parseInt(stressValue);
        String valueStr = (String) icicle.get("softap_iterations");
        if (valueStr != null) {
            int iteration = Integer.parseInt(valueStr);
            if (iteration > 0) {
                numStress = iteration;
                mSoftapIterations = iteration;
            }
        }

        String scanIterationStr = (String) icicle.get("scan_iterations");
        if (scanIterationStr != null) {
            int scanIteration = Integer.parseInt(scanIterationStr);
            if (scanIteration > 0) {
                mScanIterations = scanIteration;
            }
        }

        String ssidStr= (String) icicle.get("reconnect_ssid");
        if (ssidStr != null) {
            mReconnectSsid = ssidStr;
        }

        String passwordStr = (String) icicle.get("reconnect_password");
        if (passwordStr != null) {
            mReconnectPassword = passwordStr;
        }

        String reconnectStr = (String) icicle.get("reconnect_iterations");
        if (reconnectStr != null) {
            int iteration = Integer.parseInt(reconnectStr);
            if (iteration > 0) {
                mReconnectIterations = iteration;
            }
        }

    public int numStress = 100;
        String sleepTimeStr = (String) icicle.get("sleep_time");
        if (sleepTimeStr != null) {
            int sleepTime = Integer.parseInt(sleepTimeStr);
            if (sleepTime > 0) {
                mSleepTime = 1000 * sleepTime;
            }
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ public class ConnectivityManagerTestActivity extends Activity {
    public String mBssid;
    public String mPowerSsid = "GoogleGuest"; //Default power SSID
    private Context mContext;
    public boolean scanResultAvailable = false;

    /*
     * Control Wifi States
@@ -142,6 +143,7 @@ public class ConnectivityManagerTestActivity extends Activity {
            String action = intent.getAction();
            Log.v("WifiReceiver", "onReceive() is calleld with " + intent);
            if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
                log("scan results are available");
                notifyScanResult();
            } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
                mWifiNetworkInfo =
@@ -174,6 +176,7 @@ public class ConnectivityManagerTestActivity extends Activity {

    public ConnectivityManagerTestActivity() {
        mState = State.UNKNOWN;
        scanResultAvailable = false;
    }

    @Override
@@ -267,6 +270,7 @@ public class ConnectivityManagerTestActivity extends Activity {
    private void notifyScanResult() {
        synchronized (this) {
            log("notify that scan results are available");
            scanResultAvailable = true;
            this.notify();
        }
    }
@@ -328,6 +332,8 @@ public class ConnectivityManagerTestActivity extends Activity {
        long startTime = System.currentTimeMillis();
        while (true) {
            if ((System.currentTimeMillis() - startTime) > timeout) {
                log("waitForNetworkState time out, the state of network type " + networkType +
                        " is: " + mCM.getNetworkInfo(networkType).getState());
                if (mCM.getNetworkInfo(networkType).getState() != expectedState) {
                    return false;
                } else {
+41 −8
Original line number Diff line number Diff line
@@ -19,25 +19,36 @@ package com.android.connectivitymanagertest.stress;

import com.android.connectivitymanagertest.ConnectivityManagerStressTestRunner;
import com.android.connectivitymanagertest.ConnectivityManagerTestActivity;
import com.android.connectivitymanagertest.ConnectivityManagerTestRunner;

import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiConfiguration.AuthAlgorithm;
import android.net.wifi.WifiManager;
import android.os.Environment;
import android.os.PowerManager;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.util.Log;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

/**
 * Stress the wifi driver as access point.
 */
public class WifiApStress
    extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> {
    private final static String TAG = "WifiApStress";
    private ConnectivityManagerTestActivity mAct;
    private static String NETWORK_ID = "AndroidAPTest";
    private static String PASSWD = "androidwifi";
    private int max_num;
    private final static String OUTPUT_FILE = "WifiApStressOutput.txt";
    private ConnectivityManagerTestActivity mAct;
    private int iterations;
    private PowerManager.WakeLock mWakelock = null;
    private BufferedWriter mOutputWriter = null;
    private int mLastIteration = 0;

    public WifiApStress() {
        super(ConnectivityManagerTestActivity.class);
@@ -47,11 +58,27 @@ public class WifiApStress
    public void setUp() throws Exception {
        super.setUp();
        mAct = getActivity();
        max_num = ((ConnectivityManagerStressTestRunner)getInstrumentation()).numStress;
        ConnectivityManagerStressTestRunner mRunner =
            (ConnectivityManagerStressTestRunner)getInstrumentation();
        iterations = mRunner.mSoftapIterations;
        PowerManager pm =
            (PowerManager)mRunner.getContext().getSystemService(Context.POWER_SERVICE);
        mWakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wifiApStress");
        mWakelock.acquire();
    }

    @Override
    public void tearDown() throws Exception {
        if (mWakelock != null) {
            mWakelock.release();
        }
        // write the total number of iterations into output file
        mOutputWriter = new BufferedWriter(new FileWriter(new File(
                Environment.getExternalStorageDirectory(), OUTPUT_FILE)));
        mOutputWriter.write(String.format("iteration %d out of %d"
                + "\n", mLastIteration, iterations));
        mOutputWriter.flush();
        mOutputWriter.close();
        super.tearDown();
    }

@@ -67,15 +94,18 @@ public class WifiApStress
        if (mAct.mWifiManager.isWifiEnabled()) {
            mAct.disableWifi();
        }
        for (int i = 0; i < max_num; i++) {
        int i;
        for (i = 0; i < iterations; i++) {
            Log.v(TAG, "iteration: " + i);
            mLastIteration = i;
            // enable Wifi tethering
            assertTrue(mAct.mWifiManager.setWifiApEnabled(config, true));
            // Wait for wifi ap state to be ENABLED
            assertTrue(mAct.waitForWifiAPState(mAct.mWifiManager.WIFI_AP_STATE_ENABLED,
                    mAct.LONG_TIMEOUT));
            assertTrue(mAct.waitForWifiAPState(WifiManager.WIFI_AP_STATE_ENABLED,
                    ConnectivityManagerTestActivity.LONG_TIMEOUT));
            // Wait for wifi tethering result
            assertEquals(mAct.SUCCESS, mAct.waitForTetherStateChange(2*mAct.SHORT_TIMEOUT));
            assertEquals(ConnectivityManagerTestActivity.SUCCESS,
                    mAct.waitForTetherStateChange(2*ConnectivityManagerTestActivity.SHORT_TIMEOUT));
            // Allow the wifi tethering to be enabled for 10 seconds
            try {
                Thread.sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT);
@@ -84,6 +114,9 @@ public class WifiApStress
            }
            assertTrue(mAct.mWifiManager.setWifiApEnabled(config, false));
        }
        if (i == iterations) {
            mLastIteration = iterations;
        }
    }

}
Loading