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