WifiConnectionTest.java revision ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7
1/*
2 * Copyright (C) 2010, 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 com.android.connectivitymanagertest.ConnectivityManagerTestActivity;
20import com.android.connectivitymanagertest.NetworkState;
21
22import android.R;
23import android.app.Activity;
24import android.content.Intent;
25import android.content.Context;
26import android.content.res.Resources;
27import android.net.wifi.WifiConfiguration;
28import android.net.wifi.WifiInfo;
29import android.net.wifi.WifiManager;
30import android.net.ConnectivityManager;
31import android.net.NetworkInfo;
32import android.net.NetworkInfo.State;
33
34import android.test.suitebuilder.annotation.LargeTest;
35import android.test.ActivityInstrumentationTestCase2;
36import android.util.Log;
37
38import java.util.ArrayList;
39import java.util.List;
40
41/**
42 * Test Wi-Fi connection with different configuration
43 * To run this tests:
44 *     adb shell am instrument -e class
45 *          com.android.connectivitymanagertest.functional.WifiConnectionTest
46 *          -w com.android.connectivitymanagertest/.ConnectivityManagerTestRunner
47 */
48public class WifiConnectionTest
49    extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> {
50    private static final String TAG = "WifiConnectionTest";
51    private static final boolean DEBUG = true;
52    private static final String PKG_NAME = "com.android.connectivitymanagertests";
53    private List<WifiConfiguration> networks = new ArrayList<WifiConfiguration>();
54    private ConnectivityManagerTestActivity mAct;
55
56    public WifiConnectionTest() {
57        super(PKG_NAME, ConnectivityManagerTestActivity.class);
58    }
59
60    @Override
61    public void setUp() throws Exception {
62        super.setUp();
63        mAct = getActivity();
64        networks = mAct.loadNetworkConfigurations();
65        if (DEBUG) {
66            printNetworkConfigurations();
67        }
68
69        // enable Wifi and verify wpa_supplicant is started
70        assertTrue("enable Wifi failed", mAct.enableWifi());
71        try {
72            Thread.sleep( 2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT);
73        } catch (Exception e) {
74            fail("interrupted while waiting for WPA_SUPPLICANT to start");
75        }
76        WifiInfo mConnection = mAct.mWifiManager.getConnectionInfo();
77        assertNotNull(mConnection);
78        assertTrue("wpa_supplicant is not started ", mAct.mWifiManager.pingSupplicant());
79    }
80
81    private void printNetworkConfigurations() {
82        Log.v(TAG, "==== print network configurations parsed from XML file ====");
83        Log.v(TAG, "number of access points: " + networks.size());
84        for (WifiConfiguration config : networks) {
85            Log.v(TAG, config.toString());
86        }
87    }
88
89    @Override
90    public void tearDown() throws Exception {
91        mAct.removeConfiguredNetworksAndDisableWifi();
92        super.tearDown();
93    }
94
95    /**
96     * Connect to the provided Wi-Fi network
97     * @param config is the network configuration
98     * @return true if the connection is successful.
99     */
100    private void connectToWifi(WifiConfiguration config) {
101        // step 1: connect to the test access point
102        assertTrue("failed to connect to " + config.SSID,
103                mAct.connectToWifiWithConfiguration(config));
104
105        // step 2: verify Wifi state and network state;
106        assertTrue(mAct.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
107                ConnectivityManagerTestActivity.SHORT_TIMEOUT));
108        assertTrue(mAct.waitForNetworkState(ConnectivityManager.TYPE_WIFI,
109                State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
110
111        // step 3: verify the current connected network is the given SSID
112        if (DEBUG) {
113            Log.v(TAG, "config.SSID = " + config.SSID);
114            Log.v(TAG, "mAct.mWifiManager.getConnectionInfo.getSSID()" +
115                    mAct.mWifiManager.getConnectionInfo().getSSID());
116        }
117        assertTrue(config.SSID.contains(mAct.mWifiManager.getConnectionInfo().getSSID()));
118
119        // Maintain the connection for 50 seconds before switching
120        try {
121            Thread.sleep(50*1000);
122        } catch (Exception e) {
123            fail("interrupted while waiting for WPA_SUPPLICANT to start");
124        }
125    }
126
127    @LargeTest
128    public void testWifiConnections() {
129        for (int i = 0; i < networks.size(); i++) {
130            connectToWifi(networks.get(i));
131            mAct.removeConfiguredNetworksAndDisableWifi();
132        }
133    }
134}
135