1/* 2 * Copyright 2017 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; 18 19import static org.junit.Assert.assertEquals; 20import static org.junit.Assert.assertFalse; 21import static org.junit.Assert.assertNull; 22import static org.junit.Assert.assertTrue; 23 24import android.net.wifi.ScanResult; 25import android.util.ArraySet; 26 27import com.android.server.wifi.util.ScanResultUtil; 28 29import com.google.android.collect.Sets; 30 31import org.junit.Before; 32import org.junit.Test; 33 34import java.util.Collections; 35import java.util.Set; 36 37 38 39/** 40 * Unit tests for {@link WakeupEvaluator}. 41 */ 42public class WakeupEvaluatorTest { 43 44 private static final String SAVED_SSID_1 = "saved ssid 1"; 45 private static final String SAVED_SSID_2 = "saved ssid 2"; 46 private static final String UNSAVED_SSID = "unsaved ssid"; 47 48 private static final int FREQ_24 = 2402; 49 private static final int FREQ_5 = 5000; 50 51 private static final int THRESHOLD_24 = -10; 52 private static final int THRESHOLD_5 = -1; 53 54 private WakeupEvaluator mWakeupEvaluator; 55 56 private ScanResult makeScanResult(String ssid, int frequency, int level) { 57 ScanResult scanResult = new ScanResult(); 58 scanResult.SSID = ssid; 59 scanResult.frequency = frequency; 60 scanResult.level = level; 61 scanResult.capabilities = "[]"; 62 63 return scanResult; 64 } 65 66 private Set<ScanResultMatchInfo> getSavedNetworks() { 67 Set<ScanResultMatchInfo> networks = new ArraySet<>(); 68 networks.add(ScanResultMatchInfo.fromWifiConfiguration( 69 WifiConfigurationTestUtil.createOpenNetwork( 70 ScanResultUtil.createQuotedSSID(SAVED_SSID_1)))); 71 networks.add(ScanResultMatchInfo.fromWifiConfiguration( 72 WifiConfigurationTestUtil.createOpenNetwork( 73 ScanResultUtil.createQuotedSSID(SAVED_SSID_2)))); 74 return networks; 75 } 76 77 @Before 78 public void setUp() { 79 mWakeupEvaluator = new WakeupEvaluator(THRESHOLD_24, THRESHOLD_5); 80 } 81 82 /** 83 * Verify that isBelowThreshold returns true for networks below the filter threshold. 84 */ 85 @Test 86 public void isBelowThreshold_returnsTrueWhenRssiIsBelowThreshold() { 87 ScanResult scanResult24 = makeScanResult(SAVED_SSID_1, FREQ_24, THRESHOLD_24 - 1); 88 assertTrue(mWakeupEvaluator.isBelowThreshold(scanResult24)); 89 90 ScanResult scanResult5 = makeScanResult(SAVED_SSID_1, FREQ_5, THRESHOLD_5 - 1); 91 assertTrue(mWakeupEvaluator.isBelowThreshold(scanResult5)); 92 } 93 94 /** 95 * Verify that isBelowThreshold returns false for networks above the filter threshold. 96 */ 97 @Test 98 public void isBelowThreshold_returnsFalseWhenRssiIsAboveThreshold() { 99 ScanResult scanResult24 = makeScanResult(SAVED_SSID_1, FREQ_24, THRESHOLD_24 + 1); 100 assertFalse(mWakeupEvaluator.isBelowThreshold(scanResult24)); 101 102 ScanResult scanResult5 = makeScanResult(SAVED_SSID_1, FREQ_5, THRESHOLD_5 + 1); 103 assertFalse(mWakeupEvaluator.isBelowThreshold(scanResult5)); 104 } 105 106 /** 107 * Verify that findViableNetwork does not select ScanResult that is not present in the 108 * WifiConfigurations. 109 */ 110 @Test 111 public void findViableNetwork_returnsNullWhenScanResultIsNotInSavedNetworks() { 112 Set<ScanResult> scanResults = Collections.singleton( 113 makeScanResult(UNSAVED_SSID, FREQ_24, THRESHOLD_24 + 1)); 114 115 ScanResult scanResult = mWakeupEvaluator.findViableNetwork(scanResults, getSavedNetworks()); 116 117 assertNull(scanResult); 118 } 119 120 /** 121 * Verify that findViableNetwork does not select a scan result that is below the threshold. 122 */ 123 @Test 124 public void findViableNetwork_returnsNullWhenScanResultIsBelowThreshold() { 125 Set<ScanResult> scanResults = Collections.singleton( 126 makeScanResult(SAVED_SSID_1, FREQ_24, THRESHOLD_24 - 1)); 127 128 ScanResult scanResult = mWakeupEvaluator.findViableNetwork(scanResults, getSavedNetworks()); 129 assertNull(scanResult); 130 } 131 132 /** 133 * Verify that findViableNetwork returns a viable ScanResult. 134 */ 135 @Test 136 public void findViableNetwork_returnsConnectableScanResult() { 137 ScanResult savedScanResult = makeScanResult(SAVED_SSID_1, FREQ_24, THRESHOLD_24 + 1); 138 Set<ScanResult> scanResults = Collections.singleton(savedScanResult); 139 140 ScanResult scanResult = mWakeupEvaluator.findViableNetwork(scanResults, getSavedNetworks()); 141 assertEquals(savedScanResult, scanResult); 142 } 143 144 /** 145 * Verify that findViableNetwork returns the viable ScanResult with the highest RSSI. 146 */ 147 @Test 148 public void findViableNetwork_returnsConnectableScanResultWithHighestRssi() { 149 ScanResult savedScanResultLow = makeScanResult(SAVED_SSID_1, FREQ_24, THRESHOLD_24 + 1); 150 ScanResult savedScanResultHigh = makeScanResult(SAVED_SSID_1, FREQ_24, THRESHOLD_24 + 10); 151 Set<ScanResult> scanResults = Sets.newArraySet(savedScanResultLow, savedScanResultHigh); 152 153 ScanResult scanResult = mWakeupEvaluator.findViableNetwork(scanResults, getSavedNetworks()); 154 assertEquals(savedScanResultHigh, scanResult); 155 } 156} 157