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 220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhneimport android.app.admin.DeviceAdminInfo; 230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhneimport android.app.admin.DevicePolicyManagerInternal; 2450eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.app.test.MockAnswerUtil.AnswerWithArguments; 2550eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.content.Context; 266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.content.Intent; 2765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Piusimport android.content.pm.ApplicationInfo; 2850eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.content.pm.PackageManager; 29c381d005c60603aadd30581ce675e979b3fec3feRoshan Piusimport android.content.pm.UserInfo; 3050eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.net.IpConfiguration; 3122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Piusimport android.net.wifi.ScanResult; 3250eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.net.wifi.WifiConfiguration; 33fc789b2227e92372b2489ca54691310800835a50Roshan Piusimport android.net.wifi.WifiConfiguration.NetworkSelectionStatus; 341fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Piusimport android.net.wifi.WifiEnterpriseConfig; 356e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.net.wifi.WifiManager; 36fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Piusimport android.net.wifi.WifiScanner; 3722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Piusimport android.net.wifi.WifiSsid; 383a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiuimport android.os.Process; 396e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.os.UserHandle; 4050eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.os.UserManager; 4196241bee619ff7073635f680a36869f61a11a225Roshan Piusimport android.telephony.TelephonyManager; 4250eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.test.suitebuilder.annotation.SmallTest; 436e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.text.TextUtils; 440a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport android.util.Pair; 4550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 468600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Piusimport com.android.internal.R; 473a738a26918230b2469d917dbf14323234edd39bRoshan Piusimport com.android.server.wifi.WifiConfigStoreLegacy.WifiConfigStoreDataLegacy; 48835e781643b79c30fabbab5595770cf01b5861fbRebecca Silbersteinimport com.android.server.wifi.util.WifiPermissionsUtil; 490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhneimport com.android.server.wifi.util.WifiPermissionsWrapper; 508600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 51ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Piusimport org.junit.After; 5250eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.junit.Before; 5350eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.junit.Test; 546e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport org.mockito.ArgumentCaptor; 556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport org.mockito.InOrder; 5650eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.mockito.Mock; 5750eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.mockito.MockitoAnnotations; 5850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 5942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.FileDescriptor; 6042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.PrintWriter; 6142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.StringWriter; 6250eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport java.util.ArrayList; 631fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Piusimport java.util.Arrays; 642dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Piusimport java.util.HashSet; 6550eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport java.util.List; 66f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silbersteinimport java.util.Random; 67674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Piusimport java.util.Set; 6850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 6950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius/** 70a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Unit tests for {@link com.android.server.wifi.WifiConfigManager}. 7150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 7250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius@SmallTest 73a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Piuspublic class WifiConfigManagerTest { 7450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 7550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final String TEST_BSSID = "0a:08:5c:67:89:00"; 7650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final long TEST_WALLCLOCK_CREATION_TIME_MILLIS = 9845637; 7750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final long TEST_WALLCLOCK_UPDATE_TIME_MILLIS = 75455637; 78fc789b2227e92372b2489ca54691310800835a50Roshan Pius private static final long TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS = 29457631; 791fe1065da82165183fa057ddbbd2e33bc5708c1bRobin Lee private static final int TEST_CREATOR_UID = WifiConfigurationTestUtil.TEST_UID; 800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final int TEST_NO_PERM_UID = 7; 8150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final int TEST_UPDATE_UID = 4; 826d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius private static final int TEST_SYSUI_UID = 56; 836d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius private static final int TEST_DEFAULT_USER = UserHandle.USER_SYSTEM; 842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private static final int TEST_MAX_NUM_ACTIVE_CHANNELS_FOR_PARTIAL_SCAN = 5; 852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private static final Integer[] TEST_FREQ_LIST = {2400, 2450, 5150, 5175, 5650}; 860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_CREATOR_NAME = "com.wificonfigmanager.creator"; 870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_UPDATE_NAME = "com.wificonfigmanager.update"; 880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_NO_PERM_NAME = "com.wificonfigmanager.noperm"; 898600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius private static final String TEST_DEFAULT_GW_MAC_ADDRESS = "0f:67:ad:ef:09:34"; 900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_HOST_1 = "192.168.48.1"; 910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final int TEST_STATIC_PROXY_PORT_1 = 8000; 920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_EXCLUSION_LIST_1 = ""; 930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_PAC_PROXY_LOCATION_1 = "http://bleh"; 940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_HOST_2 = "192.168.1.1"; 950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final int TEST_STATIC_PROXY_PORT_2 = 3000; 960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_EXCLUSION_LIST_2 = ""; 970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_PAC_PROXY_LOCATION_2 = "http://blah"; 9850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 9950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private Context mContext; 10050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private Clock mClock; 10150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private UserManager mUserManager; 10296241bee619ff7073635f680a36869f61a11a225Roshan Pius @Mock private TelephonyManager mTelephonyManager; 10350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private WifiKeyStore mWifiKeyStore; 104a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius @Mock private WifiConfigStore mWifiConfigStore; 1053a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Mock private WifiConfigStoreLegacy mWifiConfigStoreLegacy; 10650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private PackageManager mPackageManager; 1070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Mock private DevicePolicyManagerInternal mDevicePolicyManagerInternal; 108835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein @Mock private WifiPermissionsUtil mWifiPermissionsUtil; 1090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Mock private WifiPermissionsWrapper mWifiPermissionsWrapper; 1100a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu @Mock private NetworkListStoreData mNetworkListStoreData; 1110a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu @Mock private DeletedEphemeralSsidsStoreData mDeletedEphemeralSsidsStoreData; 1125d0addadb370bcbb8900414fb9597bd415e6fea0Randy Pan @Mock private WifiConfigManager.OnSavedNetworkUpdateListener mWcmListener; 11350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private MockResources mResources; 1156e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private InOrder mContextConfigStoreMockOrder; 1160a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu private InOrder mNetworkListStoreDataMockOrder; 117a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius private WifiConfigManager mWifiConfigManager; 118dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius private boolean mStoreReadTriggered = false; 11950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 12050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 121a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Setup the mocks and an instance of WifiConfigManager before each test. 12250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 12350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Before 12450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void setUp() throws Exception { 12550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius MockitoAnnotations.initMocks(this); 12650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1276e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Set up the inorder for verifications. This is needed to verify that the broadcasts, 1286e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // store writes for network updates followed by network additions are in the expected order. 1296e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder = inOrder(mContext, mWifiConfigStore); 1300a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mNetworkListStoreDataMockOrder = inOrder(mNetworkListStoreData); 1316e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 13250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Set up the package name stuff & permission override. 13350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mContext.getPackageManager()).thenReturn(mPackageManager); 1342dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources = new MockResources(); 1352dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setBoolean( 1368600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius R.bool.config_wifi_only_link_same_credential_configurations, true); 1372dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 1382dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 1392dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_MAX_NUM_ACTIVE_CHANNELS_FOR_PARTIAL_SCAN); 1402dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius when(mContext.getResources()).thenReturn(mResources); 1418600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 1426d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Setup UserManager profiles for the default user. 1436d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(TEST_DEFAULT_USER); 1446d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 14550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 14650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public String answer(int uid) throws Exception { 14750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (uid == TEST_CREATOR_UID) { 14850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return TEST_CREATOR_NAME; 14950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } else if (uid == TEST_UPDATE_UID) { 15050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return TEST_UPDATE_NAME; 1516d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } else if (uid == TEST_SYSUI_UID) { 152a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius return WifiConfigManager.SYSUI_PACKAGE_NAME; 1530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } else if (uid == TEST_NO_PERM_UID) { 1540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne return TEST_NO_PERM_NAME; 15550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 15650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius fail("Unexpected UID: " + uid); 15750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return ""; 15850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 15950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mPackageManager).getNameForUid(anyInt()); 1606d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius doAnswer(new AnswerWithArguments() { 1616d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public int answer(String packageName, int flags, int userId) throws Exception { 162a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius if (packageName.equals(WifiConfigManager.SYSUI_PACKAGE_NAME)) { 1636d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius return TEST_SYSUI_UID; 1646d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } else { 1656d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius return 0; 1666d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 1676d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 1686d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius }).when(mPackageManager).getPackageUidAsUser(anyString(), anyInt(), anyInt()); 16950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1701fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius when(mWifiKeyStore 17128102ffacda0802a1c4aa1b7edbbcc2bf01391a9Roshan Pius .updateNetworkKeys(any(WifiConfiguration.class), any())) 1721fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius .thenReturn(true); 1731fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 1743a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(true); 175dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius setupStoreDataForRead(new ArrayList<WifiConfiguration>(), 176dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius new ArrayList<WifiConfiguration>(), new HashSet<String>()); 1773a738a26918230b2469d917dbf14323234edd39bRoshan Pius 1780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), anyInt())) 1790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(false); 180835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())).thenReturn(true); 1810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mWifiPermissionsWrapper.getDevicePolicyManagerInternal()) 1820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(mDevicePolicyManagerInternal); 1832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 1845d0addadb370bcbb8900414fb9597bd415e6fea0Randy Pan mWifiConfigManager.setOnSavedNetworkUpdateListener(mWcmListener); 18550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 18650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 18750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 188ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius * Called after each test 189ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius */ 190ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius @After 191ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius public void cleanup() { 192ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius validateMockitoUsage(); 193ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius } 194ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius 195ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius /** 19623ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius * Verifies that network retrieval via 19723ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius * {@link WifiConfigManager#getConfiguredNetworks()} and 19823ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius * {@link WifiConfigManager#getConfiguredNetworksWithPasswords()} works even if we have not 19923ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius * yet loaded data from store. 20023ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius */ 20123ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius @Test 20223ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius public void testGetConfiguredNetworksBeforeLoadFromStore() { 20323ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 20423ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworksWithPasswords().isEmpty()); 20523ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius } 20623ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius 20723ed63d91b8af8f1d3569371daedc4162e323cc0Roshan Pius /** 208dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius * Verifies that network addition via 209dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} fails if we have not 210dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius * yet loaded data from store. 211dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius */ 212dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius @Test 213dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius public void testAddNetworkBeforeLoadFromStore() { 214dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 215dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius assertFalse( 216dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius mWifiConfigManager.addOrUpdateNetwork(openNetwork, TEST_CREATOR_UID).isSuccess()); 217dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius } 218dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius 219dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius /** 22050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single network using 221a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 22250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 22350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 22450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSingleOpenNetwork() { 22550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 22650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 22750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 22850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2296e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 23050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 23150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 23250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 23350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 23450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 2350ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius // Ensure that the newly added network is disabled. 2360ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius assertEquals(WifiConfiguration.Status.DISABLED, retrievedNetworks.get(0).status); 23750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 23850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 23950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 24050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the modification of a single network using 241a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 24250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 24350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 24450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetwork() { 24550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 24650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 24750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 24850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 250403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener).onSavedNetworkAdded(openNetwork.networkId); 251403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang reset(mWcmListener); 25250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID for the network. 25450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 2556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 25650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 25750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that the modification has been effective. 25850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 25950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 26050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 26150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 262403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener).onSavedNetworkUpdated(openNetwork.networkId); 26350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 26450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 26550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 26650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single ephemeral network using 267a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 268a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * the {@link WifiConfigManager#getSavedNetworks()} does not return this network. 26950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 27050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 271bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius public void testAddSingleEphemeralNetwork() throws Exception { 272bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration ephemeralNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 273bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius ephemeralNetwork.ephemeral = true; 27450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 275bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius networks.add(ephemeralNetwork); 27650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 277bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyAddEphemeralNetworkToWifiConfigManager(ephemeralNetwork); 27850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 27950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 28050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 28150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 28250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 28350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 28450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Ensure that this is not returned in the saved network list. 28550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(mWifiConfigManager.getSavedNetworks().isEmpty()); 286403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener, never()).onSavedNetworkAdded(ephemeralNetwork.networkId); 28750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 28850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 28950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 290bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Verifies the addition of 2 networks (1 normal and 1 ephemeral) using 291bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and ensures that 292bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * the ephemeral network configuration is not persisted in config store. 293bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 294bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius @Test 295bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius public void testAddMultipleNetworksAndEnsureEphemeralNetworkNotPersisted() { 296bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration ephemeralNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 297bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius ephemeralNetwork.ephemeral = true; 298bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 299bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 300bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(addNetworkToWifiConfigManager(ephemeralNetwork).isSuccess()); 301bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(addNetworkToWifiConfigManager(openNetwork).isSuccess()); 302bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 303bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // The open network addition should trigger a store write. 3040a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu Pair<List<WifiConfiguration>, List<WifiConfiguration>> networkListStoreData = 3050a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu captureWriteNetworksListStoreData(); 3060a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu List<WifiConfiguration> networkList = new ArrayList<>(); 3070a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu networkList.addAll(networkListStoreData.first); 3080a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu networkList.addAll(networkListStoreData.second); 3090a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu assertFalse(isNetworkInConfigStoreData(ephemeralNetwork, networkList)); 3100a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu assertTrue(isNetworkInConfigStoreData(openNetwork, networkList)); 311bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 312bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 313bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 31450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies that the modification of a single open network using 315a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with a UID which 31650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * has no permission to modify the network fails. 31750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 31850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 31950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetworkFailedDueToPermissionDenied() throws Exception { 32050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 32150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 32250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 32350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 32550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 32750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 32850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 329835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())).thenReturn(false); 33050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 33150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration and ensure that the operation failed. 3326e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = updateNetworkToWifiConfigManager(openNetwork); 33350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(result.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID); 33450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 33550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 33650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 33750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies that the modification of a single open network using 338a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with the creator UID 33950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * should always succeed. 34050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 34150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 34250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetworkSuccessWithCreatorUID() throws Exception { 34350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 34450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 34550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 34650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3476e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 34850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 35050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 35150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 35250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration using the creator UID. 3536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = 3546e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mWifiConfigManager.addOrUpdateNetwork(openNetwork, TEST_CREATOR_UID); 35550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 35650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 35750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that the modification has been effective. 35850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 35950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 36050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 36150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 36250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 36350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 36450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 36550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single PSK network using 366a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 367a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworks()} masks the password. 36850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 36950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 37050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSinglePskNetwork() { 37150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 37250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 37350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(pskNetwork); 37450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3756e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 37650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 37750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 37850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 37950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 38050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 38150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 38250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedSavedNetworks = mWifiConfigManager.getSavedNetworks(); 38350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.size(), 1); 38450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.get(0).configKey(), pskNetwork.configKey()); 3856e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedSavedNetworks.get(0)); 38650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 38750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 38850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 38950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single WEP network using 390a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 391a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworks()} masks the password. 39250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 39350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 39450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSingleWepNetwork() { 39550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 39650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 39750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(wepNetwork); 39850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 40050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 40150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 40250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 40350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 40450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 40550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 40650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedSavedNetworks = mWifiConfigManager.getSavedNetworks(); 40750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.size(), 1); 40850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.get(0).configKey(), wepNetwork.configKey()); 4096e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedSavedNetworks.get(0)); 41050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 41150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 41250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 41350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the modification of an IpConfiguration using 414a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 41550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 41650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 41750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateIpConfiguration() { 41850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 41950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 42050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 42150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 4226e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 42350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 4246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 42550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 42650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 42750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration and ensure that the IP configuration change flags 42850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // are not set. 4296e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 43050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 4310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Configure mock DevicePolicyManager to give Profile Owner permission so that we can modify 4320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // proxy settings on a configuration 4330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 4340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))).thenReturn(true); 4350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 43650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Change the IpConfiguration now and ensure that the IP configuration flags are set now. 43750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkIpConfiguration( 43850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius openNetwork, 43950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy()); 4406e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithIpChange(openNetwork); 44150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 44250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that all the modifications have been effective. 44350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 44450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 44550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 44650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 44750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 44850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 44950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 450c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * Verifies the removal of a single network using 451a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int)} 452c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 453c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius @Test 454c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius public void testRemoveSingleOpenNetwork() { 455c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 456c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 457c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 458403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener).onSavedNetworkAdded(openNetwork.networkId); 459403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang reset(mWcmListener); 460403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang 461bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that configured network list is not empty. 462bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 463c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 464c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(openNetwork); 465bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that configured network list is empty now. 466bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 467403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener).onSavedNetworkRemoved(openNetwork.networkId); 468bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 469bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 470bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 471bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Verifies the removal of an ephemeral network using 472bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * {@link WifiConfigManager#removeNetwork(int)} 473bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 474bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius @Test 475bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius public void testRemoveSingleEphemeralNetwork() throws Exception { 476bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration ephemeralNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 477bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius ephemeralNetwork.ephemeral = true; 478bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 479bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyAddEphemeralNetworkToWifiConfigManager(ephemeralNetwork); 480bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that configured network list is not empty. 481bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 482403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener, never()).onSavedNetworkAdded(ephemeralNetwork.networkId); 483c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 484bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyRemoveEphemeralNetworkFromWifiConfigManager(ephemeralNetwork); 485c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Ensure that configured network list is empty now. 486c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 487403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener, never()).onSavedNetworkRemoved(ephemeralNetwork.networkId); 488c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 489c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 490c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 491d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu * Verifies the removal of a Passpoint network using 492d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu * {@link WifiConfigManager#removeNetwork(int)} 493d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu */ 494d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu @Test 495d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu public void testRemoveSinglePasspointNetwork() throws Exception { 496d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu WifiConfiguration passpointNetwork = WifiConfigurationTestUtil.createPasspointNetwork(); 497d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu 498d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu verifyAddPasspointNetworkToWifiConfigManager(passpointNetwork); 499d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu // Ensure that configured network list is not empty. 500d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 501403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener, never()).onSavedNetworkAdded(passpointNetwork.networkId); 502d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu 503d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu verifyRemovePasspointNetworkFromWifiConfigManager(passpointNetwork); 504d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu // Ensure that configured network list is empty now. 505d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 506403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener, never()).onSavedNetworkRemoved(passpointNetwork.networkId); 507d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu } 508d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu 509d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu /** 5103a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu * Verify that a Passpoint network that's added by an app with {@link #TEST_CREATOR_UID} can 5113a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu * be removed by WiFi Service with {@link Process#WIFI_UID}. 5123a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu * 5133a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu * @throws Exception 5143a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu */ 5153a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu @Test 5163a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu public void testRemovePasspointNetworkAddedByOther() throws Exception { 5173a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu WifiConfiguration passpointNetwork = WifiConfigurationTestUtil.createPasspointNetwork(); 5183a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu 5193a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu // Passpoint network is added using TEST_CREATOR_UID. 5203a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu verifyAddPasspointNetworkToWifiConfigManager(passpointNetwork); 5213a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu // Ensure that configured network list is not empty. 5223a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 5233a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu 5243a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu assertTrue(mWifiConfigManager.removeNetwork(passpointNetwork.networkId, Process.WIFI_UID)); 5253a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu 5263a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu // Verify keys are not being removed. 5273a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu verify(mWifiKeyStore, never()).removeKeys(any(WifiEnterpriseConfig.class)); 5283a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu verifyNetworkRemoveBroadcast(passpointNetwork); 5293a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu // Ensure that the write was not invoked for Passpoint network remove. 5303a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 5313a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu 5323a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu } 5333a86cc60b6cd3a5eb7b4982ba98f7e71ad45915ePeter Qiu /** 534fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the addition & update of multiple networks using 535a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and the 536c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * removal of networks using 537a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int)} 538c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 539c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius @Test 540fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testAddUpdateRemoveMultipleNetworks() { 541c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 542c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 543c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 544c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 545c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(openNetwork); 546c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(pskNetwork); 547c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(wepNetwork); 548c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 549c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 550c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 551c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 552c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 553c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now verify that all the additions has been effective. 554c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius List<WifiConfiguration> retrievedNetworks = 555c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 556c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 557c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks, retrievedNetworks); 558c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 559c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Modify all the 3 configurations and update it to WifiConfigManager. 560c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 561c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkBSSID(pskNetwork, TEST_BSSID); 562c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkIpConfiguration( 563c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius wepNetwork, 564c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy()); 565c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 5660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Configure mock DevicePolicyManager to give Profile Owner permission so that we can modify 5670d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // proxy settings on a configuration 5680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 5690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))).thenReturn(true); 5700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 571c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 572c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(pskNetwork); 573c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithIpChange(wepNetwork); 574c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now verify that all the modifications has been effective. 575c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 576c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 577c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks, retrievedNetworks); 578c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 579c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now remove all 3 networks. 580c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(openNetwork); 581c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(pskNetwork); 582c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(wepNetwork); 583c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 584c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Ensure that configured network list is empty now. 585c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 586c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 587c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 588c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 589fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the update of network status using 590a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)}. 591fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 592fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 593fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testNetworkSelectionStatus() { 594fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 595fc789b2227e92372b2489ca54691310800835a50Roshan Pius 596fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 597fc789b2227e92372b2489ca54691310800835a50Roshan Pius 598403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang int networkId = result.getNetworkId(); 599fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 600fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 601403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang networkId, NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 602fc789b2227e92372b2489ca54691310800835a50Roshan Pius 603fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled. The threshold for association rejection is 5, so 604fc789b2227e92372b2489ca54691310800835a50Roshan Pius // disable it 5 times to actually mark it temporarily disabled. 605fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectReason = NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION; 606fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectThreshold = 607a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[assocRejectReason]; 608fc789b2227e92372b2489ca54691310800835a50Roshan Pius for (int i = 1; i <= assocRejectThreshold; i++) { 609fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus(result.getNetworkId(), assocRejectReason, i); 610fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 611403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener).onSavedNetworkTemporarilyDisabled(networkId); 612fc789b2227e92372b2489ca54691310800835a50Roshan Pius 613fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to permanently disabled. 614fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 615fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_BY_WIFI_MANAGER, 0); 616403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener).onSavedNetworkPermanentlyDisabled(networkId); 617fc789b2227e92372b2489ca54691310800835a50Roshan Pius 618fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it back to enabled. 619fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 620fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 621403df479e25031276c738dbea334f09bb7e4bf37Ningyuan Wang verify(mWcmListener, times(2)).onSavedNetworkEnabled(networkId); 622fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 623fc789b2227e92372b2489ca54691310800835a50Roshan Pius 624fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 625fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the update of network status using 626a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)} and ensures that 627fc789b2227e92372b2489ca54691310800835a50Roshan Pius * enabling a network clears out all the temporary disable counters. 628fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 629fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 630fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testNetworkSelectionStatusEnableClearsDisableCounters() { 631fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 632fc789b2227e92372b2489ca54691310800835a50Roshan Pius 633fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 634fc789b2227e92372b2489ca54691310800835a50Roshan Pius 635fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 636fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 637fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 638fc789b2227e92372b2489ca54691310800835a50Roshan Pius 639fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled 2 times for 2 different reasons. 640fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 641fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 1); 642fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 643fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 2); 644fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 645fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 1); 646fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 647fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 2); 648fc789b2227e92372b2489ca54691310800835a50Roshan Pius 649fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it back to enabled. 650fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 651fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 652fc789b2227e92372b2489ca54691310800835a50Roshan Pius 653fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Ensure that the counters have all been reset now. 654fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 655fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 1); 656fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 657fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 1); 658fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 659fc789b2227e92372b2489ca54691310800835a50Roshan Pius 660fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 6613f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh * Verifies that {@link WifiConfigManager#updateNetworkNotRecommended(int, boolean)} correctly 6623f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh * updates the {@link NetworkSelectionStatus#mNotRecommended} bit. 6633f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh */ 6643f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh @Test 6653f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh public void testUpdateNetworkNotRecommended() { 6663f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 6673f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6683f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 6693f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6703f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh // First retrieve the configuration and check this it does not have this bit set 6713f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.netId); 6723f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6733f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh assertFalse(retrievedNetwork.getNetworkSelectionStatus().isNotRecommended()); 6743f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6753f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh // Update the network to be not recommended; 6763f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh assertTrue(mWifiConfigManager.updateNetworkNotRecommended( 6773f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh result.netId, true /* notRecommended*/)); 6783f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6793f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.netId); 6803f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6813f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh assertTrue(retrievedNetwork.getNetworkSelectionStatus().isNotRecommended()); 6823f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6833f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh // Update the network to no longer be not recommended 6843f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh assertTrue(mWifiConfigManager.updateNetworkNotRecommended( 6853f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh result.netId, false/* notRecommended*/)); 6863f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6873f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.netId); 6883f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6893f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh assertFalse(retrievedNetwork.getNetworkSelectionStatus().isNotRecommended()); 6903f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh } 6913f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh 6923f7cd32878130323e2632bc2c6b8b211f6260138Amin Shaikh /** 693fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the enabling of temporarily disabled network using 694a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#tryEnableNetwork(int)}. 695fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 696fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 697fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testTryEnableNetwork() { 698fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 699fc789b2227e92372b2489ca54691310800835a50Roshan Pius 700fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 701fc789b2227e92372b2489ca54691310800835a50Roshan Pius 702fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 703fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 704fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 705fc789b2227e92372b2489ca54691310800835a50Roshan Pius 706fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled. The threshold for association rejection is 5, so 707fc789b2227e92372b2489ca54691310800835a50Roshan Pius // disable it 5 times to actually mark it temporarily disabled. 708fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectReason = NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION; 709fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectThreshold = 710a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[assocRejectReason]; 711fc789b2227e92372b2489ca54691310800835a50Roshan Pius for (int i = 1; i <= assocRejectThreshold; i++) { 712fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus(result.getNetworkId(), assocRejectReason, i); 713fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 714fc789b2227e92372b2489ca54691310800835a50Roshan Pius 715fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now let's try enabling this network without changing the time, this should fail and the 716fc789b2227e92372b2489ca54691310800835a50Roshan Pius // status remains temporarily disabled. 717fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertFalse(mWifiConfigManager.tryEnableNetwork(result.getNetworkId())); 718fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus retrievedStatus = 719fc789b2227e92372b2489ca54691310800835a50Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 720fc789b2227e92372b2489ca54691310800835a50Roshan Pius .getNetworkSelectionStatus(); 721fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkTemporaryDisabled()); 722fc789b2227e92372b2489ca54691310800835a50Roshan Pius 723fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now advance time by the timeout for association rejection and ensure that the network 724fc789b2227e92372b2489ca54691310800835a50Roshan Pius // is now enabled. 725fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectTimeout = 726a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_TIMEOUT_MS[assocRejectReason]; 727fc789b2227e92372b2489ca54691310800835a50Roshan Pius when(mClock.getElapsedSinceBootMillis()) 728fc789b2227e92372b2489ca54691310800835a50Roshan Pius .thenReturn(TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS + assocRejectTimeout); 729fc789b2227e92372b2489ca54691310800835a50Roshan Pius 730fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(mWifiConfigManager.tryEnableNetwork(result.getNetworkId())); 731fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedStatus = 732fc789b2227e92372b2489ca54691310800835a50Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 733fc789b2227e92372b2489ca54691310800835a50Roshan Pius .getNetworkSelectionStatus(); 734fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 735fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 736fc789b2227e92372b2489ca54691310800835a50Roshan Pius 737fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 738a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the enabling of network using 739a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} and 740a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#disableNetwork(int, int)}. 741a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 742a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 7436f1055408a43428ababffc1d1fa928c825924680Roshan Pius public void testEnableDisableNetwork() throws Exception { 744a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 745a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 746a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 747a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 748a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 749a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), false, TEST_CREATOR_UID)); 750a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 751a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 752a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 753a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 754a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 7556f1055408a43428ababffc1d1fa928c825924680Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).write(eq(true)); 756a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 757a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now set it disabled. 758a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 759a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 760a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 761a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkPermanentlyDisabled()); 762a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.DISABLED); 7636f1055408a43428ababffc1d1fa928c825924680Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).write(eq(true)); 764a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 765a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 766a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 767a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the enabling of network using 768a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} with a UID which 769a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * has no permission to modify the network fails.. 770a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 771a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 772a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testEnableDisableNetworkFailedDueToPermissionDenied() throws Exception { 773a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 774a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 775a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 776a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 777a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 778a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), false, TEST_CREATOR_UID)); 779a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 780a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 781a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 782a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 783a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 784a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 785835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())).thenReturn(false); 786a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 787a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now try to set it disabled with |TEST_UPDATE_UID|, it should fail and the network 788a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // should remain enabled. 789a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_UPDATE_UID)); 790a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedStatus = 791a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 792a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius .getNetworkSelectionStatus(); 793a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 794a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(WifiConfiguration.Status.ENABLED, retrievedNetwork.status); 795a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 796a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 797a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 798a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the updation of network's connectUid using 799a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#checkAndUpdateLastConnectUid(int, int)}. 800a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 801a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 802a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testUpdateLastConnectUid() throws Exception { 803a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 804a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 805a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 806a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 807a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue( 8082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.checkAndUpdateLastConnectUid( 8092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius result.getNetworkId(), TEST_CREATOR_UID)); 810a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 811a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 812a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(TEST_CREATOR_UID, retrievedNetwork.lastConnectUid); 813a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 814835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())).thenReturn(false); 815a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 816a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now try to update the last connect UID with |TEST_UPDATE_UID|, it should fail and 817a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // the lastConnectUid should remain the same. 818a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse( 8191fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius mWifiConfigManager.checkAndUpdateLastConnectUid( 8201fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius result.getNetworkId(), TEST_UPDATE_UID)); 821a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 822a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(TEST_CREATOR_UID, retrievedNetwork.lastConnectUid); 823a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 824a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 825a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 826a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration update attempt with an null config is gracefully 827a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 828a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 829a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 830a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 831a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testAddOrUpdateNetworkWithNullConfig() { 832a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = mWifiConfigManager.addOrUpdateNetwork(null, TEST_CREATOR_UID); 833a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(result.isSuccess()); 834a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 835a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 836a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 837f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein * Verifies that attempting to remove a network without any configs stored will return false. 838f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein * This tests the case where we have not loaded any configs, potentially due to a pending store 839f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein * read. 840f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein * This invokes {@link WifiConfigManager#removeNetwork(int)}. 841f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein */ 842f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein @Test 843f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein public void testRemoveNetworkWithEmptyConfigStore() { 844f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein int networkId = new Random().nextInt(); 845f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein assertFalse(mWifiConfigManager.removeNetwork(networkId, TEST_CREATOR_UID)); 846f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein } 847f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein 848f9c69201a95062e33cf62d7bacd465e799788a8fRebecca Silberstein /** 849a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration removal attempt with an invalid networkID is gracefully 850a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 851a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#removeNetwork(int)}. 852a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 853a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 854a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testRemoveNetworkWithInvalidNetworkId() { 855a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 856a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 857a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 858a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 859a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Change the networkID to an invalid one. 860a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius openNetwork.networkId++; 8616d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertFalse(mWifiConfigManager.removeNetwork(openNetwork.networkId, TEST_CREATOR_UID)); 862a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 863a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 864a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 865a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration update attempt with an invalid networkID is gracefully 866a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 867a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#enableNetwork(int, boolean, int)}, 868a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#disableNetwork(int, int)}, 869a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)} and 870a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#checkAndUpdateLastConnectUid(int, int)}. 871a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 872a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 873a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testChangeConfigurationWithInvalidNetworkId() { 874a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 875a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 876a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 877a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 878a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertFalse(mWifiConfigManager.enableNetwork( 879a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId() + 1, false, TEST_CREATOR_UID)); 88022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertFalse(mWifiConfigManager.disableNetwork(result.getNetworkId() + 1, TEST_CREATOR_UID)); 881a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.updateNetworkSelectionStatus( 88222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius result.getNetworkId() + 1, NetworkSelectionStatus.DISABLED_BY_WIFI_MANAGER)); 883a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.checkAndUpdateLastConnectUid( 88422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius result.getNetworkId() + 1, TEST_CREATOR_UID)); 885a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 886a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 887a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 8881fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies multiple modification of a single network using 889a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 8901fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * This test is basically checking if the apps can reset some of the fields of the config after 8911fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * addition. The fields being reset in this test are the |preSharedKey| and |wepKeys|. 8921fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 1. Create an open network initially. 8931fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 2. Modify the added network config to a WEP network config with all the 4 keys set. 8941fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 3. Modify the added network config to a WEP network config with only 1 key set. 8951fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 4. Modify the added network config to a PSK network config. 8961fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 8971fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 8981fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testMultipleUpdatesSingleNetwork() { 8991fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createOpenNetwork(); 9001fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 9011fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9021fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now add |wepKeys| to the network. We don't need to update the |allowedKeyManagement| 9031fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // fields for open to WEP conversion. 9041fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius String[] wepKeys = 9051fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius Arrays.copyOf(WifiConfigurationTestUtil.TEST_WEP_KEYS, 9061fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.TEST_WEP_KEYS.length); 9071fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius int wepTxKeyIdx = WifiConfigurationTestUtil.TEST_WEP_TX_KEY_INDEX; 9081fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 9091fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9101fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 9111fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 9121fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 9131fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9141fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now empty out 3 of the |wepKeys[]| and ensure that those keys have been reset correctly. 9151fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius for (int i = 1; i < network.wepKeys.length; i++) { 9161fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepKeys[i] = ""; 9171fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 9181fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepTxKeyIdx = 0; 9191fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 9201fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9211fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 9221fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 9231fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 9241fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9251fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now change the config to a PSK network config by resetting the remaining |wepKey[0]| 9261fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // field and setting the |preSharedKey| and |allowedKeyManagement| fields. 9271fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepKeys[0] = ""; 9281fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepTxKeyIdx = -1; 9291fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 9301fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 9311fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkPreSharedKey(network, WifiConfigurationTestUtil.TEST_PSK); 9321fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9331fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 9341fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 9351fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 9361fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 9371fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9381fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 9391fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies the modification of a WifiEnteriseConfig using 940a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 9411fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 9421fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 9431fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testUpdateWifiEnterpriseConfig() { 9441fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 9451fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 9461fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9471fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Set the |password| field in WifiEnterpriseConfig and modify the config to PEAP/GTC. 9481fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig = 9491fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 9501fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkEnterprisePassword(network, "test"); 9511fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9521fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 9531fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 9541fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 9551fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9561fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Reset the |password| field in WifiEnterpriseConfig and modify the config to TLS/None. 9571fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 9581fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE); 9591fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkEnterprisePassword(network, ""); 9601fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9611fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 9621fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 9631fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 9641fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 9651fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9661fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 9671fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies the modification of a single network using 968a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} by passing in nulls 9691fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * in all the publicly exposed fields. 9701fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 9711fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 9721fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testUpdateSingleNetworkWithNullValues() { 9731fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 9741fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 9751fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9761fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Save a copy of the original network for comparison. 9771fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration originalNetwork = new WifiConfiguration(network); 9781fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9791fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now set all the public fields to null and try updating the network. 9809cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedAuthAlgorithms.clear(); 9819cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedProtocols.clear(); 9829cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedKeyManagement.clear(); 9839cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedPairwiseCiphers.clear(); 9849cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedGroupCiphers.clear(); 9851fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.setIpConfiguration(null); 9861fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig = null; 9871fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9889cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu // Update the network. 9899cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu NetworkUpdateResult result = updateNetworkToWifiConfigManager(network); 9909cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 9919cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertFalse(result.isNewNetwork()); 9929cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu 9939cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu // Verify no changes to the original network configuration. 9949cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu verifyNetworkUpdateBroadcast(originalNetwork); 9959cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu verifyNetworkInConfigStoreData(originalNetwork); 9969cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertFalse(result.hasIpChanged()); 9979cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertFalse(result.hasProxyChanged()); 9981fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9991fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Copy over the updated debug params to the original network config before comparison. 10001fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.lastUpdateUid = network.lastUpdateUid; 10011fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.lastUpdateName = network.lastUpdateName; 10021fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.updateTime = network.updateTime; 10031fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 10041fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now verify that there was no change to the network configurations. 10051fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 10061fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork, 10071fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(originalNetwork.networkId)); 10081fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 10091fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 10101fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 10111230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius * Verifies that the modification of a single network using 1012a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} does not modify 10131230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius * existing configuration if there is a failure. 10141230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius */ 10151230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius @Test 10161230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius public void testUpdateSingleNetworkFailureDoesNotModifyOriginal() { 10171230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 10181230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius network.enterpriseConfig = 10191230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 10201230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius verifyAddNetworkToWifiConfigManager(network); 10211230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 10221230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Save a copy of the original network for comparison. 10231230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfiguration originalNetwork = new WifiConfiguration(network); 10241230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 10251230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Now modify the network's EAP method. 10261230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius network.enterpriseConfig = 10271230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.createTLSWifiEnterpriseConfigWithNonePhase2(); 10281230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 10291230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Fail this update because of cert installation failure. 10301230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius when(mWifiKeyStore 10311230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius .updateNetworkKeys(any(WifiConfiguration.class), any(WifiConfiguration.class))) 10321230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius .thenReturn(false); 10331230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius NetworkUpdateResult result = 10341230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius mWifiConfigManager.addOrUpdateNetwork(network, TEST_UPDATE_UID); 10351230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius assertTrue(result.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID); 10361230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 10371230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Now verify that there was no change to the network configurations. 10381230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 10391230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius originalNetwork, 10401230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(originalNetwork.networkId)); 10411230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius } 10421230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 10431230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius /** 104422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies the matching of networks with different encryption types with the 104522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * corresponding scan detail using 1046a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)}. 104722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * The test also verifies that the provided scan detail was cached, 104822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 104922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 105022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testMatchScanDetailToNetworksAndCache() { 105122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Create networks of different types and ensure that they're all matched using 105222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // the corresponding ScanDetail correctly. 105322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 105422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createOpenNetwork()); 105522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 105622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createWepNetwork()); 105722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 105822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createPskNetwork()); 105922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 106022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createEapNetwork()); 106122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 106222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 106322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 106422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies that scan details with wrong SSID/authentication types are not matched using 1065a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)} 106622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * to the added networks. 106722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 106822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 106922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testNoMatchScanDetailToNetwork() { 107022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // First create networks of different types. 107122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 107222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 107322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 107422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 107522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 107622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now add them to WifiConfigManager. 107722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 107822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 107922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 108022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(eapNetwork); 108122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 108222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now create dummy scan detail corresponding to the networks. 108322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail openNetworkScanDetail = createScanDetailForNetwork(openNetwork); 108422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail wepNetworkScanDetail = createScanDetailForNetwork(wepNetwork); 108522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail pskNetworkScanDetail = createScanDetailForNetwork(pskNetwork); 108622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail eapNetworkScanDetail = createScanDetailForNetwork(eapNetwork); 108722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 108822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now mix and match parameters from different scan details. 108922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetworkScanDetail.getScanResult().SSID = 109022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius wepNetworkScanDetail.getScanResult().SSID; 109122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius wepNetworkScanDetail.getScanResult().capabilities = 109222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius pskNetworkScanDetail.getScanResult().capabilities; 109322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius pskNetworkScanDetail.getScanResult().capabilities = 109422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius eapNetworkScanDetail.getScanResult().capabilities; 109522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius eapNetworkScanDetail.getScanResult().capabilities = 109622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetworkScanDetail.getScanResult().capabilities; 109722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 109822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Try to lookup a saved network using the modified scan details. All of these should fail. 109922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(openNetworkScanDetail)); 110022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(wepNetworkScanDetail)); 110122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(pskNetworkScanDetail)); 110222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(eapNetworkScanDetail)); 110322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 110422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // All the cache's should be empty as well. 110522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId)); 110622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(wepNetwork.networkId)); 110722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(pskNetwork.networkId)); 110822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(eapNetwork.networkId)); 110922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 111022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 111122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 1112850116348dacd6baf16645641c3383970e4a1157Peter Qiu * Verifies that ScanDetail added for a network is cached correctly. 1113850116348dacd6baf16645641c3383970e4a1157Peter Qiu */ 1114850116348dacd6baf16645641c3383970e4a1157Peter Qiu @Test 1115850116348dacd6baf16645641c3383970e4a1157Peter Qiu public void testUpdateScanDetailForNetwork() { 1116850116348dacd6baf16645641c3383970e4a1157Peter Qiu // First add the provided network. 1117850116348dacd6baf16645641c3383970e4a1157Peter Qiu WifiConfiguration testNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 1118850116348dacd6baf16645641c3383970e4a1157Peter Qiu NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(testNetwork); 1119850116348dacd6baf16645641c3383970e4a1157Peter Qiu 1120850116348dacd6baf16645641c3383970e4a1157Peter Qiu // Now create a dummy scan detail corresponding to the network. 1121850116348dacd6baf16645641c3383970e4a1157Peter Qiu ScanDetail scanDetail = createScanDetailForNetwork(testNetwork); 1122850116348dacd6baf16645641c3383970e4a1157Peter Qiu ScanResult scanResult = scanDetail.getScanResult(); 1123850116348dacd6baf16645641c3383970e4a1157Peter Qiu 1124850116348dacd6baf16645641c3383970e4a1157Peter Qiu mWifiConfigManager.updateScanDetailForNetwork(result.getNetworkId(), scanDetail); 1125850116348dacd6baf16645641c3383970e4a1157Peter Qiu 1126850116348dacd6baf16645641c3383970e4a1157Peter Qiu // Now retrieve the scan detail cache and ensure that the new scan detail is in cache. 1127850116348dacd6baf16645641c3383970e4a1157Peter Qiu ScanDetailCache retrievedScanDetailCache = 1128850116348dacd6baf16645641c3383970e4a1157Peter Qiu mWifiConfigManager.getScanDetailCacheForNetwork(result.getNetworkId()); 1129850116348dacd6baf16645641c3383970e4a1157Peter Qiu assertEquals(1, retrievedScanDetailCache.size()); 1130850116348dacd6baf16645641c3383970e4a1157Peter Qiu ScanResult retrievedScanResult = retrievedScanDetailCache.get(scanResult.BSSID); 1131850116348dacd6baf16645641c3383970e4a1157Peter Qiu 1132850116348dacd6baf16645641c3383970e4a1157Peter Qiu ScanTestUtil.assertScanResultEquals(scanResult, retrievedScanResult); 1133850116348dacd6baf16645641c3383970e4a1157Peter Qiu } 1134850116348dacd6baf16645641c3383970e4a1157Peter Qiu 1135850116348dacd6baf16645641c3383970e4a1157Peter Qiu /** 113622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies that scan detail cache is trimmed down when the size of the cache for a network 1137a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * exceeds {@link WifiConfigManager#SCAN_CACHE_ENTRIES_MAX_SIZE}. 113822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 113922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 114022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testScanDetailCacheTrimForNetwork() { 114122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Add a single network. 114222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 114322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 114422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 114522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetailCache scanDetailCache; 114622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius String testBssidPrefix = "00:a5:b8:c9:45:"; 114722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 114822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Modify |BSSID| field in the scan result and add copies of scan detail 114922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_MAX_SIZE| times. 115022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius int scanDetailNum = 1; 1151a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius for (; scanDetailNum <= WifiConfigManager.SCAN_CACHE_ENTRIES_MAX_SIZE; scanDetailNum++) { 115222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Create dummy scan detail caches with different BSSID for the network. 115322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = 115422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius createScanDetailForNetwork( 115522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetwork, String.format("%s%02x", testBssidPrefix, scanDetailNum)); 115622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNotNull( 115722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail)); 115822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 115922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // The size of scan detail cache should keep growing until it hits 116022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_MAX_SIZE|. 116122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius scanDetailCache = 116222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId); 116322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertEquals(scanDetailNum, scanDetailCache.size()); 116422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 116522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 116622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now add the |SCAN_CACHE_ENTRIES_MAX_SIZE + 1| entry. This should trigger the trim. 116722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = 116822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius createScanDetailForNetwork( 116922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetwork, String.format("%s%02x", testBssidPrefix, scanDetailNum)); 117022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail)); 117122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 117222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Retrieve the scan detail cache and ensure that the size was trimmed down to 117322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_TRIM_SIZE + 1|. The "+1" is to account for the new entry that 117422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // was added after the trim. 117522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius scanDetailCache = mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId); 1176a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.SCAN_CACHE_ENTRIES_TRIM_SIZE + 1, scanDetailCache.size()); 117722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 117822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 117922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 11802d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is false for a newly added network. 11812d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11822d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11832d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testAddNetworkHasEverConnectedFalse() { 11842d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(WifiConfigurationTestUtil.createOpenNetwork()); 11852d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11862d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11872d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11882d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is false for a newly added network even when new config has 11892d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * mistakenly set HasEverConnected to true. 11902d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11912d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11922d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testAddNetworkOverridesHasEverConnectedWhenTrueInNewConfig() { 11932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 11942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 11952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(openNetwork); 11962d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11992d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verify that the |HasEverConnected| is set when 1200a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkAfterConnect(int)} is invoked. 12012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 1203cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius public void testUpdateConfigAfterConnectHasEverConnectedTrue() { 12042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 12052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(openNetwork); 12062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(openNetwork.networkId); 12072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |preSharedKey| is updated. 12112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12122d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdatePreSharedKeyClearsHasEverConnected() { 12142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 12152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 12162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 12172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different psk. 12192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.preSharedKey.equals("newpassword")); 12202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.preSharedKey = "newpassword"; 12212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 12222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |wepKeys| is updated. 12262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateWepKeysClearsHasEverConnected() { 12292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 12302d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(wepNetwork); 12312d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(wepNetwork.networkId); 12322d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12332d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different wep. 12342d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(wepNetwork.wepKeys[0].equals("newpassword")); 12352d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius wepNetwork.wepKeys[0] = "newpassword"; 12362d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(wepNetwork); 12372d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12382d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12392d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12402d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |wepTxKeyIndex| is updated. 12412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12432d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateWepTxKeyClearsHasEverConnected() { 12442d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 12452d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(wepNetwork); 12462d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(wepNetwork.networkId); 12472d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12482d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different wep. 12492d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(wepNetwork.wepTxKeyIndex == 3); 12502d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius wepNetwork.wepTxKeyIndex = 3; 12512d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(wepNetwork); 12522d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12542d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12552d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedKeyManagement| is 12562d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 12572d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12582d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12592d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedKeyManagementClearsHasEverConnected() { 12602d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 12612d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 12622d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 12632d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12642d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)); 12652d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X); 12662d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 12672d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12682d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12692d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12702d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedProtocol| is 12712d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 12722d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12732d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12742d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateProtocolsClearsHasEverConnected() { 12752d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 12762d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 12772d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 12782d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12792d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedProtocols.get(WifiConfiguration.Protocol.OSEN)); 12802d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedProtocols.set(WifiConfiguration.Protocol.OSEN); 12812d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 12822d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12832d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12842d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12852d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedAuthAlgorithms| is 12862d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 12872d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12882d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12892d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedAuthAlgorithmsClearsHasEverConnected() { 12902d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 12912d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 12922d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 12932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.LEAP)); 12952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.LEAP); 12962d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 12972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12992d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 13002d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedPairwiseCiphers| is 13012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 13022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 13032d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 13042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedPairwiseCiphersClearsHasEverConnected() { 13052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 13062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 13072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 13082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedPairwiseCiphers.get(WifiConfiguration.PairwiseCipher.NONE)); 13102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.NONE); 13112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 13122d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 13132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 13152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedGroup| is 13162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 13172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 13182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 13192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedGroupCiphersClearsHasEverConnected() { 13202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 13212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 13222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 13232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue(pskNetwork.allowedGroupCiphers.get(WifiConfiguration.GroupCipher.WEP104)); 13252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedGroupCiphers.clear(WifiConfiguration.GroupCipher.WEP104); 13262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 13272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 13282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 13302d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |hiddenSSID| is 13312d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 13322d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 13332d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 13342d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateHiddenSSIDClearsHasEverConnected() { 13352d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 13362d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 13372d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 13382d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13392d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.hiddenSSID); 13402d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.hiddenSSID = true; 13412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 13422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 13432d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13442d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 13452d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is not cleared when a network config |requirePMF| is 13462d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 13472d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 13482d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 13492d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateRequirePMFDoesNotClearHasEverConnected() { 13502d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 13512d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 13522d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 13532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13542d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.requirePMF); 13552d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.requirePMF = true; 13562d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13572d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = 13582d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(pskNetwork); 13592d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 13602d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 13612d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue("Updating network non-credentials config should not clear hasEverConnected.", 13622d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 1363edf8be948c0879a2153582e853dc048f3060512aRoshan Pius assertFalse(result.hasCredentialChanged()); 13642d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 13652d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13662d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 13672d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |enterpriseConfig| is 13682d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 13692d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 13702d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 13712d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateEnterpriseConfigClearsHasEverConnected() { 13722d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 13732d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius eapNetwork.enterpriseConfig = 13742d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 13752d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(eapNetwork); 13762d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(eapNetwork.networkId); 13772d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13782d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(eapNetwork.enterpriseConfig.getEapMethod() == WifiEnterpriseConfig.Eap.TLS); 13792d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius eapNetwork.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 13802d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(eapNetwork); 13812d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 13822d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 13832d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 1384327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius * Verifies that if the app sends back the masked passwords in an update, we ignore it. 1385327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius */ 1386327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius @Test 1387327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius public void testUpdateIgnoresMaskedPasswords() { 1388327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius WifiConfiguration someRandomNetworkWithAllMaskedFields = 1389327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius WifiConfigurationTestUtil.createEapNetwork(); 1390327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius someRandomNetworkWithAllMaskedFields.wepKeys = WifiConfigurationTestUtil.TEST_WEP_KEYS; 1391327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius someRandomNetworkWithAllMaskedFields.preSharedKey = WifiConfigurationTestUtil.TEST_PSK; 1392327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius someRandomNetworkWithAllMaskedFields.enterpriseConfig.setPassword( 1393327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius WifiConfigurationTestUtil.TEST_EAP_PASSWORD); 1394327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius 1395327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius NetworkUpdateResult result = 1396327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius verifyAddNetworkToWifiConfigManager(someRandomNetworkWithAllMaskedFields); 1397327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius 1398327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius // All of these passwords must be masked in this retrieved network config. 1399327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius WifiConfiguration retrievedNetworkWithMaskedPassword = 1400327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 1401327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedNetworkWithMaskedPassword); 1402327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius // Ensure that the passwords are present internally. 1403327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius WifiConfiguration retrievedNetworkWithPassword = 1404327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(result.getNetworkId()); 1405327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius assertEquals(someRandomNetworkWithAllMaskedFields.preSharedKey, 1406327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius retrievedNetworkWithPassword.preSharedKey); 1407327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius assertEquals(someRandomNetworkWithAllMaskedFields.wepKeys, 1408327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius retrievedNetworkWithPassword.wepKeys); 1409327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius assertEquals(someRandomNetworkWithAllMaskedFields.enterpriseConfig.getPassword(), 1410327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius retrievedNetworkWithPassword.enterpriseConfig.getPassword()); 1411327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius 1412327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius // Now update the same network config using the masked config. 1413327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius verifyUpdateNetworkToWifiConfigManager(retrievedNetworkWithMaskedPassword); 1414327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius 1415327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius // Retrieve the network config with password and ensure that they have not been overwritten 1416327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius // with *. 1417327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius retrievedNetworkWithPassword = 1418327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(result.getNetworkId()); 1419327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius assertEquals(someRandomNetworkWithAllMaskedFields.preSharedKey, 1420327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius retrievedNetworkWithPassword.preSharedKey); 1421327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius assertEquals(someRandomNetworkWithAllMaskedFields.wepKeys, 1422327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius retrievedNetworkWithPassword.wepKeys); 1423327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius assertEquals(someRandomNetworkWithAllMaskedFields.enterpriseConfig.getPassword(), 1424327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius retrievedNetworkWithPassword.enterpriseConfig.getPassword()); 1425327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius } 1426327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius 1427327bd4253115abc757ebaf5f1bddd9f5ad2253e4Roshan Pius /** 1428fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius * Verifies the ordering of network list generated using 1429a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#retrievePnoNetworkList()}. 1430fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius */ 1431fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius @Test 1432fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius public void testRetrievePnoList() { 1433fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Create and add 3 networks. 1434fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createEapNetwork(); 1435fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 1436fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 1437fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network1); 1438fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network2); 1439fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network3); 1440fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1441fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Enable all of them. 1442a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network1.networkId, false, TEST_CREATOR_UID)); 1443a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network2.networkId, false, TEST_CREATOR_UID)); 1444a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network3.networkId, false, TEST_CREATOR_UID)); 1445fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1446fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now set scan results in 2 of them to set the corresponding 1447fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // {@link NetworkSelectionStatus#mSeenInLastQualifiedNetworkSelection} field. 1448fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 1449fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius network1.networkId, createScanDetailForNetwork(network1).getScanResult(), 54)); 1450fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 1451fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius network3.networkId, createScanDetailForNetwork(network3).getScanResult(), 54)); 1452fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1453fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now increment |network3|'s association count. This should ensure that this network 1454fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // is preferred over |network1|. 1455fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(network3.networkId)); 1456fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1457fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Retrieve the Pno network list & verify the order of the networks returned. 1458fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius List<WifiScanner.PnoSettings.PnoNetwork> pnoNetworks = 1459fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius mWifiConfigManager.retrievePnoNetworkList(); 1460fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(3, pnoNetworks.size()); 1461fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network3.SSID, pnoNetworks.get(0).ssid); 1462fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network1.SSID, pnoNetworks.get(1).ssid); 1463fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network2.SSID, pnoNetworks.get(2).ssid); 1464fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1465fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now permanently disable |network3|. This should remove network 3 from the list. 1466fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.disableNetwork(network3.networkId, TEST_CREATOR_UID)); 1467fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1468fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Retrieve the Pno network list again & verify the order of the networks returned. 1469fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius pnoNetworks = mWifiConfigManager.retrievePnoNetworkList(); 1470fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(2, pnoNetworks.size()); 1471fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network1.SSID, pnoNetworks.get(0).ssid); 1472fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network2.SSID, pnoNetworks.get(1).ssid); 1473fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius } 1474fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1475fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius /** 14768600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have the same default GW Mac address in 1477a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 14788600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 14798600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 14808600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingGwMacAddress() { 14818600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 14828600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 14838600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 14848600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 14858600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 14868600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 14878600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14888600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Set the same default GW mac address for all of the networks. 14898600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 14908600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 14918600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 14928600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 14938600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 14948600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network3.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 14958600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14968600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now create dummy scan detail corresponding to the networks. 14978600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1); 14988600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2); 14998600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail3 = createScanDetailForNetwork(network3); 15008600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15018600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 15028600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 15038600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 15048600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 15058600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail3)); 15068600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15078600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 15088600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 15098600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 15108600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(2, network.linkedConfigurations.size()); 15118600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 15128600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 15138600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 15148600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15158600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 15168600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15178600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15188600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15198600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15208600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 15218600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have scan results with same first 16 ASCII of 15228600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * bssid in 1523a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 15248600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 15258600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 15268600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingBSSIDMatch() { 15278600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 15288600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 15298600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 15308600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 15318600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 15328600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 15338600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15348600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 15358600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 15368600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 15378600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail3 = createScanDetailForNetwork(network3, "af:89:56:34:56:69"); 15388600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15398600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 15408600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 15418600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 15428600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 15438600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail3)); 15448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15458600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 15468600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 15478600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 15488600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(2, network.linkedConfigurations.size()); 15498600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 15508600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 15518600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 15528600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15538600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 15548600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15558600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15568600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15578600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15588600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 15598600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks does not happen for non WPA networks when they have scan 15608600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * results with same first 16 ASCII of bssid in 1561a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 15628600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 15638600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 15648600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNoNetworkLinkUsingBSSIDMatchForNonWpaNetworks() { 15658600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork(); 15668600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 15678600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 15688600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 15698600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15708600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 15718600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 15728600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 15738600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15748600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 15758600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 15768600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15778600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 15788600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 15798600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 15808600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 15818600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15828600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15838600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15848600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 15858600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks does not happen for networks with more than 1586a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#LINK_CONFIGURATION_MAX_SCAN_CACHE_ENTRIES} scan 15878600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * results with same first 16 ASCII of bssid in 1588a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 15898600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 15908600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 15918600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNoNetworkLinkUsingBSSIDMatchForNetworksWithHighScanDetailCacheSize() { 15928600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 15938600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 15948600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 15958600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 15968600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 15978600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create 7 scan results with bssid which is different in only the last char. 15988600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 15998600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius int scan_result_num = 0; 1600a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius for (; scan_result_num < WifiConfigManager.LINK_CONFIGURATION_MAX_SCAN_CACHE_ENTRIES + 1; 16012dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius scan_result_num++) { 16028600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail = 16038600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork( 16048600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1, test_bssid_base + Integer.toString(scan_result_num)); 16058600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull( 16068600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 16078600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16088600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16098600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now add 1 scan result to the other network with bssid which is different in only the 16108600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // last char. 16118600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = 16128600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork( 16138600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2, test_bssid_base + Integer.toString(scan_result_num++)); 16148600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 16158600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16168600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 16178600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 16188600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 16198600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 16208600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16218600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16228600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16238600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 16248600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have scan results with same first 16 ASCII of 1625a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * bssid in {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)} 16268600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * and then subsequently delinked when the networks have default gateway set which do not match. 16278600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 16288600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 16298600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingBSSIDMatchAndThenUnlinkDueToGwMacAddress() { 16308600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 16318600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 16328600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 16338600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 16348600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16358600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 16368600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 16378600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 16388600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16398600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 16408600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 16418600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 16428600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 16438600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 16458600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 16468600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 16478600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(1, network.linkedConfigurations.size()); 16488600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 16498600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 16508600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 16518600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16528600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 16538600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16548600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16558600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16568600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now Set different GW mac address for both the networks and ensure they're unlinked. 16578600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 16588600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1.networkId, "de:ad:fe:45:23:34")); 16598600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 16608600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2.networkId, "ad:de:fe:45:23:34")); 16618600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16628600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Add some dummy scan results again to re-evaluate the linking of networks. 16638600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache( 16648600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork(network1, "af:89:56:34:45:67"))); 16658600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache( 16668600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork(network1, "af:89:56:34:45:68"))); 16678600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 16688600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworks(); 16698600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 16708600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 16718600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16728600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 16738600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 167460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan /** 16752dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 167660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)}. 16772dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 16782dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 16792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetwork() { 16802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 16812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 16822dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 16842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 16852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 16862dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 16872dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 16882dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 16892dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 16902dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 16912dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16932dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 169460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network.networkId, 1, 16952ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius TEST_FREQ_LIST[4])); 169660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan } 169760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 169860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan /** 169960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * Verifies the creation of channel list using 170060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 170160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that the frequenecy of the currently connected network is in the returned 170260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * channel set. 170360ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan */ 170460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan @Test 170560ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan public void testFetchChannelSetForNetworkIncludeCurrentNetwork() { 170660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 170760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan verifyAddNetworkToWifiConfigManager(network); 170860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 170960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan // Create 5 scan results with different bssid's & frequencies. 171060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan String test_bssid_base = "af:89:56:34:56:6"; 171160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 171260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan ScanDetail networkScanDetail = 171360ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan createScanDetailForNetwork( 171460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 171560ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan assertNotNull( 171660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 171760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 171860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan } 171960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 172060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan // Currently connected network frequency 2427 is not in the TEST_FREQ_LIST 172160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan Set<Integer> freqs = mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 172260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network.networkId, 1, 2427); 172360ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 172460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan assertEquals(true, freqs.contains(2427)); 17252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17262dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17272dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 17282dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 172960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 173060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that scan results which have a timestamp beyond the provided age are not used 173160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * in the channel list. 17322dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 17332dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 17342dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIgnoresStaleScanResults() { 17352dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 17362dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 17372dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17382dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius long wallClockBase = 0; 17392dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 17402dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 17412dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 17422dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Increment the seen value in the scan results for each of them. 17432dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius when(mClock.getWallClockMillis()).thenReturn(wallClockBase + i); 17442dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 17452dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 17462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 17472dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 17482dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 17492dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17502dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17512dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int ageInMillis = 4; 17522dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Now fetch only scan results which are 4 millis stale. This should ignore the first 17532dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // scan result. 17542dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals( 17552dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius new HashSet<>(Arrays.asList( 17562dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius Arrays.copyOfRange( 17572dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST, 17582dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST.length - ageInMillis, TEST_FREQ_LIST.length))), 17592dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 176060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network.networkId, ageInMillis, TEST_FREQ_LIST[4])); 17612dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17622dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17632dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 17642dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 176560ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 176660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that the list size does not exceed the max configured for the device. 17672dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 17682dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 17692dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIsLimitedToConfiguredSize() { 1770a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius // Need to recreate the WifiConfigManager instance for this test to modify the config 17712dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // value which is read only in the constructor. 17722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int maxListSize = 3; 17732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 17742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 17752dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius maxListSize); 17762dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 17772dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17782dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 17792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 17802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 17822dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 17832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 17842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 17852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 17862dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 17872dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 17882dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 17892dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17902dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17912dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Ensure that the fetched list size is limited. 17922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 17932dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 179460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network.networkId, 1, TEST_FREQ_LIST[4]).size()); 17952dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17962dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17972dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 17982dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 179960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 180060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that scan results from linked networks are used in the channel list. 18012dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 18022dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 18032dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIncludesLinkedNetworks() { 18042dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 18052dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 18062dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 18072dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 18082dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18092dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 18102dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int TEST_FREQ_LISTIdx = 0; 18112dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 1. 18122dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length / 2; TEST_FREQ_LISTIdx++) { 18132dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 18142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 18152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 18162dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 18172dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 18182dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 18192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18202dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 18212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 2. 18222dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length; TEST_FREQ_LISTIdx++) { 18232dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 18242dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 18252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 18262dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 18272dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 18282dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 18292dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 18302dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18312dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Link the 2 configurations together using the GwMacAddress. 18322dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 18332dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 18342dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 18352dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 18362dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18372dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // The channel list fetched should include scan results from both the linked networks. 18382dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 183960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network1.networkId, 1, 18402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius TEST_FREQ_LIST[0])); 18412dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 184260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network2.networkId, 1, 18432ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius TEST_FREQ_LIST[0])); 18442dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 18452dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 18472dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 184860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 184960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that scan results from linked networks are used in the channel list and that the 185060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * list size does not exceed the max configured for the device. 18512dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 18522dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 18532dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIncludesLinkedNetworksIsLimitedToConfiguredSize() { 1854a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius // Need to recreate the WifiConfigManager instance for this test to modify the config 18552dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // value which is read only in the constructor. 18562dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int maxListSize = 3; 18572dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 18582dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 18592dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius maxListSize); 18602dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18612dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 18622dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 18632dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 18642dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 18652dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 18662dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18672dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 18682dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int TEST_FREQ_LISTIdx = 0; 18692dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 1. 18702dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length / 2; TEST_FREQ_LISTIdx++) { 18712dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 18722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 18732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 18742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 18752dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 18762dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 18772dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18782dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 18792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 2. 18802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length; TEST_FREQ_LISTIdx++) { 18812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 18822dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 18832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 18842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 18852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 18862dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 18872dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 18882dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18892dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Link the 2 configurations together using the GwMacAddress. 18902dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 18912dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 18922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 18932dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 18942dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 18952dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Ensure that the fetched list size is limited. 18962dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 18972dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 189860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network1.networkId, 1, TEST_FREQ_LIST[0]).size()); 18992dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 19002dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 190160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network2.networkId, 1, TEST_FREQ_LIST[0]).size()); 19022dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 19032dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 1904c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 1905a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 19062ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * and ensures that any shared private networks networkId is not changed. 19072ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Test scenario: 19082ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 1. Load the shared networks from shared store and user 1 store. 19092ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 2. Switch to user 2 and ensure that the shared network's Id is not changed. 19102ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius */ 19112ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius @Test 19122ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius public void testHandleUserSwitchDoesNotChangeSharedNetworksId() throws Exception { 19132ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user1 = TEST_DEFAULT_USER; 19142ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 19152ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius setupUserProfiles(user2); 19162ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19172ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int appId = 674; 19182ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19192ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Create 3 networks. 1 for user1, 1 for user2 and 1 shared. 19202ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user1Network = WifiConfigurationTestUtil.createPskNetwork(); 19212ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.shared = false; 19222ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.creatorUid = UserHandle.getUid(user1, appId); 19232ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 19242ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.shared = false; 19252ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 19262ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration sharedNetwork1 = WifiConfigurationTestUtil.createPskNetwork(); 19272ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration sharedNetwork2 = WifiConfigurationTestUtil.createPskNetwork(); 19282ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19292ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the store data that is loaded initially. 19302ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 19312ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 19322ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork1); 19332ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork2); 19342ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19352ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 19362ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user1Networks = new ArrayList<WifiConfiguration>() { 19372ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 19382ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user1Network); 19392ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 19410a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForRead(sharedNetworks, user1Networks, new HashSet<String>()); 19422ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 19430a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).read(); 19442ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19452ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Fetch the network ID's assigned to the shared networks initially. 19462ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int sharedNetwork1Id = WifiConfiguration.INVALID_NETWORK_ID; 19472ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int sharedNetwork2Id = WifiConfiguration.INVALID_NETWORK_ID; 19482ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> retrievedNetworks = 19492ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 19502ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 19512ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius if (network.configKey().equals(sharedNetwork1.configKey())) { 19522ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius sharedNetwork1Id = network.networkId; 19532ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } else if (network.configKey().equals(sharedNetwork2.configKey())) { 19542ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius sharedNetwork2Id = network.networkId; 19552ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19562ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19572ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(sharedNetwork1Id != WifiConfiguration.INVALID_NETWORK_ID); 19582ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(sharedNetwork2Id != WifiConfiguration.INVALID_NETWORK_ID); 19592ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19602ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the user 2 store data that is loaded at user switch. 19612ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user2Networks = new ArrayList<WifiConfiguration>() { 19622ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 19632ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user2Network); 19642ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19652ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 19660a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(user2Networks, new HashSet<String>()); 19672ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now switch the user to user 2 and ensure that shared network's IDs have not changed. 19682ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 19692ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mWifiConfigManager.handleUserSwitch(user2); 19700a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 19712ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19722ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Again fetch the network ID's assigned to the shared networks and ensure they have not 19732ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // changed. 19742ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int updatedSharedNetwork1Id = WifiConfiguration.INVALID_NETWORK_ID; 19752ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int updatedSharedNetwork2Id = WifiConfiguration.INVALID_NETWORK_ID; 19762ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 19772ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 19782ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius if (network.configKey().equals(sharedNetwork1.configKey())) { 19792ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius updatedSharedNetwork1Id = network.networkId; 19802ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } else if (network.configKey().equals(sharedNetwork2.configKey())) { 19812ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius updatedSharedNetwork2Id = network.networkId; 19822ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19832ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19842ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertEquals(sharedNetwork1Id, updatedSharedNetwork1Id); 19852ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertEquals(sharedNetwork2Id, updatedSharedNetwork2Id); 19862ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19872ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19882ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius /** 19892ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 19902ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * and ensures that any old user private networks are not visible anymore. 19912ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Test scenario: 19922ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 1. Load the shared networks from shared store and user 1 store. 19932ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 2. Switch to user 2 and ensure that the user 1's private network has been removed. 19942ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius */ 19952ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius @Test 19962ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius public void testHandleUserSwitchRemovesOldUserPrivateNetworks() throws Exception { 19972ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user1 = TEST_DEFAULT_USER; 19982ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 19992ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius setupUserProfiles(user2); 20002ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 20012ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int appId = 674; 20022ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 20032ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Create 3 networks. 1 for user1, 1 for user2 and 1 shared. 20042ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user1Network = WifiConfigurationTestUtil.createPskNetwork(); 20052ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.shared = false; 20062ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.creatorUid = UserHandle.getUid(user1, appId); 20072ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 20082ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.shared = false; 20092ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 20102ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork(); 20112ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 20122ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the store data that is loaded initially. 20132ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 20142ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 20152ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork); 20162ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 20172ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 20182ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user1Networks = new ArrayList<WifiConfiguration>() { 20192ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 20202ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user1Network); 20212ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 20222ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 20230a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForRead(sharedNetworks, user1Networks, new HashSet<String>()); 20242ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 20250a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).read(); 20262ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 20271cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Fetch the network ID assigned to the user 1 network initially. 20281cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int user1NetworkId = WifiConfiguration.INVALID_NETWORK_ID; 20291cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius List<WifiConfiguration> retrievedNetworks = 20301cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 20311cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 20321cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius if (network.configKey().equals(user1Network.configKey())) { 20331cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius user1NetworkId = network.networkId; 20341cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 20351cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 20361cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 20372ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the user 2 store data that is loaded at user switch. 20382ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user2Networks = new ArrayList<WifiConfiguration>() { 20392ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 20402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user2Network); 20412ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 20422ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 20430a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(user2Networks, new HashSet<String>()); 20442ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now switch the user to user 2 and ensure that user 1's private network has been removed. 20452ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 20461cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius Set<Integer> removedNetworks = mWifiConfigManager.handleUserSwitch(user2); 20470a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 20481cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue((removedNetworks.size() == 1) && (removedNetworks.contains(user1NetworkId))); 20492ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 20502ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set the expected networks to be |sharedNetwork| and |user2Network|. 20512ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> expectedNetworks = new ArrayList<WifiConfiguration>() { 20522ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 20532ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork); 20542ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user2Network); 20552ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 20562ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 20572ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 20582ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius expectedNetworks, mWifiConfigManager.getConfiguredNetworksWithPasswords()); 20591cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 20601cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Send another user switch indication with the same user 2. This should be ignored and 20611cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // hence should not remove any new networks. 20621cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 20631cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius removedNetworks = mWifiConfigManager.handleUserSwitch(user2); 20641cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue(removedNetworks.isEmpty()); 20651cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 20661cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 20671cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius /** 20681cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 20691cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * and ensures that user switch from a user with no private networks is handled. 20701cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * Test scenario: 20711cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * 1. Load the shared networks from shared store and emptu user 1 store. 20721cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * 2. Switch to user 2 and ensure that no private networks were removed. 20731cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius */ 20741cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius @Test 20751cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius public void testHandleUserSwitchWithNoOldUserPrivateNetworks() throws Exception { 20761cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int user1 = TEST_DEFAULT_USER; 20771cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 20781cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius setupUserProfiles(user2); 20791cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 20801cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int appId = 674; 20811cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 20821cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Create 2 networks. 1 for user2 and 1 shared. 20831cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 20841cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius user2Network.shared = false; 20851cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 20861cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork(); 20871cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 20881cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Set up the store data that is loaded initially. 20891cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 20901cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius { 20911cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius add(sharedNetwork); 20921cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 20931cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius }; 20940a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForRead(sharedNetworks, new ArrayList<WifiConfiguration>(), 20950a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu new HashSet<String>()); 20961cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 20970a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).read(); 20981cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 20991cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Set up the user 2 store data that is loaded at user switch. 21001cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius List<WifiConfiguration> user2Networks = new ArrayList<WifiConfiguration>() { 21011cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius { 21021cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius add(user2Network); 21031cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 21041cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius }; 21050a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(user2Networks, new HashSet<String>()); 21061cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Now switch the user to user 2 and ensure that no private network has been removed. 21071cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 21081cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius Set<Integer> removedNetworks = mWifiConfigManager.handleUserSwitch(user2); 21090a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 21101cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue(removedNetworks.isEmpty()); 21112ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 21122ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 21132ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius /** 21142ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 2115c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * and ensures that any non current user private networks are moved to shared store file. 21161cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * This test simulates the following test case: 21172ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 1. Loads the shared networks from shared store at bootup. 21182ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 2. Load the private networks from user store on user 1 unlock. 21192ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 3. Switch to user 2 and ensure that the user 2's private network has been moved to user 2's 21202ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * private store file. 2121c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2122c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 2123c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchPushesOtherPrivateNetworksToSharedStore() throws Exception { 21246d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 21256d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2126c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 2127c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2128c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius int appId = 674; 2129c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2130c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Create 3 networks. 1 for user1, 1 for user2 and 1 shared. 2131c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration user1Network = WifiConfigurationTestUtil.createPskNetwork(); 2132c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user1Network.shared = false; 2133c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user1Network.creatorUid = UserHandle.getUid(user1, appId); 2134c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 2135c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user2Network.shared = false; 2136c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 2137c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork(); 2138c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 21392ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the shared store data that is loaded at bootup. User 2's private network 21402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // is still in shared store because they have not yet logged-in after upgrade. 2141c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 2142c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 2143c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(sharedNetwork); 2144c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user2Network); 2145c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2146c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 21470a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForRead(sharedNetworks, new ArrayList<WifiConfiguration>(), 21480a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu new HashSet<String>()); 21492ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 21500a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).read(); 21512ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 21522ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the user store data that is loaded at user unlock. 2153c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> userNetworks = new ArrayList<WifiConfiguration>() { 2154c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 2155c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user1Network); 2156c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2157c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 21580a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(userNetworks, new HashSet<String>()); 21592ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mWifiConfigManager.handleUserUnlock(user1); 21600a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu verify(mWifiConfigStore).switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 21612ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Capture the written data for the user 1 and ensure that it corresponds to what was 21622ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // setup. 21630a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu Pair<List<WifiConfiguration>, List<WifiConfiguration>> writtenNetworkList = 21640a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu captureWriteNetworksListStoreData(); 21652ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 21660a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu sharedNetworks, writtenNetworkList.first); 21672ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 21680a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu userNetworks, writtenNetworkList.second); 2169c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 21702ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now switch the user to user2 and ensure that user 2's private network has been moved to 21712ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // the user store. 21722ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 2173c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 2174c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Set the expected network list before comparing. user1Network should be in shared data. 2175c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Note: In the real world, user1Network will no longer be visible now because it should 2176c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // already be in user1's private store file. But, we're purposefully exposing it 2177c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // via |loadStoreData| to test if other user's private networks are pushed to shared store. 2178c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> expectedSharedNetworks = new ArrayList<WifiConfiguration>() { 2179c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 2180c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(sharedNetwork); 2181c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user1Network); 2182c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2183c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 2184c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> expectedUserNetworks = new ArrayList<WifiConfiguration>() { 2185c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 2186c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user2Network); 2187c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2188c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 21892ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Capture the first written data triggered for saving the old user's network 21902ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // configurations. 21910a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu writtenNetworkList = captureWriteNetworksListStoreData(); 21922ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 21930a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu sharedNetworks, writtenNetworkList.first); 21942ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 21950a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu userNetworks, writtenNetworkList.second); 2196c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 21972ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now capture the next written data triggered after the switch and ensure that user 2's 21982ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // network is now in user store data. 21990a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu writtenNetworkList = captureWriteNetworksListStoreData(); 2200c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 22010a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu expectedSharedNetworks, writtenNetworkList.first); 2202c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 22030a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu expectedUserNetworks, writtenNetworkList.second); 2204c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2205c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2206c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 22075e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * Verify that unlocking an user that owns a legacy Passpoint configuration (which is stored 22085e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * temporarily in the share store) will migrate it to PasspointManager and removed from 22095e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * the list of configured networks. 22105e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * 22115e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * @throws Exception 22125e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu */ 22135e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu @Test 22145e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu public void testHandleUserUnlockRemovePasspointConfigFromSharedConfig() throws Exception { 22155e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu int user1 = TEST_DEFAULT_USER; 22165e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu int appId = 674; 22175e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 22185e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu final WifiConfiguration passpointConfig = 22195e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu WifiConfigurationTestUtil.createPasspointNetwork(); 22205e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu passpointConfig.creatorUid = UserHandle.getUid(user1, appId); 2221018e39e2f6201519373e7f4dbb1427f0e5274898Peter Qiu passpointConfig.isLegacyPasspointConfig = true; 22225e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 22235e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Set up the shared store data to contain one legacy Passpoint configuration. 22245e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 22255e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu { 22265e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu add(passpointConfig); 22275e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu } 22285e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu }; 22295e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu setupStoreDataForRead(sharedNetworks, new ArrayList<WifiConfiguration>(), 22305e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu new HashSet<String>()); 22315e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertTrue(mWifiConfigManager.loadFromStore()); 22325e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu verify(mWifiConfigStore).read(); 22335e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertEquals(1, mWifiConfigManager.getConfiguredNetworks().size()); 22345e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 22355e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Unlock the owner of the legacy Passpoint configuration, verify it is removed from 22365e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // the configured networks (migrated to PasspointManager). 22375e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu setupStoreDataForUserRead(new ArrayList<WifiConfiguration>(), new HashSet<String>()); 22385e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu mWifiConfigManager.handleUserUnlock(user1); 22395e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu verify(mWifiConfigStore).switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 22405e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Pair<List<WifiConfiguration>, List<WifiConfiguration>> writtenNetworkList = 22415e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu captureWriteNetworksListStoreData(); 22425e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertTrue(writtenNetworkList.first.isEmpty()); 22435e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertTrue(writtenNetworkList.second.isEmpty()); 22445e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 22455e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu } 22465e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 22475e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu /** 2248a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 2249a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * and {@link WifiConfigManager#handleUserUnlock(int)} and ensures that the new store is 2250c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * read immediately if the user is unlocked during the switch. 2251c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2252c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 2253c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchWhenUnlocked() throws Exception { 22546d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 22556d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2256c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 2257c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2258d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius // Set up the internal data first. 2259d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 2260d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius 22610a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(new ArrayList<WifiConfiguration>(), new HashSet<String>()); 2262c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // user2 is unlocked and switched to foreground. 2263c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 2264c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 2265c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Ensure that the read was invoked. 22662ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 22672ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2268c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2269c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2270c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 2271a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 2272a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * and {@link WifiConfigManager#handleUserUnlock(int)} and ensures that the new store is not 2273c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * read until the user is unlocked. 2274c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2275c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchWhenLocked() throws Exception { 22766d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 22776d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2278c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 2279c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2280d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius // Set up the internal data first. 2281d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 2282d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius 2283c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // user2 is locked and switched to foreground. 2284c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 2285c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 2286c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2287c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Ensure that the read was not invoked. 22882ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 22892ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2290c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2291c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now try unlocking some other user (user1), this should be ignored. 2292c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserUnlock(user1); 22932ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 22942ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2295c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 22960a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(new ArrayList<WifiConfiguration>(), new HashSet<String>()); 2297c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Unlock the user2 and ensure that we read the data now. 2298c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserUnlock(user2); 22992ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 23002ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2301c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2302c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2303c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 2304a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies that the foreground user stop using {@link WifiConfigManager#handleUserStop(int)} 2305c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * and ensures that the store is written only when the foreground user is stopped. 2306c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2307c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 2308c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserStop() throws Exception { 23096d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 23106d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2311c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 2312c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2313c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Try stopping background user2 first, this should not do anything. 2314c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 2315c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserStop(user2); 23162ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 23172ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2318c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2319c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now try stopping the foreground user1, this should trigger a write to store. 2320c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserStop(user1); 23212ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 23222ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 23230a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore).write(anyBoolean()); 2324c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2325c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 23266d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius /** 2327b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} 2328b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * results in a store read after bootup. 2329b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius */ 2330b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius @Test 2331b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius public void testHandleUserUnlockAfterBootup() throws Exception { 2332b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user1 = TEST_DEFAULT_USER; 2333b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2334d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius // Set up the internal data first. 2335d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 2336d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).read(); 23370a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 2338d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 2339d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2340d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius 23410a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(new ArrayList<WifiConfiguration>(), new HashSet<String>()); 2342b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Unlock the user1 (default user) for the first time and ensure that we read the data. 2343b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserUnlock(user1); 2344d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).read(); 2345d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 2346d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 23470a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore).write(anyBoolean()); 2348d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius } 2349d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius 2350d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius /** 2351d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius * Verifies that the store read after bootup received after 2352d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius * foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} 2353d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius * results in a user store read. 2354d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius */ 2355d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius @Test 2356d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius public void testHandleBootupAfterUserUnlock() throws Exception { 2357d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius int user1 = TEST_DEFAULT_USER; 2358d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius 2359d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius // Unlock the user1 (default user) for the first time and ensure that we don't read the 2360d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius // data. 2361d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius mWifiConfigManager.handleUserUnlock(user1); 2362d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).read(); 23630a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 2364d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 2365d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2366d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius 23670a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(new ArrayList<WifiConfiguration>(), new HashSet<String>()); 2368d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius // Read from store now. 2369d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 23702ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 2371040829fe448045d12cbc90f6143aca7da6b5aa80Peter Qiu .setUserStore(any(WifiConfigStore.StoreFile.class)); 2372040829fe448045d12cbc90f6143aca7da6b5aa80Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore).read(); 2373b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius } 2374b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2375b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius /** 2376b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} does 2377b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * not always result in a store read unless the user had switched or just booted up. 2378b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius */ 2379b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius @Test 2380b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius public void testHandleUserUnlockWithoutSwitchOrBootup() throws Exception { 2381b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user1 = TEST_DEFAULT_USER; 2382b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 2383b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius setupUserProfiles(user2); 2384b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2385d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius // Set up the internal data first. 2386d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 2387d7e826a86f845e439715eae57d43731d1ca9a404Roshan Pius 23880a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(new ArrayList<WifiConfiguration>(), new HashSet<String>()); 2389b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // user2 is unlocked and switched to foreground. 2390b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 2391b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserSwitch(user2); 2392b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Ensure that the read was invoked. 23932ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 23942ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2395b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2396b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Unlock the user2 again and ensure that we don't read the data now. 2397b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserUnlock(user2); 23982ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 23992ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2400b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius } 2401b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2402b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius /** 24034f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserSwitch(int)} 24044f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * is ignored if the legacy store migration is not complete. 24054f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius */ 24064f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius @Test 24074f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius public void testHandleUserSwitchAfterBootupBeforeLegacyStoreMigration() throws Exception { 24084f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 24094f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius 24104f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius // Switch to user2 for the first time and ensure that we don't read or 24114f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius // write the store files. 24124f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 24134f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius mWifiConfigManager.handleUserSwitch(user2); 24144f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 24154f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 24160a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 24174f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius } 24184f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius 24194f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius /** 24204f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} 24214f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * is ignored if the legacy store migration is not complete. 24224f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius */ 24234f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius @Test 24244f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius public void testHandleUserUnlockAfterBootupBeforeLegacyStoreMigration() throws Exception { 24254f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius int user1 = TEST_DEFAULT_USER; 24264f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius 24274f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius // Unlock the user1 (default user) for the first time and ensure that we don't read or 24284f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius // write the store files. 24294f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius mWifiConfigManager.handleUserUnlock(user1); 24304f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 24314f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 24320a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 24334f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius } 24344f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius 24354f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius /** 24366d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * Verifies the private network addition using 2437a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 24386d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * by a non foreground user is rejected. 24396d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius */ 24406d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius @Test 24416d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public void testAddNetworkUsingBackgroundUserUId() throws Exception { 24426d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 24436d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(user2); 24446d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 24456d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int creatorUid = UserHandle.getUid(user2, 674); 24466d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 24476d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Create a network for user2 try adding it. This should be rejected. 24486d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 2449dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(user2Network, creatorUid); 24506d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertFalse(result.isSuccess()); 24516d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 24526d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 24536d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius /** 24546d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * Verifies the private network addition using 2455a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 24566d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * by SysUI is always accepted. 24576d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius */ 24586d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius @Test 24596d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public void testAddNetworkUsingSysUiUid() throws Exception { 24606d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Set up the user profiles stuff. Needed for |WifiConfigurationUtil.isVisibleToAnyProfile| 24616d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 24626d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(user2); 24636d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 24646d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 24656d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 24666d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 24676d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Create a network for user2 try adding it. This should be rejected. 24686d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 2469dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(user2Network, TEST_SYSUI_UID); 24706d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertTrue(result.isSuccess()); 24716d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 24726d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 24733a738a26918230b2469d917dbf14323234edd39bRoshan Pius /** 24744f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * Verifies the loading of networks using {@link WifiConfigManager#migrateFromLegacyStore()} ()} 24754f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * attempts to migrate data from legacy stores when the legacy store files are present. 24763a738a26918230b2469d917dbf14323234edd39bRoshan Pius */ 24773a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Test 24783a738a26918230b2469d917dbf14323234edd39bRoshan Pius public void testMigrationFromLegacyStore() throws Exception { 24793a738a26918230b2469d917dbf14323234edd39bRoshan Pius // Create the store data to be returned from legacy stores. 24803a738a26918230b2469d917dbf14323234edd39bRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 24813a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createPskNetwork()); 24823a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createEapNetwork()); 24833a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createWepNetwork()); 2484674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius String deletedEphemeralSSID = "EphemeralSSID"; 2485674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius Set<String> deletedEphermalSSIDs = new HashSet<>(Arrays.asList(deletedEphemeralSSID)); 24863a738a26918230b2469d917dbf14323234edd39bRoshan Pius WifiConfigStoreDataLegacy storeData = 2487674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius new WifiConfigStoreDataLegacy(networks, deletedEphermalSSIDs); 24883a738a26918230b2469d917dbf14323234edd39bRoshan Pius 24893a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(true); 24903a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.read()).thenReturn(storeData); 24913a738a26918230b2469d917dbf14323234edd39bRoshan Pius 24924f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius // Now trigger the migration from legacy store. This should populate the in memory list with 24934f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius // all the networks above from the legacy store. 24944f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius assertTrue(mWifiConfigManager.migrateFromLegacyStore()); 24953a738a26918230b2469d917dbf14323234edd39bRoshan Pius 24963a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStoreLegacy).read(); 2497b2c8d28046e96c4506482e030c6320cda6db8f30Roshan Pius verify(mWifiConfigStoreLegacy).removeStores(); 24983a738a26918230b2469d917dbf14323234edd39bRoshan Pius 24993a738a26918230b2469d917dbf14323234edd39bRoshan Pius List<WifiConfiguration> retrievedNetworks = 25003a738a26918230b2469d917dbf14323234edd39bRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 25013a738a26918230b2469d917dbf14323234edd39bRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 25023a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks, retrievedNetworks); 2503674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius assertTrue(mWifiConfigManager.wasEphemeralNetworkDeleted(deletedEphemeralSSID)); 25043a738a26918230b2469d917dbf14323234edd39bRoshan Pius } 25053a738a26918230b2469d917dbf14323234edd39bRoshan Pius 25063a738a26918230b2469d917dbf14323234edd39bRoshan Pius /** 25074f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * Verifies the loading of networks using {@link WifiConfigManager#migrateFromLegacyStore()} ()} 25084f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * does not attempt to migrate data from legacy stores when the legacy store files are absent 25094f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius * (i.e migration was already done once). 25104f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius */ 25114f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius @Test 25124f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius public void testNoDuplicateMigrationFromLegacyStore() throws Exception { 25134f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(false); 25144f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius 25154f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius // Now trigger a migration from legacy store. 25164f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius assertTrue(mWifiConfigManager.migrateFromLegacyStore()); 25174f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius 25184f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius verify(mWifiConfigStoreLegacy, never()).read(); 25194f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius verify(mWifiConfigStoreLegacy, never()).removeStores(); 25204f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius } 25214f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius 25224f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius /** 2523a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the loading of networks using {@link WifiConfigManager#loadFromStore()} does 25243a738a26918230b2469d917dbf14323234edd39bRoshan Pius * not attempt to read from any of the stores (new or legacy) when the store files are 25253a738a26918230b2469d917dbf14323234edd39bRoshan Pius * not present. 25263a738a26918230b2469d917dbf14323234edd39bRoshan Pius */ 25273a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Test 25283a738a26918230b2469d917dbf14323234edd39bRoshan Pius public void testFreshInstallDoesNotLoadFromStore() throws Exception { 25293a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(false); 25303a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(false); 25313a738a26918230b2469d917dbf14323234edd39bRoshan Pius 25324f294fab991c91d629b9dfab5ed3a35a69ed3ce6Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 25333a738a26918230b2469d917dbf14323234edd39bRoshan Pius 25343a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStore, never()).read(); 25353a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStoreLegacy, never()).read(); 25363a738a26918230b2469d917dbf14323234edd39bRoshan Pius 25373a738a26918230b2469d917dbf14323234edd39bRoshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworksWithPasswords().isEmpty()); 25383a738a26918230b2469d917dbf14323234edd39bRoshan Pius } 25393a738a26918230b2469d917dbf14323234edd39bRoshan Pius 2540a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius /** 2541249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius * Verifies the user switch using {@link WifiConfigManager#handleUserSwitch(int)} is handled 2542249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius * when the store files (new or legacy) are not present. 2543249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius */ 2544249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius @Test 2545249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius public void testHandleUserSwitchAfterFreshInstall() throws Exception { 2546249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2547249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(false); 2548249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(false); 2549249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius 2550249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 2551249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius verify(mWifiConfigStore, never()).read(); 2552249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius verify(mWifiConfigStoreLegacy, never()).read(); 2553249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius 25540a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu setupStoreDataForUserRead(new ArrayList<WifiConfiguration>(), new HashSet<String>()); 2555249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius // Now switch the user to user 2. 2556249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 2557249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 2558249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius // Ensure that the read was invoked. 2559249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 2560249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2561249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius } 2562249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius 2563249f241b74b783d8c42af201d40f453ea637b32aRoshan Pius /** 2564a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius * Verifies that the last user selected network parameter is set when 2565a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} with disableOthers flag is set 2566a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * to true and cleared when either {@link WifiConfigManager#disableNetwork(int, int)} or 2567a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int, int)} is invoked using the same network ID. 2568a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius */ 2569a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius @Test 2570a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius public void testLastSelectedNetwork() throws Exception { 2571a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 2572a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 2573a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2574a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius when(mClock.getElapsedSinceBootMillis()).thenReturn(67L); 2575a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 2576a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), true, TEST_CREATOR_UID)); 2577a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(result.getNetworkId(), mWifiConfigManager.getLastSelectedNetwork()); 2578a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(67, mWifiConfigManager.getLastSelectedTimeStamp()); 2579a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2580a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius // Now disable the network and ensure that the last selected flag is cleared. 2581a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 2582a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals( 2583a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration.INVALID_NETWORK_ID, mWifiConfigManager.getLastSelectedNetwork()); 2584a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2585a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius // Enable it again and remove the network to ensure that the last selected flag was cleared. 2586a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 2587a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), true, TEST_CREATOR_UID)); 2588a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(result.getNetworkId(), mWifiConfigManager.getLastSelectedNetwork()); 258965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertEquals(openNetwork.configKey(), mWifiConfigManager.getLastSelectedNetworkConfigKey()); 2590a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2591a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 2592a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals( 2593a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration.INVALID_NETWORK_ID, mWifiConfigManager.getLastSelectedNetwork()); 2594a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius } 2595a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 259665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius /** 259765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius * Verifies that all the networks for the provided app is removed when 2598a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetworksForApp(ApplicationInfo)} is invoked. 259965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius */ 260065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius @Test 260165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius public void testRemoveNetworksForApp() throws Exception { 260265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createOpenNetwork()); 260365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createPskNetwork()); 260465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createWepNetwork()); 260565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 260665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 260765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 260865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius ApplicationInfo app = new ApplicationInfo(); 260965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius app.uid = TEST_CREATOR_UID; 261065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius app.packageName = TEST_CREATOR_NAME; 26111fe1065da82165183fa057ddbbd2e33bc5708c1bRobin Lee assertEquals(3, mWifiConfigManager.removeNetworksForApp(app).size()); 261265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 261365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius // Ensure all the networks are removed now. 261465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 261565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius } 261665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 261765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius /** 261865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius * Verifies that all the networks for the provided user is removed when 2619a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetworksForUser(int)} is invoked. 262065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius */ 262165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius @Test 262265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius public void testRemoveNetworksForUser() throws Exception { 262365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createOpenNetwork()); 262465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createPskNetwork()); 262565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createWepNetwork()); 262665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 262765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 262865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 26291fe1065da82165183fa057ddbbd2e33bc5708c1bRobin Lee assertEquals(3, mWifiConfigManager.removeNetworksForUser(TEST_DEFAULT_USER).size()); 263065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 263165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius // Ensure all the networks are removed now. 263265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 263365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius } 263465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 2635b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius /** 2636b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius * Verifies that the connect choice is removed from all networks when 2637a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int, int)} is invoked. 2638b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius */ 2639b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius @Test 2640b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius public void testRemoveNetworkRemovesConnectChoice() throws Exception { 2641b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork(); 2642b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 2643b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 2644b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 2645b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 2646b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 2647b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2648b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Set connect choice of network 2 over network 1. 2649b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue( 2650b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius mWifiConfigManager.setNetworkConnectChoice( 2651b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network1.networkId, network2.configKey(), 78L)); 2652b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2653b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration retrievedNetwork = 2654b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2655b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertEquals( 2656b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2657b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2658b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2659b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Remove network 3 and ensure that the connect choice on network 1 is not removed. 2660b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue(mWifiConfigManager.removeNetwork(network3.networkId, TEST_CREATOR_UID)); 2661b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2662b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertEquals( 2663b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2664b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2665b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2666b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Now remove network 2 and ensure that the connect choice on network 1 is removed.. 2667b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue(mWifiConfigManager.removeNetwork(network2.networkId, TEST_CREATOR_UID)); 2668b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2669b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertNotEquals( 2670b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2671b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2672cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius 2673cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius // This should have triggered 2 buffered writes. 1 for setting the connect choice, 1 for 2674cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius // clearing it after network removal. 26750a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, times(2)).write(eq(false)); 2676b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius } 2677b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 26780f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius /** 26790f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * Verifies that the modification of a single network using 26800f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and ensures that any 26810f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * updates to the network config in 26820f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * {@link WifiKeyStore#updateNetworkKeys(WifiConfiguration, WifiConfiguration)} is reflected 26830f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * in the internal database. 26840f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius */ 26850f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius @Test 26860f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius public void testUpdateSingleNetworkWithKeysUpdate() { 26870f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 26880f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network.enterpriseConfig = 26890f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 26900f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius verifyAddNetworkToWifiConfigManager(network); 26910f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 26920f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Now verify that network configurations match before we make any change. 26930f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 26940f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network, 26950f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 26960f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 26970f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Modify the network ca_cert field in updateNetworkKeys method during a network 26980f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // config update. 26990f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius final String newCaCertAlias = "test"; 27000f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius assertNotEquals(newCaCertAlias, network.enterpriseConfig.getCaCertificateAlias()); 27010f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 27020f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius doAnswer(new AnswerWithArguments() { 27030f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius public boolean answer(WifiConfiguration newConfig, WifiConfiguration existingConfig) { 27040f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius newConfig.enterpriseConfig.setCaCertificateAlias(newCaCertAlias); 27050f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius return true; 27060f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius } 27070f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius }).when(mWifiKeyStore).updateNetworkKeys( 27080f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius any(WifiConfiguration.class), any(WifiConfiguration.class)); 27090f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 27100f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 27110f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 27120f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Now verify that the keys update is reflected in the configuration fetched from internal 27130f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // db. 27140f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network.enterpriseConfig.setCaCertificateAlias(newCaCertAlias); 27150f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 27160f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network, 27170f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 27180f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius } 27190f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 272042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius /** 272142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius * Verifies that the dump method prints out all the saved network details with passwords masked. 272242ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius * {@link WifiConfigManager#dump(FileDescriptor, PrintWriter, String[])}. 272342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius */ 272442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius @Test 272542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius public void testDump() { 272642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 272742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 272842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius eapNetwork.enterpriseConfig.setPassword("blah"); 272942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 273042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 273142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius verifyAddNetworkToWifiConfigManager(eapNetwork); 273242ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 273342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius StringWriter stringWriter = new StringWriter(); 273442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius mWifiConfigManager.dump( 273542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius new FileDescriptor(), new PrintWriter(stringWriter), new String[0]); 273642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius String dumpString = stringWriter.toString(); 273742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 273842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius // Ensure that the network SSIDs were dumped out. 273942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertTrue(dumpString.contains(pskNetwork.SSID)); 274042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertTrue(dumpString.contains(eapNetwork.SSID)); 274142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 274242ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius // Ensure that the network passwords were not dumped out. 274342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertFalse(dumpString.contains(pskNetwork.preSharedKey)); 274442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertFalse(dumpString.contains(eapNetwork.enterpriseConfig.getPassword())); 274542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius } 274642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 27475c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius /** 27485c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius * Verifies the ordering of network list generated using 27495c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius * {@link WifiConfigManager#retrieveHiddenNetworkList()}. 27505c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius */ 27515c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius @Test 27525c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius public void testRetrieveHiddenList() { 27535c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Create and add 3 networks. 27545c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createWepHiddenNetwork(); 27555c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskHiddenNetwork(); 27565c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 27575c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 27585c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 27595c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 27605c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 27615c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Enable all of them. 27625c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network1.networkId, false, TEST_CREATOR_UID)); 27635c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network2.networkId, false, TEST_CREATOR_UID)); 27645c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network3.networkId, false, TEST_CREATOR_UID)); 27655c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 27665c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now set scan results in 2 of them to set the corresponding 27675c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // {@link NetworkSelectionStatus#mSeenInLastQualifiedNetworkSelection} field. 27685c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 27695c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius network1.networkId, createScanDetailForNetwork(network1).getScanResult(), 54)); 27705c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 27715c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius network3.networkId, createScanDetailForNetwork(network3).getScanResult(), 54)); 27725c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 27735c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now increment |network3|'s association count. This should ensure that this network 27745c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // is preferred over |network1|. 27755c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(network3.networkId)); 27765c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 27775c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Retrieve the hidden network list & verify the order of the networks returned. 27785c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius List<WifiScanner.ScanSettings.HiddenNetwork> hiddenNetworks = 27795c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius mWifiConfigManager.retrieveHiddenNetworkList(); 27805c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(3, hiddenNetworks.size()); 27815c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network3.SSID, hiddenNetworks.get(0).ssid); 27825c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network1.SSID, hiddenNetworks.get(1).ssid); 27835c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network2.SSID, hiddenNetworks.get(2).ssid); 27845c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 27855c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now permanently disable |network3|. This should remove network 3 from the list. 27865c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.disableNetwork(network3.networkId, TEST_CREATOR_UID)); 27875c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 27885c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Retrieve the hidden network list again & verify the order of the networks returned. 27895c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius hiddenNetworks = mWifiConfigManager.retrieveHiddenNetworkList(); 27905c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(2, hiddenNetworks.size()); 27915c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network1.SSID, hiddenNetworks.get(0).ssid); 27925c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network2.SSID, hiddenNetworks.get(1).ssid); 27935c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius } 27945c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 27955c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius /** 27965c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * Verifies the addition of network configurations using 27975c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with same SSID and 27985c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * default key mgmt does not add duplicate network configs. 27995c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius */ 28005c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius @Test 28015c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius public void testAddMultipleNetworksWithSameSSIDAndDefaultKeyMgmt() { 28025c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius final String ssid = "test_blah"; 28035c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Add a network with the above SSID and default key mgmt and ensure it was added 28045c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // successfully. 28055c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network1 = new WifiConfiguration(); 28065c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.SSID = ssid; 28075c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network1); 28085c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 28095c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 28105c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28115c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> retrievedNetworks = 28125c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 28135c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 28145c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 28155c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1, retrievedNetworks.get(0)); 28165c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28175c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Now add a second network with the same SSID and default key mgmt and ensure that it 28185c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // didn't add a new duplicate network. 28195c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network2 = new WifiConfiguration(); 28205c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.SSID = ssid; 28215c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius result = addNetworkToWifiConfigManager(network2); 28225c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 28235c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertFalse(result.isNewNetwork()); 28245c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28255c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 28265c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 28275c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 28285c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2, retrievedNetworks.get(0)); 28295c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius } 28305c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28315c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius /** 28325c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * Verifies the addition of network configurations using 28335c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with same SSID and 28345c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * different key mgmt should add different network configs. 28355c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius */ 28365c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius @Test 28375c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius public void testAddMultipleNetworksWithSameSSIDAndDifferentKeyMgmt() { 28385c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius final String ssid = "test_blah"; 28395c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Add a network with the above SSID and WPA_PSK key mgmt and ensure it was added 28405c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // successfully. 28415c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network1 = new WifiConfiguration(); 28425c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.SSID = ssid; 28435c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 28445c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network1); 28455c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 28465c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 28475c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28485c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> retrievedNetworks = 28495c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 28505c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 28515c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 28525c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1, retrievedNetworks.get(0)); 28535c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28545c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Now add a second network with the same SSID and NONE key mgmt and ensure that it 28555c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // does add a new network. 28565c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network2 = new WifiConfiguration(); 28575c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.SSID = ssid; 28585c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 28595c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius result = addNetworkToWifiConfigManager(network2); 28605c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 28615c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 28625c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28635c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 28645c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(2, retrievedNetworks.size()); 28655c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> networks = Arrays.asList(network1, network2); 28665c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 28675c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius networks, retrievedNetworks); 28685c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius } 28695c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 28700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 28710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a proxy, without having permission OVERRIDE_WIFI_CONFIG, 28720d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * holding device policy, or profile owner policy fails. 28730d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 28740d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 28750d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyFails() { 28760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 28810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 28820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 28830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 28880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 28890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 28900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 28910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 28920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 28930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a PAC or STATIC proxy with permission 28940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * OVERRIDE_WIFI_CONFIG is successful 28950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 28960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 28970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyWithConfOverride() { 28980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 29000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 29030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 29070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 29100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 29130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 29140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 29150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a PAC or STATIC proxy, while holding policy 29160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER} is successful 29170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 29180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 29190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyAsProfileOwner() { 29200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 29230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 29250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29260d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29270d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29280d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29290d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 29300d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 29320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 29350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 29360d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a PAC or STATIC proxy, while holding policy 29370d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER} is successful 29380d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 29390d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 29400d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyAsDeviceOwner() { 29410d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29420d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 29450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 29460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 29520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 29530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 29560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 29570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network (that has no proxy) and adding a PAC or STATIC proxy fails 29580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * without being able to override configs, or holding Device or Profile owner policies. 29590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 29600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 29610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkAddProxyFails() { 29620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 29630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(network); 29640d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29650d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29670d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 29690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 29700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 29710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29720d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29730d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29740d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29750d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 29760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 29770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 29780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 29790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 29800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network and adding a proxy is successful in the cases where app can 29810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * override configs, holds policy {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER}, 29820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * and holds policy {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER}, and that it fails 29830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * otherwise. 29840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 29850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 29860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkAddProxyWithPermissionAndSystem() { 29870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Testing updating network with uid permission OVERRIDE_WIFI_CONFIG 29880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 2989dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network, TEST_CREATOR_UID); 29900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 29910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 29930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 29960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 29980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 29990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Testing updating network with proxy while holding Profile Owner policy 30000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 3001dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius result = addNetworkToWifiConfigManager(network, TEST_NO_PERM_UID); 30020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 30030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 30050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 30060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 30070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 30080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 30090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 30100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 30110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Testing updating network with proxy while holding Device Owner Policy 30120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 3013dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius result = addNetworkToWifiConfigManager(network, TEST_NO_PERM_UID); 30140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 30150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 30170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 30180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 30190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 30200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 30210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 30220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 30230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 30240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 30250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network that has a proxy without changing the proxy, can succeed 30260d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * without proxy specific permissions. 30270d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 30280d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 30290d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkUnchangedProxy() { 30300d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf = WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(); 30310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // First create a WifiConfiguration with proxy 30320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 30340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 30350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 30360d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf, 30370d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 30380d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 30390d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update the network while using the same ipConf, and no proxy specific permissions 30400d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30410d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 30420d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 30430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 30440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf, 30450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 30460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 30470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 30480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 30490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 30500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network with a different proxy succeeds in the cases where app can 30510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * override configs, holds policy {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER}, 30520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * and holds policy {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER}, and that it fails 30530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * otherwise. 30540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 30550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 30560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkDifferentProxy() { 30570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Create two proxy configurations of the same type, but different values 30580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf1 = 30590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 30600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.STATIC_PROXY_SETTING, 30610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_1, 30620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_1, 30630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_1, 30640d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_1); 30650d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf2 = 30660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 30670d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.STATIC_PROXY_SETTING, 30680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_2, 30690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_2, 30700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_2, 30710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_2); 30720d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 30730d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with Conf Override 30740d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30750d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 30760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 30770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 30780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 30790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 30800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 30810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 30830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 30840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 30850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 30860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 30870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 30880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 30890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Device Owner 30900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 30920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 30930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 30940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 30950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 30960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 30970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 30980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 30990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 31000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 31010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 31020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 31040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 31050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Profile Owner 31060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 31080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 31090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 31100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 31110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 31130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 31150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 31160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 31170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 31180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 31200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 31210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with no permissions (should fail) 31220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 31240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 31250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 31260d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 31270d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31280d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 31290d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31300d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 31310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 31320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 31330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 31340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 31350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 31360d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 31370d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 31380d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network removing its proxy succeeds in the cases where app can 31390d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * override configs, holds policy {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER}, 31400d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * and holds policy {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER}, and that it fails 31410d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * otherwise. 31420d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 31430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 31440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkRemoveProxy() { 31450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Create two different IP configurations, one with a proxy and another without. 31460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf1 = 31470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 31480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.STATIC_PROXY_SETTING, 31490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_1, 31500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_1, 31510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_1, 31520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_1); 31530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf2 = 31540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 31550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.NONE_PROXY_SETTING, 31560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_2, 31570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_2, 31580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_2, 31590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_2); 31600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 31610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with Conf Override 31620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 31640d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 31650d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 31660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 31670d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 31690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 31710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 31720d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 31730d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 31740d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31750d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 31760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 31770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Device Owner 31780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 31800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 31810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 31820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 31830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 31850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 31870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 31880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 31890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 31900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 31910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 31920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 31930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Profile Owner 31940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 31950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 31960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 31970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 31980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 31990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 32000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 32010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 32020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 32030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 32040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 32050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 32060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 32070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 32080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 32090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with no permissions (should fail) 32100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 32110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 32120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 32130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 32140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 32150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 32160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 32170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 32180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 32190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 32200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 32210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 32220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 32230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 32240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 32250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 3226a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan /** 3227a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan * Verifies that the app specified BSSID is converted and saved in lower case. 3228a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan */ 3229a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan @Test 3230a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan public void testAppSpecifiedBssidIsSavedInLowerCase() { 3231a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan final String bssid = "0A:08:5C:BB:89:6D"; // upper case 3232a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 3233a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan openNetwork.BSSID = bssid; 3234a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan 3235a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 3236a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan 3237a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork( 3238a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan result.getNetworkId()); 3239a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan 3240a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan assertNotEquals(retrievedNetwork.BSSID, bssid); 3241a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan assertEquals(retrievedNetwork.BSSID, bssid.toLowerCase()); 3242a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan } 3243a8bea9aed9c0e8a16e51568541b90f0900edb9efRandy Pan 32440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private NetworkUpdateResult verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 32450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean withConfOverride, 32460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean withProfileOwnerPolicy, 32470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean withDeviceOwnerPolicy, 32480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConfiguration, 32490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean assertSuccess, 32500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne int networkId) { 32510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration network; 32520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne if (networkId == WifiConfiguration.INVALID_NETWORK_ID) { 32530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 32540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } else { 32550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = mWifiConfigManager.getConfiguredNetwork(networkId); 32560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 32570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network.setIpConfiguration(ipConfiguration); 32580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 32590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))) 32600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(withProfileOwnerPolicy); 32610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 32620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_DEVICE_OWNER))) 32630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(withDeviceOwnerPolicy); 3264835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())) 3265835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein .thenReturn(withConfOverride); 32660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne int uid = withConfOverride ? TEST_CREATOR_UID : TEST_NO_PERM_UID; 3267dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network, uid); 32680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertEquals(assertSuccess, result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 32690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne return result; 32700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 32710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 32722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private void createWifiConfigManager() { 32732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager = 3274a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius new WifiConfigManager( 3275835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein mContext, mClock, mUserManager, mTelephonyManager, 32760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne mWifiKeyStore, mWifiConfigStore, mWifiConfigStoreLegacy, 3277835e781643b79c30fabbab5595770cf01b5861fbRebecca Silberstein mWifiPermissionsUtil, mWifiPermissionsWrapper, mNetworkListStoreData, 32780a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mDeletedEphemeralSsidsStoreData); 32792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.enableVerboseLogging(1); 32802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 32812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 32828600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 328350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * This method sets defaults in the provided WifiConfiguration object if not set 328450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * so that it can be used for comparison with the configuration retrieved from 328550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * WifiConfigManager. 328650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 328750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setDefaults(WifiConfiguration configuration) { 328850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedAuthAlgorithms.isEmpty()) { 328950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 329050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 329150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedProtocols.isEmpty()) { 329250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 329350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 329450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 329550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedKeyManagement.isEmpty()) { 329650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 329750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); 329850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 329950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedPairwiseCiphers.isEmpty()) { 330050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 330150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 330250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 330350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedGroupCiphers.isEmpty()) { 330450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 330550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 330650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 330750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 330850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 330950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.getIpAssignment() == IpConfiguration.IpAssignment.UNASSIGNED) { 331050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setIpAssignment(IpConfiguration.IpAssignment.DHCP); 331150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 331250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.getProxySettings() == IpConfiguration.ProxySettings.UNASSIGNED) { 331350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setProxySettings(IpConfiguration.ProxySettings.NONE); 331450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 33150ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius configuration.status = WifiConfiguration.Status.DISABLED; 33160ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius configuration.getNetworkSelectionStatus().setNetworkSelectionStatus( 33170ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius NetworkSelectionStatus.NETWORK_SELECTION_PERMANENTLY_DISABLED); 331850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 331950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 332050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 332150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided configuration with creator uid, package name 332250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * and time. 332350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 332450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setCreationDebugParams(WifiConfiguration configuration) { 332550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creatorUid = configuration.lastUpdateUid = TEST_CREATOR_UID; 332650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creatorName = configuration.lastUpdateName = TEST_CREATOR_NAME; 332750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creationTime = configuration.updateTime = 3328a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.createDebugTimeStampString( 332950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius TEST_WALLCLOCK_CREATION_TIME_MILLIS); 333050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 333150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 333250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 333350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided configuration with update uid, package name 333450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * and time. 333550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 333650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setUpdateDebugParams(WifiConfiguration configuration) { 333750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.lastUpdateUid = TEST_UPDATE_UID; 333850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.lastUpdateName = TEST_UPDATE_NAME; 333950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.updateTime = 3340a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.createDebugTimeStampString(TEST_WALLCLOCK_UPDATE_TIME_MILLIS); 334150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 334250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 33431fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertNotEquals(Object expected, Object actual) { 33441fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius if (actual != null) { 33451fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertFalse(actual.equals(expected)); 33461fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } else { 33471fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotNull(expected); 33481fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 33491fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 33501fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 335150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 335250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided WifiConfiguration with the specified bssid value. Also, asserts that 335350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * the existing |BSSID| field is not the same value as the one being set 335450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 335550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void assertAndSetNetworkBSSID(WifiConfiguration configuration, String bssid) { 33561fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(bssid, configuration.BSSID); 335750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.BSSID = bssid; 335850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 335950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 336050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 336150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided WifiConfiguration with the specified |IpConfiguration| object. Also, 33621fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * asserts that the existing |mIpConfiguration| field is not the same value as the one being set 336350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 336450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void assertAndSetNetworkIpConfiguration( 336550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration configuration, IpConfiguration ipConfiguration) { 33661fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(ipConfiguration, configuration.getIpConfiguration()); 336750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setIpConfiguration(ipConfiguration); 336850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 336950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 337050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 33711fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified |wepKeys| value and 33721fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * |wepTxKeyIndex|. 33731fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 33741fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkWepKeysAndTxIndex( 33751fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String[] wepKeys, int wepTxKeyIdx) { 33761fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(wepKeys, configuration.wepKeys); 33771fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(wepTxKeyIdx, configuration.wepTxKeyIndex); 33781fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.wepKeys = Arrays.copyOf(wepKeys, wepKeys.length); 33791fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.wepTxKeyIndex = wepTxKeyIdx; 33801fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 33811fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 33821fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 33831fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified |preSharedKey| value. 33841fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 33851fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkPreSharedKey( 33861fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String preSharedKey) { 33871fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(preSharedKey, configuration.preSharedKey); 33881fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.preSharedKey = preSharedKey; 33891fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 33901fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 33911fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 33921fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified enteprise |password| value. 33931fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 33941fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkEnterprisePassword( 33951fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String password) { 33961fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(password, configuration.enterpriseConfig.getPassword()); 33971fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.enterpriseConfig.setPassword(password); 33981fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 33991fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 34001fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 34010a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * Helper method to capture the networks list store data that will be written by 34020a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * WifiConfigStore.write() method. 34036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 34040a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu private Pair<List<WifiConfiguration>, List<WifiConfiguration>> 34050a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu captureWriteNetworksListStoreData() { 34066e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius try { 34070a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu ArgumentCaptor<ArrayList> sharedConfigsCaptor = 34080a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu ArgumentCaptor.forClass(ArrayList.class); 34090a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu ArgumentCaptor<ArrayList> userConfigsCaptor = 34100a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu ArgumentCaptor.forClass(ArrayList.class); 34110a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mNetworkListStoreDataMockOrder.verify(mNetworkListStoreData) 34120a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu .setSharedConfigurations(sharedConfigsCaptor.capture()); 34130a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mNetworkListStoreDataMockOrder.verify(mNetworkListStoreData) 34140a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu .setUserConfigurations(userConfigsCaptor.capture()); 34150a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore).write(anyBoolean()); 34160a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu return Pair.create(sharedConfigsCaptor.getValue(), userConfigsCaptor.getValue()); 34176e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } catch (Exception e) { 34186e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius fail("Exception encountered during write " + e); 34196e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 3420c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return null; 3421c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3422c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 3423c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 3424c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Returns whether the provided network was in the store data or not. 3425c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 3426c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private boolean isNetworkInConfigStoreData(WifiConfiguration configuration) { 34270a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu Pair<List<WifiConfiguration>, List<WifiConfiguration>> networkListStoreData = 34280a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu captureWriteNetworksListStoreData(); 34290a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu if (networkListStoreData == null) { 3430c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return false; 3431c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 34320a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu List<WifiConfiguration> networkList = new ArrayList<>(); 34330a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu networkList.addAll(networkListStoreData.first); 34340a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu networkList.addAll(networkListStoreData.second); 34350a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu return isNetworkInConfigStoreData(configuration, networkList); 3436bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 3437bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 3438bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 3439bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Returns whether the provided network was in the store data or not. 3440bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 3441bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius private boolean isNetworkInConfigStoreData( 34420a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu WifiConfiguration configuration, List<WifiConfiguration> networkList) { 3443c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius boolean foundNetworkInStoreData = false; 34440a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu for (WifiConfiguration retrievedConfig : networkList) { 3445c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius if (retrievedConfig.configKey().equals(configuration.configKey())) { 3446c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius foundNetworkInStoreData = true; 3447bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius break; 3448c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3449c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3450c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return foundNetworkInStoreData; 34516e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 34526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 34536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 34540a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * Setup expectations for WifiNetworksListStoreData and DeletedEphemeralSsidsStoreData 34550a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * after WifiConfigStore#read. 34560a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu */ 34570a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu private void setupStoreDataForRead(List<WifiConfiguration> sharedConfigurations, 34580a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu List<WifiConfiguration> userConfigurations, Set<String> deletedEphemeralSsids) { 34590a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu when(mNetworkListStoreData.getSharedConfigurations()) 34600a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu .thenReturn(sharedConfigurations); 34610a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu when(mNetworkListStoreData.getUserConfigurations()).thenReturn(userConfigurations); 34620a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu when(mDeletedEphemeralSsidsStoreData.getSsidList()).thenReturn(deletedEphemeralSsids); 34630a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu } 34640a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu 34650a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu /** 34660a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * Setup expectations for WifiNetworksListStoreData and DeletedEphemeralSsidsStoreData 34670a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * after WifiConfigStore#switchUserStoreAndRead. 34680a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu */ 34690a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu private void setupStoreDataForUserRead(List<WifiConfiguration> userConfigurations, 34700a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu Set<String> deletedEphemeralSsids) { 34710a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu when(mNetworkListStoreData.getUserConfigurations()).thenReturn(userConfigurations); 34720a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu when(mDeletedEphemeralSsidsStoreData.getSsidList()).thenReturn(deletedEphemeralSsids); 34730a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu } 34740a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu 34750a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu /** 34766e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the provided network was not present in the last config store write. 34776e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 34786e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkNotInConfigStoreData(WifiConfiguration configuration) { 34796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(isNetworkInConfigStoreData(configuration)); 34806e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 34816e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 34826e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 34836e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the provided network was present in the last config store write. 34846e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 34856e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkInConfigStoreData(WifiConfiguration configuration) { 34866e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(isNetworkInConfigStoreData(configuration)); 34876e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 34886e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 34896e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void assertPasswordsMaskedInWifiConfiguration(WifiConfiguration configuration) { 349022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (!TextUtils.isEmpty(configuration.preSharedKey)) { 3491a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.PASSWORD_MASK, configuration.preSharedKey); 34926e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 34936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius if (configuration.wepKeys != null) { 34946e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius for (int i = 0; i < configuration.wepKeys.length; i++) { 34956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius if (!TextUtils.isEmpty(configuration.wepKeys[i])) { 3496a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.PASSWORD_MASK, configuration.wepKeys[i]); 34976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 34986e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 34996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 350022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (!TextUtils.isEmpty(configuration.enterpriseConfig.getPassword())) { 35016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 3502a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.PASSWORD_MASK, 35036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius configuration.enterpriseConfig.getPassword()); 35046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 35056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 35066e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35076e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 35086e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the network was present in the network change broadcast and returns the 35096e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * change reason. 35106e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 35116e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private int verifyNetworkInBroadcastAndReturnReason(WifiConfiguration configuration) { 35126e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 35136e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<UserHandle> userHandleCaptor = ArgumentCaptor.forClass(UserHandle.class); 35146e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder.verify(mContext) 35156e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius .sendBroadcastAsUser(intentCaptor.capture(), userHandleCaptor.capture()); 35166e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35176e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals(userHandleCaptor.getValue(), UserHandle.ALL); 35186e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius Intent intent = intentCaptor.getValue(); 35196e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35206e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius int changeReason = intent.getIntExtra(WifiManager.EXTRA_CHANGE_REASON, -1); 35216e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration retrievedConfig = 35226e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius (WifiConfiguration) intent.getExtra(WifiManager.EXTRA_WIFI_CONFIGURATION); 35236e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals(retrievedConfig.configKey(), configuration.configKey()); 35246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35256e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that all the passwords are masked in the broadcast configuration. 35266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedConfig); 35276e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35286e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return changeReason; 35296e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 35306e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35316e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 35326e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out an add broadcast with the provided network. 35336e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 35346e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkAddBroadcast(WifiConfiguration configuration) { 35356e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 35366e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 35376e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_ADDED); 35386e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 35396e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35406e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 35416e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out an update broadcast with the provided network. 35426e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 35436e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkUpdateBroadcast(WifiConfiguration configuration) { 35446e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 35456e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 35466e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_CONFIG_CHANGE); 35476e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 35486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 35506e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out a remove broadcast with the provided network. 35516e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 35526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkRemoveBroadcast(WifiConfiguration configuration) { 35536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 35546e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 35556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_REMOVED); 35566e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 35576e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 3558dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius private void verifyWifiConfigStoreRead() { 3559dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 3560dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius mContextConfigStoreMockOrder.verify(mContext) 3561dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius .sendBroadcastAsUser(any(Intent.class), any(UserHandle.class)); 3562dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius } 3563dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius 3564dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius private void triggerStoreReadIfNeeded() { 3565dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius // Trigger a store read if not already done. 3566dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius if (!mStoreReadTriggered) { 3567dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius verifyWifiConfigStoreRead(); 3568dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius mStoreReadTriggered = true; 3569dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius } 3570dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius } 3571dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius 3572dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius /** 3573dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius * Adds the provided configuration to WifiConfigManager with uid = TEST_CREATOR_UID. 3574dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius */ 3575dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration) { 3576dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius return addNetworkToWifiConfigManager(configuration, TEST_CREATOR_UID); 3577dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius } 3578dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius 35796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 358050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Adds the provided configuration to WifiConfigManager and modifies the provided configuration 358150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * with creator/update uid, package name and time. This also sets defaults for fields not 358250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * populated. 358350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * These fields are populated internally by WifiConfigManager and hence we need 358450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * to modify the configuration before we compare the added network with the retrieved network. 3585dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius * This method also triggers a store read if not already done. 358650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 3587dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration, 3588dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius int uid) { 3589dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius triggerStoreReadIfNeeded(); 359050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_CREATION_TIME_MILLIS); 359150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius NetworkUpdateResult result = 3592dc5eab67d9ca3e0453318071746e76b5d16990d6Roshan Pius mWifiConfigManager.addOrUpdateNetwork(configuration, uid); 359350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setDefaults(configuration); 359450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setCreationDebugParams(configuration); 35956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius configuration.networkId = result.getNetworkId(); 35966e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 35976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 35986e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 35996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 36006e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Add network to WifiConfigManager and ensure that it was successful. 36016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 36026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyAddNetworkToWifiConfigManager( 36036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 36046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(configuration); 36056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 36066e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.isNewNetwork()); 36076e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 36086e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 36096e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 36106e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkAddBroadcast(configuration); 36116e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that the config store write was triggered with this new configuration. 36126e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInConfigStoreData(configuration); 36136e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 36146e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 36156e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 36166e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 36176e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Add ephemeral network to WifiConfigManager and ensure that it was successful. 36186e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 36196e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyAddEphemeralNetworkToWifiConfigManager( 3620bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration configuration) throws Exception { 36216e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(configuration); 36226e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 36236e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.isNewNetwork()); 36246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 36256e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 36266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 36276e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkAddBroadcast(configuration); 3628bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that the write was not invoked for ephemeral network addition. 36290a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 363050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return result; 363150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 363250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 363350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 3634d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu * Add Passpoint network to WifiConfigManager and ensure that it was successful. 3635d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu */ 3636d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu private NetworkUpdateResult verifyAddPasspointNetworkToWifiConfigManager( 3637d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu WifiConfiguration configuration) throws Exception { 3638d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu NetworkUpdateResult result = addNetworkToWifiConfigManager(configuration); 3639d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 3640d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu assertTrue(result.isNewNetwork()); 3641d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu assertTrue(result.hasIpChanged()); 3642d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu assertTrue(result.hasProxyChanged()); 3643d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu 3644d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu // Verify keys are not being installed. 3645d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu verify(mWifiKeyStore, never()).updateNetworkKeys(any(WifiConfiguration.class), 3646d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu any(WifiConfiguration.class)); 3647d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu verifyNetworkAddBroadcast(configuration); 3648d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu // Ensure that the write was not invoked for Passpoint network addition. 36490a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 3650d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu return result; 3651d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu } 3652d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu 3653d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu /** 365450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Updates the provided configuration to WifiConfigManager and modifies the provided 365550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * configuration with update uid, package name and time. 365650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * These fields are populated internally by WifiConfigManager and hence we need 365750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * to modify the configuration before we compare the added network with the retrieved network. 365850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 365950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private NetworkUpdateResult updateNetworkToWifiConfigManager(WifiConfiguration configuration) { 366050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_UPDATE_TIME_MILLIS); 366150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius NetworkUpdateResult result = 366250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.addOrUpdateNetwork(configuration, TEST_UPDATE_UID); 366350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setUpdateDebugParams(configuration); 366450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return result; 366550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 36666e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 36676e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 36686e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager config change and ensure that it was successful. 36696e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 36706e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManager( 36716e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 36726e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = updateNetworkToWifiConfigManager(configuration); 36736e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 36746e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.isNewNetwork()); 36756e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 36766e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkUpdateBroadcast(configuration); 36776e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that the config store write was triggered with this new configuration. 36786e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInConfigStoreData(configuration); 36796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 36806e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 36816e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 36826e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 36836e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager without IP config change and ensure that it was 36846e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * successful. 36856e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 36866e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManagerWithoutIpChange( 36876e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 36886e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManager(configuration); 36896e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.hasIpChanged()); 36906e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.hasProxyChanged()); 36916e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 36926e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 36936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 36946e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 36956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager with IP config change and ensure that it was 36966e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * successful. 36976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 36986e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManagerWithIpChange( 36996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 37006e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManager(configuration); 37016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 37026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 37036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 37046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 3705c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 3706c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 3707c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * Removes network from WifiConfigManager and ensure that it was successful. 3708c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 3709c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius private void verifyRemoveNetworkFromWifiConfigManager( 3710c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration configuration) { 37116d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(configuration.networkId, TEST_CREATOR_UID)); 3712c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 3713c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyNetworkRemoveBroadcast(configuration); 3714c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Verify if the config store write was triggered without this new configuration. 3715c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyNetworkNotInConfigStoreData(configuration); 3716c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 3717fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3718fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 3719bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Removes ephemeral network from WifiConfigManager and ensure that it was successful. 3720bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 3721bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius private void verifyRemoveEphemeralNetworkFromWifiConfigManager( 37222ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfiguration configuration) throws Exception { 3723bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(configuration.networkId, TEST_CREATOR_UID)); 3724bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 3725bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyNetworkRemoveBroadcast(configuration); 3726bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that the write was not invoked for ephemeral network remove. 37270a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 3728bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 3729bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 3730bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 3731d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu * Removes Passpoint network from WifiConfigManager and ensure that it was successful. 3732d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu */ 3733d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu private void verifyRemovePasspointNetworkFromWifiConfigManager( 3734d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu WifiConfiguration configuration) throws Exception { 3735d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu assertTrue(mWifiConfigManager.removeNetwork(configuration.networkId, TEST_CREATOR_UID)); 3736d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu 3737d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu // Verify keys are not being removed. 3738d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu verify(mWifiKeyStore, never()).removeKeys(any(WifiEnterpriseConfig.class)); 3739d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu verifyNetworkRemoveBroadcast(configuration); 3740d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu // Ensure that the write was not invoked for Passpoint network remove. 37410a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); 3742d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu } 3743d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu 3744d7e8058288bdc5085b54fef77dbfa38597cea348Peter Qiu /** 3745fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the provided network's public status and ensures that the network change broadcast 3746fc789b2227e92372b2489ca54691310800835a50Roshan Pius * has been sent out. 3747fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 3748fc789b2227e92372b2489ca54691310800835a50Roshan Pius private void verifyUpdateNetworkStatus(WifiConfiguration configuration, int status) { 3749fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(status, configuration.status); 3750fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyNetworkUpdateBroadcast(configuration); 3751fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3752fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3753fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 3754fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the network's selection status update. 3755fc789b2227e92372b2489ca54691310800835a50Roshan Pius * 3756fc789b2227e92372b2489ca54691310800835a50Roshan Pius * For temporarily disabled reasons, the method ensures that the status has changed only if 3757fc789b2227e92372b2489ca54691310800835a50Roshan Pius * disable reason counter has exceeded the threshold. 3758fc789b2227e92372b2489ca54691310800835a50Roshan Pius * 3759fc789b2227e92372b2489ca54691310800835a50Roshan Pius * For permanently disabled/enabled reasons, the method ensures that the public status has 3760fc789b2227e92372b2489ca54691310800835a50Roshan Pius * changed and the network change broadcast has been sent out. 3761fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 3762fc789b2227e92372b2489ca54691310800835a50Roshan Pius private void verifyUpdateNetworkSelectionStatus( 3763fc789b2227e92372b2489ca54691310800835a50Roshan Pius int networkId, int reason, int temporaryDisableReasonCounter) { 3764fc789b2227e92372b2489ca54691310800835a50Roshan Pius when(mClock.getElapsedSinceBootMillis()) 3765fc789b2227e92372b2489ca54691310800835a50Roshan Pius .thenReturn(TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS); 3766fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3767fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Fetch the current status of the network before we try to update the status. 3768fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 3769fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus currentStatus = retrievedNetwork.getNetworkSelectionStatus(); 3770fc789b2227e92372b2489ca54691310800835a50Roshan Pius int currentDisableReason = currentStatus.getNetworkSelectionDisableReason(); 3771fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3772fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set the status to the provided reason. 3773fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(mWifiConfigManager.updateNetworkSelectionStatus(networkId, reason)); 3774fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3775fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now fetch the network configuration and verify the new status of the network. 3776fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 3777fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3778fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 3779fc789b2227e92372b2489ca54691310800835a50Roshan Pius int retrievedDisableReason = retrievedStatus.getNetworkSelectionDisableReason(); 3780fc789b2227e92372b2489ca54691310800835a50Roshan Pius long retrievedDisableTime = retrievedStatus.getDisableTime(); 3781fc789b2227e92372b2489ca54691310800835a50Roshan Pius int retrievedDisableReasonCounter = retrievedStatus.getDisableReasonCounter(reason); 3782fc789b2227e92372b2489ca54691310800835a50Roshan Pius int disableReasonThreshold = 3783a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[reason]; 3784fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3785fc789b2227e92372b2489ca54691310800835a50Roshan Pius if (reason == NetworkSelectionStatus.NETWORK_SELECTION_ENABLE) { 3786fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 3787fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 3788fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3789fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus.INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP, 3790fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedDisableTime); 3791fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 3792fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else if (reason < NetworkSelectionStatus.DISABLED_TLS_VERSION_MISMATCH) { 3793fc789b2227e92372b2489ca54691310800835a50Roshan Pius // For temporarily disabled networks, we need to ensure that the current status remains 3794fc789b2227e92372b2489ca54691310800835a50Roshan Pius // until the threshold is crossed. 3795fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(temporaryDisableReasonCounter, retrievedDisableReasonCounter); 3796fc789b2227e92372b2489ca54691310800835a50Roshan Pius if (retrievedDisableReasonCounter < disableReasonThreshold) { 3797fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(currentDisableReason, retrievedDisableReason); 3798fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3799fc789b2227e92372b2489ca54691310800835a50Roshan Pius currentStatus.getNetworkSelectionStatus(), 3800fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedStatus.getNetworkSelectionStatus()); 3801fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else { 3802fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 3803fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkTemporaryDisabled()); 3804fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3805fc789b2227e92372b2489ca54691310800835a50Roshan Pius TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS, retrievedDisableTime); 3806fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3807fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else if (reason < NetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX) { 3808fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 3809fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkPermanentlyDisabled()); 3810fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3811fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus.INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP, 3812fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedDisableTime); 3813fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.DISABLED); 3814fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3815fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3816fc789b2227e92372b2489ca54691310800835a50Roshan Pius 381722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 38182dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Creates a scan detail corresponding to the provided network and given BSSID, level &frequency 38192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * values. 382022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 38212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private ScanDetail createScanDetailForNetwork( 38222dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration configuration, String bssid, int level, int frequency) { 382322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius String caps; 382422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK)) { 382522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WPA2-PSK-CCMP]"; 382622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP) 382722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius || configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)) { 382822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WPA2-EAP-CCMP]"; 382922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE) 383022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius && WifiConfigurationUtil.hasAnyValidWepKey(configuration.wepKeys)) { 383122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WEP]"; 383222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else { 383322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[]"; 383422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 383522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiSsid ssid = WifiSsid.createFromAsciiEncoded(configuration.getPrintableSsid()); 383622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Fill in 0's in the fields we don't care about. 383722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius return new ScanDetail( 38382dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ssid, bssid, caps, level, frequency, mClock.getUptimeSinceBootMillis(), 38392dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mClock.getWallClockMillis()); 38402dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 38412dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 38422dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 38432dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Creates a scan detail corresponding to the provided network and BSSID value. 38442dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 38452dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private ScanDetail createScanDetailForNetwork(WifiConfiguration configuration, String bssid) { 38462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius return createScanDetailForNetwork(configuration, bssid, 0, 0); 384722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 384822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 384922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 385022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Creates a scan detail corresponding to the provided network and fixed BSSID value. 385122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 385222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius private ScanDetail createScanDetailForNetwork(WifiConfiguration configuration) { 385322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius return createScanDetailForNetwork(configuration, TEST_BSSID); 385422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 385522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 385622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 385722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Adds the provided network and then creates a scan detail corresponding to the network. The 385822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * method then creates a ScanDetail corresponding to the network and ensures that the network 385922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * is properly matched using 3860a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)} and also 386122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * verifies that the provided scan detail was cached, 386222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 386322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius private void verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 386422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration network) { 386522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // First add the provided network. 386622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(network); 386722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 386822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now create a dummy scan detail corresponding to the network. 386922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = createScanDetailForNetwork(network); 387022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanResult scanResult = scanDetail.getScanResult(); 387122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 387222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration retrievedNetwork = 387322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail); 3874e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius // Retrieve the network with password data for comparison. 3875e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius retrievedNetwork = 3876e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(retrievedNetwork.networkId); 387722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 387822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 387922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius network, retrievedNetwork); 388022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 388122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now retrieve the scan detail cache and ensure that the new scan detail is in cache. 388222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetailCache retrievedScanDetailCache = 388322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getScanDetailCacheForNetwork(network.networkId); 388422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertEquals(1, retrievedScanDetailCache.size()); 388522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanResult retrievedScanResult = retrievedScanDetailCache.get(scanResult.BSSID); 388622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 388722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanTestUtil.assertScanResultEquals(scanResult, retrievedScanResult); 388822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 38892d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 38902d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 38912d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Adds a new network and verifies that the |HasEverConnected| flag is set to false. 38922d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 38932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyAddNetworkHasEverConnectedFalse(WifiConfiguration network) { 38942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(network); 38952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 38962d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 38972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse("Adding a new network should not have hasEverConnected set to true.", 38982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 38992d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 39002d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 39012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 39022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Updates an existing network with some credential change and verifies that the 39032d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * |HasEverConnected| flag is set to false. 39042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 39052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse( 39062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration network) { 39072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 39082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 39092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 39102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse("Updating network credentials config should clear hasEverConnected.", 39112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 3912edf8be948c0879a2153582e853dc048f3060512aRoshan Pius assertTrue(result.hasCredentialChanged()); 39132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 39142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 39152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 39162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Updates an existing network after connection using 3917a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkAfterConnect(int)} and asserts that the 39182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * |HasEverConnected| flag is set to true. 39192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 39202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyUpdateNetworkAfterConnectHasEverConnectedTrue(int networkId) { 39212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(networkId)); 39222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 39232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue("hasEverConnected expected to be true after connection.", 39242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 39252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 39262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 3927c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 3928c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Sets up a user profiles for WifiConfigManager testing. 3929c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * 3930c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * @param userId Id of the user. 3931c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 3932c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private void setupUserProfiles(int userId) { 3933c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final UserInfo userInfo = 3934c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new UserInfo(userId, Integer.toString(userId), UserInfo.FLAG_PRIMARY); 3935c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<UserInfo> userProfiles = Arrays.asList(userInfo); 3936c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.getProfiles(userId)).thenReturn(userProfiles); 3937c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(userId)).thenReturn(true); 3938c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3939c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 394050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius} 3941