1712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills/*
2712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * Copyright (C) 2016 The Android Open Source Project
3712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills *
4712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * Licensed under the Apache License, Version 2.0 (the "License");
5712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * you may not use this file except in compliance with the License.
6712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * You may obtain a copy of the License at
7712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills *
8712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills *      http://www.apache.org/licenses/LICENSE-2.0
9712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills *
10712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * Unless required by applicable law or agreed to in writing, software
11712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * distributed under the License is distributed on an "AS IS" BASIS,
12712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * See the License for the specific language governing permissions and
14712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * limitations under the License.
15712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills */
16712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
17712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willspackage com.android.server.wifi.scanner;
18712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
19712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport static com.android.server.wifi.ScanTestUtil.bandIs;
20712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport static com.android.server.wifi.ScanTestUtil.channelsAre;
2139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport static com.android.server.wifi.ScanTestUtil.channelsToSpec;
2239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport static com.android.server.wifi.ScanTestUtil.createRequest;
23712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
24712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport static org.hamcrest.MatcherAssert.assertThat;
2539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport static org.junit.Assert.assertEquals;
2639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport static org.junit.Assert.assertFalse;
2739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport static org.junit.Assert.assertNull;
2839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport static org.junit.Assert.assertTrue;
29712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
30712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport android.net.wifi.WifiScanner;
31712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport android.test.suitebuilder.annotation.SmallTest;
32712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
33712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport com.android.server.wifi.WifiNative;
34712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
35712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport org.junit.Before;
36712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport org.junit.Test;
37712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport org.junit.experimental.runners.Enclosed;
38712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willsimport org.junit.runner.RunWith;
39712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
4039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport java.util.Arrays;
4139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport java.util.Collections;
4239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Willsimport java.util.HashSet;
4339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
44712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills/**
45712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills * Unit tests for {@link com.android.server.wifi.scanner.NoBandChannelHelper}.
46712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills */
47712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills@RunWith(Enclosed.class) // WARNING: tests cannot be declared in the outer class
48712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Willspublic class NoBandChannelHelperTest {
49712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills    private static final int ALL_BANDS = WifiScanner.WIFI_BAND_BOTH_WITH_DFS;
50712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
51712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills    /**
52712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills     * Unit tests for
53798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills     * {@link com.android.server.wifi.scanner.NoBandChannelHelper.estimateScanDuration}.
54798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills     */
5528345f81bf3f95e25946d398d594f39141c41442Mitchell Wills    @SmallTest
56798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills    public static class EstimateScanDurationTest {
57798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        NoBandChannelHelper mChannelHelper;
58798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
59798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        /**
60798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         * Called before each test
61798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         * Create a channel helper
62798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         */
63798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        @Before
64798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        public void setUp() throws Exception {
65798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            mChannelHelper = new NoBandChannelHelper();
66798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        }
67798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
68798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        /**
69798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         * check a settings object with a few channels
70798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         */
71798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        @Test
72798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        public void fewChannels() {
73798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            WifiScanner.ScanSettings testSettings = createRequest(channelsToSpec(2400, 2450, 5100),
74798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                    10000, 0, 20, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN);
75798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
76798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            assertEquals(ChannelHelper.SCAN_PERIOD_PER_CHANNEL_MS * 3,
77798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                    mChannelHelper.estimateScanDuration(testSettings));
78798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        }
79798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
80798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        /**
81798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         * check a settings object with a band
82798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         */
83798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        @Test
84798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        public void band() {
85798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            WifiScanner.ScanSettings testSettings = createRequest(WifiScanner.WIFI_BAND_24_GHZ,
86798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                    10000, 0, 20, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN);
87798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
88798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            assertTrue("Expected scan to take some time",
89798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                    mChannelHelper.estimateScanDuration(testSettings)
90798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                    >= ChannelHelper.SCAN_PERIOD_PER_CHANNEL_MS);
91798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        }
92798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills    }
93798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
94798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills    /**
95798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills     * Unit tests for
96798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills     * {@link com.android.server.wifi.scanner.NoBandChannelHelper.getAvailableScanChannels}.
97798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills     */
9828345f81bf3f95e25946d398d594f39141c41442Mitchell Wills    @SmallTest
99798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills    public static class GetAvailableScanChannelsTest {
100798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        NoBandChannelHelper mChannelHelper;
101798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
102798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        /**
103798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         * Called before each test
104798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         * Create a channel helper
105798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         */
106798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        @Before
107798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        public void setUp() throws Exception {
108798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            mChannelHelper = new NoBandChannelHelper();
109798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        }
110798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
111798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        /**
112798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         * Test that getting the channels for each band results in the expected empty list
113798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills         */
114798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        @Test
115798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        public void eachBandValue() {
116798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            for (int band = WifiScanner.WIFI_BAND_24_GHZ;
117798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                    band <= WifiScanner.WIFI_BAND_BOTH_WITH_DFS; ++band) {
118798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                WifiScanner.ChannelSpec[] channels =
119798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                        mChannelHelper.getAvailableScanChannels(band);
120798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills                assertEquals("expected zero channels", 0, channels.length);
121798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills            }
122798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills        }
123798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills    }
124798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills
125798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills    /**
126798a997d2e5bf8b3278bfeaa7ca841394e2db4b9Mitchell Wills     * Unit tests for
12739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills     * {@link com.android.server.wifi.scanner.NoBandChannelHelper.settingsContainChannel}.
12839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills     */
12928345f81bf3f95e25946d398d594f39141c41442Mitchell Wills    @SmallTest
13039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills    public static class SettingsContainChannelTest {
13139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        NoBandChannelHelper mChannelHelper;
13239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
13339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        /**
13439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         * Called before each test
13539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         * Create a channel helper
13639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         */
13739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        @Before
13839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        public void setUp() throws Exception {
13939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            mChannelHelper = new NoBandChannelHelper();
14039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        }
14139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
14239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        /**
14339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         * check a settings object with no channels
14439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         */
14539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        @Test
14639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        public void emptySettings() {
14739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            WifiScanner.ScanSettings testSettings = createRequest(channelsToSpec(),
14839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills                    10000, 0, 20, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN);
14939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
15039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelHelper.settingsContainChannel(testSettings, 2400));
15139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelHelper.settingsContainChannel(testSettings, 5150));
15239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelHelper.settingsContainChannel(testSettings, 5650));
15339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        }
15439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
15539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        /**
15639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         * check a settings object with some channels
15739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         */
15839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        @Test
15939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        public void settingsWithChannels() {
16039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            WifiScanner.ScanSettings testSettings = createRequest(channelsToSpec(2400, 5650),
16139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills                    10000, 0, 20, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN);
16239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
16339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 2400));
16439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelHelper.settingsContainChannel(testSettings, 5150));
16539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 5650));
16639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        }
16739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
16839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        /**
16939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         * check a settings object with a band specified
17039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         */
17139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        @Test
17239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        public void settingsWithBand() {
17339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            WifiScanner.ScanSettings testSettings = createRequest(WifiScanner.WIFI_BAND_24_GHZ,
17439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills                    10000, 0, 20, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN);
17539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
17639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 2400));
17739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 2450));
17839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 5150));
17939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 5650));
18039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        }
18139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
18239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        /**
18339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         * check a settings object with multiple bands specified
18439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         */
18539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        @Test
18639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        public void settingsWithMultiBand() {
18739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            WifiScanner.ScanSettings testSettings = createRequest(WifiScanner.WIFI_BAND_BOTH,
18839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills                    10000, 0, 20, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN);
18939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
19039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 2400));
19139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 2450));
19239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 5150));
19339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelHelper.settingsContainChannel(testSettings, 5650));
19439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        }
19539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills    }
19639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
19739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills    /**
19839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills     * Unit tests for
199712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills     * {@link com.android.server.wifi.scanner.NoBandChannelHelper.NoBandChannelCollection}.
200712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills     */
20128345f81bf3f95e25946d398d594f39141c41442Mitchell Wills    @SmallTest
2023219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills    public static class NoBandsChannelCollectionTest {
203712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        ChannelHelper.ChannelCollection mChannelCollection;
204712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
205712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
206712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Called before each test
207712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Create a collection to use for each test
208712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
209712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Before
210712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void setUp() throws Exception {
211712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection = new NoBandChannelHelper().createChannelCollection();
212712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
213712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
214712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
215712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Create an empty collection
216712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
217712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
218712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void empty() {
219712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
220712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
221712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, channelsAre());
22239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
22339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertEquals(Collections.<Integer>emptySet(),
2249dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang                    mChannelCollection.getScanFreqs());
22539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
22639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.isEmpty());
22739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.containsChannel(2400));
2283219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertFalse(mChannelCollection.isAllChannels());
229712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
230712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
231712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
232712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add something to a collection and then clear it and make sure nothing is in it
233712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
234712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
235712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void clear() {
236712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addBand(WifiScanner.WIFI_BAND_24_GHZ);
237712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.clear();
238712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
239712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
240712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
241712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, channelsAre());
24239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
24339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertEquals(Collections.<Integer>emptySet(),
2449dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang                    mChannelCollection.getScanFreqs());
24539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
24639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.isEmpty());
24739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.containsChannel(2400));
2483219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertFalse(mChannelCollection.isAllChannels());
249712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
250712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
251712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
252712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add a single band to the collection
253712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
254712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
255712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void addBand() {
256712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addBand(WifiScanner.WIFI_BAND_24_GHZ);
257712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
258712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
259712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
260712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, bandIs(ALL_BANDS));
26139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
2629dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang            assertNull(mChannelCollection.getScanFreqs());
26339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
26439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.isEmpty());
26539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(2400));
26639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(5150));
2673219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertTrue(mChannelCollection.isAllChannels());
268712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
269712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
270712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
271712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add a single channel to the collection
272712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
273712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
274712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void addChannel_single() {
275712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(2400);
276712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
277712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
278712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
279712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, channelsAre(2400));
28039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
28139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertEquals(new HashSet<Integer>(Arrays.asList(2400)),
2829dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang                    mChannelCollection.getScanFreqs());
28339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
28439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.isEmpty());
28539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(2400));
28639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.containsChannel(5150));
2873219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertFalse(mChannelCollection.isAllChannels());
288712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
289712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
290712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
291712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add a multiple channels to the collection
292712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
293712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
294712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void addChannel_multiple() {
295712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(2400);
296712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(2450);
297712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
298712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
299712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
300712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, channelsAre(2400, 2450));
30139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
30239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertEquals(new HashSet<Integer>(Arrays.asList(2400, 2450)),
3039dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang                    mChannelCollection.getScanFreqs());
30439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
30539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.isEmpty());
30639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(2400));
30739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.containsChannel(5150));
3083219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertFalse(mChannelCollection.isAllChannels());
309712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
310712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
311712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
312712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add a band and channel that is on that band
313712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
314712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
315712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void addChannel_and_addBand_sameBand() {
316712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addBand(WifiScanner.WIFI_BAND_24_GHZ);
317712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(2400);
318712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
319712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
320712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
321712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, bandIs(ALL_BANDS));
32239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
3239dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang            assertNull(mChannelCollection.getScanFreqs());
32439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
32539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.isEmpty());
32639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(2400));
32739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(5150));
3283219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertTrue(mChannelCollection.isAllChannels());
329712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
330712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
331712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
332712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add a band and channel that is not that band
333712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
334712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
335712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void addChannel_and_addBand_withDifferentBandChannel() {
336712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addBand(WifiScanner.WIFI_BAND_24_GHZ);
337712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(5150);
338712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
339712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
340712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
341712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, bandIs(ALL_BANDS));
34239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
3439dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang            assertNull(mChannelCollection.getScanFreqs());
34439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
34539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.isEmpty());
34639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(2400));
34739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(5150));
3483219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertTrue(mChannelCollection.isAllChannels());
34939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        }
35039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
35139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        /**
35239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         * Add a band that should contain all channels
35339175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills         */
35439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        @Test
35539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills        public void addChannel_and_addBand_all() {
35639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            mChannelCollection.addBand(WifiScanner.WIFI_BAND_BOTH_WITH_DFS);
35739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            mChannelCollection.addChannel(5150);
35839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
35939175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
36039175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, Integer.MAX_VALUE);
36139175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertThat(bucketSettings, bandIs(WifiScanner.WIFI_BAND_BOTH_WITH_DFS));
36239175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
3639dc9a8750ecd1ab25c5b4c7d17c8930ca2ffb6c3Ningyuan Wang            assertNull(mChannelCollection.getScanFreqs());
36439175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills
36539175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertFalse(mChannelCollection.isEmpty());
36639175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(2400));
36739175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(5150));
36839175cc807488dd849e2c530f8be30dd674fbd9fMitchell Wills            assertTrue(mChannelCollection.containsChannel(5600));
3693219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertTrue(mChannelCollection.isAllChannels());
370712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
371712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
372712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
373712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add enough channels on a single band that the max channels is exceeded
374712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
375712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
376712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void addChannel_exceedMaxChannels() {
377712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(5600);
378712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(5650);
379712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(5660);
380712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
381712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
382712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, 2);
383712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, bandIs(ALL_BANDS));
3843219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertFalse(mChannelCollection.isAllChannels()); // can't determine from just channels
385712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
386712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
387712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        /**
388712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         * Add enough channels across multiple bands that the max channels is exceeded
389712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills         */
390712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        @Test
391712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        public void addChannel_exceedMaxChannelsOnMultipleBands() {
392712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(2400);
393712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(2450);
394712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.addChannel(5150);
395712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills
396712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings();
397712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            mChannelCollection.fillBucketSettings(bucketSettings, 2);
398712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills            assertThat(bucketSettings, bandIs(ALL_BANDS));
3993219e97566a093ed10b2a9d6fe77ed9089084d63Mitchell Wills            assertFalse(mChannelCollection.isAllChannels()); // can't determine from just channels
400712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills        }
401712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills    }
402712ef6246834caeac3d5b06bea08e85d6b29cd7aMitchell Wills}
403