BackgroundScanSchedulerTest.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.getAllChannels; 22297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.installWlanWifiNative; 23297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static com.android.server.wifi.ScanTestUtil.setupMockChannels; 24297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 2572c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertEquals; 2672c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertNotNull; 2772c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertTrue; 28297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static org.mockito.Mockito.mock; 29297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 30297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner; 31297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner.ChannelSpec; 32297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner.ScanSettings; 33297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.test.suitebuilder.annotation.SmallTest; 34297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 35297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport com.android.server.wifi.WifiNative.BucketSettings; 36297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 37297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport org.junit.Before; 38297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport org.junit.Test; 39297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 40297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.lang.reflect.Field; 41297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.util.ArrayList; 42297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.util.Collection; 43297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.util.Collections; 44297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.util.HashSet; 45297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.util.Set; 46297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 47297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills/** 48297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * Unit tests for {@link com.android.server.wifi.MultiClientScheduler}. 49297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills */ 50297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills@SmallTest 51297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willspublic class MultiClientSchedulerTest { 52297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 531a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills private static final int DEFAULT_MAX_BUCKETS = 9; 541a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills private static final int DEFAULT_MAX_CHANNELS = 23; 551a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills private static final int DEFAULT_MAX_BATCH = 11; 561a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills private static final int DEFAULT_MAX_AP_PER_SCAN = 33; 57297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 58297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private WifiNative mWifiNative; 59297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private MultiClientScheduler mScheduler; 60297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 61297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Before 62297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void setUp() throws Exception { 63297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mWifiNative = mock(WifiNative.class); 64297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills setupMockChannels(mWifiNative, 65297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills new int[]{2400, 2450}, 66297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills new int[]{5150, 5175}, 67297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills new int[]{5600, 5650, 5660}); 68297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills installWlanWifiNative(mWifiNative); 69297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 70297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler = new MultiClientScheduler(); 71297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBuckets(DEFAULT_MAX_BUCKETS); 72297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxChannels(DEFAULT_MAX_CHANNELS); 73297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBatch(DEFAULT_MAX_BATCH); 74297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxApPerScan(DEFAULT_MAX_AP_PER_SCAN); 75297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 76297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 77297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 78297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void noRequest() { 79297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = Collections.emptyList(); 80297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 81297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 82297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 83297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 84297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals(60000, schedule.base_period_ms); 85297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 0); 86297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 87297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 88297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 89297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void singleRequest() { 90297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = Collections.singleton(createRequest( 91297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.WIFI_BAND_BOTH, 30000, 0, 20, 92297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 93297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills )); 94297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 95297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 96297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 97297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 98297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals(30000, schedule.base_period_ms); 99297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 1); 100297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 101297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, false, true); 102297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 103297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 104297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 105297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 106297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void singleRequestWithoutPredefinedBucket() { 107297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = Collections.singleton(createRequest( 108297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.WIFI_BAND_BOTH, 7500, 0, 20, 109297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT 110297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills )); 111297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 112297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 113297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 114297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 115297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 10000, schedule.base_period_ms); 116297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 1); 117297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 118297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, false, true); 119297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 120297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 121297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 122297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 123297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void fewRequests() { 124297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 125297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_BOTH, 30000, 0, 20, 126297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 127297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY, 14000, 0, 20, 128297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 129297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 130297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 131297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 132297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 133297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 10000, schedule.base_period_ms); 134297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 2); 135297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 136297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, false, true); 137297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 138297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 139297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 140297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 141297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void manyRequests() { 142297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 143297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_BOTH, 30000, 0, 20, 144297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 145297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY, 20000, 0, 20, 146297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 147297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY, 10000, 0, 20, 148297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 149297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 150297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 151297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 152297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 153297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 10000, schedule.base_period_ms); 154297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 2); 155297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 156297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, false, false); 157297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 158297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 159297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 160297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 161297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void requestsWithNoPeriodCommonDenominator() { 162297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ArrayList<ScanSettings> requests = new ArrayList<>(); 163297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_BOTH, 299999, 0, 20, 164297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 165297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY, 10500, 0, 20, 166297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 167297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 168297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 169297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 170297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 171297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 10000, schedule.base_period_ms); 172297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 2); 173297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 174297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, false, true); 175297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 176297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 177297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 178297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 179297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void manyRequestsDifferentReportScans() { 180297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 181297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5175), 30000, 0, 20, 182297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_BUFFER_FULL)); 183297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2400), 30000, 0, 20, 184297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 185297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2450), 30000, 0, 20, 186297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 187297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5150), 30000, 0, 20, 188297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_NO_BATCH)); 189297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 190297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 191297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 192297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 193297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 194297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 1); 195297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 196297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, false, true); 197297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 198297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 199297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 200297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 201297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void exceedMaxBatch() { 202297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 203297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5175), 30000, 10, 20, 204297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_BUFFER_FULL)); 205297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 206297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBatch(5); 207297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 208297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 209297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 210297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 211297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 1); 212297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 213297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, false, true); 214297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 215297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("maxScansToCache", 5, schedule.report_threshold_num_scans); 216297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 217297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 218297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 2191a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills public void defaultMaxBatch() { 2201a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 2211a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills requests.add(createRequest(channelsToSpec(5175), 30000, 0, 20, 2221a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_BUFFER_FULL)); 2231a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2241a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.setMaxBatch(6); 2251a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.updateSchedule(requests); 2261a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 2271a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2281a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 2291a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertBuckets(schedule, 1); 2301a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills for (ScanSettings request : requests) { 2311a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertSettingsSatisfied(schedule, request, false, true); 2321a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 2331a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("maxScansToCache", 6, schedule.report_threshold_num_scans); 2341a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 2351a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2361a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills @Test 2371a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills public void exceedMaxAps() { 2381a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 2391a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills requests.add(createRequest(channelsToSpec(5175), 30000, 10, 20, 2401a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 2411a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2421a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.setMaxApPerScan(5); 2431a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.updateSchedule(requests); 2441a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 2451a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2461a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("maxScansToCache", 5, schedule.max_ap_per_scan); 2471a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 2481a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2491a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills @Test 2501a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills public void defaultMaxAps() { 2511a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 2521a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills requests.add(createRequest(channelsToSpec(5175), 30000, 10, 0, 2531a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 2541a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2551a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.setMaxApPerScan(8); 2561a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.updateSchedule(requests); 2571a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 2581a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2591a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("maxApsPerScan", 8, schedule.max_ap_per_scan); 2601a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 2611a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 2621a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills @Test 263297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void optimalScheduleExceedsNumberOfAvailableBuckets() { 264297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ArrayList<ScanSettings> requests = new ArrayList<>(); 265297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2400), 30000, 0, 20, 266297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 267297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2450), 10000, 0, 20, 268297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 269297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5150), 60000, 0, 20, 270297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 271297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 272297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBuckets(2); 273297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 274297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 275297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 276297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 277297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 2); 278297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 279297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, true, true); 280297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 281297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 282297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 283297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 284297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void optimalScheduleExceedsNumberOfAvailableBuckets2() { 285297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ArrayList<ScanSettings> requests = new ArrayList<>(); 286297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2400), 30000, 0, 20, 287297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 288297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2450), 60000, 0, 20, 289297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 290297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5150), 3600000, 0, 20, 291297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 292297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 293297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBuckets(2); 294297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 295297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 296297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 297297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 298297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 2); 299297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 300297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, true, true); 301297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 302297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 303297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 304297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills /** 305297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * Ensure that a channel request is placed in the bucket closest to the original 306297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * period and not the bucket it is initially placed in. Here the 21 min period is 307297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * initially placed in the 15 min bucket, but that bucket is eliminated because it 308297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * would be a 7th bucket. This test ensures that the request is placed in the 30 min 309297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * bucket and not the 10 min bucket. 310297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills */ 311297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 312297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void optimalScheduleExceedsNumberOfAvailableBucketsClosestToOriginal() { 313297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ArrayList<ScanSettings> requests = new ArrayList<>(); 314297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2400), 60 * 1000, 0, 20, 315297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 316297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2450), 30 * 1000, 0, 20, 317297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 318297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5150), 300 * 1000, 0, 20, 319297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 320297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5175), 600 * 1000, 0, 20, 321297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 322297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5600), 10 * 1000, 0, 20, 323297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 324297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5650), 1800 * 1000, 0, 20, 325297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 326297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 327297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(5660), 1260 * 1000, 0, 20, // 21 min 328297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 329297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 330297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBuckets(6); 331297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 332297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 333297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 334297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 10000, schedule.base_period_ms); 335297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 6); 336297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 337297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, true, true); 338297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 339297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 340297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 341297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 3421a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills public void optimalScheduleExceedsMaxChannelsOnSingleBand() { 343297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ArrayList<ScanSettings> requests = new ArrayList<>(); 344297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2400, 2450), 30000, 0, 20, 345297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 346297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 347297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBuckets(2); 348297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxChannels(1); 349297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 350297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 351297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 352297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 353297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 1); 354297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 355297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, true, true); 356297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 357297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 358297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 359297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 3601a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills public void optimalScheduleExceedsMaxChannelsOnMultipleBands() { 361297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ArrayList<ScanSettings> requests = new ArrayList<>(); 362297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(createRequest(channelsToSpec(2400, 2450, 5150), 30000, 0, 20, 363297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 364297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 365297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxBuckets(2); 366297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.setMaxChannels(2); 367297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 368297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 369297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 370297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 371297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 1); 372297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ScanSettings request : requests) { 373297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertSettingsSatisfied(schedule, request, true, true); 374297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 375297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 376297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 377297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills @Test 3781a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills public void optimalScheduleExceedsMaxChannelsOnMultipleBandsFromMultipleRequests() { 3791a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills ArrayList<ScanSettings> requests = new ArrayList<>(); 3801a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills requests.add(createRequest(channelsToSpec(2400, 2450), 30000, 0, 20, 3811a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 3821a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills requests.add(createRequest(WifiScanner.WIFI_BAND_5_GHZ, 30000, 0, 20, 3831a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 3841a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 3851a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.setMaxBuckets(2); 3861a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.setMaxChannels(2); 3871a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills mScheduler.updateSchedule(requests); 3881a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 3891a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 3901a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("base_period_ms", 30000, schedule.base_period_ms); 3911a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertBuckets(schedule, 1); 3921a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills for (ScanSettings request : requests) { 3931a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertSettingsSatisfied(schedule, request, true, true); 3941a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 3951a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 3961a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 3971a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills @Test 398297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void exactRequests() { 399297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills scheduleAndTestExactRequest(createRequest(WifiScanner.WIFI_BAND_BOTH, 30000, 0, 400297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 20, WifiScanner.REPORT_EVENT_AFTER_BUFFER_FULL)); 401297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills scheduleAndTestExactRequest(createRequest(WifiScanner.WIFI_BAND_5_GHZ, 60000, 3, 402297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 13, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN)); 403297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills scheduleAndTestExactRequest(createRequest(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY, 10000, 2, 404297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 10, WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT)); 405297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills scheduleAndTestExactRequest(createRequest(WifiScanner.WIFI_BAND_BOTH, 25000, 0, 406297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 10, WifiScanner.REPORT_EVENT_NO_BATCH)); 407297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills scheduleAndTestExactRequest(createRequest(WifiScanner.WIFI_BAND_BOTH, 25000, 3, 408297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 0, WifiScanner.REPORT_EVENT_NO_BATCH)); 4091a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills scheduleAndTestExactRequest(createRequest(channelsToSpec(2400, 5175, 5650) , 25000, 3, 4101a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills 0, WifiScanner.REPORT_EVENT_NO_BATCH)); 411297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 412297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 413297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public void scheduleAndTestExactRequest(ScanSettings settings) { 414297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Collection<ScanSettings> requests = new ArrayList<>(); 415297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills requests.add(settings); 416297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 417297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills mScheduler.updateSchedule(requests); 418297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule = mScheduler.getSchedule(); 419297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 420297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("base_period_ms", computeExpectedPeriod(settings.periodInMs), 421297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills schedule.base_period_ms); 422297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertBuckets(schedule, 1); 423297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 424297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (settings.numBssidsPerScan == 0) { 425297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("bssids per scan", DEFAULT_MAX_AP_PER_SCAN, schedule.max_ap_per_scan); 426297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 427297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("bssids per scan", settings.numBssidsPerScan, schedule.max_ap_per_scan); 428297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 429297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (settings.maxScansToCache == 0) { 430297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("scans to cache", DEFAULT_MAX_BATCH, 431297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills schedule.report_threshold_num_scans); 432297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 433297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("scans to cache", settings.maxScansToCache, 434297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills schedule.report_threshold_num_scans); 435297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 436297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("reportEvents", settings.reportEvents, schedule.buckets[0].report_events); 437297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("period", computeExpectedPeriod(settings.periodInMs), 438297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills schedule.buckets[0].period_ms); 4391a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills if (settings.band == WifiScanner.WIFI_BAND_UNSPECIFIED) { 4401a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("band", settings.band, schedule.buckets[0].band); 4411a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills Set<Integer> expectedChannels = new HashSet<>(); 4421a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills for (ChannelSpec channel : getAllChannels(settings)) { 4431a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills expectedChannels.add(channel.frequency); 4441a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 4451a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills Set<Integer> actualChannels = new HashSet<>(); 4461a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills for (ChannelSpec channel : getAllChannels(schedule.buckets[0])) { 4471a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills actualChannels.add(channel.frequency); 4481a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills } 4491a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("channels", expectedChannels, actualChannels); 450297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 4511a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills else { 4521a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("band", settings.band, schedule.buckets[0].band); 4531a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertEquals("num_channels", 0, schedule.buckets[0].num_channels); 4541a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills assertTrue("channels", schedule.buckets[0].channels == null 4551a16020f8d611c94797884b212ee6a26817fad82Mitchell Wills || schedule.buckets[0].channels.length == 0); 456297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 457297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 458297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 459297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private void assertBuckets(WifiNative.ScanSettings schedule, int numBuckets) { 460297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("num_buckets", numBuckets, schedule.num_buckets); 461297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertNotNull("buckets was null", schedule.buckets); 462297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertEquals("num_buckets and actual buckets", schedule.num_buckets, 463297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills schedule.buckets.length); 464297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < numBuckets; i++) { 465297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertNotNull("bucket[" + i + "] was null", schedule.buckets[i]); 466297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (schedule.buckets[i].band == WifiScanner.WIFI_BAND_UNSPECIFIED) { 467297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertTrue("num channels <= 0", schedule.buckets[i].num_channels > 0); 468297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertTrue("bucket channels > max channels", 469297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills schedule.buckets[i].num_channels <= mScheduler.getMaxChannels()); 470297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertNotNull("Channels was null", schedule.buckets[i].channels); 471297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int c = 0; c < schedule.buckets[i].num_channels; c++) { 472297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertNotNull("Channel was null", schedule.buckets[i].channels[c]); 473297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 474297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 475297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills assertTrue("Invalid band: " + schedule.buckets[i].band, 47672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills schedule.buckets[i].band > WifiScanner.WIFI_BAND_UNSPECIFIED 47772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills && schedule.buckets[i].band <= WifiScanner.WIFI_BAND_BOTH_WITH_DFS); 478297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 479297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 480297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 481297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 482297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private static void assertSettingsSatisfied(WifiNative.ScanSettings schedule, 483297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ScanSettings settings, boolean bucketsLimited, boolean exactPeriod) { 48472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertTrue("bssids per scan: " + schedule.max_ap_per_scan + " /<= " 48572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills + settings.numBssidsPerScan, 48672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills schedule.max_ap_per_scan <= settings.numBssidsPerScan); 487297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 488297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (settings.maxScansToCache > 0) { 48972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertTrue("scans to cache: " + schedule.report_threshold_num_scans + " /<= " 49072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills + settings.maxScansToCache, 49172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills schedule.report_threshold_num_scans <= settings.maxScansToCache); 492297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 493297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 494297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills HashSet<Integer> channelSet = new HashSet<>(); 495297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ChannelSpec channel : getAllChannels(settings)) { 496297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills channelSet.add(channel.frequency); 497297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 498297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 499297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills StringBuilder ignoreString = new StringBuilder(); 500297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 501297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills HashSet<Integer> scheduleChannelSet = new HashSet<>(); 502297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int b = 0; b < schedule.num_buckets; b++) { 503297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills BucketSettings bucket = schedule.buckets[b]; 504297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if ((settings.reportEvents & WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN) != 0) { 505297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if ((bucket.report_events & WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN) == 0) { 506297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ignoreString 507297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(" ") 508297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(WifiChannelHelper.toString(getAllChannels(bucket))) 509297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("=after_each_scan:") 510297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(bucket.report_events & WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN) 511297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("!=") 512297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(settings.reportEvents & WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN); 513297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills continue; 514297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 515297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 516297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if ((settings.reportEvents & WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT) != 0) { 517297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if ((bucket.report_events & WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT) == 0) { 518297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ignoreString 519297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(" ") 520297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(WifiChannelHelper.toString(getAllChannels(bucket))) 521297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("=full_result:") 522297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(bucket.report_events & WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT) 523297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("!=") 524297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(settings.reportEvents & WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT); 525297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills continue; 526297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 527297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 528297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if ((settings.reportEvents & WifiScanner.REPORT_EVENT_NO_BATCH) == 0) { 529297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if ((bucket.report_events & WifiScanner.REPORT_EVENT_NO_BATCH) != 0) { 530297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ignoreString 531297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(" ") 532297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(WifiChannelHelper.toString(getAllChannels(bucket))) 533297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("=no_batch:") 534297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(bucket.report_events & WifiScanner.REPORT_EVENT_NO_BATCH) 535297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("!=") 536297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(settings.reportEvents & WifiScanner.REPORT_EVENT_NO_BATCH); 537297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills continue; 538297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 539297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 540297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int expectedPeriod; 541297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (bucketsLimited) { 542297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills expectedPeriod = computeExpectedPeriod(settings.periodInMs, schedule); 543297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 544297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills expectedPeriod = computeExpectedPeriod(settings.periodInMs); 545297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 546297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 547297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (exactPeriod) { 548297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (bucket.period_ms != expectedPeriod) { 549297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ignoreString 550297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(" ") 551297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(WifiChannelHelper.toString(getAllChannels(bucket))) 552297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("=period:") 553297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(bucket.period_ms) 554297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("!=") 555297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(settings.periodInMs); 556297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills continue; 557297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 558297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 559297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (bucket.period_ms > expectedPeriod) { 560297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ignoreString 561297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(" ") 562297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(WifiChannelHelper.toString(getAllChannels(bucket))) 563297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append("=period:") 564297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(bucket.period_ms) 565297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(">") 566297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .append(settings.periodInMs); 567297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills continue; 568297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 569297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 570297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (ChannelSpec channel : getAllChannels(bucket)) { 571297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills scheduleChannelSet.add(channel.frequency); 572297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 573297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 574297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 57572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertTrue("expected that " + scheduleChannelSet + " contained " + channelSet 57672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills + ", Channel ignore reasons:" + ignoreString.toString(), 57772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills scheduleChannelSet.containsAll(channelSet)); 578297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 579297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 580297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private static int[] getPredefinedBuckets() { 581297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills try { 582297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Field f = MultiClientScheduler.class.getDeclaredField("PREDEFINED_BUCKET_PERIODS"); 583297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills f.setAccessible(true); 584297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return (int[]) f.get(null); 585297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } catch (Exception e) { 586297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills throw new RuntimeException("Could not get predefined buckets", e); 587297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 588297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 589297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private static final int[] PREDEFINED_BUCKET_PERIODS = getPredefinedBuckets(); 590297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 591297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills // find closest bucket period to the requested period 592297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private static int computeExpectedPeriod(int requestedPeriod) { 593297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int period = 0; 594297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int minDiff = Integer.MAX_VALUE; 595297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int bucketPeriod : PREDEFINED_BUCKET_PERIODS) { 596297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int diff = Math.abs(bucketPeriod - requestedPeriod); 597297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (diff < minDiff) { 598297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills minDiff = diff; 599297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills period = bucketPeriod; 600297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 601297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 602297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return period; 603297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 604297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 605297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills // find closest bucket period to the requested period that exists in the schedule 606297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills private static int computeExpectedPeriod(int requestedPeriod, 607297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiNative.ScanSettings schedule) { 608297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int period = 0; 609297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int minDiff = Integer.MAX_VALUE; 610297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < schedule.num_buckets; ++i) { 611297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int bucketPeriod = schedule.buckets[i].period_ms; 612297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int diff = Math.abs(bucketPeriod - requestedPeriod); 613297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (diff < minDiff) { 614297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills minDiff = diff; 615297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills period = bucketPeriod; 616297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 617297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 618297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return period; 619297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 620297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills} 621