11406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff/*
21406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * Copyright (C) 2010 The Android Open Source Project
31406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff *
41406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License");
51406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * you may not use this file except in compliance with the License.
61406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * You may obtain a copy of the License at
71406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff *
81406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff *      http://www.apache.org/licenses/LICENSE-2.0
91406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff *
101406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * Unless required by applicable law or agreed to in writing, software
111406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS,
121406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * See the License for the specific language governing permissions and
141406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * limitations under the License.
151406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff */
161406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
171406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffpackage com.android.connectivitymanagertest.unit;
181406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
191406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.content.BroadcastReceiver;
201406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.content.Intent;
21b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriffimport android.content.IntentFilter;
221406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.content.Context;
23b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriffimport android.net.NetworkInfo;
241406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiManager;
251406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiConfiguration;
261406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiConfiguration.KeyMgmt;
271406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiConfiguration.Status;
28b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriffimport android.net.wifi.SupplicantState;
291406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
301406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.test.suitebuilder.annotation.LargeTest;
311406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.test.AndroidTestCase;
321406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
331406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport java.util.List;
341406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
351406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff/**
361406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * Test wifi client
371406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff */
381406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffpublic class WifiClientTest extends AndroidTestCase {
391406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
401406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    private WifiManager mWifiManager;
411406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
421406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    //10s delay for turning on wifi
431406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    private static final int DELAY = 10000;
44b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    private WifiStateListener mWifiStateListener;
45b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    int mWifiState;
46b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    int mDisableBroadcastCounter = 0;
47b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    int mEnableBroadcastCounter = 0;
48b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    NetworkInfo mNetworkInfo;
49b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    boolean mSupplicantConnection;
50b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    SupplicantState mSupplicantState;
51b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
52b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    private class WifiStateListener extends BroadcastReceiver {
53b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        @Override
54b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        public void onReceive(Context context, Intent intent) {
55b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            String action = intent.getAction();
56b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
57b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
58b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        WifiManager.WIFI_STATE_UNKNOWN);
59b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                switch (mWifiState) {
60b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_DISABLING:
61b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mDisableBroadcastCounter == 0) mDisableBroadcastCounter++;
62b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
63b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_DISABLED:
64b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mDisableBroadcastCounter == 1) mDisableBroadcastCounter++;
65b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
66b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_ENABLING:
67b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mEnableBroadcastCounter == 0) mEnableBroadcastCounter++;
68b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
69b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_ENABLED:
70b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mEnableBroadcastCounter == 1) mEnableBroadcastCounter++;
71b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
72b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                }
73b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
74b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mNetworkInfo = (NetworkInfo)
75b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
76b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            } else if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
77b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mSupplicantState = (SupplicantState)
78b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
79b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            } else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
80b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mSupplicantConnection =
81b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
82b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            }
83b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        }
84b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    }
851406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
861406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @Override
871406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    protected void setUp() throws Exception {
881406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        super.setUp();
89b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
90b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        // register a connectivity receiver for CONNECTIVITY_ACTION;
91b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
92b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiStateListener = new WifiStateListener();
93b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        IntentFilter mIntentFilter = new IntentFilter();
94b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
95b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
96b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
97b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
98b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        getContext().registerReceiver(mWifiStateListener, mIntentFilter);
99b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
1001406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
1011406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(true);
1021406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertNotNull(mWifiManager);
1031406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1041406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1051406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    private void sleepAfterWifiEnable() {
1061406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        try {
1071406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            Thread.sleep(DELAY);
1081406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        } catch (Exception e) {
1091406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            fail("Sleep timeout " + e);
1101406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1111406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1121406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1131406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 1: add/remove a open network
1141406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
1151406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testAddRemoveNetwork() {
1161406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        WifiConfiguration config = new WifiConfiguration();
1171406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.SSID = "\"TestSSID1\"";
1181406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.allowedKeyManagement.set(KeyMgmt.NONE);
1191406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1201406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //add
1211406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        int netId = mWifiManager.addNetwork(config);
1221406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(netId != -1);
1231406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1241406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1251406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
1261406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean found = false;
1271406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
12858938159ec378670ea784d07aa13ac47f4730cbbIrfan Sheriff            if (c.networkId == netId && c.SSID.equals(config.SSID)) {
1291406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                found = true;
1301406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1311406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1321406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(found);
1331406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1341406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //remove
1351406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean ret = mWifiManager.removeNetwork(netId);
1361406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
1371406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1381406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1391406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
1401406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        found = false;
1411406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
1421406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.networkId == netId) {
1431406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                found = true;
1441406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1451406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1461406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1471406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertFalse(found);
1481406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1491406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1501406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 2: enable/disable a open network
1511406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
1521406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testEnableDisableNetwork() {
1531406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        WifiConfiguration config = new WifiConfiguration();
1541406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.SSID = "\"TestSSID2\"";
1551406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.allowedKeyManagement.set(KeyMgmt.NONE);
1561406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1571406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //add
1581406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        int netId = mWifiManager.addNetwork(config);
1591406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(netId != -1);
1601406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1611406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //enable network and disable others
1621406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean ret = mWifiManager.enableNetwork(netId, true);
1631406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
1641406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1651406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1661406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
1671406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
1681406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.networkId == netId) {
1691406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                assertTrue(c.status == Status.ENABLED);
1701406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            } else {
1711406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                assertFalse(c.status == Status.ENABLED);
1721406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1731406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1741406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1751406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //disable network
1761406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        ret = mWifiManager.disableNetwork(netId);
1771406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
1781406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1791406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1801406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
1811406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
1821406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.networkId == netId) {
1831406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                assertTrue(c.status == Status.DISABLED);
1841406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1851406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1861406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1871406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1881406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 3: ping supplicant
1891406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
1901406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testPingSupplicant() {
1911406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(mWifiManager.pingSupplicant());
1921406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(false);
1931406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        sleepAfterWifiEnable();
1941406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1951406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertFalse(mWifiManager.pingSupplicant());
1961406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(true);
1971406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        sleepAfterWifiEnable();
1981406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1991406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2001406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 4: save config
2011406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
2021406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testSaveConfig() {
2031406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        WifiConfiguration config = new WifiConfiguration();
2041406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.SSID = "\"TestSSID3\"";
2051406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.allowedKeyManagement.set(KeyMgmt.NONE);
2061406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2071406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //add
2081406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        int netId = mWifiManager.addNetwork(config);
2091406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(netId != -1);
2101406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2111406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.saveConfiguration();
2121406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2131406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //restart wifi
2141406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(false);
2151406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(true);
2161406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2171406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        sleepAfterWifiEnable();
2181406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2191406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
2201406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
2211406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean found = false;
2221406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
2231406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.SSID.equals("TestSSID3")) {
2241406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                found = true;
2251406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
2261406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
2271406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(found);
2281406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2291406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //restore config
2301406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean ret = mWifiManager.removeNetwork(netId);
2311406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
2321406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.saveConfiguration();
2331406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
234b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
235b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    // Test case 5: test wifi state change broadcasts
236b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    @LargeTest
237b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    public void testWifiBroadcasts() {
238b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
239b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        /* Initialize */
240b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiManager.setWifiEnabled(false);
241b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        sleepAfterWifiEnable();
242b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mDisableBroadcastCounter = 0;
243b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mEnableBroadcastCounter = 0;
244b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mSupplicantConnection = false;
245b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mNetworkInfo = null;
246b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mSupplicantState = null;
247b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
248b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        /* Enable wifi */
249b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiManager.setWifiEnabled(true);
250b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        sleepAfterWifiEnable();
251b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mEnableBroadcastCounter == 2);
252b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantConnection == true);
253b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mNetworkInfo.isConnected());
254b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantState == SupplicantState.COMPLETED);
255b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
256b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
257b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        /* Disable wifi */
258b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiManager.setWifiEnabled(false);
259b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        sleepAfterWifiEnable();
260b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mDisableBroadcastCounter == 2);
261b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantConnection == false);
262b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(!mNetworkInfo.isConnected());
263b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantState != SupplicantState.COMPLETED);
264b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
265b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    }
266b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
267cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    // Test case 6: test configured network status
268cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    @LargeTest
269cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    public void testWifiConfiguredNetworkStatus() {
270cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
271cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Initialize */
272cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        mWifiManager.setWifiEnabled(false);
273cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        sleepAfterWifiEnable();
274cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
275cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Ensure no network is CURRENT */
276cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
277cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        for (WifiConfiguration c : configList) {
278cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            assertTrue(c.status != WifiConfiguration.Status.CURRENT);
279cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        }
280cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
281cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Enable wifi */
282cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        mWifiManager.setWifiEnabled(true);
283cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        sleepAfterWifiEnable();
284cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
285cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Ensure connected network is CURRENT */
286cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        String connectedSSID = mWifiManager.getConnectionInfo().getSSID();
287cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
288cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        for (WifiConfiguration c : configList) {
289cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            if (c.SSID.contains(connectedSSID)) {
290cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff                assertTrue(c.status == WifiConfiguration.Status.CURRENT);
291cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            } else {
292cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff                assertTrue(c.status != WifiConfiguration.Status.CURRENT);
293cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            }
294cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        }
295cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
296cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Disable wifi */
297cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        mWifiManager.setWifiEnabled(false);
298cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        sleepAfterWifiEnable();
299cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
300cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Ensure no network is CURRENT */
301cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
302cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        for (WifiConfiguration c : configList) {
303cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            assertTrue(c.status != WifiConfiguration.Status.CURRENT);
304cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        }
305cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    }
306cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
307cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
308cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
3091406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff}
310