1/* 2 * Copyright (C) 2015 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.scanner; 18 19import static com.android.server.wifi.ScanTestUtil.channelsToSpec; 20import static com.android.server.wifi.ScanTestUtil.createRequest; 21import static com.android.server.wifi.ScanTestUtil.createScanDatas; 22import static com.android.server.wifi.ScanTestUtil.createScanResult; 23 24import static org.junit.Assert.assertEquals; 25import static org.junit.Assert.assertFalse; 26import static org.junit.Assert.assertNotNull; 27import static org.junit.Assert.assertNull; 28import static org.junit.Assert.assertTrue; 29 30import android.net.wifi.WifiScanner; 31import android.net.wifi.WifiScanner.ScanData; 32import android.net.wifi.WifiScanner.ScanSettings; 33import android.test.suitebuilder.annotation.SmallTest; 34 35import org.junit.Before; 36import org.junit.Test; 37 38/** 39 * Unit tests for filtering of scan results in 40 * {@link com.android.server.wifi.scanner.ScanScheduleUtil}. 41 */ 42@SmallTest 43public class ScanScheduleUtilFilterTest { 44 45 private ChannelHelper mChannelHelper; 46 47 @Before 48 public void setUp() throws Exception { 49 mChannelHelper = new PresetKnownBandsChannelHelper( 50 new int[]{2400, 2450}, 51 new int[]{5150, 5175}, 52 new int[]{5600, 5650}); 53 } 54 55 @Test 56 public void reportFullResultTrueForBandsWithNoBucketInfo() { 57 ScanSettings settings = createRequest( 58 WifiScanner.WIFI_BAND_24_GHZ, 30000, 0, 20, 59 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 60 ); 61 62 assertTrue(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper, 63 createScanResult(2400), 0, settings, -1)); 64 } 65 66 @Test 67 public void reportFullResultFalseForBandsWithNoBucketInfo() { 68 ScanSettings settings = createRequest( 69 WifiScanner.WIFI_BAND_24_GHZ, 30000, 0, 20, 70 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 71 ); 72 73 assertFalse(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper, 74 createScanResult(5150), 0, settings, 0)); 75 } 76 77 @Test 78 public void reportFullResultTrueForChannelsWithNoBucketInfo() { 79 ScanSettings settings = createRequest( 80 channelsToSpec(2400, 5150), 30000, 0, 20, 81 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 82 ); 83 84 assertTrue(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper, 85 createScanResult(2400), 0, settings, 0)); 86 } 87 88 @Test 89 public void reportFullResultFalseForChannelsWithNoBucketInfo() { 90 ScanSettings settings = createRequest( 91 channelsToSpec(2400, 5150), 30000, 0, 20, 92 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 93 ); 94 95 assertFalse(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper, 96 createScanResult(5175), 0, settings, 0)); 97 } 98 99 @Test 100 public void reportFullResultTrueForChannelsWithBucketDefinitlyScanned() { 101 ScanSettings settings = createRequest( 102 channelsToSpec(2400, 5150), 30000, 0, 20, 103 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 104 ); 105 106 assertTrue(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper, 107 createScanResult(2400), 5, settings, 2)); 108 } 109 110 @Test 111 public void reportFullResultFalseForChannelsWithBucketDefinitlyNotScanned() { 112 ScanSettings settings = createRequest( 113 channelsToSpec(2400, 5150), 30000, 0, 20, 114 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 115 ); 116 117 assertFalse(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper, 118 createScanResult(2400), 1, settings, 1)); 119 } 120 121 @Test 122 public void filterScanDataEmptyWithNoBucketInfo() { 123 ScanSettings settings = createRequest( 124 channelsToSpec(2400, 5150), 30000, 0, 20, 125 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 126 ); 127 128 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 129 new ScanData[0], settings, -1); 130 assertScanDataFreqsEquals(null, results); 131 } 132 133 @Test 134 public void filterScanDataSingleNotMatchingWithNoBucketInfo() { 135 ScanSettings settings = createRequest( 136 channelsToSpec(2400, 5150), 30000, 0, 20, 137 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 138 ); 139 140 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 141 createScanDatas(new int[][]{ { 2450 } }), settings, 0); 142 assertScanDataFreqsEquals(null, results); 143 } 144 145 @Test 146 public void filterScanDataSingleNotMatchingWithDefinitlyScannedBucketIndex() { 147 ScanSettings settings = createRequest( 148 channelsToSpec(2400, 5150), 30000, 0, 20, 149 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 150 ); 151 152 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 153 createScanDatas(new int[][]{ { 2450 } }), settings, -1); 154 assertScanDataFreqsEquals(new int[][]{ { } }, results); 155 } 156 157 @Test 158 public void filterScanDataSingleNotMatchingWithBucketDefinitlyScanned() { 159 ScanSettings settings = createRequest( 160 channelsToSpec(2400, 5150), 30000, 0, 20, 161 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 162 ); 163 164 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 165 createScanDatas(new int[][]{ { 2450 } }, new int[]{ 2 }), settings, 1); 166 assertScanDataFreqsEquals(new int[][]{ { } }, results); 167 } 168 169 @Test 170 public void filterScanDataSingleMatchingWithNoBucketInfo() { 171 ScanSettings settings = createRequest( 172 channelsToSpec(2400, 5150), 30000, 0, 20, 173 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 174 ); 175 176 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 177 createScanDatas(new int[][]{ { 2400 } }), settings, 0); 178 179 assertScanDataFreqsEquals(new int[][]{ { 2400 } }, results); 180 } 181 182 @Test 183 public void filterScanDataSingleMatchingWithBucketDefinitlyNotScanned() { 184 ScanSettings settings = createRequest( 185 channelsToSpec(2400, 5150), 30000, 0, 20, 186 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 187 ); 188 189 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 190 createScanDatas(new int[][]{ { 2400 } }, new int[] { 5 }), settings, 1); 191 192 assertScanDataFreqsEquals(null, results); 193 } 194 195 @Test 196 public void filterScanDataSinglePartialMatchingWithNoBucketInfo() { 197 ScanSettings settings = createRequest( 198 channelsToSpec(2400, 5150), 30000, 0, 20, 199 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 200 ); 201 202 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 203 createScanDatas(new int[][]{ { 2400, 2450, 5150, 5175 } }), settings, 0); 204 205 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 } }, results); 206 } 207 208 @Test 209 public void filterScanDataMultipleNotMatchingWithNoBucketInfo() { 210 ScanSettings settings = createRequest( 211 channelsToSpec(2400, 5150), 30000, 0, 20, 212 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 213 ); 214 215 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 216 createScanDatas(new int[][]{ { 2450 }, { 2450, 5175 } }), settings, 0); 217 assertScanDataFreqsEquals(null, results); 218 } 219 220 @Test 221 public void filterScanDataMultipleNotMatchingWithOneDefinitlyScanned() { 222 ScanSettings settings = createRequest( 223 channelsToSpec(2400, 5150), 30000, 0, 20, 224 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 225 ); 226 227 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 228 createScanDatas(new int[][]{ { 2450 }, { 2450, 5175 } }, new int[]{ 1, 8 }), 229 settings, 3); 230 assertScanDataFreqsEquals(new int[][]{ {} }, results); 231 } 232 233 @Test 234 public void filterScanDataMultipleMatchingWithNoBucketInfo() { 235 ScanSettings settings = createRequest( 236 channelsToSpec(2400, 5150), 30000, 0, 20, 237 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 238 ); 239 240 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 241 createScanDatas(new int[][]{ { 2400 }, {2400, 5150} }), settings, 0); 242 243 assertScanDataFreqsEquals(new int[][]{ { 2400 }, {2400, 5150} }, results); 244 } 245 246 @Test 247 public void filterScanDataMultiplePartialMatchingWithNoBucketInfo() { 248 ScanSettings settings = createRequest( 249 channelsToSpec(2400, 5150), 30000, 0, 20, 250 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 251 ); 252 253 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 254 createScanDatas(new int[][]{ { 2400, 2450, 5150, 5175 }, { 2400, 2450, 5175 } }), 255 settings, -1); 256 257 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 }, { 2400 } }, results); 258 } 259 260 @Test 261 public void filterScanDataMultipleDuplicateFrequenciesWithNoBucketInfo() { 262 ScanSettings settings = createRequest( 263 channelsToSpec(2400, 5150), 30000, 0, 20, 264 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 265 ); 266 267 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 268 createScanDatas(new int[][]{ 269 { 2400, 2450, 5150, 5175, 2400 }, 270 { 2400, 2450, 5175 }, 271 { 5175, 5175, 5150 } }), settings, 0); 272 273 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 2400 }, { 5150 } }, results); 274 } 275 276 @Test 277 public void filterScanDataMultipleSomeNotMatchingWithNoBucketInfo() { 278 ScanSettings settings = createRequest( 279 channelsToSpec(2400, 5150), 30000, 0, 20, 280 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 281 ); 282 283 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 284 createScanDatas(new int[][]{ 285 { 2400, 2450, 5150, 5175, 2400 }, 286 { 5175 }, 287 { 5175, 5175, 5150 } }), settings, 0); 288 289 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150 } }, results); 290 } 291 292 @Test 293 public void filterScanDataExceedMaxBssidsPerScanWithNoBucketInfo() { 294 ScanSettings settings = createRequest( 295 channelsToSpec(2400, 5150), 30000, 0, 3, 296 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 297 ); 298 299 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 300 createScanDatas(new int[][]{ 301 { 2400, 2450, 5150, 5175, 2400, 2400}, 302 { 5175 }, 303 { 5175, 5175, 5150, 2400, 2400, 5150 } }), settings, 0); 304 305 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150, 2400, 2400 } }, 306 results); 307 } 308 309 310 private static void assertScanDataFreqsEquals(int[][] expected, ScanData[] results) { 311 if (expected == null) { 312 assertNull("Expected no results", results); 313 } else { 314 assertNotNull("Expected some results", results); 315 assertEquals("num scans", expected.length, results.length); 316 for (int i = 0; i < expected.length; ++i) { 317 assertNotNull("scan[" + i + "] was null", results[i]); 318 assertEquals("num aps in scan[" + i + "]", expected[i].length, 319 results[i].getResults().length); 320 for (int j = 0; j < expected[i].length; ++j) { 321 assertNotNull("ap result[" + i + "][" + j + "] was null", 322 results[i].getResults()[j]); 323 assertEquals("ap freq in result[" + i + "][" + j + "]", expected[i][j], 324 results[i].getResults()[j].frequency); 325 } 326 } 327 } 328 } 329} 330