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