1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server.wifi.util; 18 19import static org.junit.Assert.*; 20 21import android.net.wifi.ScanResult; 22import android.net.wifi.ScanResult.InformationElement; 23import android.net.wifi.WifiConfiguration; 24import android.net.wifi.WifiSsid; 25import android.test.suitebuilder.annotation.SmallTest; 26 27import com.android.server.wifi.ScanDetail; 28 29import org.junit.Test; 30 31import java.nio.charset.StandardCharsets; 32import java.util.Arrays; 33 34/** 35 * Unit tests for {@link com.android.server.wifi.util.ScanResultUtil}. 36 */ 37@SmallTest 38public class ScanResultUtilTest { 39 40 @Test 41 public void convertScanResult() { 42 final String ssid = "SOME SsId"; 43 44 ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid, 45 "ab:cd:01:ef:45:89", 1245, 0, "", -78, 2450, 1025, 22, 33, 20, 0, 0, true); 46 47 input.informationElements = new InformationElement[] { 48 createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8)) 49 }; 50 51 ScanDetail output = ScanResultUtil.toScanDetail(input); 52 53 validateScanDetail(input, output); 54 } 55 56 @Test 57 public void convertScanResultWithAnqpLines() { 58 final String ssid = "SOME SsId"; 59 60 ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid, 61 "ab:cd:01:ef:45:89", 1245, 0, "some caps", -78, 2450, 1025, 22, 33, 20, 0, 0, true); 62 63 input.informationElements = new InformationElement[] { 64 createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8)) 65 }; 66 input.anqpLines = Arrays.asList("LINE 1", "line 2", "Line 3"); 67 68 ScanDetail output = ScanResultUtil.toScanDetail(input); 69 70 validateScanDetail(input, output); 71 } 72 73 @Test 74 public void convertScanResultWithoutWifiSsid() { 75 final String ssid = "Another SSid"; 76 ScanResult input = new ScanResult(ssid, "ab:cd:01:ef:45:89", 1245, 0, "other caps", 77 -78, 2450, 1025, 22, 33, 20, 0, 0, true); 78 input.informationElements = new InformationElement[] { 79 createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8)) 80 }; 81 82 ScanDetail output = ScanResultUtil.toScanDetail(input); 83 84 validateScanDetail(input, output); 85 } 86 87 @Test 88 public void testNetworkCreationFromScanResult() { 89 final String ssid = "Another SSid"; 90 ScanResult scanResult = new ScanResult(ssid, "ab:cd:01:ef:45:89", 1245, 0, "", 91 -78, 2450, 1025, 22, 33, 20, 0, 0, true); 92 WifiConfiguration config; 93 94 scanResult.capabilities = ""; 95 config = ScanResultUtil.createNetworkFromScanResult(scanResult); 96 assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid)); 97 assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE)); 98 99 scanResult.capabilities = "WEP"; 100 config = ScanResultUtil.createNetworkFromScanResult(scanResult); 101 assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid)); 102 assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE)); 103 assertTrue(config.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.OPEN)); 104 assertTrue(config.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.SHARED)); 105 106 scanResult.capabilities = "PSK"; 107 config = ScanResultUtil.createNetworkFromScanResult(scanResult); 108 assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid)); 109 assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK)); 110 111 scanResult.capabilities = "EAP"; 112 config = ScanResultUtil.createNetworkFromScanResult(scanResult); 113 assertEquals(config.SSID, ScanResultUtil.createQuotedSSID(ssid)); 114 assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP)); 115 assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)); 116 } 117 118 private static InformationElement createIE(int id, byte[] bytes) { 119 InformationElement ie = new InformationElement(); 120 ie.id = id; 121 ie.bytes = bytes; 122 return ie; 123 } 124 125 private static void validateScanDetail(ScanResult input, ScanDetail output) { 126 assertNotNull("NetworkDetail was null", output.getNetworkDetail()); 127 assertNotNull("ScanResult was null", output.getScanResult()); 128 assertEquals("NetworkDetail SSID", input.SSID, 129 output.getNetworkDetail().getSSID()); 130 assertEquals("ScanResult SSID", input.SSID, 131 output.getScanResult().SSID); 132 assertEquals("ScanResult wifiSsid", input.wifiSsid, 133 output.getScanResult().wifiSsid); 134 assertEquals("getSSID", input.SSID, output.getSSID()); 135 assertEquals("NetworkDetail BSSID", input.BSSID, 136 output.getNetworkDetail().getBSSIDString()); 137 assertEquals("getBSSIDString", input.BSSID, output.getBSSIDString()); 138 assertEquals("ScanResult frequency", input.frequency, 139 output.getScanResult().frequency); 140 assertEquals("ScanResult level", input.level, 141 output.getScanResult().level); 142 assertEquals("ScanResult capabilities", input.capabilities, 143 output.getScanResult().capabilities); 144 assertEquals("ScanResult timestamp", input.timestamp, 145 output.getScanResult().timestamp); 146 assertArrayEquals("ScanResult information elements", input.informationElements, 147 output.getScanResult().informationElements); 148 assertEquals("ScanResult anqp lines", input.anqpLines, 149 output.getScanResult().anqpLines); 150 } 151 152} 153