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