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