141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills/* 241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Copyright (C) 2015 The Android Open Source Project 341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * 441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Licensed under the Apache License, Version 2.0 (the "License"); 541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * you may not use this file except in compliance with the License. 641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * You may obtain a copy of the License at 741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * 841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * http://www.apache.org/licenses/LICENSE-2.0 941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * 1041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Unless required by applicable law or agreed to in writing, software 1141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * distributed under the License is distributed on an "AS IS" BASIS, 1241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * See the License for the specific language governing permissions and 14a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills * limitations under the License. 1541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 1641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 17a8367288377cbaed6371256ca837b7aa22280706Mitchell Willspackage com.android.server.wifi.scanner; 1841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 1941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport static com.android.server.wifi.ScanTestUtil.NativeScanSettingsBuilder; 2041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport static com.android.server.wifi.ScanTestUtil.assertScanDatasEquals; 2141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport static com.android.server.wifi.ScanTestUtil.createFreqSet; 2272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills 239d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Willsimport static org.junit.Assert.*; 249d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Willsimport static org.mockito.Mockito.*; 2572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills 2641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport android.net.wifi.ScanResult; 2741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport android.net.wifi.WifiScanner; 2841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport android.net.wifi.WifiSsid; 2941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport android.test.suitebuilder.annotation.SmallTest; 3041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 31a8367288377cbaed6371256ca837b7aa22280706Mitchell Willsimport com.android.server.wifi.ScanDetail; 32a8367288377cbaed6371256ca837b7aa22280706Mitchell Willsimport com.android.server.wifi.ScanResults; 33a8367288377cbaed6371256ca837b7aa22280706Mitchell Willsimport com.android.server.wifi.WifiMonitor; 34a8367288377cbaed6371256ca837b7aa22280706Mitchell Willsimport com.android.server.wifi.WifiNative; 35a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills 3641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport org.junit.Before; 3741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport org.junit.Test; 3841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport org.mockito.InOrder; 3941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport java.util.ArrayList; 41d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Piusimport java.util.HashSet; 4241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport java.util.Set; 4341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills/** 45a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills * Unit tests for {@link com.android.server.wifi.scanner.SupplicantWifiScannerImpl}. 4641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 4741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills@SmallTest 485fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Willspublic class SupplicantWifiScannerTest extends BaseWifiScannerImplTest { 4941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Before 517d2d8c27647676c51208e417afbb8dd6c6784b7cMitchell Wills public void setup() throws Exception { 527e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills mScanner = new SupplicantWifiScannerImpl(mContext, mWifiNative, 53ee0ab818341d44614ffe56ae73ecc08b974c2cbbRoshan Pius mLooper.getLooper(), mClock); 5441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 5541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 5741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanSuccessSingleBucket() { 5841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 5941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 6041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 6141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 6241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 6341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 6441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 6541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 6641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 6772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400), 687e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 6941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 7072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 2450), 717e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 7241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 7341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 7441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills doSuccessfulTest(settings, expectedPeriods); 7541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 7641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 7741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 7841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanMaxApExceeded() { 7941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 8041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 8141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(2) 8241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, 8372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN 8472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills | WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT, 8541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 8641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 8741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 8872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 8972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills new ScanPeriod(ScanPeriod.ReportType.FULL_AND_RESULT, 9072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.createOverflowing(0, 2, 9172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 1"), 9272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills "00:00:00:00:00:00", "", -70, 2450, Long.MAX_VALUE, 0), 9372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 2"), 9472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills "AA:BB:CC:DD:EE:FF", "", -66, 2400, Long.MAX_VALUE, 0), 9572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 3"), 9672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills "00:00:00:00:00:00", "", -80, 2450, Long.MAX_VALUE, 0), 9772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 4"), 9872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills "AA:BB:CC:11:22:33", "", -65, 2450, Long.MAX_VALUE, 0)), 997e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 10041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 10141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 10272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills doSuccessfulTest(settings, expectedPeriods); 10341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 10441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 10541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 10641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanSuccessWithFullScanResults() { 10741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 10841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 10941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 11041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, 11172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN 11272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills | WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT, 11341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 11441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 11541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 11641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 11741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.FULL_AND_RESULT, 11872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 2450, 2400, 2400), 1197e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 12041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.FULL_AND_RESULT, 12172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 2450, 2400, 2450, 2400), 1227e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 12341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 12441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 12541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills doSuccessfulTest(settings, expectedPeriods); 12641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 12741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 12841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 12941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanSuccessWithMixedFullResultsAndNot() { 13041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 13141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 13241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 13341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, 13441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 13541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 13641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(20000, 13772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN 13872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills | WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT, 13941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_5_GHZ) 14041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 14141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 14241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 14341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.FULL_AND_RESULT, 14472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 2450, 2400, 5175), 1457e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_BOTH)), 14641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 14772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 2450, 2400, 2450, 2400), 1487e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 14941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.FULL_AND_RESULT, 15072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(2, 2450, 2400, 2450, 5150), 1517e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_BOTH)) 15241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 15341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 15441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills doSuccessfulTest(settings, expectedPeriods); 15541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 15641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 15741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 15841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanNoBatch() { 15941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 16041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 16141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 16241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, 16341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.REPORT_EVENT_NO_BATCH, 16441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 16541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 16641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 16741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 16841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.NONE, 16972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 2400, 2400), 1707e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 17141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.NONE, 17272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 2400, 2400, 2450), 1737e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 17441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.NONE, 17572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(2, 2400, 2450, 2400), 1767e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 17741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 17841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 17941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills doSuccessfulTest(settings, expectedPeriods); 18041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 18141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 18241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 18341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanBatch() { 18441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 18541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 18641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 18741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxScansToCache(3) 18841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, 18941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.REPORT_EVENT_AFTER_BUFFER_FULL, 19041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 19141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 19241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 1932771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResults[] periodResults = new ScanResults[] { 1942771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResults.create(0, 2400, 2400, 2400), 1952771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResults.create(1, 2400, 2400, 2400, 2400), 1962771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResults.create(2, 2450), 1972771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResults.create(3, 2400, 2400), 1982771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResults.create(4, 2400, 2450), 1992771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResults.create(5, 2450) 2002771787818003e53e8175036a3d09688c783f350Mitchell Wills }; 2012771787818003e53e8175036a3d09688c783f350Mitchell Wills 20241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 20341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.NONE, 2042771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[0], 2057e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 20641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.NONE, 2072771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[1], 2087e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 20941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 21041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanResults[] { 2112771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[0], 2122771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[1], 2132771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[2] 21441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }, 2157e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 21641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.NONE, 2172771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[3], 2187e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 21941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.NONE, 2202771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[4], 2217e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 22241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 22341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanResults[] { 2242771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[3], 2252771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[4], 2262771787818003e53e8175036a3d09688c783f350Mitchell Wills periodResults[5] 22741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }, 2287e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 22941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 23041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 23141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills doSuccessfulTest(settings, expectedPeriods); 23241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 23341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 23441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 23541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanSuccessWithMultipleBuckets() { 23641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 23741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 23841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 23941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 24041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 24141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(30000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 24241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_BOTH) 24341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithChannels(20000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 24441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5650) 24541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 24641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 24741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 24841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 24972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 5175), 2507e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandAndChannelScanFreqs(WifiScanner.WIFI_BAND_BOTH, 5650)), 25141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 25272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 2400), 2537e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 25441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 25572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(2, 2450, 5650), 2567e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandAndChannelScanFreqs(WifiScanner.WIFI_BAND_24_GHZ, 5650)), 25741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 25872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(3, 2450, 5175), 2597e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_BOTH)), 26041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 26172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(4, new int[0]), 2627e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandAndChannelScanFreqs(WifiScanner.WIFI_BAND_24_GHZ, 5650)), 26341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 26472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(5, 2400, 2400, 2400, 2450), 2657e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 26641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 26772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(6, 5150, 5650, 5650), 2687e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandAndChannelScanFreqs(WifiScanner.WIFI_BAND_BOTH, 5650)) 26941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 27041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 27141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills doSuccessfulTest(settings, expectedPeriods); 27241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 27341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 27441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 27541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanSuccessWithMultipleBucketsWhereAPeriodDoesNotRequireAScan() { 27641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 27741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 27841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 27941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(30000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 28041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_BOTH) 28141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithChannels(20000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 28241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5650) 28341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 28441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 28541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // expected scan frequencies 28641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 28741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 28872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 5175), 2897e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandAndChannelScanFreqs(WifiScanner.WIFI_BAND_BOTH, 5650)), 29041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills null, 29141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 29272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 5650), 29372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills createFreqSet(5650)), 29441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 29572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(2, 2450, 5175), 2967e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_BOTH)), 29741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 29872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(3, 5650, 5650, 5650), 29972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills createFreqSet(5650)), 30041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills null, 30141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 30272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(4, 2400, 2400, 2400, 2450), 3037e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandAndChannelScanFreqs(WifiScanner.WIFI_BAND_BOTH, 5650)) 30441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 30541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 30641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills doSuccessfulTest(settings, expectedPeriods); 30741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 30841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 30941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 31041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanStartFailed() { 31141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 31241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 31341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 31441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 31541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 31641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 31741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 31841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 31972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills InOrder order = inOrder(eventHandler, mWifiNative); 32041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 32141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // All scans fail 3223d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius when(mWifiNative.scan(any(Set.class), any(Set.class))).thenReturn(false); 32341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 32441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Start scan 32572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.startBatchedScan(settings, eventHandler); 32641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3279d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 32841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3297e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectFailedScanStart(order, eventHandler, 330d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ), new HashSet<Integer>()); 33141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 33241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Fire alarm to start next scan 3339d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills dispatchBackgroundPeriodAlarm(); 33441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3359d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 33641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3377e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectFailedScanStart(order, eventHandler, 338d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ), new HashSet<Integer>()); 33941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 34041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills verifyNoMoreInteractions(eventHandler); 34141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 34241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 34341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 34441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 34541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void backgroundScanEventFailed() { 34641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 34741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 34841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 34941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 35041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 35141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 35241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 35341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 35472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills InOrder order = inOrder(eventHandler, mWifiNative); 35541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 35641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // All scan starts succeed 3573d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius when(mWifiNative.scan(any(Set.class), any(Set.class))).thenReturn(true); 35841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 35941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Start scan 36072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.startBatchedScan(settings, eventHandler); 36141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3629d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 36341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3647e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectFailedEventScan(order, eventHandler, 365d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ), new HashSet<Integer>()); 36641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 36741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Fire alarm to start next scan 3689d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills dispatchBackgroundPeriodAlarm(); 36941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3709d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 37141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 3727e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectFailedEventScan(order, eventHandler, 373d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ), new HashSet<Integer>()); 37441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 37541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills verifyNoMoreInteractions(eventHandler); 37641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 37741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 37841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills /** 37941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Run a scan and then pause after the first scan completes, but before the next one starts 38041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Then resume the scan 38141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 38241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 38341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void pauseWhileWaitingToStartNextScanAndResumeScan() { 38441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 38541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 38641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 38741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 38841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 38941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 39041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 39141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 39241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 39341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 39472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 2450, 2450), 3957e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 39641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 39772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 2400), 3987e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 39941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 40041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 40172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills InOrder order = inOrder(eventHandler, mWifiNative); 40241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 40341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // All scan starts succeed 4043d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius when(mWifiNative.scan(any(Set.class), any(Set.class))).thenReturn(true); 40541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 40641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Start scan 40772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.startBatchedScan(settings, eventHandler); 40841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4099d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 41041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4112771787818003e53e8175036a3d09688c783f350Mitchell Wills expectSuccessfulBackgroundScan(order, eventHandler, expectedPeriods[0], 0); 41241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4139d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 41441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 41572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.pauseBatchedScan(); 41641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 41741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // onPause callback (previous results were flushed) 41841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills order.verify(eventHandler).onScanPaused(new WifiScanner.ScanData[0]); 41941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4209d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmNotPending(); 42141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 42272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.restartBatchedScan(); 42341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 42441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // onRestarted callback 42541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills order.verify(eventHandler).onScanRestarted(); 42641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4272771787818003e53e8175036a3d09688c783f350Mitchell Wills expectSuccessfulBackgroundScan(order, eventHandler, expectedPeriods[1], 1); 42841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 42941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills verifyNoMoreInteractions(eventHandler); 43041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 43141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 43241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills /** 43341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Run a scan and then pause while the first scan is running 43441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Then resume the scan 43541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 43641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 43741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void pauseWhileScanningAndResumeScan() { 43841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 43941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 44041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 44141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 44241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 44341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 44441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 44541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 44641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 44741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 44872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 2450, 2450), 4497e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)), 45041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 45172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 2400), 4527e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 45341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 45441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 45572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills InOrder order = inOrder(eventHandler, mWifiNative); 45641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 45741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // All scan starts succeed 4583d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius when(mWifiNative.scan(any(Set.class), any(Set.class))).thenReturn(true); 45941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 46041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Start scan 46172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.startBatchedScan(settings, eventHandler); 46241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4639d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 46441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4653d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius order.verify(mWifiNative).scan(eq(expectedPeriods[0].getScanFreqs()), any(Set.class)); 46641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 46772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.pauseBatchedScan(); 46841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 46941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // onPause callback (no pending results) 47041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills order.verify(eventHandler).onScanPaused(new WifiScanner.ScanData[0]); 47141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4729d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmNotPending(); 47341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 47441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Setup scan results 47572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills when(mWifiNative.getScanResults()).thenReturn(expectedPeriods[0] 47672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills .getResultsToBeDelivered()[0].getScanDetailArrayList()); 47741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 47841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Notify scan has finished 47972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mWifiMonitor.sendMessage(mWifiNative.getInterfaceName(), WifiMonitor.SCAN_RESULTS_EVENT); 48072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals("dispatch message after results event", 1, mLooper.dispatchAll()); 48141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 48241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // listener should not be notified 48341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 48472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.restartBatchedScan(); 48541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 48641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // onRestarted callback 48741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills order.verify(eventHandler).onScanRestarted(); 48841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 4892771787818003e53e8175036a3d09688c783f350Mitchell Wills expectSuccessfulBackgroundScan(order, eventHandler, expectedPeriods[1], 1); 49041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 49141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills verifyNoMoreInteractions(eventHandler); 49241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 49341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 49441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 49541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills /** 49641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Run a scan and then pause after the first scan completes, but before the next one starts 49741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Then schedule a new scan while still paused 49841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 49941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills @Test 50041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public void pauseWhileWaitingToStartNextScanAndStartNewScan() { 50141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 50241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() 50341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 50441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 50541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 50641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_24_GHZ) 50741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 50841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 50941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanSettings settings2 = new NativeScanSettingsBuilder() 51041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withBasePeriod(10000) 51141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .withMaxApPerScan(10) 51241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .addBucketWithBand(10000, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN, 51341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.WIFI_BAND_5_GHZ) 51441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills .build(); 51541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 51641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods = new ScanPeriod[] { 51741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 51872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(0, 2400, 2450, 2450), 5197e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ)) 52041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 52141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 52241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod[] expectedPeriods2 = new ScanPeriod[] { 52341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new ScanPeriod(ScanPeriod.ReportType.RESULT, 52472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResults.create(1, 5150, 5175, 5175), 5257e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills expectedBandScanFreqs(WifiScanner.WIFI_BAND_5_GHZ)), 52641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 52741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 52872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills InOrder order = inOrder(eventHandler, mWifiNative); 52941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 53041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // All scan starts succeed 5313d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius when(mWifiNative.scan(any(Set.class), any(Set.class))).thenReturn(true); 53241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 53341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Start scan 53472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.startBatchedScan(settings, eventHandler); 53541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5369d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 53741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5382771787818003e53e8175036a3d09688c783f350Mitchell Wills expectSuccessfulBackgroundScan(order, eventHandler, expectedPeriods[0], 0); 53941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5409d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 54141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 54272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.pauseBatchedScan(); 54341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 54441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // onPause callback (previous results were flushed) 54541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills order.verify(eventHandler).onScanPaused(new WifiScanner.ScanData[0]); 54641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5479d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmNotPending(); 54841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 54941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Start new scan 55072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.startBatchedScan(settings2, eventHandler); 55141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 5522771787818003e53e8175036a3d09688c783f350Mitchell Wills expectSuccessfulBackgroundScan(order, eventHandler, expectedPeriods2[0], 0); 55341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 55441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills verifyNoMoreInteractions(eventHandler); 55541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 55641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 55741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills /** 55841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Run a test with the given settings where all native scans succeed 55941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * This will execute expectedPeriods.length scan periods by first 56041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * starting the scan settings and then dispatching the scan period alarm to start the 56141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * next scan. 56241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 56341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private void doSuccessfulTest(WifiNative.ScanSettings settings, ScanPeriod[] expectedPeriods) { 56441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 56541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 56672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills InOrder order = inOrder(eventHandler, mWifiNative); 56741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 56841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // All scans succeed 5693d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius when(mWifiNative.scan(any(Set.class), any(Set.class))).thenReturn(true); 57041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 57141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Start scan 57272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mScanner.startBatchedScan(settings, eventHandler); 57341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 57441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int i = 0; i < expectedPeriods.length; ++i) { 57541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanPeriod period = expectedPeriods[i]; 5769d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertBackgroundPeriodAlarmPending(); 5779d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills if (period != null) { // scan should be scheduled 5782771787818003e53e8175036a3d09688c783f350Mitchell Wills expectSuccessfulBackgroundScan(order, eventHandler, expectedPeriods[i], i); 57941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 58041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills if (i < expectedPeriods.length - 1) { 5819d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills dispatchBackgroundPeriodAlarm(); 58241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 58341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 58441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 58541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills verifyNoMoreInteractions(eventHandler); 58641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 58741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 58841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills /** 58941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Verify the state after a scan was started either through startBatchedScan or 59041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * dispatching the period alarm. 59141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 5925fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills private void expectSuccessfulBackgroundScan(InOrder order, 5932771787818003e53e8175036a3d09688c783f350Mitchell Wills WifiNative.ScanEventHandler eventHandler, ScanPeriod period, int periodId) { 59441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiScanner.ScanData[] scanDatas = null; 59541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ArrayList<ScanDetail> nativeResults = null; 59641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanResult[] fullResults = null; 59741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills if (period.getResultsToBeDelivered() != null) { 59841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills ScanResults lastPeriodResults = period.getResultsToBeDelivered() 59941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills [period.getResultsToBeDelivered().length - 1]; 60041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills nativeResults = lastPeriodResults.getScanDetailArrayList(); 60141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills if (period.expectResults()) { 60241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills scanDatas = 60341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills new WifiScanner.ScanData[period.getResultsToBeDelivered().length]; 60441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int j = 0; j < scanDatas.length; ++j) { 60541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills scanDatas[j] = period.getResultsToBeDelivered()[j].getScanData(); 60641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 60741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 60841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills if (period.expectFullResults()) { 60941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills fullResults = lastPeriodResults.getRawScanResults(); 61041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 61141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 6125fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills expectSuccessfulBackgroundScan(order, eventHandler, period.getScanFreqs(), 613d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius new HashSet<Integer>(), nativeResults, scanDatas, fullResults, periodId); 61441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 61541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 61641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills /** 61741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * Verify the state after a scan was started either through startBatchedScan or 61841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills * dispatching the period alarm. 61941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills */ 6205fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills private void expectSuccessfulBackgroundScan(InOrder order, 6215fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills WifiNative.ScanEventHandler eventHandler, Set<Integer> scanFreqs, 622d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius Set<Integer> networkIds, ArrayList<ScanDetail> nativeResults, 623d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius WifiScanner.ScanData[] expectedScanResults, 6242771787818003e53e8175036a3d09688c783f350Mitchell Wills ScanResult[] fullResults, int periodId) { 62541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Verify scan started 626d74ff28cdb01d3f711e0b0f0e99e51fdb221eaf2Roshan Pius order.verify(mWifiNative).scan(eq(scanFreqs), eq(networkIds)); 62741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 62841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Setup scan results 62972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills when(mWifiNative.getScanResults()).thenReturn(nativeResults); 63041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 63141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Notify scan has finished 63272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mWifiMonitor.sendMessage(mWifiNative.getInterfaceName(), WifiMonitor.SCAN_RESULTS_EVENT); 63372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals("dispatch message after results event", 1, mLooper.dispatchAll()); 63441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 63541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills if (fullResults != null) { 63641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (ScanResult result : fullResults) { 637c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills order.verify(eventHandler).onFullScanResult(eq(result), eq(0)); 63841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 63941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 64041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 64141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills if (expectedScanResults != null) { 64241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Verify scan results delivered 64363539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills order.verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE); 6442771787818003e53e8175036a3d09688c783f350Mitchell Wills assertScanDatasEquals("period[" + periodId + "].", expectedScanResults, 6452771787818003e53e8175036a3d09688c783f350Mitchell Wills mScanner.getLatestBatchedScanResults(true)); 64641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 64741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 64841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 64941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private void expectFailedScanStart(InOrder order, WifiNative.ScanEventHandler eventHandler, 6503d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius Set<Integer> scanFreqs, Set<Integer> networkIds) { 65141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Verify scan started 6523d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius order.verify(mWifiNative).scan(eq(scanFreqs), eq(networkIds)); 65363539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 65463539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills // TODO: verify failure event 65541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 65641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 65741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private void expectFailedEventScan(InOrder order, WifiNative.ScanEventHandler eventHandler, 6583d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius Set<Integer> scanFreqs, Set<Integer> networkIds) { 65941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Verify scan started 6603d995b8a3a508e957e3dac2e508956020cd9abfeRoshan Pius order.verify(mWifiNative).scan(eq(scanFreqs), eq(networkIds)); 66141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 66241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills // Notify scan has failed 66372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mWifiMonitor.sendMessage(mWifiNative.getInterfaceName(), WifiMonitor.SCAN_FAILED_EVENT); 66472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals("dispatch message after results event", 1, mLooper.dispatchAll()); 66563539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 66663539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills // TODO: verify failure event 66741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 66841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 6699d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills private void assertBackgroundPeriodAlarmPending() { 6709d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertTrue("background period alarm not pending", 6719d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills mAlarmManager.isPending(SupplicantWifiScannerImpl.BACKGROUND_PERIOD_ALARM_TAG)); 6729d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills } 6739d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills 6749d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills private void assertBackgroundPeriodAlarmNotPending() { 6759d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertFalse("background period alarm is pending", 6769d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills mAlarmManager.isPending(SupplicantWifiScannerImpl.BACKGROUND_PERIOD_ALARM_TAG)); 6779d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills } 6789d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills 6799d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills private void dispatchBackgroundPeriodAlarm() { 6809d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills assertTrue("dispatch background period alarm", 6819d0c558cab7c80a572a32ae70d501df15367fd5fMitchell Wills mAlarmManager.dispatch(SupplicantWifiScannerImpl.BACKGROUND_PERIOD_ALARM_TAG)); 68263539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills mLooper.dispatchAll(); 68341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 68441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 68541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private static class ScanPeriod { 68641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills enum ReportType { 68741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills NONE(false, false), 68841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills RESULT(true, false), 68941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills FULL_AND_RESULT(true, true), 69041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills FULL(false, true); 69141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 69241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public final boolean result; 69341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public final boolean full; 69441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private ReportType(boolean result, boolean full) { 69541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills this.result = result; 69641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills this.full = full; 69741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 69841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills }; 69941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private final ReportType mReportType; 70041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private final ScanResults[] mDeliveredResults; 70141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills private final Set<Integer> mRequestedFreqs; 70241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 70372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills public ScanPeriod(ReportType reportType, ScanResults deliveredResult, 70472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills Set<Integer> requestedFreqs) { 70572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills this(reportType, new ScanResults[] {deliveredResult}, requestedFreqs); 70672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills } 70772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills 70872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills public ScanPeriod(ReportType reportType, ScanResults[] deliveredResults, 70972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills Set<Integer> requestedFreqs) { 71041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills mReportType = reportType; 71141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills mDeliveredResults = deliveredResults; 71272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mRequestedFreqs = requestedFreqs; 71341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 71441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 71541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public boolean expectResults() { 71641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return mReportType.result; 71741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 71841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public boolean expectFullResults() { 71941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return mReportType.full; 72041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 72141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public final ScanResults[] getResultsToBeDelivered() { 72241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return mDeliveredResults; 72341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 72441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public Set<Integer> getScanFreqs() { 72541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return mRequestedFreqs; 72641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 72741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 72841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills} 729