1e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu/*
2e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * Copyright (C) 2016 The Android Open Source Project
3e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu *
4e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
5e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * you may not use this file except in compliance with the License.
6e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * You may obtain a copy of the License at
7e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu *
8e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
9e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu *
10e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * Unless required by applicable law or agreed to in writing, software
11e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
12e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * See the License for the specific language governing permissions and
14e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * limitations under the License.
15e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu */
16e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
17e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiupackage com.android.server.wifi.util;
18e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
19e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport static org.junit.Assert.assertEquals;
20e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport static org.junit.Assert.assertTrue;
21e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport static org.mockito.Mockito.when;
22e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
23e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport android.net.wifi.WifiConfiguration;
24e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport android.net.wifi.WifiScanner;
25e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport android.test.suitebuilder.annotation.SmallTest;
26e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
27e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport com.android.internal.util.ArrayUtils;
28e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport com.android.server.wifi.WifiNative;
29e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
30e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport org.junit.Before;
31e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport org.junit.Test;
32e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport org.mockito.Mock;
33e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport org.mockito.MockitoAnnotations;
34e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
35e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport java.util.ArrayList;
36e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiuimport java.util.Arrays;
37e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
38e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu/**
39e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu * Unit tests for {@link com.android.server.wifi.util.ApConfigUtil}.
40e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu */
41e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu@SmallTest
42e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiupublic class ApConfigUtilTest {
43e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
44e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    private static final String TEST_COUNTRY_CODE = "TestCountry";
45e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
46e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
47e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Frequency to channel map. This include some frequencies used outside the US.
48e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Representing it using a vector (instead of map) for simplification.  Values at
49e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * even indices are frequencies and odd indices are channels.
50e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
51e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    private static final int[] FREQUENCY_TO_CHANNEL_MAP = {
52e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2412, 1,
53e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2417, 2,
54e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2422, 3,
55e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2427, 4,
56e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2432, 5,
57e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2437, 6,
58e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2442, 7,
59e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2447, 8,
60e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2452, 9,
61e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2457, 10,
62e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2462, 11,
63e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            /* 12, 13 are only legitimate outside the US. */
64e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2467, 12,
65e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2472, 13,
66e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            /* 14 is for Japan, DSSS and CCK only. */
67e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            2484, 14,
68e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            /* 34 valid in Japan. */
69e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5170, 34,
70e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5180, 36,
71e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5190, 38,
72e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5200, 40,
73e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5210, 42,
74e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5220, 44,
75e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5230, 46,
76e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5240, 48,
77e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5260, 52,
78e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5280, 56,
79e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5300, 60,
80e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5320, 64,
81e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5500, 100,
82e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5520, 104,
83e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5540, 108,
84e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5560, 112,
85e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5580, 116,
86e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            /* 120, 124, 128 valid in Europe/Japan. */
87e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5600, 120,
88e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5620, 124,
89e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5640, 128,
90e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            /* 132+ valid in US. */
91e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5660, 132,
92e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5680, 136,
93e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5700, 140,
94e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            /* 144 is supported by a subset of WiFi chips. */
95e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5720, 144,
96e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5745, 149,
97e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5765, 153,
98e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5785, 157,
99e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5805, 161,
100e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            5825, 165
101e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    };
102e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
103e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    private static final Integer[] ALLOWED_2G_CHANNELS = {1, 2, 3, 4};
104e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    private static final int[] ALLOWED_5G_FREQS = {5180, 5190, 5200};
105e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    private static final int[] ALLOWED_5G_CHANNELS = {36, 38, 40};
106e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
107e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Mock WifiNative mWifiNative;
108e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    private final ArrayList<Integer> mAllowed2GChannels =
109e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            new ArrayList<Integer>(Arrays.asList(ALLOWED_2G_CHANNELS));
110e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
111e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
112e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Setup test.
113e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
114e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Before
115e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void setUp() throws Exception {
116e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        MockitoAnnotations.initMocks(this);
117e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
118e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
119e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
120e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify frequency to channel conversion for all possible frequencies.
121e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
122e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
123e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void convertFrequencyToChannel() throws Exception {
124e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        for (int i = 0; i < FREQUENCY_TO_CHANNEL_MAP.length; i += 2) {
125e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu            assertEquals(FREQUENCY_TO_CHANNEL_MAP[i + 1],
126e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                    ApConfigUtil.convertFrequencyToChannel(
127e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                            FREQUENCY_TO_CHANNEL_MAP[i]));
128e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        }
129e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
130e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
131e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
132e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify frequency to channel conversion failed for an invalid frequency.
133e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
134e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
135e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void convertFrequencyToChannelWithInvalidFreq() throws Exception {
136e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(-1, ApConfigUtil.convertFrequencyToChannel(6200));
137e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
138e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
139e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
140e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify default channel is used when picking a 2G channel without
141e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * any allowed 2G channels.
142e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
143e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
144e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void chooseApChannel2GBandWithNoAllowedChannel() throws Exception {
145e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.DEFAULT_AP_CHANNEL, ApConfigUtil.chooseApChannel(
146e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                WifiConfiguration.AP_BAND_2GHZ, null, ALLOWED_5G_FREQS));
147e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
148e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
149e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
150e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify a 2G channel is selected from the list of allowed channels.
151e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
152e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
153e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void chooseApChannel2GBandWithAllowedChannels() throws Exception {
154e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        int channel = ApConfigUtil.chooseApChannel(
155e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                WifiConfiguration.AP_BAND_2GHZ, mAllowed2GChannels, ALLOWED_5G_FREQS);
156e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertTrue(mAllowed2GChannels.contains(channel));
157e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
158e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
159e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
160e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify a 5G channel is selected from the list of allowed channels.
161e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
162e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
163e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void chooseApChannel5GBandWithAllowedChannels() throws Exception {
164e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        int channel = ApConfigUtil.chooseApChannel(
165e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                WifiConfiguration.AP_BAND_5GHZ, mAllowed2GChannels, ALLOWED_5G_FREQS);
166e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertTrue(ArrayUtils.contains(ALLOWED_5G_CHANNELS, channel));
167e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
168e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
169e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
170e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify chooseApChannel failed when selecting a channel in 5GHz band
171e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * with no channels allowed.
172e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
173e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
174e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void chooseApChannel5GBandWithNoAllowedChannels() throws Exception {
175e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(-1, ApConfigUtil.chooseApChannel(
176e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                WifiConfiguration.AP_BAND_5GHZ, mAllowed2GChannels, null));
177e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
178e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
179e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
180e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify default band and channel is used when HAL support is
181e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * not available.
182e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
183e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
184e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void updateApChannelConfigWithoutHal() throws Exception {
185e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        WifiConfiguration config = new WifiConfiguration();
186e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        config.apChannel = 36;
187e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        config.apBand = WifiConfiguration.AP_BAND_5GHZ;
188e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.isHalStarted()).thenReturn(false);
189e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.SUCCESS,
190e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                ApConfigUtil.updateApChannelConfig(
191e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                        mWifiNative, TEST_COUNTRY_CODE, mAllowed2GChannels, config));
192e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        /* Verify default band and channel is used. */
193e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.DEFAULT_AP_BAND, config.apBand);
194e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.DEFAULT_AP_CHANNEL, config.apChannel);
195e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
196e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
197e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
198e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify updateApChannelConfig will return an error when selecting channel
199e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * for 5GHz band without country code.
200e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
201e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
202e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void updateApChannelConfig5GBandNoCountryCode() throws Exception {
203e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        WifiConfiguration config = new WifiConfiguration();
204e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        config.apBand = WifiConfiguration.AP_BAND_5GHZ;
205e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.isHalStarted()).thenReturn(true);
206e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.ERROR_GENERIC,
207e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                ApConfigUtil.updateApChannelConfig(
208e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                        mWifiNative, null, mAllowed2GChannels, config));
209e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
210e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
211e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
212e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify the AP band and channel is not updated if specified.
213e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
214e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
215e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void updateApChannelConfigWithChannelSpecified() throws Exception {
216e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        WifiConfiguration config = new WifiConfiguration();
217e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        config.apBand = WifiConfiguration.AP_BAND_5GHZ;
218e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        config.apChannel = 36;
219e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.isHalStarted()).thenReturn(true);
220e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.SUCCESS,
221e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                ApConfigUtil.updateApChannelConfig(
222e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                        mWifiNative, TEST_COUNTRY_CODE, mAllowed2GChannels, config));
223e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(WifiConfiguration.AP_BAND_5GHZ, config.apBand);
224e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(36, config.apChannel);
225e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
226e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
227e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
228e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify updateApChannelConfig will return an error when selecting 5GHz channel
229e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * without any allowed channels.
230e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
231e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
232e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void updateApChannelConfigWith5GBandNoChannelAllowed() throws Exception {
233e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        WifiConfiguration config = new WifiConfiguration();
234e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        config.apBand = WifiConfiguration.AP_BAND_5GHZ;
235e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.isHalStarted()).thenReturn(true);
236e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ))
237e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                .thenReturn(null);
238e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.isGetChannelsForBandSupported()).thenReturn(true);
239e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.ERROR_NO_CHANNEL,
240e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                ApConfigUtil.updateApChannelConfig(
241e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                        mWifiNative, TEST_COUNTRY_CODE, mAllowed2GChannels, config));
242e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
243e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu
244e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    /**
245e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * Verify updateApChannelConfig will use the default band and channel when
246e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     * GetChannelsForBand API is not supported by HAL.
247e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu     */
248e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    @Test
249e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    public void updateApChannelConfigWithoutChannelsForBandSupported() throws Exception {
250e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        WifiConfiguration config = new WifiConfiguration();
251e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        config.apBand = WifiConfiguration.AP_BAND_5GHZ;
252e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.isHalStarted()).thenReturn(true);
253e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ))
254e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                .thenReturn(null);
255e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        when(mWifiNative.isGetChannelsForBandSupported()).thenReturn(false);
256e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.SUCCESS,
257e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                ApConfigUtil.updateApChannelConfig(
258e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu                        mWifiNative, TEST_COUNTRY_CODE, mAllowed2GChannels, config));
259e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.DEFAULT_AP_BAND, config.apBand);
260e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu        assertEquals(ApConfigUtil.DEFAULT_AP_CHANNEL, config.apChannel);
261e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu    }
262e5b93fbfe451bc57c07b3f72191b52b6bd237d5bPeter Qiu}
263