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;
231406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.app.Instrumentation;
241406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.os.Handler;
251406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.os.Message;
26b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriffimport android.net.NetworkInfo;
271406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiManager;
281406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiConfiguration;
291406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiConfiguration.KeyMgmt;
301406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.net.wifi.WifiConfiguration.Status;
31b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriffimport android.net.wifi.SupplicantState;
321406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
331406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.test.suitebuilder.annotation.LargeTest;
341406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.test.AndroidTestCase;
351406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
361406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport java.util.ArrayList;
371406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport java.util.List;
381406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
391406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffimport android.util.Log;
401406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
411406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff/**
421406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff * Test wifi client
431406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff */
441406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriffpublic class WifiClientTest extends AndroidTestCase {
451406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
461406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    private WifiManager mWifiManager;
471406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    private final String TAG = "WifiClientTest";
481406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
491406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    //10s delay for turning on wifi
501406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    private static final int DELAY = 10000;
51b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    private WifiStateListener mWifiStateListener;
52b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    int mWifiState;
53b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    int mDisableBroadcastCounter = 0;
54b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    int mEnableBroadcastCounter = 0;
55b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    NetworkInfo mNetworkInfo;
56b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    boolean mSupplicantConnection;
57b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    SupplicantState mSupplicantState;
58b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
59b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    private class WifiStateListener extends BroadcastReceiver {
60b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        @Override
61b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        public void onReceive(Context context, Intent intent) {
62b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            String action = intent.getAction();
63b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
64b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
65b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        WifiManager.WIFI_STATE_UNKNOWN);
66b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                switch (mWifiState) {
67b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_DISABLING:
68b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mDisableBroadcastCounter == 0) mDisableBroadcastCounter++;
69b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
70b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_DISABLED:
71b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mDisableBroadcastCounter == 1) mDisableBroadcastCounter++;
72b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
73b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_ENABLING:
74b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mEnableBroadcastCounter == 0) mEnableBroadcastCounter++;
75b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
76b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                    case WifiManager.WIFI_STATE_ENABLED:
77b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        if (mEnableBroadcastCounter == 1) mEnableBroadcastCounter++;
78b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        break;
79b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                }
80b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
81b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mNetworkInfo = (NetworkInfo)
82b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
83b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            } else if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
84b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mSupplicantState = (SupplicantState)
85b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
86b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            } else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
87b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                mSupplicantConnection =
88b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff                        intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
89b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff            }
90b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        }
91b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    }
921406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
931406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @Override
941406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    protected void setUp() throws Exception {
951406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        super.setUp();
96b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
97b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        // register a connectivity receiver for CONNECTIVITY_ACTION;
98b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
99b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiStateListener = new WifiStateListener();
100b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        IntentFilter mIntentFilter = new IntentFilter();
101b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
102b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
103b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
104b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
105b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        getContext().registerReceiver(mWifiStateListener, mIntentFilter);
106b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
1071406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
1081406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(true);
1091406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertNotNull(mWifiManager);
1101406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1111406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1121406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    private void sleepAfterWifiEnable() {
1131406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        try {
1141406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            Thread.sleep(DELAY);
1151406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        } catch (Exception e) {
1161406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            fail("Sleep timeout " + e);
1171406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1181406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1191406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1201406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 1: add/remove a open network
1211406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
1221406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testAddRemoveNetwork() {
1231406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        WifiConfiguration config = new WifiConfiguration();
1241406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.SSID = "\"TestSSID1\"";
1251406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.allowedKeyManagement.set(KeyMgmt.NONE);
1261406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1271406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //add
1281406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        int netId = mWifiManager.addNetwork(config);
1291406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(netId != -1);
1301406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1311406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1321406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
1331406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean found = false;
1341406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
13558938159ec378670ea784d07aa13ac47f4730cbbIrfan Sheriff            if (c.networkId == netId && c.SSID.equals(config.SSID)) {
1361406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                found = true;
1371406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1381406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1391406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(found);
1401406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1411406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //remove
1421406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean ret = mWifiManager.removeNetwork(netId);
1431406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
1441406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1451406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1461406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
1471406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        found = false;
1481406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
1491406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.networkId == netId) {
1501406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                found = true;
1511406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1521406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1531406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1541406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertFalse(found);
1551406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1561406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1571406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 2: enable/disable a open network
1581406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
1591406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testEnableDisableNetwork() {
1601406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        WifiConfiguration config = new WifiConfiguration();
1611406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.SSID = "\"TestSSID2\"";
1621406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.allowedKeyManagement.set(KeyMgmt.NONE);
1631406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1641406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //add
1651406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        int netId = mWifiManager.addNetwork(config);
1661406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(netId != -1);
1671406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1681406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //enable network and disable others
1691406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean ret = mWifiManager.enableNetwork(netId, true);
1701406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
1711406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1721406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1731406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
1741406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
1751406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.networkId == netId) {
1761406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                assertTrue(c.status == Status.ENABLED);
1771406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            } else {
1781406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                assertFalse(c.status == Status.ENABLED);
1791406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1801406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1811406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1821406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //disable network
1831406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        ret = mWifiManager.disableNetwork(netId);
1841406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
1851406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1861406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
1871406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
1881406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
1891406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.networkId == netId) {
1901406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                assertTrue(c.status == Status.DISABLED);
1911406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
1921406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
1931406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
1941406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
1951406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 3: ping supplicant
1961406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
1971406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testPingSupplicant() {
1981406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(mWifiManager.pingSupplicant());
1991406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(false);
2001406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        sleepAfterWifiEnable();
2011406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2021406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertFalse(mWifiManager.pingSupplicant());
2031406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(true);
2041406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        sleepAfterWifiEnable();
2051406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
2061406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2071406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    // Test case 4: save config
2081406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    @LargeTest
2091406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    public void testSaveConfig() {
2101406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        WifiConfiguration config = new WifiConfiguration();
2111406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.SSID = "\"TestSSID3\"";
2121406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        config.allowedKeyManagement.set(KeyMgmt.NONE);
2131406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2141406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //add
2151406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        int netId = mWifiManager.addNetwork(config);
2161406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(netId != -1);
2171406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2181406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.saveConfiguration();
2191406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2201406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //restart wifi
2211406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(false);
2221406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.setWifiEnabled(true);
2231406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2241406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        sleepAfterWifiEnable();
2251406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2261406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //check config list
2271406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
2281406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean found = false;
2291406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        for (WifiConfiguration c : configList) {
2301406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            if (c.SSID.equals("TestSSID3")) {
2311406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff                found = true;
2321406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff            }
2331406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        }
2341406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(found);
2351406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff
2361406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        //restore config
2371406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        boolean ret = mWifiManager.removeNetwork(netId);
2381406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        assertTrue(ret);
2391406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff        mWifiManager.saveConfiguration();
2401406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff    }
241b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
242b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    // Test case 5: test wifi state change broadcasts
243b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    @LargeTest
244b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    public void testWifiBroadcasts() {
245b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
246b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        /* Initialize */
247b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiManager.setWifiEnabled(false);
248b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        sleepAfterWifiEnable();
249b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mDisableBroadcastCounter = 0;
250b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mEnableBroadcastCounter = 0;
251b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mSupplicantConnection = false;
252b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mNetworkInfo = null;
253b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mSupplicantState = null;
254b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
255b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        /* Enable wifi */
256b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiManager.setWifiEnabled(true);
257b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        sleepAfterWifiEnable();
258b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mEnableBroadcastCounter == 2);
259b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantConnection == true);
260b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mNetworkInfo.isConnected());
261b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantState == SupplicantState.COMPLETED);
262b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
263b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
264b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        /* Disable wifi */
265b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        mWifiManager.setWifiEnabled(false);
266b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        sleepAfterWifiEnable();
267b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mDisableBroadcastCounter == 2);
268b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantConnection == false);
269b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(!mNetworkInfo.isConnected());
270b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff        assertTrue(mSupplicantState != SupplicantState.COMPLETED);
271b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
272b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff    }
273b45e726bf5df9650e8a67a7c05bf2f41f414c07dIrfan Sheriff
274cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    // Test case 6: test configured network status
275cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    @LargeTest
276cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    public void testWifiConfiguredNetworkStatus() {
277cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
278cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Initialize */
279cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        mWifiManager.setWifiEnabled(false);
280cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        sleepAfterWifiEnable();
281cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
282cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Ensure no network is CURRENT */
283cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks();
284cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        for (WifiConfiguration c : configList) {
285cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            assertTrue(c.status != WifiConfiguration.Status.CURRENT);
286cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        }
287cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
288cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Enable wifi */
289cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        mWifiManager.setWifiEnabled(true);
290cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        sleepAfterWifiEnable();
291cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
292cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Ensure connected network is CURRENT */
293cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        String connectedSSID = mWifiManager.getConnectionInfo().getSSID();
294cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
295cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        for (WifiConfiguration c : configList) {
296cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            if (c.SSID.contains(connectedSSID)) {
297cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff                assertTrue(c.status == WifiConfiguration.Status.CURRENT);
298cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            } else {
299cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff                assertTrue(c.status != WifiConfiguration.Status.CURRENT);
300cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            }
301cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        }
302cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
303cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Disable wifi */
304cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        mWifiManager.setWifiEnabled(false);
305cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        sleepAfterWifiEnable();
306cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
307cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        /* Ensure no network is CURRENT */
308cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        configList = mWifiManager.getConfiguredNetworks();
309cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        for (WifiConfiguration c : configList) {
310cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff            assertTrue(c.status != WifiConfiguration.Status.CURRENT);
311cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff        }
312cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff    }
313cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
314cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
315cdc077c9dd6473b5abfad4edfaf1ff41a436caafIrfan Sheriff
3161406bcb75150e8386b4d858f27089cc1359e7f14Irfan Sheriff}
317