OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / cts / tests / tests / net / src / android / net / wifi / cts / WifiManagerTest.java
diff --git a/cts/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java b/cts/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java
new file mode 100644 (file)
index 0000000..e2a583b
--- /dev/null
@@ -0,0 +1,460 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.wifi.cts;
+
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.wifi.ScanResult;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.net.wifi.WifiConfiguration.Status;
+import android.net.wifi.WifiManager.WifiLock;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@TestTargetClass(WifiManager.class)
+public class WifiManagerTest extends AndroidTestCase {
+    private static class MySync {
+        int expectedState = STATE_NULL;
+    }
+
+    private WifiManager mWifiManager;
+    private WifiLock mWifiLock;
+    private static MySync mMySync;
+    private List<ScanResult> mScanResult = null;
+
+    // Please refer to WifiManager
+    private static final int MIN_RSSI = -100;
+    private static final int MAX_RSSI = -55;
+
+    private static final int STATE_NULL = 0;
+    private static final int STATE_WIFI_CHANGING = 1;
+    private static final int STATE_WIFI_CHANGED = 2;
+    private static final int STATE_SCANING = 3;
+    private static final int STATE_SCAN_RESULTS_AVAILABLE = 4;
+
+    private static final String TAG = "WifiManagerTest";
+    private static final String SSID1 = "\"WifiManagerTest\"";
+    private static final String SSID2 = "\"WifiManagerTestModified\"";
+    private static final int TIMEOUT_MSEC = 6000;
+    private static final int WAIT_MSEC = 60;
+    private static final int DURATION = 10000;
+    private IntentFilter mIntentFilter;
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            final String action = intent.getAction();
+            if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
+                synchronized (mMySync) {
+                    if (mWifiManager.getScanResults() != null) {
+                        mScanResult = mWifiManager.getScanResults();
+                        mMySync.expectedState = STATE_SCAN_RESULTS_AVAILABLE;
+                        mScanResult = mWifiManager.getScanResults();
+                        mMySync.notify();
+                    }
+                }
+            } else if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
+                synchronized (mMySync) {
+                    mMySync.expectedState = STATE_WIFI_CHANGED;
+                    mMySync.notify();
+                }
+            }
+        }
+    };
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mMySync = new MySync();
+        mIntentFilter = new IntentFilter();
+        mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
+        mIntentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
+        mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiManager.ACTION_PICK_WIFI_NETWORK);
+
+        mContext.registerReceiver(mReceiver, mIntentFilter);
+        mWifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
+        assertNotNull(mWifiManager);
+        mWifiLock = mWifiManager.createWifiLock(TAG);
+        mWifiLock.acquire();
+        if (!mWifiManager.isWifiEnabled())
+            setWifiEnabled(true);
+        Thread.sleep(DURATION);
+        assertTrue(mWifiManager.isWifiEnabled());
+        mMySync.expectedState = STATE_NULL;
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        mWifiLock.release();
+        mContext.unregisterReceiver(mReceiver);
+        if (!mWifiManager.isWifiEnabled())
+            setWifiEnabled(true);
+        Thread.sleep(DURATION);
+        super.tearDown();
+    }
+
+    private void setWifiEnabled(boolean enable) throws Exception {
+        synchronized (mMySync) {
+            mMySync.expectedState = STATE_WIFI_CHANGING;
+            assertTrue(mWifiManager.setWifiEnabled(enable));
+            long timeout = System.currentTimeMillis() + TIMEOUT_MSEC;
+            while (System.currentTimeMillis() < timeout
+                    && mMySync.expectedState == STATE_WIFI_CHANGING)
+                mMySync.wait(WAIT_MSEC);
+        }
+    }
+
+    private void startScan() throws Exception {
+        synchronized (mMySync) {
+            mMySync.expectedState = STATE_SCANING;
+            assertTrue(mWifiManager.startScan());
+            long timeout = System.currentTimeMillis() + TIMEOUT_MSEC;
+            while (System.currentTimeMillis() < timeout && mMySync.expectedState == STATE_SCANING)
+                mMySync.wait(WAIT_MSEC);
+        }
+    }
+
+    private boolean existSSID(String ssid) {
+        for (final WifiConfiguration w : mWifiManager.getConfiguredNetworks()) {
+            if (w.SSID.equals(ssid))
+                return true;
+        }
+        return false;
+    }
+
+    private int findConfiguredNetworks(String SSID, List<WifiConfiguration> networks) {
+        for (final WifiConfiguration w : networks) {
+            if (w.SSID.equals(SSID))
+                return networks.indexOf(w);
+        }
+        return -1;
+    }
+
+    private void assertDisableOthers(WifiConfiguration wifiConfiguration, boolean disableOthers) {
+        for (WifiConfiguration w : mWifiManager.getConfiguredNetworks()) {
+            if ((!w.SSID.equals(wifiConfiguration.SSID)) && w.status != Status.CURRENT) {
+                if (disableOthers)
+                    assertEquals(Status.DISABLED, w.status);
+            }
+        }
+    }
+
+    /**
+     * test point of wifiManager actions:
+     * 1.reconnect
+     * 2.reassociate
+     * 3.disconnect
+     * 4.pingSupplicant
+     * 5.satrtScan
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "isWifiEnabled",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setWifiEnabled",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "startScan",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getScanResults",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "pingSupplicant",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "reassociate",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "reconnect",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "disconnect",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "createWifiLock",
+            args = {int.class, String.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "createWifiLock",
+            args = {String.class}
+        )
+    })
+    public void testWifiManagerActions() throws Exception {
+        assertTrue(mWifiManager.reconnect());
+        assertTrue(mWifiManager.reassociate());
+        assertTrue(mWifiManager.disconnect());
+        assertTrue(mWifiManager.pingSupplicant());
+        startScan();
+        setWifiEnabled(false);
+        Thread.sleep(DURATION);
+        assertFalse(mWifiManager.pingSupplicant());
+        final String TAG = "Test";
+        assertNotNull(mWifiManager.createWifiLock(TAG));
+        assertNotNull(mWifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL, TAG));
+    }
+
+    /**
+     * test point of wifiManager properties:
+     * 1.enable properties
+     * 2.DhcpInfo properties
+     * 3.wifi state
+     * 4.ConnectionInfo
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "isWifiEnabled",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getWifiState",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setWifiEnabled",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getConnectionInfo",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getDhcpInfo",
+            args = {}
+        )
+    })
+    public void testWifiManagerProperties() throws Exception {
+        setWifiEnabled(true);
+        assertTrue(mWifiManager.isWifiEnabled());
+        assertNotNull(mWifiManager.getDhcpInfo());
+        assertEquals(WifiManager.WIFI_STATE_ENABLED, mWifiManager.getWifiState());
+        mWifiManager.getConnectionInfo();
+        setWifiEnabled(false);
+        assertFalse(mWifiManager.isWifiEnabled());
+    }
+
+    /**
+     * test point of wifiManager NetWork:
+     * 1.add NetWork
+     * 2.update NetWork
+     * 3.remove NetWork
+     * 4.enable NetWork
+     * 5.disable NetWork
+     * 6.configured Networks
+     * 7.save configure;
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "isWifiEnabled",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setWifiEnabled",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getConfiguredNetworks",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "addNetwork",
+            args = {android.net.wifi.WifiConfiguration.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "updateNetwork",
+            args = {android.net.wifi.WifiConfiguration.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "removeNetwork",
+            args = {int.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "enableNetwork",
+            args = {int.class, boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "disableNetwork",
+            args = {int.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "saveConfiguration",
+            args = {}
+        )
+    })
+    public void testWifiManagerNetWork() throws Exception {
+        // store the list of enabled networks, so they can be re-enabled after test completes
+        Set<String> enabledSsids = getEnabledNetworks(mWifiManager.getConfiguredNetworks());
+        try {
+            WifiConfiguration wifiConfiguration;
+            // add a WifiConfig
+            final int notExist = -1;
+            List<WifiConfiguration> wifiConfiguredNetworks = mWifiManager.getConfiguredNetworks();
+            int pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
+            if (notExist != pos) {
+                wifiConfiguration = wifiConfiguredNetworks.get(pos);
+                mWifiManager.removeNetwork(wifiConfiguration.networkId);
+            }
+            pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
+            assertEquals(notExist, pos);
+            final int size = wifiConfiguredNetworks.size();
+
+            wifiConfiguration = new WifiConfiguration();
+            wifiConfiguration.SSID = SSID1;
+            int netId = mWifiManager.addNetwork(wifiConfiguration);
+            assertTrue(existSSID(SSID1));
+
+            wifiConfiguredNetworks = mWifiManager.getConfiguredNetworks();
+            assertEquals(size + 1, wifiConfiguredNetworks.size());
+            pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
+            assertTrue(notExist != pos);
+
+            // Enable & disable network
+            boolean disableOthers = false;
+            assertTrue(mWifiManager.enableNetwork(netId, disableOthers));
+            wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
+            assertDisableOthers(wifiConfiguration, disableOthers);
+            assertEquals(Status.ENABLED, wifiConfiguration.status);
+            disableOthers = true;
+
+            assertTrue(mWifiManager.enableNetwork(netId, disableOthers));
+            wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
+            assertDisableOthers(wifiConfiguration, disableOthers);
+
+            assertTrue(mWifiManager.disableNetwork(netId));
+            wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
+            assertEquals(Status.DISABLED, wifiConfiguration.status);
+
+            // Update a WifiConfig
+            wifiConfiguration = wifiConfiguredNetworks.get(pos);
+            wifiConfiguration.SSID = SSID2;
+            netId = mWifiManager.updateNetwork(wifiConfiguration);
+            assertFalse(existSSID(SSID1));
+            assertTrue(existSSID(SSID2));
+
+            // Remove a WifiConfig
+            assertTrue(mWifiManager.removeNetwork(netId));
+            assertFalse(mWifiManager.removeNetwork(notExist));
+            assertFalse(existSSID(SSID1));
+            assertFalse(existSSID(SSID2));
+
+            assertTrue(mWifiManager.saveConfiguration());
+        } finally {
+            reEnableNetworks(enabledSsids, mWifiManager.getConfiguredNetworks());
+            mWifiManager.saveConfiguration();
+        }
+    }
+
+    private Set<String> getEnabledNetworks(List<WifiConfiguration> configuredNetworks) {
+        Set<String> ssids = new HashSet<String>();
+        for (WifiConfiguration wifiConfig : configuredNetworks) {
+            if (Status.ENABLED == wifiConfig.status || Status.CURRENT == wifiConfig.status) {
+                ssids.add(wifiConfig.SSID);
+                Log.i(TAG, String.format("remembering enabled network %s", wifiConfig.SSID));
+            }
+        }
+        return ssids;
+    }
+
+    private void reEnableNetworks(Set<String> enabledSsids,
+            List<WifiConfiguration> configuredNetworks) {
+        for (WifiConfiguration wifiConfig : configuredNetworks) {
+            if (enabledSsids.contains(wifiConfig.SSID)) {
+                mWifiManager.enableNetwork(wifiConfig.networkId, false);
+                Log.i(TAG, String.format("re-enabling network %s", wifiConfig.SSID));
+            }
+        }
+    }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "compareSignalLevel",
+            args = {int.class, int.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "calculateSignalLevel",
+            args = {int.class, int.class}
+        )
+    })
+    public void testSignal() {
+        final int numLevels = 9;
+        int expectLevel = 0;
+        assertEquals(expectLevel, WifiManager.calculateSignalLevel(MIN_RSSI, numLevels));
+        assertEquals(numLevels - 1, WifiManager.calculateSignalLevel(MAX_RSSI, numLevels));
+        expectLevel = 4;
+        assertEquals(expectLevel, WifiManager.calculateSignalLevel((MIN_RSSI + MAX_RSSI) / 2,
+                numLevels));
+        int rssiA = 4;
+        int rssiB = 5;
+        assertTrue(WifiManager.compareSignalLevel(rssiA, rssiB) < 0);
+        rssiB = 4;
+        assertTrue(WifiManager.compareSignalLevel(rssiA, rssiB) == 0);
+        rssiA = 5;
+        rssiB = 4;
+        assertTrue(WifiManager.compareSignalLevel(rssiA, rssiB) > 0);
+    }
+}