1e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills/*
2e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * Copyright (C) 2016 The Android Open Source Project
3e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills *
4e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * Licensed under the Apache License, Version 2.0 (the "License");
5e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * you may not use this file except in compliance with the License.
6e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * You may obtain a copy of the License at
7e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills *
8e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills *      http://www.apache.org/licenses/LICENSE-2.0
9e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills *
10e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * Unless required by applicable law or agreed to in writing, software
11e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * distributed under the License is distributed on an "AS IS" BASIS,
12e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * See the License for the specific language governing permissions and
14e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills * limitations under the License.
15e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills */
16e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
17e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willspackage com.android.server.wifi.util;
18e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
1955b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Piusimport static org.junit.Assert.*;
20e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
21e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport android.net.wifi.ScanResult;
22e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport android.net.wifi.ScanResult.InformationElement;
2355b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Piusimport android.net.wifi.WifiConfiguration;
24e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport android.net.wifi.WifiSsid;
25e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport android.test.suitebuilder.annotation.SmallTest;
26e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
27e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport com.android.server.wifi.ScanDetail;
28e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
29e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport org.junit.Test;
30e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
31e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport java.nio.charset.StandardCharsets;
32e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Willsimport java.util.Arrays;
33e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
34e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills/**
3522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Unit tests for {@link com.android.server.wifi.util.ScanResultUtil}.
36e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills */
37e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills@SmallTest
3822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Piuspublic class ScanResultUtilTest {
39e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
40e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    @Test
41e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    public void convertScanResult() {
42e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        final String ssid = "SOME SsId";
43e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
44e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid,
45e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                "ab:cd:01:ef:45:89", 1245, 0, "", -78, 2450, 1025, 22, 33, 20, 0, 0, true);
46e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
47e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        input.informationElements = new InformationElement[] {
48e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills            createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8))
49e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        };
50e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
5122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius        ScanDetail output = ScanResultUtil.toScanDetail(input);
52e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
53e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        validateScanDetail(input, output);
54e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    }
55e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
56e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    @Test
57e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    public void convertScanResultWithAnqpLines() {
58e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        final String ssid = "SOME SsId";
59e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
60e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid,
61e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                "ab:cd:01:ef:45:89", 1245, 0, "some caps", -78, 2450, 1025, 22, 33, 20, 0, 0, true);
62e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
63e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        input.informationElements = new InformationElement[] {
64e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills            createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8))
65e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        };
66e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        input.anqpLines = Arrays.asList("LINE 1", "line 2", "Line 3");
67e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
6822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius        ScanDetail output = ScanResultUtil.toScanDetail(input);
69e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
70e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        validateScanDetail(input, output);
71e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    }
72e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
73e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    @Test
74e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    public void convertScanResultWithoutWifiSsid() {
75e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        final String ssid = "Another SSid";
76e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        ScanResult input = new ScanResult(ssid, "ab:cd:01:ef:45:89", 1245, 0, "other caps",
77e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                -78, 2450, 1025, 22, 33, 20, 0, 0, true);
78e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        input.informationElements = new InformationElement[] {
79e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills            createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8))
80e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        };
81e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
8222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius        ScanDetail output = ScanResultUtil.toScanDetail(input);
83e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
84e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        validateScanDetail(input, output);
85e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    }
86e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
8755b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius    @Test
8855b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius    public void testScanResultMatchingWithNetwork() {
8955b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        final String ssid = "Another SSid";
9055b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        WifiConfiguration config = new WifiConfiguration();
9155b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config.SSID = ScanResultUtil.createQuotedSSID(ssid);
9255b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        ScanResult scanResult = new ScanResult(ssid, "ab:cd:01:ef:45:89", 1245, 0, "",
9355b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius                -78, 2450, 1025, 22, 33, 20, 0, 0, true);
9455b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
9555b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
9655b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "";
9755b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(ScanResultUtil.doesScanResultMatchWithNetwork(scanResult, config));
9855b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
9955b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
10055b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config.wepKeys[0] = "45592364648547";
10155b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "WEP";
10255b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(ScanResultUtil.doesScanResultMatchWithNetwork(scanResult, config));
10355b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
10455b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
10555b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "PSK";
10655b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(ScanResultUtil.doesScanResultMatchWithNetwork(scanResult, config));
10755b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
10855b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
10955b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "EAP";
11055b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(ScanResultUtil.doesScanResultMatchWithNetwork(scanResult, config));
11155b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius    }
11255b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
11355b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius    @Test
11455b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius    public void testNetworkCreationFromScanResult() {
11555b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        final String ssid = "Another SSid";
11655b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        ScanResult scanResult = new ScanResult(ssid, "ab:cd:01:ef:45:89", 1245, 0, "",
11755b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius                -78, 2450, 1025, 22, 33, 20, 0, 0, true);
11855b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        WifiConfiguration config;
11955b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
12055b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "";
12155b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config = ScanResultUtil.createNetworkFromScanResult(scanResult);
12255b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid));
12355b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE));
12455b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
12555b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "WEP";
12655b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config = ScanResultUtil.createNetworkFromScanResult(scanResult);
12755b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid));
12855b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE));
12955b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(config.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.OPEN));
13055b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(config.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.SHARED));
13155b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
13255b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "PSK";
13355b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config = ScanResultUtil.createNetworkFromScanResult(scanResult);
13455b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid));
13555b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK));
13655b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
13755b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        scanResult.capabilities = "EAP";
13855b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        config = ScanResultUtil.createNetworkFromScanResult(scanResult);
13955b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid));
14055b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP));
14155b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius        assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X));
14255b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius    }
14355b645ab4d044fbe7e0aa1c8cbb9bfdb5c17ff1dRoshan Pius
144e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    private static InformationElement createIE(int id, byte[] bytes) {
145e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        InformationElement ie = new InformationElement();
146e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        ie.id = id;
147e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        ie.bytes = bytes;
148e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        return ie;
149e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    }
150e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
151e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    private static void validateScanDetail(ScanResult input, ScanDetail output) {
152e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertNotNull("NetworkDetail was null", output.getNetworkDetail());
153e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertNotNull("ScanResult was null", output.getScanResult());
154e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("NetworkDetail SSID", input.SSID,
155e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getNetworkDetail().getSSID());
156e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("ScanResult SSID", input.SSID,
157e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().SSID);
158e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("ScanResult wifiSsid", input.wifiSsid,
159e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().wifiSsid);
160e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("getSSID", input.SSID, output.getSSID());
161e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("NetworkDetail BSSID", input.BSSID,
162e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getNetworkDetail().getBSSIDString());
163e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("getBSSIDString", input.BSSID, output.getBSSIDString());
164e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("ScanResult frequency", input.frequency,
165e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().frequency);
166e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("ScanResult level", input.level,
167e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().level);
168e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("ScanResult capabilities", input.capabilities,
169e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().capabilities);
170e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("ScanResult timestamp", input.timestamp,
171e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().timestamp);
172e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertArrayEquals("ScanResult information elements", input.informationElements,
173e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().informationElements);
174e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills        assertEquals("ScanResult anqp lines", input.anqpLines,
175e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills                output.getScanResult().anqpLines);
176e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills    }
177e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills
178e4e3b8cb884dd9e754a437ea6feac502191f1767Mitchell Wills}
179