ScanScheduleUtilFilterTest.java revision 1a16020f8d611c94797884b212ee6a26817fad82
1297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills/*
2297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * Copyright (C) 2015 The Android Open Source Project
3297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills *
4297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * Licensed under the Apache License, Version 2.0 (the "License");
5297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * you may not use this file except in compliance with the License.
6297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * You may obtain a copy of the License at
7297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills *
8297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills *      http://www.apache.org/licenses/LICENSE-2.0
9297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills *
10297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * Unless required by applicable law or agreed to in writing, software
11297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * distributed under the License is distributed on an "AS IS" BASIS,
12297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * See the License for the specific language governing permissions and
14297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * limitations under the License
15297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills */
16297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
17297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willspackage com.android.server.wifi;
18297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
19297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.channelsToSpec;
20297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.createRequest;
21297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.createScanDatas;
22297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.createScanResult;
23297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.installWlanWifiNative;
24297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.setupMockChannels;
25297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
2672c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertEquals;
2772c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertFalse;
2872c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertNotNull;
2972c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertNull;
3072c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertTrue;
31297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static org.mockito.Mockito.mock;
32297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
33297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner;
34297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner.ScanData;
35297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner.ScanSettings;
36297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.test.suitebuilder.annotation.SmallTest;
37297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
38297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport org.junit.Before;
39297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport org.junit.Test;
40297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
41297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.util.Collection;
42297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.util.Collections;
43297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
44297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills/**
45297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * Unit tests for filtering of scan results in {@link com.android.server.wifi.MultiClientScheduler}.
46297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills */
47297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills@SmallTest
48297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willspublic class MultiClientSchedulerFilterTest {
49297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
50297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    private static final int DEFAULT_MAX_BUCKETS = 8;
51297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    private static final int DEFAULT_MAX_CHANNELS = 8;
52297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    private static final int DEFAULT_MAX_BATCH = 10;
53297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
54297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    private WifiNative mWifiNative;
55297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    private MultiClientScheduler mScheduler;
56297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
57297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Before
58297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void setUp() throws Exception {
59297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mWifiNative = mock(WifiNative.class);
60297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        setupMockChannels(mWifiNative,
61297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                new int[]{2400, 2450},
62297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                new int[]{5150, 5175},
63297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                new int[]{5600, 5650});
64297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        installWlanWifiNative(mWifiNative);
65297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
66297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler = new MultiClientScheduler();
67297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.setMaxBuckets(DEFAULT_MAX_BUCKETS);
68297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.setMaxChannels(DEFAULT_MAX_CHANNELS);
69297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.setMaxBatch(DEFAULT_MAX_BATCH);
70297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
71297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
72297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
73297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void reportFullResultTrueForBands() {
74297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
75297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.WIFI_BAND_24_GHZ, 30000, 0, 20,
76297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
77297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
78297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
79297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
80297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
81297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertTrue(mScheduler.shouldReportFullScanResultForSettings(
82297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanResult(2400), settings));
83297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
84297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
85297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
86297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void reportFullResultFalseForBands() {
87297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
88297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.WIFI_BAND_24_GHZ, 30000, 0, 20,
89297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
90297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
91297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
92297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
93297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
94297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertFalse(mScheduler.shouldReportFullScanResultForSettings(
95297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanResult(5150), settings));
96297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
97297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
98297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
99297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void reportFullResultTrueForChannels() {
100297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
101297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
102297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
103297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
104297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
105297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
106297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
107297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertTrue(mScheduler.shouldReportFullScanResultForSettings(
108297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanResult(2400), settings));
109297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
110297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
111297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
112297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void reportFullResultFalseForChannels() {
113297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
114297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
115297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
116297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
117297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
118297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
119297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
120297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertFalse(mScheduler.shouldReportFullScanResultForSettings(
121297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanResult(5175), settings));
122297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
123297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
124297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
125297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataEmpty() {
126297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
127297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
128297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
129297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
130297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
131297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
132297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
133297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(new ScanData[0], settings);
134297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(null, results);
135297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
136297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
137297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
138297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataSingleNotMatching() {
139297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
140297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
141297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
142297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
143297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
144297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
145297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
146297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(
147297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanDatas(new int[][]{ { 2450 } }), settings);
148297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(null, results);
149297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
150297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
151297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
152297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataSingleMatching() {
153297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
154297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
155297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
156297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
157297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
158297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
159297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
160297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(
161297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanDatas(new int[][]{ { 2400 } }), settings);
162297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
163297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(new int[][]{ { 2400 } }, results);
164297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
165297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
166297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
167297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataSinglePartialMatching() {
168297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
169297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
170297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
171297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
172297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
173297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
174297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
175297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(
176297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanDatas(new int[][]{ { 2400, 2450, 5150, 5175 } }), settings);
177297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
178297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 } }, results);
179297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
180297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
181297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
182297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataMultipleNotMatching() {
183297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
184297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
185297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
186297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
187297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
188297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
189297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
190297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(
191297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanDatas(new int[][]{ { 2450 }, { 2450, 5175 } }), settings);
192297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(null, results);
193297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
194297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
195297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
196297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataMultipleMatching() {
197297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
198297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
199297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
200297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
201297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
202297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
203297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
204297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(
205297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                createScanDatas(new int[][]{ { 2400 }, {2400, 5150} }), settings);
206297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
207297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(new int[][]{ { 2400 }, {2400, 5150} }, results);
208297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
209297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
210297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
211297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataMultiplePartialMatching() {
212297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
213297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
214297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
215297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
216297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
217297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
218297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
219297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
220297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                new int[][]{ { 2400, 2450, 5150, 5175 }, { 2400, 2450, 5175 } }), settings);
221297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
222297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 }, { 2400 } }, results);
223297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
224297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
225297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
226297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataMultipleDuplicateFrequencies() {
227297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
228297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
229297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
230297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
231297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
232297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
233297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
234297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
235297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                new int[][]{ { 2400, 2450, 5150, 5175, 2400 },
236297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                             { 2400, 2450, 5175 },
237297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                             { 5175, 5175, 5150 } }), settings);
238297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
239297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 2400 }, { 5150 } }, results);
240297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
241297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
242297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    @Test
243297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public void filterScanDataMultipleSomeNotMatching() {
244297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanSettings settings = createRequest(
245297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 20,
246297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
247297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        );
248297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
249297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        mScheduler.updateSchedule(requests);
250297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
251297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
252297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                new int[][]{ { 2400, 2450, 5150, 5175, 2400 },
253297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                             { 5175 },
254297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                             { 5175, 5175, 5150 } }), settings);
255297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
256297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150 } }, results);
257297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
258297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
2591a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills    @Test
2601a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills    public void filterScanDataExceedMaxBssidsPerScan() {
2611a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills        ScanSettings settings = createRequest(
2621a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills                channelsToSpec(2400, 5150), 30000, 0, 3,
2631a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills                WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
2641a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills        );
2651a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills        Collection<ScanSettings> requests = Collections.singleton(settings);
2661a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills        mScheduler.updateSchedule(requests);
2671a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills
2681a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills        ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
2691a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills                        new int[][]{ { 2400, 2450, 5150, 5175, 2400, 2400},
2701a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills                                     { 5175 },
2711a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills                                     { 5175, 5175, 5150, 2400, 2400, 5150 } }), settings);
2721a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills
2731a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills        assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150, 2400, 2400 } },
2741a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills                results);
2751a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills    }
2761a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills
277297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills
278297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    public static void assertScanDataFreqsEquals(int[][] expected, ScanData[] results) {
279297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        if (expected == null) {
280297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills            assertNull(results);
281297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        } else {
282297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills            assertNotNull(results);
283297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills            assertEquals("num scans", expected.length, results.length);
284297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills            for (int i = 0; i < expected.length; ++i) {
285297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                assertNotNull("scan[" + i + "] was null", results[i]);
286297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                assertEquals("num aps in scan[" + i + "]", expected[i].length,
287297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                        results[i].getResults().length);
288297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                for (int j = 0; j < expected[i].length; ++j) {
289297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                    assertNotNull("ap result[" + i + "][" + j + "] was null",
290297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                            results[i].getResults()[j]);
291297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                    assertEquals("ap freq in result[" + i + "][" + j + "]", expected[i][j],
292297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                            results[i].getResults()[j].frequency);
293297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills                }
294297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills            }
295297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills        }
296297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills    }
297297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills}
298