ScanScheduleUtilFilterTest.java revision c4f23cbd6de85cbffcd91b398e51eff106ef08d4
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, -1)); 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, -1)); 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, -1)); 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, -1); 142 assertScanDataFreqsEquals(null, results); 143 } 144 145 @Test 146 public void filterScanDataSingleNotMatchingWithBucketDefinitlyScanned() { 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 } }, new int[]{ 2 }), settings, 1); 154 assertScanDataFreqsEquals(new int[][]{ { } }, results); 155 } 156 157 @Test 158 public void filterScanDataSingleMatchingWithNoBucketInfo() { 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[][]{ { 2400 } }), settings, -1); 166 167 assertScanDataFreqsEquals(new int[][]{ { 2400 } }, results); 168 } 169 170 @Test 171 public void filterScanDataSingleMatchingWithBucketDefinitlyNotScanned() { 172 ScanSettings settings = createRequest( 173 channelsToSpec(2400, 5150), 30000, 0, 20, 174 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 175 ); 176 177 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 178 createScanDatas(new int[][]{ { 2400 } }, new int[] { 5 }), settings, 1); 179 180 assertScanDataFreqsEquals(null, results); 181 } 182 183 @Test 184 public void filterScanDataSinglePartialMatchingWithNoBucketInfo() { 185 ScanSettings settings = createRequest( 186 channelsToSpec(2400, 5150), 30000, 0, 20, 187 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 188 ); 189 190 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 191 createScanDatas(new int[][]{ { 2400, 2450, 5150, 5175 } }), settings, -1); 192 193 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 } }, results); 194 } 195 196 @Test 197 public void filterScanDataMultipleNotMatchingWithNoBucketInfo() { 198 ScanSettings settings = createRequest( 199 channelsToSpec(2400, 5150), 30000, 0, 20, 200 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 201 ); 202 203 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 204 createScanDatas(new int[][]{ { 2450 }, { 2450, 5175 } }), settings, -1); 205 assertScanDataFreqsEquals(null, results); 206 } 207 208 @Test 209 public void filterScanDataMultipleNotMatchingWithOneDefinitlyScanned() { 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 } }, new int[]{ 1, 8 }), 217 settings, 3); 218 assertScanDataFreqsEquals(new int[][]{ {} }, results); 219 } 220 221 @Test 222 public void filterScanDataMultipleMatchingWithNoBucketInfo() { 223 ScanSettings settings = createRequest( 224 channelsToSpec(2400, 5150), 30000, 0, 20, 225 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 226 ); 227 228 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 229 createScanDatas(new int[][]{ { 2400 }, {2400, 5150} }), settings, -1); 230 231 assertScanDataFreqsEquals(new int[][]{ { 2400 }, {2400, 5150} }, results); 232 } 233 234 @Test 235 public void filterScanDataMultiplePartialMatchingWithNoBucketInfo() { 236 ScanSettings settings = createRequest( 237 channelsToSpec(2400, 5150), 30000, 0, 20, 238 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 239 ); 240 241 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 242 createScanDatas(new int[][]{ { 2400, 2450, 5150, 5175 }, { 2400, 2450, 5175 } }), 243 settings, -1); 244 245 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 }, { 2400 } }, results); 246 } 247 248 @Test 249 public void filterScanDataMultipleDuplicateFrequenciesWithNoBucketInfo() { 250 ScanSettings settings = createRequest( 251 channelsToSpec(2400, 5150), 30000, 0, 20, 252 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 253 ); 254 255 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 256 createScanDatas(new int[][]{ 257 { 2400, 2450, 5150, 5175, 2400 }, 258 { 2400, 2450, 5175 }, 259 { 5175, 5175, 5150 } }), settings, -1); 260 261 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 2400 }, { 5150 } }, results); 262 } 263 264 @Test 265 public void filterScanDataMultipleSomeNotMatchingWithNoBucketInfo() { 266 ScanSettings settings = createRequest( 267 channelsToSpec(2400, 5150), 30000, 0, 20, 268 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 269 ); 270 271 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 272 createScanDatas(new int[][]{ 273 { 2400, 2450, 5150, 5175, 2400 }, 274 { 5175 }, 275 { 5175, 5175, 5150 } }), settings, -1); 276 277 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150 } }, results); 278 } 279 280 @Test 281 public void filterScanDataExceedMaxBssidsPerScanWithNoBucketInfo() { 282 ScanSettings settings = createRequest( 283 channelsToSpec(2400, 5150), 30000, 0, 3, 284 WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 285 ); 286 287 ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper, 288 createScanDatas(new int[][]{ 289 { 2400, 2450, 5150, 5175, 2400, 2400}, 290 { 5175 }, 291 { 5175, 5175, 5150, 2400, 2400, 5150 } }), settings, -1); 292 293 assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150, 2400, 2400 } }, 294 results); 295 } 296 297 298 private static void assertScanDataFreqsEquals(int[][] expected, ScanData[] results) { 299 if (expected == null) { 300 assertNull("Expected no results", results); 301 } else { 302 assertNotNull("Expected some results", results); 303 assertEquals("num scans", expected.length, results.length); 304 for (int i = 0; i < expected.length; ++i) { 305 assertNotNull("scan[" + i + "] was null", results[i]); 306 assertEquals("num aps in scan[" + i + "]", expected[i].length, 307 results[i].getResults().length); 308 for (int j = 0; j < expected[i].length; ++j) { 309 assertNotNull("ap result[" + i + "][" + j + "] was null", 310 results[i].getResults()[j]); 311 assertEquals("ap freq in result[" + i + "][" + j + "]", expected[i][j], 312 results[i].getResults()[j].frequency); 313 } 314 } 315 } 316 } 317} 318