summaryrefslogtreecommitdiff
path: root/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java819
1 files changed, 0 insertions, 819 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java b/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
deleted file mode 100644
index d43921bb5..000000000
--- a/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
+++ /dev/null
@@ -1,819 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wifi;
-
-import static android.net.wifi.SoftApConfiguration.SECURITY_TYPE_WPA2_PSK;
-import static android.net.wifi.SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.net.MacAddress;
-import android.net.wifi.SoftApConfiguration;
-import android.net.wifi.SoftApConfiguration.Builder;
-import android.net.wifi.WifiInfo;
-import android.os.Build;
-import android.os.Handler;
-import android.os.test.TestLooper;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.wifi.resources.R;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Random;
-
-/**
- * Unit tests for {@link com.android.server.wifi.WifiApConfigStore}.
- */
-@SmallTest
-public class WifiApConfigStoreTest extends WifiBaseTest {
-
- private static final String TAG = "WifiApConfigStoreTest";
-
- private static final String TEST_DEFAULT_2G_CHANNEL_LIST = "1,2,3,4,5,6";
- private static final String TEST_DEFAULT_AP_SSID = "TestAP";
- private static final String TEST_DEFAULT_HOTSPOT_SSID = "TestShare";
- private static final int RAND_SSID_INT_MIN = 1000;
- private static final int RAND_SSID_INT_MAX = 9999;
- private static final String TEST_CHAR_SET_AS_STRING = "abcdefghijklmnopqrstuvwxyz0123456789";
- private static final String TEST_STRING_UTF8_WITH_30_BYTES = "智者務其實愚者爭虛名";
- private static final String TEST_STRING_UTF8_WITH_32_BYTES = "ΣωκράτηςΣωκράτης";
- private static final String TEST_STRING_UTF8_WITH_33_BYTES = "一片汪洋大海中的一條魚";
- private static final String TEST_STRING_UTF8_WITH_34_BYTES = "Ευπροσηγοροςγινου";
- private static final MacAddress TEST_RANDOMIZED_MAC =
- MacAddress.fromString("d2:11:19:34:a5:20");
-
- private final int mBand25G = SoftApConfiguration.BAND_2GHZ | SoftApConfiguration.BAND_5GHZ;
-
- @Mock private Context mContext;
- @Mock private WifiInjector mWifiInjector;
- @Mock private WifiMetrics mWifiMetrics;
- private TestLooper mLooper;
- private Handler mHandler;
- @Mock private BackupManagerProxy mBackupManagerProxy;
- @Mock private WifiConfigStore mWifiConfigStore;
- @Mock private WifiConfigManager mWifiConfigManager;
- @Mock private ActiveModeWarden mActiveModeWarden;
- private Random mRandom;
- private MockResources mResources;
- @Mock private ApplicationInfo mMockApplInfo;
- @Mock private MacAddressUtil mMacAddressUtil;
- private SoftApStoreData.DataSource mDataStoreSource;
- private ArrayList<Integer> mKnownGood2GChannelList;
-
- @Before
- public void setUp() throws Exception {
- mLooper = new TestLooper();
- mHandler = new Handler(mLooper.getLooper());
- MockitoAnnotations.initMocks(this);
- mMockApplInfo.targetSdkVersion = Build.VERSION_CODES.P;
- when(mContext.getApplicationInfo()).thenReturn(mMockApplInfo);
-
- /* Setup expectations for Resources to return some default settings. */
- mResources = new MockResources();
- mResources.setString(R.string.config_wifiSoftap2gChannelList,
- TEST_DEFAULT_2G_CHANNEL_LIST);
- mResources.setString(R.string.wifi_tether_configure_ssid_default,
- TEST_DEFAULT_AP_SSID);
- mResources.setString(R.string.wifi_localhotspot_configure_ssid_default,
- TEST_DEFAULT_HOTSPOT_SSID);
- mResources.setBoolean(R.bool.config_wifiSoftapPassphraseAsciiEncodableCheck, true);
- /* Default to device that does not require ap band conversion */
- when(mActiveModeWarden.isStaApConcurrencySupported())
- .thenReturn(false);
- when(mContext.getResources()).thenReturn(mResources);
-
- // build the known good 2G channel list: TEST_DEFAULT_2G_CHANNEL_LIST
- mKnownGood2GChannelList = new ArrayList(Arrays.asList(1, 2, 3, 4, 5, 6));
-
- mRandom = new Random();
- when(mWifiInjector.getMacAddressUtil()).thenReturn(mMacAddressUtil);
- when(mMacAddressUtil.calculatePersistentMac(any(), any())).thenReturn(TEST_RANDOMIZED_MAC);
- }
-
- /**
- * Helper method to create and verify actions for the ApConfigStore used in the following tests.
- */
- private WifiApConfigStore createWifiApConfigStore() throws Exception {
- WifiApConfigStore store = new WifiApConfigStore(
- mContext, mWifiInjector, mHandler, mBackupManagerProxy,
- mWifiConfigStore, mWifiConfigManager, mActiveModeWarden, mWifiMetrics);
- verify(mWifiConfigStore).registerStoreData(any());
- ArgumentCaptor<SoftApStoreData.DataSource> dataStoreSourceArgumentCaptor =
- ArgumentCaptor.forClass(SoftApStoreData.DataSource.class);
- verify(mWifiInjector).makeSoftApStoreData(dataStoreSourceArgumentCaptor.capture());
- mDataStoreSource = dataStoreSourceArgumentCaptor.getValue();
-
- return store;
- }
-
- /**
- * Generate a SoftApConfiguration based on the specified parameters.
- */
- private SoftApConfiguration setupApConfig(
- String ssid, String preSharedKey, int keyManagement, int band, int channel,
- boolean hiddenSSID) {
- Builder configBuilder = new SoftApConfiguration.Builder();
- configBuilder.setSsid(ssid);
- configBuilder.setPassphrase(preSharedKey, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
- if (channel == 0) {
- configBuilder.setBand(band);
- } else {
- configBuilder.setChannel(channel, band);
- }
- configBuilder.setHiddenSsid(hiddenSSID);
- return configBuilder.build();
- }
-
- private void verifyApConfig(SoftApConfiguration config1, SoftApConfiguration config2) {
- assertEquals(config1.getSsid(), config2.getSsid());
- assertEquals(config1.getPassphrase(), config2.getPassphrase());
- assertEquals(config1.getSecurityType(), config2.getSecurityType());
- assertEquals(config1.getBand(), config2.getBand());
- assertEquals(config1.getChannel(), config2.getChannel());
- assertEquals(config1.isHiddenSsid(), config2.isHiddenSsid());
- }
-
- private void verifyDefaultApConfig(SoftApConfiguration config, String expectedSsid,
- boolean isSaeSupport) {
- String[] splitSsid = config.getSsid().split("_");
- assertEquals(2, splitSsid.length);
- assertEquals(expectedSsid, splitSsid[0]);
- assertEquals(SoftApConfiguration.BAND_2GHZ, config.getBand());
- assertFalse(config.isHiddenSsid());
- int randomPortion = Integer.parseInt(splitSsid[1]);
- assertTrue(randomPortion >= RAND_SSID_INT_MIN && randomPortion <= RAND_SSID_INT_MAX);
- if (isSaeSupport) {
- assertEquals(SECURITY_TYPE_WPA3_SAE_TRANSITION, config.getSecurityType());
- } else {
- assertEquals(SECURITY_TYPE_WPA2_PSK, config.getSecurityType());
- }
- assertEquals(15, config.getPassphrase().length());
- }
-
- private void verifyDefaultApConfig(SoftApConfiguration config, String expectedSsid) {
- // Old test cases will just verify WPA2.
- verifyDefaultApConfig(config, expectedSsid, false);
- }
-
- private void verifyDefaultLocalOnlyApConfig(SoftApConfiguration config, String expectedSsid,
- int expectedApBand, boolean isSaeSupport) {
- String[] splitSsid = config.getSsid().split("_");
- assertEquals(2, splitSsid.length);
- assertEquals(expectedSsid, splitSsid[0]);
- assertEquals(expectedApBand, config.getBand());
- int randomPortion = Integer.parseInt(splitSsid[1]);
- assertTrue(randomPortion >= RAND_SSID_INT_MIN && randomPortion <= RAND_SSID_INT_MAX);
- if (isSaeSupport) {
- assertEquals(SECURITY_TYPE_WPA3_SAE_TRANSITION, config.getSecurityType());
- } else {
- assertEquals(SECURITY_TYPE_WPA2_PSK, config.getSecurityType());
- }
- assertEquals(15, config.getPassphrase().length());
- assertFalse(config.isAutoShutdownEnabled());
- }
-
- private void verifyDefaultLocalOnlyApConfig(SoftApConfiguration config, String expectedSsid,
- int expectedApBand) {
- verifyDefaultLocalOnlyApConfig(config, expectedSsid, expectedApBand, false);
- }
-
- /**
- * AP Configuration is not specified in the config file,
- * WifiApConfigStore should fallback to use the default configuration.
- */
- @Test
- public void initWithDefaultConfiguration() throws Exception {
- WifiApConfigStore store = createWifiApConfigStore();
- verifyDefaultApConfig(store.getApConfiguration(), TEST_DEFAULT_AP_SSID);
- verify(mWifiConfigManager).saveToStore(true);
- }
-
-
- /**
- * Verify the handling of setting a null ap configuration.
- * WifiApConfigStore should fallback to the default configuration when
- * null ap configuration is provided.
- */
- @Test
- public void setNullApConfiguration() throws Exception {
- /* Initialize WifiApConfigStore with existing configuration. */
- SoftApConfiguration expectedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_5GHZ, /* AP band (5GHz) */
- 40, /* AP channel */
- true /* Hidden SSID */);
- WifiApConfigStore store = createWifiApConfigStore();
- mDataStoreSource.fromDeserialized(expectedConfig);
- verifyApConfig(expectedConfig, store.getApConfiguration());
-
- store.setApConfiguration(null);
- verifyDefaultApConfig(store.getApConfiguration(), TEST_DEFAULT_AP_SSID);
- verifyDefaultApConfig(mDataStoreSource.toSerialize(), TEST_DEFAULT_AP_SSID);
- verify(mWifiConfigManager).saveToStore(true);
- verify(mBackupManagerProxy).notifyDataChanged();
- }
-
- /**
- * Verify AP configuration is correctly updated via setApConfiguration call.
- */
- @Test
- public void updateApConfiguration() throws Exception {
- /* Initialize WifiApConfigStore with default configuration. */
- WifiApConfigStore store = createWifiApConfigStore();
-
- verifyDefaultApConfig(store.getApConfiguration(), TEST_DEFAULT_AP_SSID);
- verify(mWifiConfigManager).saveToStore(true);
-
- /* Update with a valid configuration. */
- SoftApConfiguration expectedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_2GHZ, /* AP band */
- 0, /* AP channel */
- true /* Hidden SSID */);
- store.setApConfiguration(expectedConfig);
- verifyApConfig(expectedConfig, store.getApConfiguration());
- verifyApConfig(expectedConfig, mDataStoreSource.toSerialize());
- verify(mWifiConfigManager, times(2)).saveToStore(true);
- verify(mBackupManagerProxy, times(2)).notifyDataChanged();
- }
-
- /**
- * Due to different countries capabilities, some bands are not available.
- * This test verifies that a device will have apBand =
- * 5GHz converted to include 2.4GHz.
- */
- @Test
- public void convertDevice5GhzToAny() throws Exception {
- when(mActiveModeWarden.isStaApConcurrencySupported())
- .thenReturn(true);
-
- /* Initialize WifiApConfigStore with default configuration. */
- WifiApConfigStore store = createWifiApConfigStore();
- verifyDefaultApConfig(store.getApConfiguration(), TEST_DEFAULT_AP_SSID);
- verify(mWifiConfigManager).saveToStore(true);
-
- /* Update with a valid configuration. */
- SoftApConfiguration providedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_5GHZ, /* AP band */
- 0, /* AP channel */
- false /* Hidden SSID */);
-
- SoftApConfiguration expectedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_2GHZ
- | SoftApConfiguration.BAND_5GHZ, /* AP band */
- 0, /* AP channel */
- false /* Hidden SSID */);
- store.setApConfiguration(providedConfig);
- verifyApConfig(expectedConfig, store.getApConfiguration());
- verifyApConfig(expectedConfig, mDataStoreSource.toSerialize());
- verify(mWifiConfigManager, times(2)).saveToStore(true);
- verify(mBackupManagerProxy, times(2)).notifyDataChanged();
- }
-
- /**
- * Due to different countries capabilities, some bands are not available.
- * This test verifies that a device does not need to conver apBand since it already
- * included 2.4G.
- */
- @Test
- public void deviceAnyNotConverted() throws Exception {
- when(mActiveModeWarden.isStaApConcurrencySupported())
- .thenReturn(true);
-
- /* Initialize WifiApConfigStore with default configuration. */
- WifiApConfigStore store = createWifiApConfigStore();
- verifyDefaultApConfig(store.getApConfiguration(), TEST_DEFAULT_AP_SSID);
- verify(mWifiConfigManager).saveToStore(true);
-
- /* Update with a valid configuration. */
- SoftApConfiguration expectedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_ANY, /* AP band */
- 0, /* AP channel */
- false /* Hidden SSID */);
- store.setApConfiguration(expectedConfig);
- verifyApConfig(expectedConfig, store.getApConfiguration());
- verifyApConfig(expectedConfig, mDataStoreSource.toSerialize());
- verify(mWifiConfigManager, times(2)).saveToStore(true);
- verify(mBackupManagerProxy, times(2)).notifyDataChanged();
- }
-
- /**
- * Due to different countries capabilities, some bands are not available.
- * This test verifies that a device does not convert apBand because channel is specific.
- */
- @Test
- public void deviceWithChannelNotConverted() throws Exception {
- when(mActiveModeWarden.isStaApConcurrencySupported())
- .thenReturn(true);
-
- /* Initialize WifiApConfigStore with default configuration. */
- WifiApConfigStore store = createWifiApConfigStore();
- verifyDefaultApConfig(store.getApConfiguration(), TEST_DEFAULT_AP_SSID);
- verify(mWifiConfigManager).saveToStore(true);
-
- /* Update with a valid configuration. */
- SoftApConfiguration expectedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_5GHZ, /* AP band */
- 40, /* AP channel */
- false /* Hidden SSID */);
- store.setApConfiguration(expectedConfig);
- verifyApConfig(expectedConfig, store.getApConfiguration());
- verifyApConfig(expectedConfig, mDataStoreSource.toSerialize());
- verify(mWifiConfigManager, times(2)).saveToStore(true);
- verify(mBackupManagerProxy, times(2)).notifyDataChanged();
- }
-
- /**
- * Due to different countries capabilities, some bands are not available.
- * This test verifies that a device converts a persisted ap
- * config with 5GHz only set for the apBand to include 2.4GHz.
- */
- @Test
- public void device5GhzConvertedToAnyAtRetrieval() throws Exception {
- when(mActiveModeWarden.isStaApConcurrencySupported())
- .thenReturn(true);
-
- SoftApConfiguration persistedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_5GHZ, /* AP band */
- 0, /* AP channel */
- false /* Hidden SSID */);
- SoftApConfiguration expectedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- mBand25G, /* AP band */
- 0, /* AP channel */
- false /* Hidden SSID */);
-
- WifiApConfigStore store = createWifiApConfigStore();
- mDataStoreSource.fromDeserialized(persistedConfig);
- verifyApConfig(expectedConfig, store.getApConfiguration());
- verifyApConfig(expectedConfig, mDataStoreSource.toSerialize());
- verify(mWifiConfigManager).saveToStore(true);
- verify(mBackupManagerProxy).notifyDataChanged();
- }
-
- /**
- * Due to different countries capabilities, some bands are not available.
- * This test verifies that a device does not convert
- * a persisted ap config with ANY since it already
- * included 2.4G.
- */
- @Test
- public void deviceNotConvertedAtRetrieval() throws Exception {
- when(mActiveModeWarden.isStaApConcurrencySupported())
- .thenReturn(true);
-
- SoftApConfiguration persistedConfig = setupApConfig(
- "ConfiguredAP", /* SSID */
- "randomKey", /* preshared key */
- SECURITY_TYPE_WPA2_PSK, /* security type */
- SoftApConfiguration.BAND_ANY, /* AP band */
- 0, /* AP channel */
- false /* Hidden SSID */);
-
- WifiApConfigStore store = createWifiApConfigStore();
- mDataStoreSource.fromDeserialized(persistedConfig);
- verifyApConfig(persistedConfig, store.getApConfiguration());
- verify(mWifiConfigManager, never()).saveToStore(true);
- verify(mBackupManagerProxy, never()).notifyDataChanged();
- }
-
- /**
- * Verify a proper SoftApConfiguration is generate by getDefaultApConfiguration().
- */
- @Test
- public void getDefaultApConfigurationIsValid() throws Exception {
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = store.getApConfiguration();
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(config, true, mContext));
- }
-
- /**
- * Verify a proper local only hotspot config is generated when called properly with the valid
- * context.
- */
- @Test
- public void generateLocalOnlyHotspotConfigIsValid() {
- SoftApConfiguration config = WifiApConfigStore
- .generateLocalOnlyHotspotConfig(mContext, SoftApConfiguration.BAND_2GHZ, null);
- verifyDefaultLocalOnlyApConfig(config, TEST_DEFAULT_HOTSPOT_SSID,
- SoftApConfiguration.BAND_2GHZ);
-
- // verify that the config passes the validateApWifiConfiguration check
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(config, true, mContext));
- }
-
- /**
- * Verify a proper local only hotspot config is generated for 5Ghz band.
- */
- @Test
- public void generateLocalOnlyHotspotConfigIsValid5G() {
- SoftApConfiguration config = WifiApConfigStore
- .generateLocalOnlyHotspotConfig(mContext, SoftApConfiguration.BAND_5GHZ, null);
- verifyDefaultLocalOnlyApConfig(config, TEST_DEFAULT_HOTSPOT_SSID,
- SoftApConfiguration.BAND_5GHZ);
-
- // verify that the config passes the validateApWifiConfiguration check
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(config, true, mContext));
- }
-
- @Test
- public void generateLohsConfig_forwardsCustomMac() {
- SoftApConfiguration customConfig = new SoftApConfiguration.Builder()
- .setBssid(MacAddress.fromString("11:22:33:44:55:66"))
- .build();
- SoftApConfiguration softApConfig = WifiApConfigStore.generateLocalOnlyHotspotConfig(
- mContext, SoftApConfiguration.BAND_2GHZ, customConfig);
- assertThat(softApConfig.getBssid().toString()).isNotEmpty();
- assertThat(softApConfig.getBssid()).isEqualTo(
- MacAddress.fromString("11:22:33:44:55:66"));
- }
-
- @Test
- public void randomizeBssid_randomizesWhenEnabled() throws Exception {
- mResources.setBoolean(R.bool.config_wifi_ap_mac_randomization_supported, true);
- SoftApConfiguration baseConfig = new SoftApConfiguration.Builder().build();
-
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = store.randomizeBssidIfUnset(mContext, baseConfig);
-
- assertEquals(TEST_RANDOMIZED_MAC, config.getBssid());
- }
-
- @Test
- public void randomizeBssid_fallbackPathWhenMacCalculationFails() throws Exception {
- mResources.setBoolean(R.bool.config_wifi_ap_mac_randomization_supported, true);
- // Setup the MAC calculation to fail.
- when(mMacAddressUtil.calculatePersistentMac(any(), any())).thenReturn(null);
- SoftApConfiguration baseConfig = new SoftApConfiguration.Builder().build();
-
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = store.randomizeBssidIfUnset(mContext, baseConfig);
-
- // Verify that some randomized MAC address is still generated
- assertNotNull(config.getBssid());
- assertNotEquals(WifiInfo.DEFAULT_MAC_ADDRESS, config.getBssid().toString());
- }
-
- @Test
- public void randomizeBssid_usesFactoryMacWhenRandomizationOff() throws Exception {
- mResources.setBoolean(R.bool.config_wifi_ap_mac_randomization_supported, false);
- SoftApConfiguration baseConfig = new SoftApConfiguration.Builder().build();
-
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = store.randomizeBssidIfUnset(mContext, baseConfig);
-
- assertThat(config.getBssid()).isNull();
- }
-
- @Test
- public void randomizeBssid_forwardsCustomMac() throws Exception {
- mResources.setBoolean(R.bool.config_wifi_ap_mac_randomization_supported, true);
- Builder baseConfigBuilder = new SoftApConfiguration.Builder();
- baseConfigBuilder.setBssid(MacAddress.fromString("11:22:33:44:55:66"));
-
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = store.randomizeBssidIfUnset(mContext,
- baseConfigBuilder.build());
-
- assertThat(config.getBssid().toString()).isNotEmpty();
- assertThat(config.getBssid()).isEqualTo(
- MacAddress.fromString("11:22:33:44:55:66"));
- }
-
- /**
- * Helper method to generate random SSIDs.
- *
- * Note: this method has limited use as a random SSID generator. The characters used in this
- * method do no not cover all valid inputs.
- * @param length number of characters to generate for the name
- * @return String generated string of random characters
- */
- private String generateRandomString(int length) {
-
- StringBuilder stringBuilder = new StringBuilder(length);
- int index = -1;
- while (stringBuilder.length() < length) {
- index = mRandom.nextInt(TEST_CHAR_SET_AS_STRING.length());
- stringBuilder.append(TEST_CHAR_SET_AS_STRING.charAt(index));
- }
- return stringBuilder.toString();
- }
-
- /**
- * Verify the SSID checks in validateApWifiConfiguration.
- *
- * Cases to check and verify they trigger failed verification:
- * null SoftApConfiguration.SSID
- * empty SoftApConfiguration.SSID
- * invalid WifiConfiguaration.SSID length
- *
- * Additionally check a valid SSID with a random (within valid ranges) length.
- */
- @Test
- public void testSsidVerificationInValidateApWifiConfigurationCheck() {
- Builder configBuilder = new SoftApConfiguration.Builder();
- configBuilder.setSsid(null);
- assertFalse(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- // check a string if it's larger than 32 bytes with UTF-8 encode
- // Case 1 : one byte per character (use english words and Arabic numerals)
- configBuilder.setSsid(generateRandomString(WifiApConfigStore.SSID_MAX_LEN + 1));
- assertFalse(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- // Case 2 : two bytes per character
- configBuilder.setSsid(TEST_STRING_UTF8_WITH_34_BYTES);
- assertFalse(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- // Case 3 : three bytes per character
- configBuilder.setSsid(TEST_STRING_UTF8_WITH_33_BYTES);
- assertFalse(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
-
- // now check a valid SSID within 32 bytes
- // Case 1 : one byte per character with random length
- int validLength = WifiApConfigStore.SSID_MAX_LEN - WifiApConfigStore.SSID_MIN_LEN;
- configBuilder.setSsid(generateRandomString(
- mRandom.nextInt(validLength) + WifiApConfigStore.SSID_MIN_LEN));
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- // Case 2 : two bytes per character
- configBuilder.setSsid(TEST_STRING_UTF8_WITH_32_BYTES);
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- // Case 3 : three bytes per character
- configBuilder.setSsid(TEST_STRING_UTF8_WITH_30_BYTES);
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- }
-
- /**
- * Verify the Open network checks in validateApWifiConfiguration.
- *
- * If the configured network is open, it should not have a password set.
- *
- * Additionally verify a valid open network passes verification.
- */
- @Test
- public void testOpenNetworkConfigInValidateApWifiConfigurationCheck() {
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(
- new SoftApConfiguration.Builder()
- .setSsid(TEST_DEFAULT_HOTSPOT_SSID)
- .build(), true, mContext));
- }
-
- /**
- * Verify the WPA2_PSK network checks in validateApWifiConfiguration.
- *
- * If the configured network is configured with a preSharedKey, verify that the passwork is set
- * and it meets length requirements.
- */
- @Test
- public void testWpa2PskNetworkConfigInValidateApWifiConfigurationCheck() {
- Builder configBuilder = new SoftApConfiguration.Builder();
- configBuilder.setSsid(TEST_DEFAULT_HOTSPOT_SSID);
- // Builder will auto check auth type and passphrase
-
- // test random (valid length)
- int maxLen = WifiApConfigStore.PSK_MAX_LEN;
- int minLen = WifiApConfigStore.PSK_MIN_LEN;
- configBuilder.setPassphrase(
- generateRandomString(mRandom.nextInt(maxLen - minLen) + minLen),
- SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- }
-
- /**
- * Verify the WPA2_PSK network checks in validateApWifiConfiguration.
- *
- * If the configured network is configured with a preSharedKey, verify that the passwork is set
- * and it meets ascii encoding when ascii encodable check enabled.
- */
- @Test
- public void testWpa2PskNonAsciiPassphraseConfigInValidateApWifiConfigurationCheck() {
- Builder configBuilder = new SoftApConfiguration.Builder();
- configBuilder.setSsid(TEST_DEFAULT_HOTSPOT_SSID);
- // Builder will auto check auth type and passphrase
-
- configBuilder.setPassphrase(
- "測試測試測試測試",
- SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
- assertFalse(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- // Disable ascii encodable check
- mResources.setBoolean(R.bool.config_wifiSoftapPassphraseAsciiEncodableCheck, false);
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(
- configBuilder.build(), true, mContext));
- }
-
-
- /**
- * Verify the default configuration security when SAE support.
- */
- @Test
- public void testDefaultConfigurationSecurityTypeIsWpa3SaeTransitionWhenSupport()
- throws Exception {
- mResources.setBoolean(R.bool.config_wifi_softap_sae_supported, true);
- WifiApConfigStore store = createWifiApConfigStore();
- verifyDefaultApConfig(store.getApConfiguration(), TEST_DEFAULT_AP_SSID, true);
- }
-
- /**
- * Verify the LOHS default configuration security when SAE support.
- */
- @Test
- public void testLohsDefaultConfigurationSecurityTypeIsWpa3SaeTransitionWhenSupport() {
- mResources.setBoolean(R.bool.config_wifi_softap_sae_supported, true);
- SoftApConfiguration config = WifiApConfigStore
- .generateLocalOnlyHotspotConfig(mContext, SoftApConfiguration.BAND_5GHZ, null);
- verifyDefaultLocalOnlyApConfig(config, TEST_DEFAULT_HOTSPOT_SSID,
- SoftApConfiguration.BAND_5GHZ, true);
-
- // verify that the config passes the validateApWifiConfiguration check
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(config, true, mContext));
-
- }
-
- @Test
- public void testResetToDefaultForUnsupportedConfig() throws Exception {
- mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, true);
- mResources.setBoolean(R.bool.config_wifi_softap_sae_supported, true);
- mResources.setBoolean(R.bool.config_wifi6ghzSupport, true);
- mResources.setBoolean(R.bool.config_wifi5ghzSupport, true);
-
- // Test all of the features support and all of the reset config are false.
- String testPassphrase = "secretsecret";
- SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();
- configBuilder.setPassphrase(testPassphrase, SoftApConfiguration.SECURITY_TYPE_WPA3_SAE);
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration resetedConfig = store.resetToDefaultForUnsupportedConfig(
- configBuilder.build());
- assertEquals(resetedConfig, configBuilder.build());
-
- verify(mWifiMetrics).noteSoftApConfigReset(configBuilder.build(), resetedConfig);
-
- // Test SAE not support case.
- mResources.setBoolean(R.bool.config_wifi_softap_sae_supported, false);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertEquals(resetedConfig.getSecurityType(), SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
- // Test force channel
- configBuilder.setChannel(149, SoftApConfiguration.BAND_5GHZ);
- mResources.setBoolean(
- R.bool.config_wifiSoftapResetChannelConfig, true);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertEquals(resetedConfig.getChannel(), 0);
- assertEquals(resetedConfig.getBand(),
- SoftApConfiguration.BAND_2GHZ | SoftApConfiguration.BAND_5GHZ);
-
- // Test forced channel band doesn't support.
- mResources.setBoolean(R.bool.config_wifi5ghzSupport, false);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertEquals(resetedConfig.getChannel(), 0);
- assertEquals(resetedConfig.getBand(),
- SoftApConfiguration.BAND_2GHZ);
-
- // Test band not support with auto channel
- configBuilder.setBand(SoftApConfiguration.BAND_5GHZ);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertEquals(resetedConfig.getBand(), SoftApConfiguration.BAND_2GHZ);
-
- // Test reset hidden network
- mResources.setBoolean(
- R.bool.config_wifiSoftapResetHiddenConfig, true);
- configBuilder.setHiddenSsid(true);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertFalse(resetedConfig.isHiddenSsid());
-
- // Test auto shutdown timer
- mResources.setBoolean(
- R.bool.config_wifiSoftapResetAutoShutdownTimerConfig, true);
- configBuilder.setShutdownTimeoutMillis(8888);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertEquals(resetedConfig.getShutdownTimeoutMillis(), 0);
-
- // Test max client setting when force client disconnect doesn't support
- mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, false);
- configBuilder.setMaxNumberOfClients(10);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertEquals(resetedConfig.getMaxNumberOfClients(), 0);
-
- // Test client control setting when force client disconnect doesn't support
- mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, false);
- ArrayList<MacAddress> blockedClientList = new ArrayList<>();
- ArrayList<MacAddress> allowedClientList = new ArrayList<>();
- blockedClientList.add(MacAddress.fromString("11:22:33:44:55:66"));
- allowedClientList.add(MacAddress.fromString("aa:bb:cc:dd:ee:ff"));
- configBuilder.setBlockedClientList(blockedClientList);
- configBuilder.setAllowedClientList(allowedClientList);
-
- configBuilder.setClientControlByUserEnabled(true);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertFalse(resetedConfig.isClientControlByUserEnabled());
- // The blocked list will be clean
- assertEquals(resetedConfig.getBlockedClientList().size(), 0);
- // The allowed list will be keep
- assertEquals(resetedConfig.getAllowedClientList(), allowedClientList);
-
- // Test max client setting when reset enabled but force client disconnect supported
- mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, true);
- mResources.setBoolean(
- R.bool.config_wifiSoftapResetMaxClientSettingConfig, true);
- assertEquals(resetedConfig.getMaxNumberOfClients(), 0);
-
- // Test client control setting when reset enabled but force client disconnect supported
- mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, true);
- mResources.setBoolean(
- R.bool.config_wifiSoftapResetUserControlConfig, true);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertFalse(resetedConfig.isClientControlByUserEnabled());
- assertEquals(resetedConfig.getBlockedClientList().size(), 0);
- assertEquals(resetedConfig.getAllowedClientList(), allowedClientList);
-
- // Test blocked list setting will be reset even if client control disabled
- mResources.setBoolean(
- R.bool.config_wifiSoftapResetUserControlConfig, true);
- configBuilder.setClientControlByUserEnabled(false);
- resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
- assertFalse(resetedConfig.isClientControlByUserEnabled());
- assertEquals(resetedConfig.getBlockedClientList().size(), 0);
- assertEquals(resetedConfig.getAllowedClientList(), allowedClientList);
- }
-
- /**
- * Verify Bssid field deny to set if caller without setting permission.
- */
- @Test
- public void testBssidDenyIfCallerWithoutPrivileged() throws Exception {
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = new SoftApConfiguration.Builder(store.getApConfiguration())
- .setBssid(MacAddress.fromString("aa:bb:cc:dd:ee:ff")).build();
- assertFalse(WifiApConfigStore.validateApWifiConfiguration(config, false, mContext));
- }
-
- /**
- * Verify Bssid field only allow to set if caller own setting permission.
- */
- @Test
- public void testBssidAllowIfCallerOwnPrivileged() throws Exception {
- WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = new SoftApConfiguration.Builder(store.getApConfiguration())
- .setBssid(MacAddress.fromString("aa:bb:cc:dd:ee:ff")).build();
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(config, true, mContext));
- }
-}