ScanTestUtil.java revision 2771787818003e53e8175036a3d09688c783f350
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 1972c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertEquals; 2072c639e8b97067e948eca8be50dfea3173121090Mitchell Willsimport static org.junit.Assert.assertNotNull; 21297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport static org.mockito.Mockito.when; 22297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 23297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.ScanResult; 24297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner; 25297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner.ChannelSpec; 26297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner.ScanData; 27297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiScanner.ScanSettings; 28297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport android.net.wifi.WifiSsid; 29297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 30297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport com.android.server.wifi.WifiNative.BucketSettings; 31297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 32297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsimport java.lang.reflect.Field; 3341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport java.util.Arrays; 3441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport java.util.HashSet; 3541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Willsimport java.util.Set; 36297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 37297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills/** 38297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills * Utilities for testing Wifi Scanning 39297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills */ 40297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willspublic class ScanTestUtil { 41297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 42297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static void installWlanWifiNative(WifiNative wifiNative) throws Exception { 43297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Field field = WifiNative.class.getDeclaredField("wlanNativeInterface"); 44297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills field.setAccessible(true); 45297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills field.set(null, wifiNative); 46297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 47297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills // Clear static state 48297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiChannelHelper.clearChannelCache(); 49297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 50297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 51297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static void setupMockChannels(WifiNative wifiNative, int[] channels24, int[] channels5, 52297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int[] channelsDfs) throws Exception { 53297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills when(wifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_24_GHZ)) 54297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .thenReturn(channels24); 55297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills when(wifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ)) 56297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .thenReturn(channels5); 57297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills when(wifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY)) 58297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills .thenReturn(channelsDfs); 59297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 60297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 61297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanSettings createRequest(WifiScanner.ChannelSpec[] channels, int period, 62297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int batch, int bssidsPerScan, int reportEvents) { 63297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ScanSettings request = new ScanSettings(); 64297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.band = WifiScanner.WIFI_BAND_UNSPECIFIED; 65297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.channels = channels; 66297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.periodInMs = period; 67297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.numBssidsPerScan = bssidsPerScan; 68297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.maxScansToCache = batch; 69297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.reportEvents = reportEvents; 70297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return request; 71297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 72297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 73297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanSettings createRequest(int band, int period, int batch, int bssidsPerScan, 74297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int reportEvents) { 75297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ScanSettings request = new ScanSettings(); 76297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.band = band; 77297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.channels = null; 78297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.periodInMs = period; 79297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.numBssidsPerScan = bssidsPerScan; 80297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.maxScansToCache = batch; 81297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills request.reportEvents = reportEvents; 82297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return request; 83297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 84297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 8572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills /** 86f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan * Create an exponential back off scan request if maxPeriod != period && maxPeriod != 0. 87f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan */ 88f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan public static ScanSettings createRequest(int band, int period, int maxPeriod, int stepCount, 89f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan int batch, int bssidsPerScan, int reportEvents) { 90f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan ScanSettings request = new ScanSettings(); 91f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.band = band; 92f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.channels = null; 93f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.periodInMs = period; 94f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.maxPeriodInMs = maxPeriod; 95f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.stepCount = stepCount; 96f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.numBssidsPerScan = bssidsPerScan; 97f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.maxScansToCache = batch; 98f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan request.reportEvents = reportEvents; 99f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan return request; 100f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan } 101f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan 102f935e529bdcc150dc57641f5f2ab10cd69f2e3e9Randy Pan /** 10372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills * Builder to create WifiNative.ScanSettings objects for testing 10472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills */ 10541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public static class NativeScanSettingsBuilder { 10672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills private final WifiNative.ScanSettings mSettings = new WifiNative.ScanSettings(); 10741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder() { 10872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.buckets = new WifiNative.BucketSettings[0]; 10972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.num_buckets = 0; 11072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.report_threshold_percent = 100; 11141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 11241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 11341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder withBasePeriod(int basePeriod) { 11472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.base_period_ms = basePeriod; 11541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 11641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 11741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder withMaxApPerScan(int maxAp) { 11872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.max_ap_per_scan = maxAp; 11941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 12041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 12141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder withMaxScansToCache(int maxScans) { 12272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.report_threshold_num_scans = maxScans; 12341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 12441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 12541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 12641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder addBucketWithBand( 12772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills int period, int reportEvents, int band) { 12841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.BucketSettings bucket = new WifiNative.BucketSettings(); 12972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.bucket = mSettings.num_buckets; 13041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.band = band; 13141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.period_ms = period; 13272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.report_events = reportEvents; 13341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return addBucket(bucket); 13441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 13541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 13641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder addBucketWithChannels( 13772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills int period, int reportEvents, int... channels) { 13841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.BucketSettings bucket = new WifiNative.BucketSettings(); 13972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.bucket = mSettings.num_buckets; 14041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.band = WifiScanner.WIFI_BAND_UNSPECIFIED; 14141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.num_channels = channels.length; 14241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.channels = new WifiNative.ChannelSettings[channels.length]; 14341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int i = 0; i < channels.length; ++i) { 14441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.channels[i] = new WifiNative.ChannelSettings(); 14541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.channels[i].frequency = channels[i]; 14641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 14741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.period_ms = period; 14872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.report_events = reportEvents; 14941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return addBucket(bucket); 15041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 15141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 15241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder addBucket(WifiNative.BucketSettings bucket) { 15372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.buckets = Arrays.copyOf(mSettings.buckets, mSettings.num_buckets + 1); 15472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.buckets[mSettings.num_buckets] = bucket; 15572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.num_buckets = mSettings.num_buckets + 1; 15641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 15741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 15841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 15941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public WifiNative.ScanSettings build() { 16072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills return mSettings; 16141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 16241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 16341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 16441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public static Set<Integer> createFreqSet(int... elements) { 16541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills Set<Integer> set = new HashSet<>(); 16641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int e : elements) { 16741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills set.add(e); 16841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 16941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return set; 17041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 17141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 172297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanResult createScanResult(int freq) { 173297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return new ScanResult(WifiSsid.createFromAsciiEncoded("AN SSID"), "00:00:00:00:00:00", "", 174297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 0, freq, 0); 175297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 176297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 177297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanData createScanData(int... freqs) { 178297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ScanResult[] results = new ScanResult[freqs.length]; 179297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < freqs.length; ++i) { 180297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills results[i] = createScanResult(freqs[i]); 181297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 182297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return new ScanData(0, 0, results); 183297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 184297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 185297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanData[] createScanDatas(int[][] freqs) { 186297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ScanData[] data = new ScanData[freqs.length]; 187297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < freqs.length; ++i) { 188297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills data[i] = createScanData(freqs[i]); 189297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 190297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return data; 191297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 192297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 19372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills private static void assertScanDataEquals(String prefix, ScanData expected, ScanData actual) { 1945fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills assertNotNull(prefix + "expected ScanData was null", expected); 1955fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills assertNotNull(prefix + "actual ScanData was null", actual); 19672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "id", expected.getId(), actual.getId()); 19772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "flags", expected.getFlags(), actual.getFlags()); 19872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results.length", 19972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expected.getResults().length, actual.getResults().length); 20072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills for (int j = 0; j < expected.getResults().length; ++j) { 20172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResult expectedResult = expected.getResults()[j]; 20272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResult actualResult = actual.getResults()[j]; 20372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].SSID", 20472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.SSID, actualResult.SSID); 20572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].wifiSsid", 20672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.wifiSsid.toString(), actualResult.wifiSsid.toString()); 20772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].BSSID", 20872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.BSSID, actualResult.BSSID); 20972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].capabilities", 21072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.capabilities, actualResult.capabilities); 21172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].level", 21272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.level, actualResult.level); 21372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].frequency", 21472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.frequency, actualResult.frequency); 21572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].timestamp", 21672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.timestamp, actualResult.timestamp); 21772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].seen", 21872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.seen, actualResult.seen); 21972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills } 22072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills } 2215fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills 22272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills public static void assertScanDataEquals(ScanData expected, ScanData actual) { 22372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertScanDataEquals("", expected, actual); 22472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills } 22572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills 2262771787818003e53e8175036a3d09688c783f350Mitchell Wills public static void assertScanDatasEquals(String prefix, ScanData[] expected, ScanData[] actual) { 2272771787818003e53e8175036a3d09688c783f350Mitchell Wills assertNotNull("expected " + prefix + "ScanData[] was null", expected); 2282771787818003e53e8175036a3d09688c783f350Mitchell Wills assertNotNull("actaul " + prefix + "ScanData[] was null", actual); 2292771787818003e53e8175036a3d09688c783f350Mitchell Wills assertEquals(prefix + "ScanData.length", expected.length, actual.length); 23041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int i = 0; i < expected.length; ++i) { 2312771787818003e53e8175036a3d09688c783f350Mitchell Wills assertScanDataEquals(prefix + "ScanData[" + i + "].", expected[i], actual[i]); 23241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 23341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 23441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 2352771787818003e53e8175036a3d09688c783f350Mitchell Wills public static void assertScanDatasEquals(ScanData[] expected, ScanData[] actual) { 2362771787818003e53e8175036a3d09688c783f350Mitchell Wills assertScanDatasEquals("", expected, actual); 2372771787818003e53e8175036a3d09688c783f350Mitchell Wills } 2382771787818003e53e8175036a3d09688c783f350Mitchell Wills 239297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static WifiScanner.ChannelSpec[] channelsToSpec(int... channels) { 240297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.ChannelSpec[] channelSpecs = new WifiScanner.ChannelSpec[channels.length]; 241297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < channels.length; ++i) { 242297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills channelSpecs[i] = new WifiScanner.ChannelSpec(channels[i]); 243297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 244297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return channelSpecs; 245297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 246297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 247297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ChannelSpec[] getAllChannels(BucketSettings bucket) { 248297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (bucket.band == WifiScanner.WIFI_BAND_UNSPECIFIED) { 249297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ChannelSpec[] channels = new ChannelSpec[bucket.num_channels]; 250297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < bucket.num_channels; i++) { 251297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills channels[i] = new ChannelSpec(bucket.channels[i].frequency); 252297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 253297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return channels; 254297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 255297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return WifiChannelHelper.getChannelsForBand(bucket.band); 256297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 257297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 258297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ChannelSpec[] getAllChannels(ScanSettings settings) { 259297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (settings.band == WifiScanner.WIFI_BAND_UNSPECIFIED) { 260297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ChannelSpec[] channels = new ChannelSpec[settings.channels.length]; 261297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < settings.channels.length; i++) { 262297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills channels[i] = new ChannelSpec(settings.channels[i].frequency); 263297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 264297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return channels; 265297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 266297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return WifiChannelHelper.getChannelsForBand(settings.band); 267297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 268297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 269297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills} 270