ScanTestUtil.java revision 5fa6221c4e507cbc596b6de77d793ec08d690157
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 /** 8672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills * Builder to create WifiNative.ScanSettings objects for testing 8772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills */ 8841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public static class NativeScanSettingsBuilder { 8972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills private final WifiNative.ScanSettings mSettings = new WifiNative.ScanSettings(); 9041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder() { 9172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.buckets = new WifiNative.BucketSettings[0]; 9272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.num_buckets = 0; 9372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.report_threshold_percent = 100; 9441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 9541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 9641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder withBasePeriod(int basePeriod) { 9772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.base_period_ms = basePeriod; 9841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 9941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 10041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder withMaxApPerScan(int maxAp) { 10172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.max_ap_per_scan = maxAp; 10241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 10341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 10441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder withMaxScansToCache(int maxScans) { 10572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.report_threshold_num_scans = maxScans; 10641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 10741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 10841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 10941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder addBucketWithBand( 11072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills int period, int reportEvents, int band) { 11141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.BucketSettings bucket = new WifiNative.BucketSettings(); 11272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.bucket = mSettings.num_buckets; 11341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.band = band; 11441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.period_ms = period; 11572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.report_events = reportEvents; 11641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return addBucket(bucket); 11741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 11841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 11941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder addBucketWithChannels( 12072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills int period, int reportEvents, int... channels) { 12141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills WifiNative.BucketSettings bucket = new WifiNative.BucketSettings(); 12272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.bucket = mSettings.num_buckets; 12341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.band = WifiScanner.WIFI_BAND_UNSPECIFIED; 12441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.num_channels = channels.length; 12541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.channels = new WifiNative.ChannelSettings[channels.length]; 12641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int i = 0; i < channels.length; ++i) { 12741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.channels[i] = new WifiNative.ChannelSettings(); 12841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.channels[i].frequency = channels[i]; 12941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 13041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills bucket.period_ms = period; 13172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills bucket.report_events = reportEvents; 13241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return addBucket(bucket); 13341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 13441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 13541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public NativeScanSettingsBuilder addBucket(WifiNative.BucketSettings bucket) { 13672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.buckets = Arrays.copyOf(mSettings.buckets, mSettings.num_buckets + 1); 13772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.buckets[mSettings.num_buckets] = bucket; 13872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills mSettings.num_buckets = mSettings.num_buckets + 1; 13941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return this; 14041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 14141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 14241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public WifiNative.ScanSettings build() { 14372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills return mSettings; 14441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 14541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 14641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 14741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public static Set<Integer> createFreqSet(int... elements) { 14841e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills Set<Integer> set = new HashSet<>(); 14941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int e : elements) { 15041e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills set.add(e); 15141e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 15241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills return set; 15341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 15441e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 155297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanResult createScanResult(int freq) { 156297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return new ScanResult(WifiSsid.createFromAsciiEncoded("AN SSID"), "00:00:00:00:00:00", "", 157297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 0, freq, 0); 158297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 159297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 160297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanData createScanData(int... freqs) { 161297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ScanResult[] results = new ScanResult[freqs.length]; 162297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < freqs.length; ++i) { 163297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills results[i] = createScanResult(freqs[i]); 164297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 165297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return new ScanData(0, 0, results); 166297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 167297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 168297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ScanData[] createScanDatas(int[][] freqs) { 169297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ScanData[] data = new ScanData[freqs.length]; 170297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < freqs.length; ++i) { 171297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills data[i] = createScanData(freqs[i]); 172297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 173297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return data; 174297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 175297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 17672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills private static void assertScanDataEquals(String prefix, ScanData expected, ScanData actual) { 1775fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills assertNotNull(prefix + "expected ScanData was null", expected); 1785fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills assertNotNull(prefix + "actual ScanData was null", actual); 17972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "id", expected.getId(), actual.getId()); 18072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "flags", expected.getFlags(), actual.getFlags()); 18172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results.length", 18272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expected.getResults().length, actual.getResults().length); 18372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills for (int j = 0; j < expected.getResults().length; ++j) { 18472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResult expectedResult = expected.getResults()[j]; 18572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills ScanResult actualResult = actual.getResults()[j]; 18672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].SSID", 18772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.SSID, actualResult.SSID); 18872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].wifiSsid", 18972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.wifiSsid.toString(), actualResult.wifiSsid.toString()); 19072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].BSSID", 19172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.BSSID, actualResult.BSSID); 19272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].capabilities", 19372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.capabilities, actualResult.capabilities); 19472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].level", 19572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.level, actualResult.level); 19672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].frequency", 19772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.frequency, actualResult.frequency); 19872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].timestamp", 19972c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.timestamp, actualResult.timestamp); 20072c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertEquals(prefix + "results[" + j + "].seen", 20172c639e8b97067e948eca8be50dfea3173121090Mitchell Wills expectedResult.seen, actualResult.seen); 20272c639e8b97067e948eca8be50dfea3173121090Mitchell Wills } 20372c639e8b97067e948eca8be50dfea3173121090Mitchell Wills } 2045fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills 20572c639e8b97067e948eca8be50dfea3173121090Mitchell Wills public static void assertScanDataEquals(ScanData expected, ScanData actual) { 20672c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertScanDataEquals("", expected, actual); 20772c639e8b97067e948eca8be50dfea3173121090Mitchell Wills } 20872c639e8b97067e948eca8be50dfea3173121090Mitchell Wills 20941e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills public static void assertScanDatasEquals(ScanData[] expected, ScanData[] actual) { 2105fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills assertNotNull("expected ScanData[] was null", expected); 2115fa6221c4e507cbc596b6de77d793ec08d690157Mitchell Wills assertNotNull("actaul ScanData[] was null", actual); 21241e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills assertEquals("ScanData.length", expected.length, actual.length); 21341e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills for (int i = 0; i < expected.length; ++i) { 21472c639e8b97067e948eca8be50dfea3173121090Mitchell Wills assertScanDataEquals("ScanData[" + i + "].", expected[i], actual[i]); 21541e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 21641e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills } 21741e38d84f562e12198f7db0d45f633712cae6cbaMitchell Wills 218297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static WifiScanner.ChannelSpec[] channelsToSpec(int... channels) { 219297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills WifiScanner.ChannelSpec[] channelSpecs = new WifiScanner.ChannelSpec[channels.length]; 220297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < channels.length; ++i) { 221297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills channelSpecs[i] = new WifiScanner.ChannelSpec(channels[i]); 222297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 223297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return channelSpecs; 224297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 225297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 226297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ChannelSpec[] getAllChannels(BucketSettings bucket) { 227297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (bucket.band == WifiScanner.WIFI_BAND_UNSPECIFIED) { 228297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ChannelSpec[] channels = new ChannelSpec[bucket.num_channels]; 229297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < bucket.num_channels; i++) { 230297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills channels[i] = new ChannelSpec(bucket.channels[i].frequency); 231297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 232297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return channels; 233297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 234297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return WifiChannelHelper.getChannelsForBand(bucket.band); 235297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 236297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 237297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills public static ChannelSpec[] getAllChannels(ScanSettings settings) { 238297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (settings.band == WifiScanner.WIFI_BAND_UNSPECIFIED) { 239297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ChannelSpec[] channels = new ChannelSpec[settings.channels.length]; 240297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills for (int i = 0; i < settings.channels.length; i++) { 241297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills channels[i] = new ChannelSpec(settings.channels[i].frequency); 242297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 243297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return channels; 244297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } else { 245297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return WifiChannelHelper.getChannelsForBand(settings.band); 246297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 247297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 248297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills} 249