WifiConfigManagerTest.java revision b3706e8c20fdf0a0e2b4ec15355ae6f98588b732
150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius/* 250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Copyright (C) 2016 The Android Open Source Project 350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * 450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Licensed under the Apache License, Version 2.0 (the "License"); 550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * you may not use this file except in compliance with the License. 650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * You may obtain a copy of the License at 750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * 850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * http://www.apache.org/licenses/LICENSE-2.0 950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * 1050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Unless required by applicable law or agreed to in writing, software 1150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * distributed under the License is distributed on an "AS IS" BASIS, 1250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * See the License for the specific language governing permissions and 1450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * limitations under the License. 1550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 1650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1750eed92fe9556fdd9934683690181fea77ce4eacRoshan Piuspackage com.android.server.wifi; 1850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1950eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport static org.junit.Assert.*; 2050eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport static org.mockito.Mockito.*; 2150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2250eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.app.test.MockAnswerUtil.AnswerWithArguments; 2350eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.content.Context; 246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.content.Intent; 2565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Piusimport android.content.pm.ApplicationInfo; 2650eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.content.pm.PackageManager; 27c381d005c60603aadd30581ce675e979b3fec3feRoshan Piusimport android.content.pm.UserInfo; 2850eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.net.IpConfiguration; 2922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Piusimport android.net.wifi.ScanResult; 3050eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.net.wifi.WifiConfiguration; 31fc789b2227e92372b2489ca54691310800835a50Roshan Piusimport android.net.wifi.WifiConfiguration.NetworkSelectionStatus; 321fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Piusimport android.net.wifi.WifiEnterpriseConfig; 336e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.net.wifi.WifiManager; 34fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Piusimport android.net.wifi.WifiScanner; 3522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Piusimport android.net.wifi.WifiSsid; 366e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.os.UserHandle; 3750eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.os.UserManager; 3896241bee619ff7073635f680a36869f61a11a225Roshan Piusimport android.telephony.TelephonyManager; 3950eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.test.suitebuilder.annotation.SmallTest; 406e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.text.TextUtils; 4150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 428600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Piusimport com.android.internal.R; 433a738a26918230b2469d917dbf14323234edd39bRoshan Piusimport com.android.server.wifi.WifiConfigStoreLegacy.WifiConfigStoreDataLegacy; 448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 45ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Piusimport org.junit.After; 4650eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.junit.Before; 4750eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.junit.Test; 486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport org.mockito.ArgumentCaptor; 496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport org.mockito.InOrder; 5050eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.mockito.Mock; 5150eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.mockito.MockitoAnnotations; 5250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 5342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.FileDescriptor; 5442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.PrintWriter; 5542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.StringWriter; 5650eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport java.util.ArrayList; 571fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Piusimport java.util.Arrays; 582dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Piusimport java.util.HashSet; 5950eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport java.util.List; 60674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Piusimport java.util.Set; 6150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 6250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius/** 63a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Unit tests for {@link com.android.server.wifi.WifiConfigManager}. 6450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 6550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius@SmallTest 66a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Piuspublic class WifiConfigManagerTest { 6750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 6850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final String TEST_BSSID = "0a:08:5c:67:89:00"; 6950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final long TEST_WALLCLOCK_CREATION_TIME_MILLIS = 9845637; 7050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final long TEST_WALLCLOCK_UPDATE_TIME_MILLIS = 75455637; 71fc789b2227e92372b2489ca54691310800835a50Roshan Pius private static final long TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS = 29457631; 7250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final int TEST_CREATOR_UID = 5; 7350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final int TEST_UPDATE_UID = 4; 746d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius private static final int TEST_SYSUI_UID = 56; 756d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius private static final int TEST_DEFAULT_USER = UserHandle.USER_SYSTEM; 762dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private static final int TEST_MAX_NUM_ACTIVE_CHANNELS_FOR_PARTIAL_SCAN = 5; 772dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private static final Integer[] TEST_FREQ_LIST = {2400, 2450, 5150, 5175, 5650}; 7850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final String TEST_CREATOR_NAME = "com.wificonfigmanagerNew.creator"; 7950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final String TEST_UPDATE_NAME = "com.wificonfigmanagerNew.update"; 808600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius private static final String TEST_DEFAULT_GW_MAC_ADDRESS = "0f:67:ad:ef:09:34"; 8150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 8250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private Context mContext; 8350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private FrameworkFacade mFrameworkFacade; 8450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private Clock mClock; 8550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private UserManager mUserManager; 8696241bee619ff7073635f680a36869f61a11a225Roshan Pius @Mock private TelephonyManager mTelephonyManager; 8750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private WifiKeyStore mWifiKeyStore; 88a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius @Mock private WifiConfigStore mWifiConfigStore; 893a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Mock private WifiConfigStoreLegacy mWifiConfigStoreLegacy; 9050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private PackageManager mPackageManager; 9150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private MockResources mResources; 936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private InOrder mContextConfigStoreMockOrder; 94a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius private WifiConfigManager mWifiConfigManager; 9550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 9650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 97a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Setup the mocks and an instance of WifiConfigManager before each test. 9850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 9950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Before 10050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void setUp() throws Exception { 10150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius MockitoAnnotations.initMocks(this); 10250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Set up the inorder for verifications. This is needed to verify that the broadcasts, 1046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // store writes for network updates followed by network additions are in the expected order. 1056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder = inOrder(mContext, mWifiConfigStore); 1066e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 10750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Set up the package name stuff & permission override. 10850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mContext.getPackageManager()).thenReturn(mPackageManager); 1092dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources = new MockResources(); 1102dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setBoolean( 1118600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius R.bool.config_wifi_only_link_same_credential_configurations, true); 1122dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 1132dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 1142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_MAX_NUM_ACTIVE_CHANNELS_FOR_PARTIAL_SCAN); 1152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius when(mContext.getResources()).thenReturn(mResources); 1168600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 1176d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Setup UserManager profiles for the default user. 1186d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(TEST_DEFAULT_USER); 1196d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 12050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 12150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public String answer(int uid) throws Exception { 12250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (uid == TEST_CREATOR_UID) { 12350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return TEST_CREATOR_NAME; 12450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } else if (uid == TEST_UPDATE_UID) { 12550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return TEST_UPDATE_NAME; 1266d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } else if (uid == TEST_SYSUI_UID) { 127a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius return WifiConfigManager.SYSUI_PACKAGE_NAME; 12850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 12950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius fail("Unexpected UID: " + uid); 13050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return ""; 13150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 13250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mPackageManager).getNameForUid(anyInt()); 1336d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius doAnswer(new AnswerWithArguments() { 1346d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public int answer(String packageName, int flags, int userId) throws Exception { 135a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius if (packageName.equals(WifiConfigManager.SYSUI_PACKAGE_NAME)) { 1366d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius return TEST_SYSUI_UID; 1376d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } else { 1386d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius return 0; 1396d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 1406d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 1416d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius }).when(mPackageManager).getPackageUidAsUser(anyString(), anyInt(), anyInt()); 14250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 14350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Both the UID's in the test have the configuration override permission granted by 14450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // default. This maybe modified for particular tests if needed. 14550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 14650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public int answer(String permName, int uid) throws Exception { 14750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (uid == TEST_CREATOR_UID || uid == TEST_UPDATE_UID) { 14850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_GRANTED; 14950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 15050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_DENIED; 15150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 15250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 15350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1541fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius when(mWifiKeyStore 1551fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius .updateNetworkKeys(any(WifiConfiguration.class), any(WifiConfiguration.class))) 1561fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius .thenReturn(true); 1571fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 1583a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(true); 1593a738a26918230b2469d917dbf14323234edd39bRoshan Pius 1602dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 16150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 16250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 16350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 164ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius * Called after each test 165ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius */ 166ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius @After 167ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius public void cleanup() { 168ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius validateMockitoUsage(); 169ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius } 170ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius 171ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius /** 17250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single network using 173a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 17450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 17550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 17650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSingleOpenNetwork() { 17750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 17850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 17950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 18050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1816e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 18250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 18350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 18450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 18550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 18650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 1870ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius // Ensure that the newly added network is disabled. 1880ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius assertEquals(WifiConfiguration.Status.DISABLED, retrievedNetworks.get(0).status); 18950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 19050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 19150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 19250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the modification of a single network using 193a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 19450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 19550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 19650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetwork() { 19750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 19850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 19950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 20050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 20250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID for the network. 20450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 2056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 20650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 20750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that the modification has been effective. 20850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 20950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 21050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 21150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 21250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 21350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 21450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 21550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single ephemeral network using 216a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 217a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * the {@link WifiConfigManager#getSavedNetworks()} does not return this network. 21850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 21950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 22050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSingleEphemeralNetwork() { 22150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 22250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius openNetwork.ephemeral = true; 22350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 22450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 22550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddEphemeralNetworkToWifiConfigManager(openNetwork); 22750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 22850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 22950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 23050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 23150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 23250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 23350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Ensure that this is not returned in the saved network list. 23450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(mWifiConfigManager.getSavedNetworks().isEmpty()); 23550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 23650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 23750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 23850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies that the modification of a single open network using 239a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with a UID which 24050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * has no permission to modify the network fails. 24150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 24250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 24350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetworkFailedDueToPermissionDenied() throws Exception { 24450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 24550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 24650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 24750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 24950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2506e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 25150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 25250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 25350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Deny permission for |UPDATE_UID|. 25450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 25550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public int answer(String permName, int uid) throws Exception { 25650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (uid == TEST_CREATOR_UID) { 25750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_GRANTED; 25850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 25950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_DENIED; 26050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 26150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 26250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 26350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration and ensure that the operation failed. 2646e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = updateNetworkToWifiConfigManager(openNetwork); 26550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(result.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID); 26650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 26750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 26850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 26950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies that the modification of a single open network using 270a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with the creator UID 27150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * should always succeed. 27250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 27350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 27450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetworkSuccessWithCreatorUID() throws Exception { 27550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 27650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 27750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 27850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 28050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2816e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 28250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 28350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 28450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Deny permission for all UIDs. 28550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 28650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public int answer(String permName, int uid) throws Exception { 28750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_DENIED; 28850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 28950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 29050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 29150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration using the creator UID. 2926e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = 2936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mWifiConfigManager.addOrUpdateNetwork(openNetwork, TEST_CREATOR_UID); 29450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 29550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 29650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that the modification has been effective. 29750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 29850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 29950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 30050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 30150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 30250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 30350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 30450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single PSK network using 305a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 306a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworks()} masks the password. 30750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 30850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 30950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSinglePskNetwork() { 31050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 31150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 31250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(pskNetwork); 31350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3146e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 31550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 31650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 31750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 31850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 31950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 32050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 32150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedSavedNetworks = mWifiConfigManager.getSavedNetworks(); 32250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.size(), 1); 32350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.get(0).configKey(), pskNetwork.configKey()); 3246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedSavedNetworks.get(0)); 32550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 32650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 32750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 32850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single WEP network using 329a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 330a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworks()} masks the password. 33150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 33250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 33350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSingleWepNetwork() { 33450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 33550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 33650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(wepNetwork); 33750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3386e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 33950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 34050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 34150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 34250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 34350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 34450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 34550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedSavedNetworks = mWifiConfigManager.getSavedNetworks(); 34650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.size(), 1); 34750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.get(0).configKey(), wepNetwork.configKey()); 3486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedSavedNetworks.get(0)); 34950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 35050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 35150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 35250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the modification of an IpConfiguration using 353a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 35450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 35550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 35650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateIpConfiguration() { 35750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 35850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 35950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 36050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3616e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 36250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3636e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 36450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 36550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 36650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration and ensure that the IP configuration change flags 36750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // are not set. 3686e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 36950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 37050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Change the IpConfiguration now and ensure that the IP configuration flags are set now. 37150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkIpConfiguration( 37250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius openNetwork, 37350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy()); 3746e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithIpChange(openNetwork); 37550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 37650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that all the modifications have been effective. 37750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 37850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 37950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 38050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 38150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 38250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 38350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 384c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * Verifies the removal of a single network using 385a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int)} 386c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 387c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius @Test 388c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius public void testRemoveSingleOpenNetwork() { 389c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 390c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 391c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(openNetwork); 392c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 393c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 394c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 395c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(openNetwork); 396c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 397c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Ensure that configured network list is empty now. 398c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 399c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 400c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 401c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 402fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the addition & update of multiple networks using 403a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and the 404c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * removal of networks using 405a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int)} 406c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 407c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius @Test 408fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testAddUpdateRemoveMultipleNetworks() { 409c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 410c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 411c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 412c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 413c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(openNetwork); 414c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(pskNetwork); 415c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(wepNetwork); 416c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 417c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 418c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 419c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 420c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 421c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now verify that all the additions has been effective. 422c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius List<WifiConfiguration> retrievedNetworks = 423c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 424c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 425c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks, retrievedNetworks); 426c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 427c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Modify all the 3 configurations and update it to WifiConfigManager. 428c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 429c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkBSSID(pskNetwork, TEST_BSSID); 430c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkIpConfiguration( 431c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius wepNetwork, 432c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy()); 433c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 434c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 435c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(pskNetwork); 436c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithIpChange(wepNetwork); 437c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now verify that all the modifications has been effective. 438c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 439c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 440c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks, retrievedNetworks); 441c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 442c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now remove all 3 networks. 443c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(openNetwork); 444c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(pskNetwork); 445c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(wepNetwork); 446c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 447c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Ensure that configured network list is empty now. 448c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 449c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 450c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 451c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 452fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the update of network status using 453a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)}. 454fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 455fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 456fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testNetworkSelectionStatus() { 457fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 458fc789b2227e92372b2489ca54691310800835a50Roshan Pius 459fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 460fc789b2227e92372b2489ca54691310800835a50Roshan Pius 461fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 462fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 463fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 464fc789b2227e92372b2489ca54691310800835a50Roshan Pius 465fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled. The threshold for association rejection is 5, so 466fc789b2227e92372b2489ca54691310800835a50Roshan Pius // disable it 5 times to actually mark it temporarily disabled. 467fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectReason = NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION; 468fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectThreshold = 469a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[assocRejectReason]; 470fc789b2227e92372b2489ca54691310800835a50Roshan Pius for (int i = 1; i <= assocRejectThreshold; i++) { 471fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus(result.getNetworkId(), assocRejectReason, i); 472fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 473fc789b2227e92372b2489ca54691310800835a50Roshan Pius 474fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to permanently disabled. 475fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 476fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_BY_WIFI_MANAGER, 0); 477fc789b2227e92372b2489ca54691310800835a50Roshan Pius 478fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it back to enabled. 479fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 480fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 481fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 482fc789b2227e92372b2489ca54691310800835a50Roshan Pius 483fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 484fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the update of network status using 485a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)} and ensures that 486fc789b2227e92372b2489ca54691310800835a50Roshan Pius * enabling a network clears out all the temporary disable counters. 487fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 488fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 489fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testNetworkSelectionStatusEnableClearsDisableCounters() { 490fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 491fc789b2227e92372b2489ca54691310800835a50Roshan Pius 492fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 493fc789b2227e92372b2489ca54691310800835a50Roshan Pius 494fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 495fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 496fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 497fc789b2227e92372b2489ca54691310800835a50Roshan Pius 498fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled 2 times for 2 different reasons. 499fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 500fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 1); 501fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 502fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 2); 503fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 504fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 1); 505fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 506fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 2); 507fc789b2227e92372b2489ca54691310800835a50Roshan Pius 508fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it back to enabled. 509fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 510fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 511fc789b2227e92372b2489ca54691310800835a50Roshan Pius 512fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Ensure that the counters have all been reset now. 513fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 514fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 1); 515fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 516fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 1); 517fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 518fc789b2227e92372b2489ca54691310800835a50Roshan Pius 519fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 520fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the enabling of temporarily disabled network using 521a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#tryEnableNetwork(int)}. 522fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 523fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 524fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testTryEnableNetwork() { 525fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 526fc789b2227e92372b2489ca54691310800835a50Roshan Pius 527fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 528fc789b2227e92372b2489ca54691310800835a50Roshan Pius 529fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 530fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 531fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 532fc789b2227e92372b2489ca54691310800835a50Roshan Pius 533fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled. The threshold for association rejection is 5, so 534fc789b2227e92372b2489ca54691310800835a50Roshan Pius // disable it 5 times to actually mark it temporarily disabled. 535fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectReason = NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION; 536fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectThreshold = 537a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[assocRejectReason]; 538fc789b2227e92372b2489ca54691310800835a50Roshan Pius for (int i = 1; i <= assocRejectThreshold; i++) { 539fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus(result.getNetworkId(), assocRejectReason, i); 540fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 541fc789b2227e92372b2489ca54691310800835a50Roshan Pius 542fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now let's try enabling this network without changing the time, this should fail and the 543fc789b2227e92372b2489ca54691310800835a50Roshan Pius // status remains temporarily disabled. 544fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertFalse(mWifiConfigManager.tryEnableNetwork(result.getNetworkId())); 545fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus retrievedStatus = 546fc789b2227e92372b2489ca54691310800835a50Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 547fc789b2227e92372b2489ca54691310800835a50Roshan Pius .getNetworkSelectionStatus(); 548fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkTemporaryDisabled()); 549fc789b2227e92372b2489ca54691310800835a50Roshan Pius 550fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now advance time by the timeout for association rejection and ensure that the network 551fc789b2227e92372b2489ca54691310800835a50Roshan Pius // is now enabled. 552fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectTimeout = 553a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_TIMEOUT_MS[assocRejectReason]; 554fc789b2227e92372b2489ca54691310800835a50Roshan Pius when(mClock.getElapsedSinceBootMillis()) 555fc789b2227e92372b2489ca54691310800835a50Roshan Pius .thenReturn(TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS + assocRejectTimeout); 556fc789b2227e92372b2489ca54691310800835a50Roshan Pius 557fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(mWifiConfigManager.tryEnableNetwork(result.getNetworkId())); 558fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedStatus = 559fc789b2227e92372b2489ca54691310800835a50Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 560fc789b2227e92372b2489ca54691310800835a50Roshan Pius .getNetworkSelectionStatus(); 561fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 562fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 563fc789b2227e92372b2489ca54691310800835a50Roshan Pius 564fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 565a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the enabling of network using 566a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} and 567a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#disableNetwork(int, int)}. 568a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 569a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 570a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testEnableDisableNetwork() { 571a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 572a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 573a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 574a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 575a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 576a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), false, TEST_CREATOR_UID)); 577a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 578a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 579a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 580a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 581a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 582a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 583a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now set it disabled. 584a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 585a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 586a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 587a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkPermanentlyDisabled()); 588a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.DISABLED); 589a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 590a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 591a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 592a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the enabling of network using 593a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} with a UID which 594a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * has no permission to modify the network fails.. 595a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 596a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 597a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testEnableDisableNetworkFailedDueToPermissionDenied() throws Exception { 598a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 599a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 600a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 601a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 602a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 603a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), false, TEST_CREATOR_UID)); 604a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 605a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 606a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 607a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 608a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 609a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 610a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Deny permission for |UPDATE_UID|. 611a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius doAnswer(new AnswerWithArguments() { 612a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public int answer(String permName, int uid) throws Exception { 613a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius if (uid == TEST_CREATOR_UID) { 614a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_GRANTED; 615a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 616a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_DENIED; 617a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 618a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 619a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 620a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now try to set it disabled with |TEST_UPDATE_UID|, it should fail and the network 621a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // should remain enabled. 622a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_UPDATE_UID)); 623a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedStatus = 624a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 625a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius .getNetworkSelectionStatus(); 626a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 627a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(WifiConfiguration.Status.ENABLED, retrievedNetwork.status); 628a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 629a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 630a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 631a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the updation of network's connectUid using 632a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#checkAndUpdateLastConnectUid(int, int)}. 633a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 634a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 635a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testUpdateLastConnectUid() throws Exception { 636a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 637a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 638a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 639a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 640a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue( 6412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.checkAndUpdateLastConnectUid( 6422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius result.getNetworkId(), TEST_CREATOR_UID)); 643a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 644a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 645a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(TEST_CREATOR_UID, retrievedNetwork.lastConnectUid); 646a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 647a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Deny permission for |UPDATE_UID|. 648a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius doAnswer(new AnswerWithArguments() { 649a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public int answer(String permName, int uid) throws Exception { 650a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius if (uid == TEST_CREATOR_UID) { 651a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_GRANTED; 652a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 653a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_DENIED; 654a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 655a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 656a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 657a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now try to update the last connect UID with |TEST_UPDATE_UID|, it should fail and 658a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // the lastConnectUid should remain the same. 659a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse( 6601fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius mWifiConfigManager.checkAndUpdateLastConnectUid( 6611fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius result.getNetworkId(), TEST_UPDATE_UID)); 662a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 663a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(TEST_CREATOR_UID, retrievedNetwork.lastConnectUid); 664a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 665a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 666a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 667a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration update attempt with an null config is gracefully 668a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 669a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 670a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 671a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 672a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testAddOrUpdateNetworkWithNullConfig() { 673a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = mWifiConfigManager.addOrUpdateNetwork(null, TEST_CREATOR_UID); 674a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(result.isSuccess()); 675a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 676a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 677a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 678a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration removal attempt with an invalid networkID is gracefully 679a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 680a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#removeNetwork(int)}. 681a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 682a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 683a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testRemoveNetworkWithInvalidNetworkId() { 684a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 685a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 686a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 687a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 688a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Change the networkID to an invalid one. 689a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius openNetwork.networkId++; 6906d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertFalse(mWifiConfigManager.removeNetwork(openNetwork.networkId, TEST_CREATOR_UID)); 691a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 692a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 693a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 694a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration update attempt with an invalid networkID is gracefully 695a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 696a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#enableNetwork(int, boolean, int)}, 697a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#disableNetwork(int, int)}, 698a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)} and 699a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#checkAndUpdateLastConnectUid(int, int)}. 700a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 701a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 702a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testChangeConfigurationWithInvalidNetworkId() { 703a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 704a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 705a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 706a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 707a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertFalse(mWifiConfigManager.enableNetwork( 708a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId() + 1, false, TEST_CREATOR_UID)); 70922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertFalse(mWifiConfigManager.disableNetwork(result.getNetworkId() + 1, TEST_CREATOR_UID)); 710a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.updateNetworkSelectionStatus( 71122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius result.getNetworkId() + 1, NetworkSelectionStatus.DISABLED_BY_WIFI_MANAGER)); 712a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.checkAndUpdateLastConnectUid( 71322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius result.getNetworkId() + 1, TEST_CREATOR_UID)); 714a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 715a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 716a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 7171fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies multiple modification of a single network using 718a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 7191fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * This test is basically checking if the apps can reset some of the fields of the config after 7201fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * addition. The fields being reset in this test are the |preSharedKey| and |wepKeys|. 7211fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 1. Create an open network initially. 7221fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 2. Modify the added network config to a WEP network config with all the 4 keys set. 7231fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 3. Modify the added network config to a WEP network config with only 1 key set. 7241fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 4. Modify the added network config to a PSK network config. 7251fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 7261fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 7271fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testMultipleUpdatesSingleNetwork() { 7281fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createOpenNetwork(); 7291fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 7301fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7311fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now add |wepKeys| to the network. We don't need to update the |allowedKeyManagement| 7321fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // fields for open to WEP conversion. 7331fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius String[] wepKeys = 7341fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius Arrays.copyOf(WifiConfigurationTestUtil.TEST_WEP_KEYS, 7351fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.TEST_WEP_KEYS.length); 7361fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius int wepTxKeyIdx = WifiConfigurationTestUtil.TEST_WEP_TX_KEY_INDEX; 7371fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 7381fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7391fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 7401fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 7411fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 7421fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7431fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now empty out 3 of the |wepKeys[]| and ensure that those keys have been reset correctly. 7441fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius for (int i = 1; i < network.wepKeys.length; i++) { 7451fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepKeys[i] = ""; 7461fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 7471fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepTxKeyIdx = 0; 7481fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 7491fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7501fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 7511fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 7521fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 7531fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7541fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now change the config to a PSK network config by resetting the remaining |wepKey[0]| 7551fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // field and setting the |preSharedKey| and |allowedKeyManagement| fields. 7561fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepKeys[0] = ""; 7571fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepTxKeyIdx = -1; 7581fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 7591fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 7601fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkPreSharedKey(network, WifiConfigurationTestUtil.TEST_PSK); 7611fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7621fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 7631fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 7641fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 7651fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 7661fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7671fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 7681fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies the modification of a WifiEnteriseConfig using 769a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 7701fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 7711fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 7721fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testUpdateWifiEnterpriseConfig() { 7731fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 7741fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 7751fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7761fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Set the |password| field in WifiEnterpriseConfig and modify the config to PEAP/GTC. 7771fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig = 7781fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 7791fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkEnterprisePassword(network, "test"); 7801fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7811fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 7821fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 7831fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 7841fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7851fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Reset the |password| field in WifiEnterpriseConfig and modify the config to TLS/None. 7861fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 7871fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE); 7881fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkEnterprisePassword(network, ""); 7891fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7901fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 7911fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 7921fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 7931fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 7941fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7951fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 7961fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies the modification of a single network using 797a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} by passing in nulls 7981fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * in all the publicly exposed fields. 7991fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 8001fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 8011fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testUpdateSingleNetworkWithNullValues() { 8021fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 8031fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 8041fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8051fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Save a copy of the original network for comparison. 8061fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration originalNetwork = new WifiConfiguration(network); 8071fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8081fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now set all the public fields to null and try updating the network. 8091fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedAuthAlgorithms = null; 8101fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedProtocols = null; 8111fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedKeyManagement = null; 8121fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedPairwiseCiphers = null; 8131fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedGroupCiphers = null; 8141fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.setIpConfiguration(null); 8151fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig = null; 8161fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8171fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 8181fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8191fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Copy over the updated debug params to the original network config before comparison. 8201fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.lastUpdateUid = network.lastUpdateUid; 8211fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.lastUpdateName = network.lastUpdateName; 8221fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.updateTime = network.updateTime; 8231fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8241fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now verify that there was no change to the network configurations. 8251fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 8261fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork, 8271fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(originalNetwork.networkId)); 8281fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 8291fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8301fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 8311230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius * Verifies that the modification of a single network using 832a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} does not modify 8331230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius * existing configuration if there is a failure. 8341230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius */ 8351230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius @Test 8361230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius public void testUpdateSingleNetworkFailureDoesNotModifyOriginal() { 8371230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 8381230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius network.enterpriseConfig = 8391230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 8401230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius verifyAddNetworkToWifiConfigManager(network); 8411230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 8421230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Save a copy of the original network for comparison. 8431230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfiguration originalNetwork = new WifiConfiguration(network); 8441230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 8451230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Now modify the network's EAP method. 8461230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius network.enterpriseConfig = 8471230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.createTLSWifiEnterpriseConfigWithNonePhase2(); 8481230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 8491230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Fail this update because of cert installation failure. 8501230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius when(mWifiKeyStore 8511230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius .updateNetworkKeys(any(WifiConfiguration.class), any(WifiConfiguration.class))) 8521230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius .thenReturn(false); 8531230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius NetworkUpdateResult result = 8541230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius mWifiConfigManager.addOrUpdateNetwork(network, TEST_UPDATE_UID); 8551230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius assertTrue(result.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID); 8561230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 8571230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Now verify that there was no change to the network configurations. 8581230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 8591230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius originalNetwork, 8601230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(originalNetwork.networkId)); 8611230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius } 8621230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 8631230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius /** 86422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies the matching of networks with different encryption types with the 86522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * corresponding scan detail using 866a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)}. 86722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * The test also verifies that the provided scan detail was cached, 86822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 86922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 87022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testMatchScanDetailToNetworksAndCache() { 87122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Create networks of different types and ensure that they're all matched using 87222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // the corresponding ScanDetail correctly. 87322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 87422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createOpenNetwork()); 87522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 87622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createWepNetwork()); 87722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 87822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createPskNetwork()); 87922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 88022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createEapNetwork()); 88122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 88222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 88322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 88422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies that scan details with wrong SSID/authentication types are not matched using 885a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)} 88622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * to the added networks. 88722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 88822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 88922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testNoMatchScanDetailToNetwork() { 89022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // First create networks of different types. 89122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 89222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 89322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 89422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 89522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 89622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now add them to WifiConfigManager. 89722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 89822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 89922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 90022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(eapNetwork); 90122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 90222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now create dummy scan detail corresponding to the networks. 90322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail openNetworkScanDetail = createScanDetailForNetwork(openNetwork); 90422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail wepNetworkScanDetail = createScanDetailForNetwork(wepNetwork); 90522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail pskNetworkScanDetail = createScanDetailForNetwork(pskNetwork); 90622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail eapNetworkScanDetail = createScanDetailForNetwork(eapNetwork); 90722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 90822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now mix and match parameters from different scan details. 90922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetworkScanDetail.getScanResult().SSID = 91022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius wepNetworkScanDetail.getScanResult().SSID; 91122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius wepNetworkScanDetail.getScanResult().capabilities = 91222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius pskNetworkScanDetail.getScanResult().capabilities; 91322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius pskNetworkScanDetail.getScanResult().capabilities = 91422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius eapNetworkScanDetail.getScanResult().capabilities; 91522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius eapNetworkScanDetail.getScanResult().capabilities = 91622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetworkScanDetail.getScanResult().capabilities; 91722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 91822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Try to lookup a saved network using the modified scan details. All of these should fail. 91922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(openNetworkScanDetail)); 92022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(wepNetworkScanDetail)); 92122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(pskNetworkScanDetail)); 92222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(eapNetworkScanDetail)); 92322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 92422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // All the cache's should be empty as well. 92522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId)); 92622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(wepNetwork.networkId)); 92722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(pskNetwork.networkId)); 92822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(eapNetwork.networkId)); 92922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 93022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 93122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 93222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies that scan detail cache is trimmed down when the size of the cache for a network 933a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * exceeds {@link WifiConfigManager#SCAN_CACHE_ENTRIES_MAX_SIZE}. 93422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 93522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 93622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testScanDetailCacheTrimForNetwork() { 93722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Add a single network. 93822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 93922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 94022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 94122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetailCache scanDetailCache; 94222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius String testBssidPrefix = "00:a5:b8:c9:45:"; 94322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 94422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Modify |BSSID| field in the scan result and add copies of scan detail 94522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_MAX_SIZE| times. 94622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius int scanDetailNum = 1; 947a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius for (; scanDetailNum <= WifiConfigManager.SCAN_CACHE_ENTRIES_MAX_SIZE; scanDetailNum++) { 94822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Create dummy scan detail caches with different BSSID for the network. 94922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = 95022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius createScanDetailForNetwork( 95122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetwork, String.format("%s%02x", testBssidPrefix, scanDetailNum)); 95222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNotNull( 95322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail)); 95422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 95522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // The size of scan detail cache should keep growing until it hits 95622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_MAX_SIZE|. 95722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius scanDetailCache = 95822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId); 95922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertEquals(scanDetailNum, scanDetailCache.size()); 96022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 96122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 96222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now add the |SCAN_CACHE_ENTRIES_MAX_SIZE + 1| entry. This should trigger the trim. 96322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = 96422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius createScanDetailForNetwork( 96522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetwork, String.format("%s%02x", testBssidPrefix, scanDetailNum)); 96622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail)); 96722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 96822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Retrieve the scan detail cache and ensure that the size was trimmed down to 96922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_TRIM_SIZE + 1|. The "+1" is to account for the new entry that 97022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // was added after the trim. 97122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius scanDetailCache = mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId); 972a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.SCAN_CACHE_ENTRIES_TRIM_SIZE + 1, scanDetailCache.size()); 97322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 97422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 97522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 9762d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is false for a newly added network. 9772d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 9782d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 9792d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testAddNetworkHasEverConnectedFalse() { 9802d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(WifiConfigurationTestUtil.createOpenNetwork()); 9812d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 9822d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 9832d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 9842d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is false for a newly added network even when new config has 9852d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * mistakenly set HasEverConnected to true. 9862d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 9872d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 9882d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testAddNetworkOverridesHasEverConnectedWhenTrueInNewConfig() { 9892d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 9902d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 9912d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(openNetwork); 9922d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 9932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 9942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 9952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verify that the |HasEverConnected| is set when 996a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkAfterConnect(int)} is invoked. 9972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 9982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 999cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius public void testUpdateConfigAfterConnectHasEverConnectedTrue() { 10002d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 10012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(openNetwork); 10022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(openNetwork.networkId); 10032d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |preSharedKey| is updated. 10072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdatePreSharedKeyClearsHasEverConnected() { 10102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 10112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 10122d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 10132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different psk. 10152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.preSharedKey.equals("newpassword")); 10162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.preSharedKey = "newpassword"; 10172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 10182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |wepKeys| is updated. 10222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateWepKeysClearsHasEverConnected() { 10252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 10262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(wepNetwork); 10272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(wepNetwork.networkId); 10282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different wep. 10302d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(wepNetwork.wepKeys[0].equals("newpassword")); 10312d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius wepNetwork.wepKeys[0] = "newpassword"; 10322d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(wepNetwork); 10332d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10342d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10352d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10362d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |wepTxKeyIndex| is updated. 10372d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10382d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10392d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateWepTxKeyClearsHasEverConnected() { 10402d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 10412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(wepNetwork); 10422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(wepNetwork.networkId); 10432d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10442d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different wep. 10452d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(wepNetwork.wepTxKeyIndex == 3); 10462d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius wepNetwork.wepTxKeyIndex = 3; 10472d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(wepNetwork); 10482d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10492d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10502d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10512d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedKeyManagement| is 10522d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 10532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10542d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10552d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedKeyManagementClearsHasEverConnected() { 10562d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 10572d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 10582d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 10592d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10602d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)); 10612d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X); 10622d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 10632d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10642d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10652d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10662d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedProtocol| is 10672d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 10682d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10692d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10702d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateProtocolsClearsHasEverConnected() { 10712d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 10722d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 10732d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 10742d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10752d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedProtocols.get(WifiConfiguration.Protocol.OSEN)); 10762d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedProtocols.set(WifiConfiguration.Protocol.OSEN); 10772d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 10782d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10792d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10802d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10812d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedAuthAlgorithms| is 10822d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 10832d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10842d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10852d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedAuthAlgorithmsClearsHasEverConnected() { 10862d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 10872d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 10882d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 10892d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10902d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.LEAP)); 10912d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.LEAP); 10922d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 10932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10962d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedPairwiseCiphers| is 10972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 10982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10992d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11002d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedPairwiseCiphersClearsHasEverConnected() { 11012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11032d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedPairwiseCiphers.get(WifiConfiguration.PairwiseCipher.NONE)); 11062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.NONE); 11072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 11082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedGroup| is 11122d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedGroupCiphersClearsHasEverConnected() { 11162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue(pskNetwork.allowedGroupCiphers.get(WifiConfiguration.GroupCipher.WEP104)); 11212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedGroupCiphers.clear(WifiConfiguration.GroupCipher.WEP104); 11222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 11232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |hiddenSSID| is 11272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11302d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateHiddenSSIDClearsHasEverConnected() { 11312d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11322d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11332d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11342d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11352d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.hiddenSSID); 11362d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.hiddenSSID = true; 11372d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 11382d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11392d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11402d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is not cleared when a network config |requirePMF| is 11422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11432d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11442d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11452d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateRequirePMFDoesNotClearHasEverConnected() { 11462d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11472d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11482d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11492d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11502d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.requirePMF); 11512d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.requirePMF = true; 11522d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = 11542d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(pskNetwork); 11552d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 11562d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 11572d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue("Updating network non-credentials config should not clear hasEverConnected.", 11582d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 11592d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11602d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11612d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11622d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |enterpriseConfig| is 11632d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11642d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11652d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11662d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateEnterpriseConfigClearsHasEverConnected() { 11672d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 11682d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius eapNetwork.enterpriseConfig = 11692d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 11702d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(eapNetwork); 11712d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(eapNetwork.networkId); 11722d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11732d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(eapNetwork.enterpriseConfig.getEapMethod() == WifiEnterpriseConfig.Eap.TLS); 11742d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius eapNetwork.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 11752d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(eapNetwork); 11762d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11772d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11782d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 1179fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius * Verifies the ordering of network list generated using 1180a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#retrievePnoNetworkList()}. 1181fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius */ 1182fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius @Test 1183fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius public void testRetrievePnoList() { 1184fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Create and add 3 networks. 1185fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createEapNetwork(); 1186fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 1187fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 1188fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network1); 1189fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network2); 1190fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network3); 1191fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1192fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Enable all of them. 1193a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network1.networkId, false, TEST_CREATOR_UID)); 1194a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network2.networkId, false, TEST_CREATOR_UID)); 1195a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network3.networkId, false, TEST_CREATOR_UID)); 1196fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1197fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now set scan results in 2 of them to set the corresponding 1198fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // {@link NetworkSelectionStatus#mSeenInLastQualifiedNetworkSelection} field. 1199fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 1200fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius network1.networkId, createScanDetailForNetwork(network1).getScanResult(), 54)); 1201fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 1202fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius network3.networkId, createScanDetailForNetwork(network3).getScanResult(), 54)); 1203fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1204fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now increment |network3|'s association count. This should ensure that this network 1205fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // is preferred over |network1|. 1206fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(network3.networkId)); 1207fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1208fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Retrieve the Pno network list & verify the order of the networks returned. 1209fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius List<WifiScanner.PnoSettings.PnoNetwork> pnoNetworks = 1210fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius mWifiConfigManager.retrievePnoNetworkList(); 1211fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(3, pnoNetworks.size()); 1212fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network3.SSID, pnoNetworks.get(0).ssid); 1213fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network1.SSID, pnoNetworks.get(1).ssid); 1214fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network2.SSID, pnoNetworks.get(2).ssid); 1215fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1216fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now permanently disable |network3|. This should remove network 3 from the list. 1217fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.disableNetwork(network3.networkId, TEST_CREATOR_UID)); 1218fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1219fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Retrieve the Pno network list again & verify the order of the networks returned. 1220fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius pnoNetworks = mWifiConfigManager.retrievePnoNetworkList(); 1221fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(2, pnoNetworks.size()); 1222fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network1.SSID, pnoNetworks.get(0).ssid); 1223fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network2.SSID, pnoNetworks.get(1).ssid); 1224fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius } 1225fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1226fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius /** 12278600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have the same default GW Mac address in 1228a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 12298600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 12308600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 12318600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingGwMacAddress() { 12328600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 12338600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 12348600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 12358600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 12368600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 12378600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 12388600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12398600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Set the same default GW mac address for all of the networks. 12408600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 12418600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 12428600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 12438600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 12448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 12458600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network3.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 12468600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12478600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now create dummy scan detail corresponding to the networks. 12488600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1); 12498600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2); 12508600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail3 = createScanDetailForNetwork(network3); 12518600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12528600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 12538600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 12548600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 12558600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 12568600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail3)); 12578600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12588600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 12598600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 12608600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 12618600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(2, network.linkedConfigurations.size()); 12628600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 12638600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 12648600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 12658600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 12668600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 12678600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 12688600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 12698600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 12708600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12718600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 12728600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have scan results with same first 16 ASCII of 12738600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * bssid in 1274a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 12758600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 12768600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 12778600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingBSSIDMatch() { 12788600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 12798600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 12808600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 12818600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 12828600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 12838600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 12848600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12858600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 12868600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 12878600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 12888600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail3 = createScanDetailForNetwork(network3, "af:89:56:34:56:69"); 12898600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12908600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 12918600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 12928600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 12938600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 12948600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail3)); 12958600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 12968600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 12978600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 12988600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 12998600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(2, network.linkedConfigurations.size()); 13008600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 13018600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 13028600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 13038600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13048600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 13058600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13068600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13078600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13088600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13098600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 13108600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks does not happen for non WPA networks when they have scan 13118600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * results with same first 16 ASCII of bssid in 1312a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 13138600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 13148600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 13158600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNoNetworkLinkUsingBSSIDMatchForNonWpaNetworks() { 13168600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork(); 13178600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 13188600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 13198600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 13208600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13218600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 13228600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 13238600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 13248600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13258600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 13268600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 13278600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13288600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 13298600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 13308600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 13318600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 13328600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13338600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13348600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13358600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 13368600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks does not happen for networks with more than 1337a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#LINK_CONFIGURATION_MAX_SCAN_CACHE_ENTRIES} scan 13388600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * results with same first 16 ASCII of bssid in 1339a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 13408600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 13418600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 13428600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNoNetworkLinkUsingBSSIDMatchForNetworksWithHighScanDetailCacheSize() { 13438600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 13448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 13458600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 13468600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 13478600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13488600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create 7 scan results with bssid which is different in only the last char. 13498600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 13508600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius int scan_result_num = 0; 1351a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius for (; scan_result_num < WifiConfigManager.LINK_CONFIGURATION_MAX_SCAN_CACHE_ENTRIES + 1; 13522dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius scan_result_num++) { 13538600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail = 13548600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork( 13558600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1, test_bssid_base + Integer.toString(scan_result_num)); 13568600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull( 13578600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 13588600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13598600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13608600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now add 1 scan result to the other network with bssid which is different in only the 13618600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // last char. 13628600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = 13638600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork( 13648600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2, test_bssid_base + Integer.toString(scan_result_num++)); 13658600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 13668600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13678600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 13688600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 13698600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 13708600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 13718600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13728600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13738600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13748600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 13758600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have scan results with same first 16 ASCII of 1376a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * bssid in {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)} 13778600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * and then subsequently delinked when the networks have default gateway set which do not match. 13788600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 13798600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 13808600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingBSSIDMatchAndThenUnlinkDueToGwMacAddress() { 13818600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 13828600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 13838600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 13848600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 13858600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13868600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 13878600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 13888600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 13898600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13908600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 13918600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 13928600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 13938600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 13948600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13958600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 13968600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 13978600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 13988600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(1, network.linkedConfigurations.size()); 13998600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 14008600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 14018600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 14028600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14038600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 14048600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14058600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14068600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14078600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now Set different GW mac address for both the networks and ensure they're unlinked. 14088600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 14098600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1.networkId, "de:ad:fe:45:23:34")); 14108600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 14118600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2.networkId, "ad:de:fe:45:23:34")); 14128600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14138600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Add some dummy scan results again to re-evaluate the linking of networks. 14148600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache( 14158600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork(network1, "af:89:56:34:45:67"))); 14168600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache( 14178600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork(network1, "af:89:56:34:45:68"))); 14188600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14198600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworks(); 14208600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 14218600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 14228600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14238600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14248600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /* 14262dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 1427a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long)}. 14282dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 14292dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 14302dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetwork() { 14312dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 14322dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 14332dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 14342dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 14352dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 14362dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 14372dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 14382dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 14392dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 14402dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 14412dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 14422dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 14432dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 14442dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 14452dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network.networkId, 1)); 14462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 14472dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 14482dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 14492dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 1450a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long)} and ensures 14512dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * that scan results which have a timestamp beyond the provided age are not used in the 14522dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * channel list. 14532dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 14542dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 14552dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIgnoresStaleScanResults() { 14562dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 14572dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 14582dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 14592dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius long wallClockBase = 0; 14602dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 14612dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 14622dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 14632dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Increment the seen value in the scan results for each of them. 14642dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius when(mClock.getWallClockMillis()).thenReturn(wallClockBase + i); 14652dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 14662dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 14672dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 14682dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 14692dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 14702dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 14712dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 14722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int ageInMillis = 4; 14732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Now fetch only scan results which are 4 millis stale. This should ignore the first 14742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // scan result. 14752dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals( 14762dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius new HashSet<>(Arrays.asList( 14772dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius Arrays.copyOfRange( 14782dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST, 14792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST.length - ageInMillis, TEST_FREQ_LIST.length))), 14802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 14812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network.networkId, ageInMillis)); 14822dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 14832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 14842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 14852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 1486a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long)} and ensures 14872dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * that the list size does not exceed the max configured for the device. 14882dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 14892dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 14902dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIsLimitedToConfiguredSize() { 1491a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius // Need to recreate the WifiConfigManager instance for this test to modify the config 14922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // value which is read only in the constructor. 14932dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int maxListSize = 3; 14942dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 14952dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 14962dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius maxListSize); 14972dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 14982dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 14992dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 15002dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 15012dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15022dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 15032dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 15042dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 15052dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 15062dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 15072dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 15082dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 15092dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 15102dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15112dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15122dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Ensure that the fetched list size is limited. 15132dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 15142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 15152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network.networkId, 1).size()); 15162dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15172dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15182dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 15192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 1520a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long)} and ensures 15212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * that scan results from linked networks are used in the channel list. 15222dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 15232dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 15242dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIncludesLinkedNetworks() { 15252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 15262dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 15272dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 15282dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 15292dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15302dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 15312dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int TEST_FREQ_LISTIdx = 0; 15322dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 1. 15332dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length / 2; TEST_FREQ_LISTIdx++) { 15342dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 15352dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 15362dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 15372dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 15382dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 15392dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 15402dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15412dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15422dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 2. 15432dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length; TEST_FREQ_LISTIdx++) { 15442dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 15452dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 15462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 15472dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 15482dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 15492dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 15502dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15512dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15522dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Link the 2 configurations together using the GwMacAddress. 15532dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 15542dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 15552dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 15562dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 15572dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15582dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // The channel list fetched should include scan results from both the linked networks. 15592dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 15602dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network1.networkId, 1)); 15612dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 15622dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network2.networkId, 1)); 15632dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15642dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15652dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 15662dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 1567a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long)} and ensures 15682dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * that scan results from linked networks are used in the channel list and that the list size 15692dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * does not exceed the max configured for the device. 15702dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 15712dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 15722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIncludesLinkedNetworksIsLimitedToConfiguredSize() { 1573a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius // Need to recreate the WifiConfigManager instance for this test to modify the config 15742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // value which is read only in the constructor. 15752dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int maxListSize = 3; 15762dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 15772dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 15782dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius maxListSize); 15792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 15812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 15822dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 15832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 15842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 15852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15862dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 15872dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int TEST_FREQ_LISTIdx = 0; 15882dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 1. 15892dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length / 2; TEST_FREQ_LISTIdx++) { 15902dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 15912dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 15922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 15932dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 15942dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 15952dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 15962dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15972dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15982dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 2. 15992dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length; TEST_FREQ_LISTIdx++) { 16002dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 16012dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 16022dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 16032dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 16042dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 16052dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 16062dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16072dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16082dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Link the 2 configurations together using the GwMacAddress. 16092dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 16102dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 16112dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 16122dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 16132dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Ensure that the fetched list size is limited. 16152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 16162dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 16172dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1.networkId, 1).size()); 16182dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 16192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 16202dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2.networkId, 1).size()); 16212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16222dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 1623c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 1624a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 1625c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * and ensures that any non current user private networks are moved to shared store file. 1626c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 1627c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 1628c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchPushesOtherPrivateNetworksToSharedStore() throws Exception { 16296d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 16306d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 1631c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 1632c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1633c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius int appId = 674; 1634c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1635c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Create 3 networks. 1 for user1, 1 for user2 and 1 shared. 1636c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration user1Network = WifiConfigurationTestUtil.createPskNetwork(); 1637c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user1Network.shared = false; 1638c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user1Network.creatorUid = UserHandle.getUid(user1, appId); 1639c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 1640c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user2Network.shared = false; 1641c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 1642c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork(); 1643c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1644c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Set up the store data first that is loaded. 1645c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 1646c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 1647c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(sharedNetwork); 1648c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user2Network); 1649c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1650c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 1651c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> userNetworks = new ArrayList<WifiConfiguration>() { 1652c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 1653c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user1Network); 1654c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1655c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 1656c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigStoreData loadStoreData = 1657c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new WifiConfigStoreData(sharedNetworks, userNetworks, new HashSet<String>()); 1658c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mWifiConfigStore.read()).thenReturn(loadStoreData); 1659c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1660c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now switch the user to user2 1661c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 1662c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1663c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Set the expected network list before comparing. user1Network should be in shared data. 1664c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Note: In the real world, user1Network will no longer be visible now because it should 1665c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // already be in user1's private store file. But, we're purposefully exposing it 1666c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // via |loadStoreData| to test if other user's private networks are pushed to shared store. 1667c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> expectedSharedNetworks = new ArrayList<WifiConfiguration>() { 1668c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 1669c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(sharedNetwork); 1670c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user1Network); 1671c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1672c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 1673c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> expectedUserNetworks = new ArrayList<WifiConfiguration>() { 1674c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 1675c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user2Network); 1676c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1677c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 1678c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Capture the written data for the old user and ensure that it was empty. 1679c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigStoreData writtenStoreData = captureWriteStoreData(); 1680c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius assertTrue(writtenStoreData.getConfigurations().isEmpty()); 1681c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1682c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now capture the next written data and ensure that user1Network is now in shared data. 1683c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius writtenStoreData = captureWriteStoreData(); 1684c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 1685c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius expectedSharedNetworks, writtenStoreData.getSharedConfigurations()); 1686c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 1687c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius expectedUserNetworks, writtenStoreData.getUserConfigurations()); 1688c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1689c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1690c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 1691a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 1692a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * and {@link WifiConfigManager#handleUserUnlock(int)} and ensures that the new store is 1693c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * read immediately if the user is unlocked during the switch. 1694c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 1695c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 1696c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchWhenUnlocked() throws Exception { 16976d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 16986d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 1699c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 1700c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1701c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mWifiConfigStore.read()).thenReturn( 1702c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new WifiConfigStoreData( 1703c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 1704c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new HashSet<String>())); 1705c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1706c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // user2 is unlocked and switched to foreground. 1707c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 1708c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 1709c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Ensure that the read was invoked. 1710c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).read(); 1711c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1712c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1713c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 1714a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 1715a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * and {@link WifiConfigManager#handleUserUnlock(int)} and ensures that the new store is not 1716c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * read until the user is unlocked. 1717c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 1718c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchWhenLocked() throws Exception { 17196d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 17206d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 1721c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 1722c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1723c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // user2 is locked and switched to foreground. 1724c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 1725c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 1726c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1727c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Ensure that the read was not invoked. 1728c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).read(); 1729c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1730c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now try unlocking some other user (user1), this should be ignored. 1731c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserUnlock(user1); 1732c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).read(); 1733c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1734c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mWifiConfigStore.read()).thenReturn( 1735c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new WifiConfigStoreData( 1736c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 1737c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new HashSet<String>())); 1738c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1739c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Unlock the user2 and ensure that we read the data now. 1740c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserUnlock(user2); 1741c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).read(); 1742c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1743c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1744c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 1745a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies that the foreground user stop using {@link WifiConfigManager#handleUserStop(int)} 1746c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * and ensures that the store is written only when the foreground user is stopped. 1747c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 1748c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 1749c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserStop() throws Exception { 17506d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 17516d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 1752c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 1753c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1754c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Try stopping background user2 first, this should not do anything. 1755c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 1756c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserStop(user2); 1757c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).read(); 1758c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1759c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now try stopping the foreground user1, this should trigger a write to store. 1760c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserStop(user1); 1761c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).read(); 1762c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).write( 1763c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius anyBoolean(), any(WifiConfigStoreData.class)); 1764c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1765c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 17666d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius /** 1767b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} 1768b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * results in a store read after bootup. 1769b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius */ 1770b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius @Test 1771b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius public void testHandleUserUnlockAfterBootup() throws Exception { 1772b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user1 = TEST_DEFAULT_USER; 1773b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 1774b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius when(mWifiConfigStore.read()).thenReturn( 1775b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new WifiConfigStoreData( 1776b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 1777b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new HashSet<String>())); 1778b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 1779b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Unlock the user1 (default user) for the first time and ensure that we read the data. 1780b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserUnlock(user1); 1781b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).read(); 1782b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius } 1783b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 1784b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius /** 1785b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} does 1786b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * not always result in a store read unless the user had switched or just booted up. 1787b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius */ 1788b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius @Test 1789b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius public void testHandleUserUnlockWithoutSwitchOrBootup() throws Exception { 1790b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user1 = TEST_DEFAULT_USER; 1791b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 1792b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius setupUserProfiles(user2); 1793b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 1794b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius when(mWifiConfigStore.read()).thenReturn( 1795b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new WifiConfigStoreData( 1796b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 1797b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new HashSet<String>())); 1798b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 1799b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // user2 is unlocked and switched to foreground. 1800b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 1801b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserSwitch(user2); 1802b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Ensure that the read was invoked. 1803b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).read(); 1804b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 1805b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Unlock the user2 again and ensure that we don't read the data now. 1806b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserUnlock(user2); 1807b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).read(); 1808b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius } 1809b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 1810b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius /** 18116d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * Verifies the private network addition using 1812a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 18136d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * by a non foreground user is rejected. 18146d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius */ 18156d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius @Test 18166d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public void testAddNetworkUsingBackgroundUserUId() throws Exception { 18176d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 18186d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(user2); 18196d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 18206d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int creatorUid = UserHandle.getUid(user2, 674); 18216d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 18226d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Create a network for user2 try adding it. This should be rejected. 18236d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 18246d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius NetworkUpdateResult result = 18256d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius mWifiConfigManager.addOrUpdateNetwork(user2Network, creatorUid); 18266d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertFalse(result.isSuccess()); 18276d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 18286d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 18296d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius /** 18306d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * Verifies the private network addition using 1831a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 18326d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * by SysUI is always accepted. 18336d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius */ 18346d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius @Test 18356d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public void testAddNetworkUsingSysUiUid() throws Exception { 18366d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Set up the user profiles stuff. Needed for |WifiConfigurationUtil.isVisibleToAnyProfile| 18376d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 18386d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(user2); 18396d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 18406d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 18416d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 18426d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 18436d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Create a network for user2 try adding it. This should be rejected. 18446d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 18456d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius NetworkUpdateResult result = 18466d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius mWifiConfigManager.addOrUpdateNetwork(user2Network, TEST_SYSUI_UID); 18476d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertTrue(result.isSuccess()); 18486d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 18496d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 18503a738a26918230b2469d917dbf14323234edd39bRoshan Pius /** 1851a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the loading of networks using {@link WifiConfigManager#loadFromStore()} attempts 18523a738a26918230b2469d917dbf14323234edd39bRoshan Pius * to migrate data from legacy stores when the new store files are absent. 18533a738a26918230b2469d917dbf14323234edd39bRoshan Pius */ 18543a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Test 18553a738a26918230b2469d917dbf14323234edd39bRoshan Pius public void testMigrationFromLegacyStore() throws Exception { 18563a738a26918230b2469d917dbf14323234edd39bRoshan Pius // Create the store data to be returned from legacy stores. 18573a738a26918230b2469d917dbf14323234edd39bRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 18583a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createPskNetwork()); 18593a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createEapNetwork()); 18603a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createWepNetwork()); 1861674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius String deletedEphemeralSSID = "EphemeralSSID"; 1862674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius Set<String> deletedEphermalSSIDs = new HashSet<>(Arrays.asList(deletedEphemeralSSID)); 18633a738a26918230b2469d917dbf14323234edd39bRoshan Pius WifiConfigStoreDataLegacy storeData = 1864674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius new WifiConfigStoreDataLegacy(networks, deletedEphermalSSIDs); 18653a738a26918230b2469d917dbf14323234edd39bRoshan Pius 18663a738a26918230b2469d917dbf14323234edd39bRoshan Pius // New store files not present, so migrate from the old store. 18673a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(false); 18683a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(true); 18693a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.read()).thenReturn(storeData); 18703a738a26918230b2469d917dbf14323234edd39bRoshan Pius 18713a738a26918230b2469d917dbf14323234edd39bRoshan Pius // Now trigger a load from store. This should populate the in memory list with all the 18723a738a26918230b2469d917dbf14323234edd39bRoshan Pius // networks above from the legacy store. 18733a738a26918230b2469d917dbf14323234edd39bRoshan Pius mWifiConfigManager.loadFromStore(); 18743a738a26918230b2469d917dbf14323234edd39bRoshan Pius 18753a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStore, never()).read(); 18763a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStoreLegacy).read(); 18773a738a26918230b2469d917dbf14323234edd39bRoshan Pius 18783a738a26918230b2469d917dbf14323234edd39bRoshan Pius List<WifiConfiguration> retrievedNetworks = 18793a738a26918230b2469d917dbf14323234edd39bRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 18803a738a26918230b2469d917dbf14323234edd39bRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 18813a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks, retrievedNetworks); 1882674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius assertTrue(mWifiConfigManager.wasEphemeralNetworkDeleted(deletedEphemeralSSID)); 18833a738a26918230b2469d917dbf14323234edd39bRoshan Pius } 18843a738a26918230b2469d917dbf14323234edd39bRoshan Pius 18853a738a26918230b2469d917dbf14323234edd39bRoshan Pius /** 1886a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the loading of networks using {@link WifiConfigManager#loadFromStore()} does 18873a738a26918230b2469d917dbf14323234edd39bRoshan Pius * not attempt to read from any of the stores (new or legacy) when the store files are 18883a738a26918230b2469d917dbf14323234edd39bRoshan Pius * not present. 18893a738a26918230b2469d917dbf14323234edd39bRoshan Pius */ 18903a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Test 18913a738a26918230b2469d917dbf14323234edd39bRoshan Pius public void testFreshInstallDoesNotLoadFromStore() throws Exception { 18923a738a26918230b2469d917dbf14323234edd39bRoshan Pius // New store files not present, so migrate from the old store. 18933a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(false); 18943a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(false); 18953a738a26918230b2469d917dbf14323234edd39bRoshan Pius 18963a738a26918230b2469d917dbf14323234edd39bRoshan Pius // Now trigger a load from store. This should populate the in memory list with all the 18973a738a26918230b2469d917dbf14323234edd39bRoshan Pius // networks above. 18983a738a26918230b2469d917dbf14323234edd39bRoshan Pius mWifiConfigManager.loadFromStore(); 18993a738a26918230b2469d917dbf14323234edd39bRoshan Pius 19003a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStore, never()).read(); 19013a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStoreLegacy, never()).read(); 19023a738a26918230b2469d917dbf14323234edd39bRoshan Pius 19033a738a26918230b2469d917dbf14323234edd39bRoshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworksWithPasswords().isEmpty()); 19043a738a26918230b2469d917dbf14323234edd39bRoshan Pius } 19053a738a26918230b2469d917dbf14323234edd39bRoshan Pius 1906a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius /** 1907a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius * Verifies that the last user selected network parameter is set when 1908a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} with disableOthers flag is set 1909a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * to true and cleared when either {@link WifiConfigManager#disableNetwork(int, int)} or 1910a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int, int)} is invoked using the same network ID. 1911a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius */ 1912a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius @Test 1913a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius public void testLastSelectedNetwork() throws Exception { 1914a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 1915a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 1916a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 1917a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius when(mClock.getElapsedSinceBootMillis()).thenReturn(67L); 1918a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 1919a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), true, TEST_CREATOR_UID)); 1920a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(result.getNetworkId(), mWifiConfigManager.getLastSelectedNetwork()); 1921a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(67, mWifiConfigManager.getLastSelectedTimeStamp()); 1922a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 1923a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius // Now disable the network and ensure that the last selected flag is cleared. 1924a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 1925a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals( 1926a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration.INVALID_NETWORK_ID, mWifiConfigManager.getLastSelectedNetwork()); 1927a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 1928a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius // Enable it again and remove the network to ensure that the last selected flag was cleared. 1929a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 1930a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), true, TEST_CREATOR_UID)); 1931a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(result.getNetworkId(), mWifiConfigManager.getLastSelectedNetwork()); 193265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertEquals(openNetwork.configKey(), mWifiConfigManager.getLastSelectedNetworkConfigKey()); 1933a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 1934a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 1935a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals( 1936a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration.INVALID_NETWORK_ID, mWifiConfigManager.getLastSelectedNetwork()); 1937a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius } 1938a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 193965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius /** 194065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius * Verifies that all the networks for the provided app is removed when 1941a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetworksForApp(ApplicationInfo)} is invoked. 194265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius */ 194365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius @Test 194465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius public void testRemoveNetworksForApp() throws Exception { 194565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createOpenNetwork()); 194665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createPskNetwork()); 194765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createWepNetwork()); 194865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 194965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 195065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 195165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius ApplicationInfo app = new ApplicationInfo(); 195265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius app.uid = TEST_CREATOR_UID; 195365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius app.packageName = TEST_CREATOR_NAME; 195465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.removeNetworksForApp(app)); 195565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 195665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius // Ensure all the networks are removed now. 195765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 195865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius } 195965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 196065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius /** 196165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius * Verifies that all the networks for the provided user is removed when 1962a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetworksForUser(int)} is invoked. 196365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius */ 196465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius @Test 196565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius public void testRemoveNetworksForUser() throws Exception { 196665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createOpenNetwork()); 196765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createPskNetwork()); 196865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createWepNetwork()); 196965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 197065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 197165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 197265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.removeNetworksForUser(TEST_DEFAULT_USER)); 197365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 197465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius // Ensure all the networks are removed now. 197565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 197665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius } 197765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 1978b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius /** 1979b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius * Verifies that the connect choice is removed from all networks when 1980a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int, int)} is invoked. 1981b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius */ 1982b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius @Test 1983b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius public void testRemoveNetworkRemovesConnectChoice() throws Exception { 1984b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork(); 1985b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 1986b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 1987b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 1988b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 1989b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 1990b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 1991b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Set connect choice of network 2 over network 1. 1992b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue( 1993b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius mWifiConfigManager.setNetworkConnectChoice( 1994b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network1.networkId, network2.configKey(), 78L)); 1995b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 1996b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration retrievedNetwork = 1997b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius mWifiConfigManager.getConfiguredNetwork(network1.networkId); 1998b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertEquals( 1999b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2000b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2001b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2002b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Remove network 3 and ensure that the connect choice on network 1 is not removed. 2003b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue(mWifiConfigManager.removeNetwork(network3.networkId, TEST_CREATOR_UID)); 2004b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2005b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertEquals( 2006b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2007b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2008b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2009b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Now remove network 2 and ensure that the connect choice on network 1 is removed.. 2010b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue(mWifiConfigManager.removeNetwork(network2.networkId, TEST_CREATOR_UID)); 2011b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2012b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertNotEquals( 2013b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2014b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2015cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius 2016cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius // This should have triggered 2 buffered writes. 1 for setting the connect choice, 1 for 2017cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius // clearing it after network removal. 2018cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, times(2)) 2019cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius .write(eq(false), any(WifiConfigStoreData.class)); 2020b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius } 2021b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 20220f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius /** 20230f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * Verifies that the modification of a single network using 20240f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and ensures that any 20250f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * updates to the network config in 20260f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * {@link WifiKeyStore#updateNetworkKeys(WifiConfiguration, WifiConfiguration)} is reflected 20270f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * in the internal database. 20280f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius */ 20290f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius @Test 20300f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius public void testUpdateSingleNetworkWithKeysUpdate() { 20310f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 20320f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network.enterpriseConfig = 20330f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 20340f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius verifyAddNetworkToWifiConfigManager(network); 20350f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 20360f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Now verify that network configurations match before we make any change. 20370f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 20380f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network, 20390f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 20400f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 20410f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Modify the network ca_cert field in updateNetworkKeys method during a network 20420f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // config update. 20430f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius final String newCaCertAlias = "test"; 20440f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius assertNotEquals(newCaCertAlias, network.enterpriseConfig.getCaCertificateAlias()); 20450f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 20460f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius doAnswer(new AnswerWithArguments() { 20470f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius public boolean answer(WifiConfiguration newConfig, WifiConfiguration existingConfig) { 20480f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius newConfig.enterpriseConfig.setCaCertificateAlias(newCaCertAlias); 20490f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius return true; 20500f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius } 20510f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius }).when(mWifiKeyStore).updateNetworkKeys( 20520f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius any(WifiConfiguration.class), any(WifiConfiguration.class)); 20530f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 20540f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 20550f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 20560f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Now verify that the keys update is reflected in the configuration fetched from internal 20570f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // db. 20580f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network.enterpriseConfig.setCaCertificateAlias(newCaCertAlias); 20590f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 20600f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network, 20610f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 20620f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius } 20630f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 206442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius /** 206542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius * Verifies that the dump method prints out all the saved network details with passwords masked. 206642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius * {@link WifiConfigManager#dump(FileDescriptor, PrintWriter, String[])}. 206742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius */ 206842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius @Test 206942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius public void testDump() { 207042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 207142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 207242ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius eapNetwork.enterpriseConfig.setPassword("blah"); 207342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 207442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 207542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius verifyAddNetworkToWifiConfigManager(eapNetwork); 207642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 207742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius StringWriter stringWriter = new StringWriter(); 207842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius mWifiConfigManager.dump( 207942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius new FileDescriptor(), new PrintWriter(stringWriter), new String[0]); 208042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius String dumpString = stringWriter.toString(); 208142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 208242ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius // Ensure that the network SSIDs were dumped out. 208342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertTrue(dumpString.contains(pskNetwork.SSID)); 208442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertTrue(dumpString.contains(eapNetwork.SSID)); 208542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 208642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius // Ensure that the network passwords were not dumped out. 208742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertFalse(dumpString.contains(pskNetwork.preSharedKey)); 208842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertFalse(dumpString.contains(eapNetwork.enterpriseConfig.getPassword())); 208942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius } 209042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 20915c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius /** 20925c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius * Verifies the ordering of network list generated using 20935c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius * {@link WifiConfigManager#retrieveHiddenNetworkList()}. 20945c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius */ 20955c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius @Test 20965c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius public void testRetrieveHiddenList() { 20975c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Create and add 3 networks. 20985c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createWepHiddenNetwork(); 20995c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskHiddenNetwork(); 21005c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 21015c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 21025c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 21035c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 21045c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 21055c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Enable all of them. 21065c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network1.networkId, false, TEST_CREATOR_UID)); 21075c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network2.networkId, false, TEST_CREATOR_UID)); 21085c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network3.networkId, false, TEST_CREATOR_UID)); 21095c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 21105c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now set scan results in 2 of them to set the corresponding 21115c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // {@link NetworkSelectionStatus#mSeenInLastQualifiedNetworkSelection} field. 21125c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 21135c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius network1.networkId, createScanDetailForNetwork(network1).getScanResult(), 54)); 21145c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 21155c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius network3.networkId, createScanDetailForNetwork(network3).getScanResult(), 54)); 21165c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 21175c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now increment |network3|'s association count. This should ensure that this network 21185c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // is preferred over |network1|. 21195c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(network3.networkId)); 21205c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 21215c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Retrieve the hidden network list & verify the order of the networks returned. 21225c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius List<WifiScanner.ScanSettings.HiddenNetwork> hiddenNetworks = 21235c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius mWifiConfigManager.retrieveHiddenNetworkList(); 21245c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(3, hiddenNetworks.size()); 21255c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network3.SSID, hiddenNetworks.get(0).ssid); 21265c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network1.SSID, hiddenNetworks.get(1).ssid); 21275c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network2.SSID, hiddenNetworks.get(2).ssid); 21285c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 21295c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now permanently disable |network3|. This should remove network 3 from the list. 21305c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.disableNetwork(network3.networkId, TEST_CREATOR_UID)); 21315c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 21325c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Retrieve the hidden network list again & verify the order of the networks returned. 21335c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius hiddenNetworks = mWifiConfigManager.retrieveHiddenNetworkList(); 21345c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(2, hiddenNetworks.size()); 21355c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network1.SSID, hiddenNetworks.get(0).ssid); 21365c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network2.SSID, hiddenNetworks.get(1).ssid); 21375c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius } 21385c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 21395c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius /** 21405c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * Verifies the addition of network configurations using 21415c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with same SSID and 21425c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * default key mgmt does not add duplicate network configs. 21435c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius */ 21445c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius @Test 21455c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius public void testAddMultipleNetworksWithSameSSIDAndDefaultKeyMgmt() { 21465c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius final String ssid = "test_blah"; 21475c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Add a network with the above SSID and default key mgmt and ensure it was added 21485c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // successfully. 21495c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network1 = new WifiConfiguration(); 21505c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.SSID = ssid; 21515c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network1); 21525c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 21535c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 21545c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 21555c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> retrievedNetworks = 21565c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 21575c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 21585c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 21595c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1, retrievedNetworks.get(0)); 21605c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 21615c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Now add a second network with the same SSID and default key mgmt and ensure that it 21625c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // didn't add a new duplicate network. 21635c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network2 = new WifiConfiguration(); 21645c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.SSID = ssid; 21655c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius result = addNetworkToWifiConfigManager(network2); 21665c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 21675c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertFalse(result.isNewNetwork()); 21685c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 21695c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 21705c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 21715c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 21725c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2, retrievedNetworks.get(0)); 21735c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius } 21745c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 21755c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius /** 21765c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * Verifies the addition of network configurations using 21775c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with same SSID and 21785c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * different key mgmt should add different network configs. 21795c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius */ 21805c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius @Test 21815c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius public void testAddMultipleNetworksWithSameSSIDAndDifferentKeyMgmt() { 21825c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius final String ssid = "test_blah"; 21835c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Add a network with the above SSID and WPA_PSK key mgmt and ensure it was added 21845c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // successfully. 21855c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network1 = new WifiConfiguration(); 21865c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.SSID = ssid; 21875c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 21885c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network1); 21895c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 21905c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 21915c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 21925c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> retrievedNetworks = 21935c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 21945c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 21955c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 21965c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1, retrievedNetworks.get(0)); 21975c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 21985c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Now add a second network with the same SSID and NONE key mgmt and ensure that it 21995c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // does add a new network. 22005c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network2 = new WifiConfiguration(); 22015c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.SSID = ssid; 22025c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 22035c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius result = addNetworkToWifiConfigManager(network2); 22045c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 22055c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 22065c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 22075c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 22085c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(2, retrievedNetworks.size()); 22095c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> networks = Arrays.asList(network1, network2); 22105c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 22115c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius networks, retrievedNetworks); 22125c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius } 22135c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 22142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private void createWifiConfigManager() { 22152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager = 2216a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius new WifiConfigManager( 221796241bee619ff7073635f680a36869f61a11a225Roshan Pius mContext, mFrameworkFacade, mClock, mUserManager, mTelephonyManager, 221896241bee619ff7073635f680a36869f61a11a225Roshan Pius mWifiKeyStore, mWifiConfigStore, mWifiConfigStoreLegacy); 22192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.enableVerboseLogging(1); 22202dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 22212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 22228600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 222350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * This method sets defaults in the provided WifiConfiguration object if not set 222450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * so that it can be used for comparison with the configuration retrieved from 222550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * WifiConfigManager. 222650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 222750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setDefaults(WifiConfiguration configuration) { 222850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedAuthAlgorithms.isEmpty()) { 222950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 223050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 223150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedProtocols.isEmpty()) { 223250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 223350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 223450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 223550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedKeyManagement.isEmpty()) { 223650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 223750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); 223850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 223950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedPairwiseCiphers.isEmpty()) { 224050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 224150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 224250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 224350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedGroupCiphers.isEmpty()) { 224450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 224550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 224650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 224750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 224850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 224950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.getIpAssignment() == IpConfiguration.IpAssignment.UNASSIGNED) { 225050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setIpAssignment(IpConfiguration.IpAssignment.DHCP); 225150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 225250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.getProxySettings() == IpConfiguration.ProxySettings.UNASSIGNED) { 225350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setProxySettings(IpConfiguration.ProxySettings.NONE); 225450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 22550ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius configuration.status = WifiConfiguration.Status.DISABLED; 22560ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius configuration.getNetworkSelectionStatus().setNetworkSelectionStatus( 22570ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius NetworkSelectionStatus.NETWORK_SELECTION_PERMANENTLY_DISABLED); 225850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 225950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 226050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 226150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided configuration with creator uid, package name 226250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * and time. 226350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 226450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setCreationDebugParams(WifiConfiguration configuration) { 226550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creatorUid = configuration.lastUpdateUid = TEST_CREATOR_UID; 226650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creatorName = configuration.lastUpdateName = TEST_CREATOR_NAME; 226750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creationTime = configuration.updateTime = 2268a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.createDebugTimeStampString( 226950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius TEST_WALLCLOCK_CREATION_TIME_MILLIS); 227050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 227150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 227250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 227350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided configuration with update uid, package name 227450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * and time. 227550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 227650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setUpdateDebugParams(WifiConfiguration configuration) { 227750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.lastUpdateUid = TEST_UPDATE_UID; 227850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.lastUpdateName = TEST_UPDATE_NAME; 227950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.updateTime = 2280a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.createDebugTimeStampString(TEST_WALLCLOCK_UPDATE_TIME_MILLIS); 228150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 228250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 22831fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertNotEquals(Object expected, Object actual) { 22841fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius if (actual != null) { 22851fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertFalse(actual.equals(expected)); 22861fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } else { 22871fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotNull(expected); 22881fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 22891fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 22901fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 229150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 229250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided WifiConfiguration with the specified bssid value. Also, asserts that 229350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * the existing |BSSID| field is not the same value as the one being set 229450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 229550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void assertAndSetNetworkBSSID(WifiConfiguration configuration, String bssid) { 22961fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(bssid, configuration.BSSID); 229750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.BSSID = bssid; 229850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 229950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 230050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 230150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided WifiConfiguration with the specified |IpConfiguration| object. Also, 23021fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * asserts that the existing |mIpConfiguration| field is not the same value as the one being set 230350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 230450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void assertAndSetNetworkIpConfiguration( 230550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration configuration, IpConfiguration ipConfiguration) { 23061fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(ipConfiguration, configuration.getIpConfiguration()); 230750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setIpConfiguration(ipConfiguration); 230850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 230950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 231050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 23111fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified |wepKeys| value and 23121fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * |wepTxKeyIndex|. 23131fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 23141fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkWepKeysAndTxIndex( 23151fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String[] wepKeys, int wepTxKeyIdx) { 23161fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(wepKeys, configuration.wepKeys); 23171fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(wepTxKeyIdx, configuration.wepTxKeyIndex); 23181fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.wepKeys = Arrays.copyOf(wepKeys, wepKeys.length); 23191fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.wepTxKeyIndex = wepTxKeyIdx; 23201fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 23211fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 23221fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 23231fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified |preSharedKey| value. 23241fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 23251fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkPreSharedKey( 23261fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String preSharedKey) { 23271fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(preSharedKey, configuration.preSharedKey); 23281fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.preSharedKey = preSharedKey; 23291fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 23301fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 23311fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 23321fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified enteprise |password| value. 23331fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 23341fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkEnterprisePassword( 23351fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String password) { 23361fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(password, configuration.enterpriseConfig.getPassword()); 23371fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.enterpriseConfig.setPassword(password); 23381fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 23391fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 23401fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 2341c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Helper method to capture the store data written in WifiConfigStore.write() method. 23426e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 2343c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private WifiConfigStoreData captureWriteStoreData() { 23446e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius try { 23456e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<WifiConfigStoreData> storeDataCaptor = 23466e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor.forClass(WifiConfigStoreData.class); 23476e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 23486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius .write(anyBoolean(), storeDataCaptor.capture()); 2349c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return storeDataCaptor.getValue(); 23506e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } catch (Exception e) { 23516e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius fail("Exception encountered during write " + e); 23526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 2353c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return null; 2354c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2355c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2356c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 2357c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Returns whether the provided network was in the store data or not. 2358c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2359c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private boolean isNetworkInConfigStoreData(WifiConfiguration configuration) { 2360c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigStoreData storeData = captureWriteStoreData(); 2361c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius if (storeData == null) { 2362c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return false; 2363c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2364c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius boolean foundNetworkInStoreData = false; 2365c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius for (WifiConfiguration retrievedConfig : storeData.getConfigurations()) { 2366c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius if (retrievedConfig.configKey().equals(configuration.configKey())) { 2367c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius foundNetworkInStoreData = true; 2368c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2369c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2370c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return foundNetworkInStoreData; 23716e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 23726e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 23736e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 23746e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the provided network was not present in the last config store write. 23756e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 23766e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkNotInConfigStoreData(WifiConfiguration configuration) { 23776e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(isNetworkInConfigStoreData(configuration)); 23786e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 23796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 23806e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 23816e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the provided network was present in the last config store write. 23826e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 23836e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkInConfigStoreData(WifiConfiguration configuration) { 23846e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(isNetworkInConfigStoreData(configuration)); 23856e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 23866e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 23876e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void assertPasswordsMaskedInWifiConfiguration(WifiConfiguration configuration) { 238822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (!TextUtils.isEmpty(configuration.preSharedKey)) { 2389a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.PASSWORD_MASK, configuration.preSharedKey); 23906e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 23916e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius if (configuration.wepKeys != null) { 23926e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius for (int i = 0; i < configuration.wepKeys.length; i++) { 23936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius if (!TextUtils.isEmpty(configuration.wepKeys[i])) { 2394a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.PASSWORD_MASK, configuration.wepKeys[i]); 23956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 23966e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 23976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 239822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (!TextUtils.isEmpty(configuration.enterpriseConfig.getPassword())) { 23996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 2400a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.PASSWORD_MASK, 24016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius configuration.enterpriseConfig.getPassword()); 24026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 24066e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the network was present in the network change broadcast and returns the 24076e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * change reason. 24086e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 24096e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private int verifyNetworkInBroadcastAndReturnReason(WifiConfiguration configuration) { 24106e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 24116e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<UserHandle> userHandleCaptor = ArgumentCaptor.forClass(UserHandle.class); 24126e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder.verify(mContext) 24136e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius .sendBroadcastAsUser(intentCaptor.capture(), userHandleCaptor.capture()); 24146e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24156e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals(userHandleCaptor.getValue(), UserHandle.ALL); 24166e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius Intent intent = intentCaptor.getValue(); 24176e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24186e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius int changeReason = intent.getIntExtra(WifiManager.EXTRA_CHANGE_REASON, -1); 24196e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration retrievedConfig = 24206e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius (WifiConfiguration) intent.getExtra(WifiManager.EXTRA_WIFI_CONFIGURATION); 24216e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals(retrievedConfig.configKey(), configuration.configKey()); 24226e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24236e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that all the passwords are masked in the broadcast configuration. 24246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedConfig); 24256e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return changeReason; 24276e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24286e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24296e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 24306e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out an add broadcast with the provided network. 24316e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 24326e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkAddBroadcast(WifiConfiguration configuration) { 24336e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 24346e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 24356e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_ADDED); 24366e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24376e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24386e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 24396e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out an update broadcast with the provided network. 24406e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 24416e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkUpdateBroadcast(WifiConfiguration configuration) { 24426e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 24436e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 24446e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_CONFIG_CHANGE); 24456e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24466e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24476e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 24486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out a remove broadcast with the provided network. 24496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 24506e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkRemoveBroadcast(WifiConfiguration configuration) { 24516e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 24526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 24536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_REMOVED); 24546e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24566e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 245750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Adds the provided configuration to WifiConfigManager and modifies the provided configuration 245850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * with creator/update uid, package name and time. This also sets defaults for fields not 245950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * populated. 246050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * These fields are populated internally by WifiConfigManager and hence we need 246150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * to modify the configuration before we compare the added network with the retrieved network. 246250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 246350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration) { 246450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_CREATION_TIME_MILLIS); 246550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius NetworkUpdateResult result = 246650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.addOrUpdateNetwork(configuration, TEST_CREATOR_UID); 246750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setDefaults(configuration); 246850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setCreationDebugParams(configuration); 24696e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius configuration.networkId = result.getNetworkId(); 24706e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 24716e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24726e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24736e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 24746e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Add network to WifiConfigManager and ensure that it was successful. 24756e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 24766e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyAddNetworkToWifiConfigManager( 24776e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 24786e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(configuration); 24796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 24806e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.isNewNetwork()); 24816e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 24826e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 24836e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24846e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkAddBroadcast(configuration); 24856e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that the config store write was triggered with this new configuration. 24866e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInConfigStoreData(configuration); 24876e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 24886e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 24896e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 24906e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 24916e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Add ephemeral network to WifiConfigManager and ensure that it was successful. 24926e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 24936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyAddEphemeralNetworkToWifiConfigManager( 24946e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 24956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(configuration); 24966e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 24976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.isNewNetwork()); 24986e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 24996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 25006e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 25016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkAddBroadcast(configuration); 25026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Ephemeral networks should not be persisted. 25036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkNotInConfigStoreData(configuration); 250450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return result; 250550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 250650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 250750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 250850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Updates the provided configuration to WifiConfigManager and modifies the provided 250950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * configuration with update uid, package name and time. 251050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * These fields are populated internally by WifiConfigManager and hence we need 251150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * to modify the configuration before we compare the added network with the retrieved network. 251250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 251350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private NetworkUpdateResult updateNetworkToWifiConfigManager(WifiConfiguration configuration) { 251450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_UPDATE_TIME_MILLIS); 251550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius NetworkUpdateResult result = 251650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.addOrUpdateNetwork(configuration, TEST_UPDATE_UID); 251750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setUpdateDebugParams(configuration); 251850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return result; 251950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 25206e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 25216e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 25226e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager config change and ensure that it was successful. 25236e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 25246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManager( 25256e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 25266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = updateNetworkToWifiConfigManager(configuration); 25276e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 25286e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.isNewNetwork()); 25296e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 25306e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkUpdateBroadcast(configuration); 25316e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that the config store write was triggered with this new configuration. 25326e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInConfigStoreData(configuration); 25336e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 25346e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 25356e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 25366e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 25376e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager without IP config change and ensure that it was 25386e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * successful. 25396e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 25406e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManagerWithoutIpChange( 25416e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 25426e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManager(configuration); 25436e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.hasIpChanged()); 25446e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.hasProxyChanged()); 25456e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 25466e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 25476e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 25486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 25496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager with IP config change and ensure that it was 25506e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * successful. 25516e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 25526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManagerWithIpChange( 25536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 25546e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManager(configuration); 25556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 25566e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 25576e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 25586e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 2559c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 2560c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 2561c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * Removes network from WifiConfigManager and ensure that it was successful. 2562c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 2563c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius private void verifyRemoveNetworkFromWifiConfigManager( 2564c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration configuration) { 25656d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(configuration.networkId, TEST_CREATOR_UID)); 2566c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 2567c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyNetworkRemoveBroadcast(configuration); 2568c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Verify if the config store write was triggered without this new configuration. 2569c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyNetworkNotInConfigStoreData(configuration); 2570c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 2571fc789b2227e92372b2489ca54691310800835a50Roshan Pius 2572fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 2573fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the provided network's public status and ensures that the network change broadcast 2574fc789b2227e92372b2489ca54691310800835a50Roshan Pius * has been sent out. 2575fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 2576fc789b2227e92372b2489ca54691310800835a50Roshan Pius private void verifyUpdateNetworkStatus(WifiConfiguration configuration, int status) { 2577fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(status, configuration.status); 2578fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyNetworkUpdateBroadcast(configuration); 2579fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 2580fc789b2227e92372b2489ca54691310800835a50Roshan Pius 2581fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 2582fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the network's selection status update. 2583fc789b2227e92372b2489ca54691310800835a50Roshan Pius * 2584fc789b2227e92372b2489ca54691310800835a50Roshan Pius * For temporarily disabled reasons, the method ensures that the status has changed only if 2585fc789b2227e92372b2489ca54691310800835a50Roshan Pius * disable reason counter has exceeded the threshold. 2586fc789b2227e92372b2489ca54691310800835a50Roshan Pius * 2587fc789b2227e92372b2489ca54691310800835a50Roshan Pius * For permanently disabled/enabled reasons, the method ensures that the public status has 2588fc789b2227e92372b2489ca54691310800835a50Roshan Pius * changed and the network change broadcast has been sent out. 2589fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 2590fc789b2227e92372b2489ca54691310800835a50Roshan Pius private void verifyUpdateNetworkSelectionStatus( 2591fc789b2227e92372b2489ca54691310800835a50Roshan Pius int networkId, int reason, int temporaryDisableReasonCounter) { 2592fc789b2227e92372b2489ca54691310800835a50Roshan Pius when(mClock.getElapsedSinceBootMillis()) 2593fc789b2227e92372b2489ca54691310800835a50Roshan Pius .thenReturn(TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS); 2594fc789b2227e92372b2489ca54691310800835a50Roshan Pius 2595fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Fetch the current status of the network before we try to update the status. 2596fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 2597fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus currentStatus = retrievedNetwork.getNetworkSelectionStatus(); 2598fc789b2227e92372b2489ca54691310800835a50Roshan Pius int currentDisableReason = currentStatus.getNetworkSelectionDisableReason(); 2599fc789b2227e92372b2489ca54691310800835a50Roshan Pius 2600fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set the status to the provided reason. 2601fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(mWifiConfigManager.updateNetworkSelectionStatus(networkId, reason)); 2602fc789b2227e92372b2489ca54691310800835a50Roshan Pius 2603fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now fetch the network configuration and verify the new status of the network. 2604fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 2605fc789b2227e92372b2489ca54691310800835a50Roshan Pius 2606fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 2607fc789b2227e92372b2489ca54691310800835a50Roshan Pius int retrievedDisableReason = retrievedStatus.getNetworkSelectionDisableReason(); 2608fc789b2227e92372b2489ca54691310800835a50Roshan Pius long retrievedDisableTime = retrievedStatus.getDisableTime(); 2609fc789b2227e92372b2489ca54691310800835a50Roshan Pius int retrievedDisableReasonCounter = retrievedStatus.getDisableReasonCounter(reason); 2610fc789b2227e92372b2489ca54691310800835a50Roshan Pius int disableReasonThreshold = 2611a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[reason]; 2612fc789b2227e92372b2489ca54691310800835a50Roshan Pius 2613fc789b2227e92372b2489ca54691310800835a50Roshan Pius if (reason == NetworkSelectionStatus.NETWORK_SELECTION_ENABLE) { 2614fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 2615fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 2616fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 2617fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus.INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP, 2618fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedDisableTime); 2619fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 2620fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else if (reason < NetworkSelectionStatus.DISABLED_TLS_VERSION_MISMATCH) { 2621fc789b2227e92372b2489ca54691310800835a50Roshan Pius // For temporarily disabled networks, we need to ensure that the current status remains 2622fc789b2227e92372b2489ca54691310800835a50Roshan Pius // until the threshold is crossed. 2623fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(temporaryDisableReasonCounter, retrievedDisableReasonCounter); 2624fc789b2227e92372b2489ca54691310800835a50Roshan Pius if (retrievedDisableReasonCounter < disableReasonThreshold) { 2625fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(currentDisableReason, retrievedDisableReason); 2626fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 2627fc789b2227e92372b2489ca54691310800835a50Roshan Pius currentStatus.getNetworkSelectionStatus(), 2628fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedStatus.getNetworkSelectionStatus()); 2629fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else { 2630fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 2631fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkTemporaryDisabled()); 2632fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 2633fc789b2227e92372b2489ca54691310800835a50Roshan Pius TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS, retrievedDisableTime); 2634fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 2635fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else if (reason < NetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX) { 2636fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 2637fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkPermanentlyDisabled()); 2638fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 2639fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus.INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP, 2640fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedDisableTime); 2641fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.DISABLED); 2642fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 2643fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 2644fc789b2227e92372b2489ca54691310800835a50Roshan Pius 264522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 26462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Creates a scan detail corresponding to the provided network and given BSSID, level &frequency 26472dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * values. 264822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 26492dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private ScanDetail createScanDetailForNetwork( 26502dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration configuration, String bssid, int level, int frequency) { 265122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius String caps; 265222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK)) { 265322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WPA2-PSK-CCMP]"; 265422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP) 265522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius || configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)) { 265622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WPA2-EAP-CCMP]"; 265722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE) 265822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius && WifiConfigurationUtil.hasAnyValidWepKey(configuration.wepKeys)) { 265922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WEP]"; 266022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else { 266122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[]"; 266222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 266322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiSsid ssid = WifiSsid.createFromAsciiEncoded(configuration.getPrintableSsid()); 266422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Fill in 0's in the fields we don't care about. 266522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius return new ScanDetail( 26662dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ssid, bssid, caps, level, frequency, mClock.getUptimeSinceBootMillis(), 26672dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mClock.getWallClockMillis()); 26682dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 26692dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 26702dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 26712dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Creates a scan detail corresponding to the provided network and BSSID value. 26722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 26732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private ScanDetail createScanDetailForNetwork(WifiConfiguration configuration, String bssid) { 26742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius return createScanDetailForNetwork(configuration, bssid, 0, 0); 267522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 267622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 267722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 267822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Creates a scan detail corresponding to the provided network and fixed BSSID value. 267922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 268022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius private ScanDetail createScanDetailForNetwork(WifiConfiguration configuration) { 268122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius return createScanDetailForNetwork(configuration, TEST_BSSID); 268222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 268322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 268422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 268522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Adds the provided network and then creates a scan detail corresponding to the network. The 268622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * method then creates a ScanDetail corresponding to the network and ensures that the network 268722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * is properly matched using 2688a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)} and also 268922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * verifies that the provided scan detail was cached, 269022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 269122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius private void verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 269222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration network) { 269322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // First add the provided network. 269422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(network); 269522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 269622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now create a dummy scan detail corresponding to the network. 269722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = createScanDetailForNetwork(network); 269822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanResult scanResult = scanDetail.getScanResult(); 269922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 270022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration retrievedNetwork = 270122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail); 2702e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius // Retrieve the network with password data for comparison. 2703e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius retrievedNetwork = 2704e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(retrievedNetwork.networkId); 270522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 270622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 270722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius network, retrievedNetwork); 270822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 270922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now retrieve the scan detail cache and ensure that the new scan detail is in cache. 271022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetailCache retrievedScanDetailCache = 271122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getScanDetailCacheForNetwork(network.networkId); 271222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertEquals(1, retrievedScanDetailCache.size()); 271322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanResult retrievedScanResult = retrievedScanDetailCache.get(scanResult.BSSID); 271422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 271522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanTestUtil.assertScanResultEquals(scanResult, retrievedScanResult); 271622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 27172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 27182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 27192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Adds a new network and verifies that the |HasEverConnected| flag is set to false. 27202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 27212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyAddNetworkHasEverConnectedFalse(WifiConfiguration network) { 27222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(network); 27232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 27242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 27252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse("Adding a new network should not have hasEverConnected set to true.", 27262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 27272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 27282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 27292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 27302d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Updates an existing network with some credential change and verifies that the 27312d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * |HasEverConnected| flag is set to false. 27322d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 27332d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse( 27342d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration network) { 27352d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 27362d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 27372d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 27382d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse("Updating network credentials config should clear hasEverConnected.", 27392d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 27402d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 27412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 27422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 27432d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Updates an existing network after connection using 2744a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkAfterConnect(int)} and asserts that the 27452d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * |HasEverConnected| flag is set to true. 27462d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 27472d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyUpdateNetworkAfterConnectHasEverConnectedTrue(int networkId) { 27482d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(networkId)); 27492d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 27502d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue("hasEverConnected expected to be true after connection.", 27512d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 27522d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 27532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 2754c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 2755c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Sets up a user profiles for WifiConfigManager testing. 2756c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * 2757c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * @param userId Id of the user. 2758c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2759c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private void setupUserProfiles(int userId) { 2760c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final UserInfo userInfo = 2761c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new UserInfo(userId, Integer.toString(userId), UserInfo.FLAG_PRIMARY); 2762c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<UserInfo> userProfiles = Arrays.asList(userInfo); 2763c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.getProfiles(userId)).thenReturn(userProfiles); 2764c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(userId)).thenReturn(true); 2765c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2766c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 276750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius} 2768