1ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang/*
2ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Copyright (C) 2010, The Android Open Source Project
3ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang *
4ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Licensed under the Apache License, Version 2.0 (the "License");
5ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * you may not use this file except in compliance with the License.
6ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * You may obtain a copy of the License at
7ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang *
8ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang *      http://www.apache.org/licenses/LICENSE-2.0
9ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang *
10ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Unless required by applicable law or agreed to in writing, software
11ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * distributed under the License is distributed on an "AS IS" BASIS,
12ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * See the License for the specific language governing permissions and
14ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * limitations under the License.
15ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang */
16ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang
17ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wangpackage com.android.connectivitymanagertest.functional;
18ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang
19d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhuimport android.net.wifi.WifiConfiguration;
202591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport android.os.SystemClock;
21ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wangimport android.test.suitebuilder.annotation.LargeTest;
22ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang
23d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhuimport com.android.connectivitymanagertest.ConnectivityManagerTestBase;
242591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport com.android.connectivitymanagertest.WifiConfigurationHelper;
25d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu
262591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.BufferedReader;
272591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.File;
282591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.FileReader;
292591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Roweimport java.io.IOException;
30ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wangimport java.util.List;
31ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang
32ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang/**
33ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * Test Wi-Fi connection with different configuration
34ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang * To run this tests:
352591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe *     adb shell am instrument \
362591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe *         -e class com.android.connectivitymanagertest.functional.WifiConnectionTest \
372591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe *         -w com.android.connectivitymanagertest/.ConnectivityManagerTestRunner
38ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang */
392591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowepublic class WifiConnectionTest extends ConnectivityManagerTestBase {
402591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    private static final String WIFI_CONFIG_FILE = "/data/wifi_configs.json";
412591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    private static final long PAUSE_DURATION_MS = 60 * 1000;
422591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
432591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    public WifiConnectionTest() {
442591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        super(WifiConnectionTest.class.getSimpleName());
452591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    }
46ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang
47ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    @Override
48ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    public void setUp() throws Exception {
49ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang        super.setUp();
502591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        assertTrue("Failed to enable wifi", enableWifi());
51ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    }
52ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang
53ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    @Override
54ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    public void tearDown() throws Exception {
5519306af73a8175e1327101132e26a35c7dfe5168Xia Wang        removeConfiguredNetworksAndDisableWifi();
56ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang        super.tearDown();
57ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    }
58ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang
59ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    @LargeTest
60ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    public void testWifiConnections() {
612591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        List<WifiConfiguration> wifiConfigs = loadConfigurations();
622591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
632591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        printWifiConfigurations(wifiConfigs);
642591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
652591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        assertFalse("No configurations to test against", wifiConfigs.isEmpty());
662591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
672591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        boolean shouldPause = false;
682591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        for (WifiConfiguration config : wifiConfigs) {
692591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            if (shouldPause) {
702591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                logv("Pausing for %d seconds", PAUSE_DURATION_MS / 1000);
712591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                SystemClock.sleep(PAUSE_DURATION_MS);
722591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            }
732591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            logv("Start wifi connection test to: %s", config.SSID);
742591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            connectToWifi(config);
752591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
76d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu            // verify that connection actually works
772591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            assertTrue("No connectivity at end of test", checkNetworkConnectivity());
782591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
792591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            // Disconnect and remove the network
802591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            assertTrue("Unable to remove network", disconnectAP());
812591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            logv("End wifi connection test to: %s", config.SSID);
822591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
832591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            shouldPause = true;
842591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        }
852591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    }
862591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
872591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    /**
882591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe     * Load the configuration file from the root of the data partition
892591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe     */
902591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    private List<WifiConfiguration> loadConfigurations() {
912591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        BufferedReader reader = null;
922591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        try {
932591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            reader = new BufferedReader(new FileReader(new File(WIFI_CONFIG_FILE)));
942591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            StringBuffer jsonBuffer = new StringBuffer();
952591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            String line;
962591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            while ((line = reader.readLine()) != null) {
972591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                jsonBuffer.append(line);
982591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            }
992591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            return WifiConfigurationHelper.parseJson(jsonBuffer.toString());
1002591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        } catch (IllegalArgumentException | IOException e) {
1012591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            throw new AssertionError("Error parsing file", e);
1022591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        } finally {
1032591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            if (reader != null) {
1042591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                try {
1052591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                    reader.close();
1062591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                } catch (IOException e) {
1072591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                    // Ignore
1082591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe                }
109d21f1c1e4d34306ab7aa99f5be1b886f6b4e07a8Guang Zhu            }
110ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang        }
111ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang    }
1122591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe
1132591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    /**
1142591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe     * Print the wifi configurations to test against.
1152591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe     */
1162591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    private void printWifiConfigurations(List<WifiConfiguration> wifiConfigs) {
1172591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        logv("Wifi configurations to be tested");
1182591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        for (WifiConfiguration config : wifiConfigs) {
1192591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe            logv(config.toString());
1202591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe        }
1212591e00b57b8aedd9e44fecce3f55a2c6a5428c2Eric Rowe    }
122ca1f2b1a1e8cb785be5ebbcf7ded7c921cbf80a7Xia Wang}
123