WifiConfigManagerTest.java revision 0d14dbc1da819e72054b9f168c8e3db767dd34bf
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; 386e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.os.UserHandle; 3950eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.os.UserManager; 4096241bee619ff7073635f680a36869f61a11a225Roshan Piusimport android.telephony.TelephonyManager; 4150eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport android.test.suitebuilder.annotation.SmallTest; 426e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport android.text.TextUtils; 4350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Piusimport com.android.internal.R; 453a738a26918230b2469d917dbf14323234edd39bRoshan Piusimport com.android.server.wifi.WifiConfigStoreLegacy.WifiConfigStoreDataLegacy; 460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhneimport com.android.server.wifi.util.WifiPermissionsWrapper; 478600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 48ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Piusimport org.junit.After; 4950eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.junit.Before; 5050eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.junit.Test; 516e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport org.mockito.ArgumentCaptor; 526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Piusimport org.mockito.InOrder; 5350eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.mockito.Mock; 5450eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport org.mockito.MockitoAnnotations; 5550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 5642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.FileDescriptor; 5742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.PrintWriter; 5842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Piusimport java.io.StringWriter; 5950eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport java.util.ArrayList; 601fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Piusimport java.util.Arrays; 612dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Piusimport java.util.HashSet; 6250eed92fe9556fdd9934683690181fea77ce4eacRoshan Piusimport java.util.List; 63674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Piusimport java.util.Set; 6450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 6550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius/** 66a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Unit tests for {@link com.android.server.wifi.WifiConfigManager}. 6750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 6850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius@SmallTest 69a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Piuspublic class WifiConfigManagerTest { 7050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 7150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final String TEST_BSSID = "0a:08:5c:67:89:00"; 7250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final long TEST_WALLCLOCK_CREATION_TIME_MILLIS = 9845637; 7350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final long TEST_WALLCLOCK_UPDATE_TIME_MILLIS = 75455637; 74fc789b2227e92372b2489ca54691310800835a50Roshan Pius private static final long TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS = 29457631; 751fe1065da82165183fa057ddbbd2e33bc5708c1bRobin Lee private static final int TEST_CREATOR_UID = WifiConfigurationTestUtil.TEST_UID; 760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final int TEST_NO_PERM_UID = 7; 7750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private static final int TEST_UPDATE_UID = 4; 786d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius private static final int TEST_SYSUI_UID = 56; 796d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius private static final int TEST_DEFAULT_USER = UserHandle.USER_SYSTEM; 802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private static final int TEST_MAX_NUM_ACTIVE_CHANNELS_FOR_PARTIAL_SCAN = 5; 812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private static final Integer[] TEST_FREQ_LIST = {2400, 2450, 5150, 5175, 5650}; 820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_CREATOR_NAME = "com.wificonfigmanager.creator"; 830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_UPDATE_NAME = "com.wificonfigmanager.update"; 840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_NO_PERM_NAME = "com.wificonfigmanager.noperm"; 858600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius private static final String TEST_DEFAULT_GW_MAC_ADDRESS = "0f:67:ad:ef:09:34"; 860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_HOST_1 = "192.168.48.1"; 870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final int TEST_STATIC_PROXY_PORT_1 = 8000; 880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_EXCLUSION_LIST_1 = ""; 890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_PAC_PROXY_LOCATION_1 = "http://bleh"; 900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_HOST_2 = "192.168.1.1"; 910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final int TEST_STATIC_PROXY_PORT_2 = 3000; 920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_STATIC_PROXY_EXCLUSION_LIST_2 = ""; 930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private static final String TEST_PAC_PROXY_LOCATION_2 = "http://blah"; 9450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 9550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private Context mContext; 9650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private FrameworkFacade mFrameworkFacade; 9750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private Clock mClock; 9850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private UserManager mUserManager; 9996241bee619ff7073635f680a36869f61a11a225Roshan Pius @Mock private TelephonyManager mTelephonyManager; 10050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private WifiKeyStore mWifiKeyStore; 101a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius @Mock private WifiConfigStore mWifiConfigStore; 1023a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Mock private WifiConfigStoreLegacy mWifiConfigStoreLegacy; 10350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Mock private PackageManager mPackageManager; 1040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Mock private DevicePolicyManagerInternal mDevicePolicyManagerInternal; 1050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Mock private WifiPermissionsWrapper mWifiPermissionsWrapper; 10650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1072dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private MockResources mResources; 1086e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private InOrder mContextConfigStoreMockOrder; 109a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius private WifiConfigManager mWifiConfigManager; 11050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 11150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 112a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Setup the mocks and an instance of WifiConfigManager before each test. 11350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 11450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Before 11550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void setUp() throws Exception { 11650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius MockitoAnnotations.initMocks(this); 11750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1186e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Set up the inorder for verifications. This is needed to verify that the broadcasts, 1196e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // store writes for network updates followed by network additions are in the expected order. 1206e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder = inOrder(mContext, mWifiConfigStore); 1216e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 12250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Set up the package name stuff & permission override. 12350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mContext.getPackageManager()).thenReturn(mPackageManager); 1242dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources = new MockResources(); 1252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setBoolean( 1268600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius R.bool.config_wifi_only_link_same_credential_configurations, true); 1272dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 1282dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 1292dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_MAX_NUM_ACTIVE_CHANNELS_FOR_PARTIAL_SCAN); 1302dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius when(mContext.getResources()).thenReturn(mResources); 1318600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 1326d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Setup UserManager profiles for the default user. 1336d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(TEST_DEFAULT_USER); 1346d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 13550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 13650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public String answer(int uid) throws Exception { 13750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (uid == TEST_CREATOR_UID) { 13850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return TEST_CREATOR_NAME; 13950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } else if (uid == TEST_UPDATE_UID) { 14050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return TEST_UPDATE_NAME; 1416d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } else if (uid == TEST_SYSUI_UID) { 142a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius return WifiConfigManager.SYSUI_PACKAGE_NAME; 1430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } else if (uid == TEST_NO_PERM_UID) { 1440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne return TEST_NO_PERM_NAME; 14550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 14650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius fail("Unexpected UID: " + uid); 14750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return ""; 14850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 14950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mPackageManager).getNameForUid(anyInt()); 1506d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius doAnswer(new AnswerWithArguments() { 1516d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public int answer(String packageName, int flags, int userId) throws Exception { 152a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius if (packageName.equals(WifiConfigManager.SYSUI_PACKAGE_NAME)) { 1536d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius return TEST_SYSUI_UID; 1546d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } else { 1556d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius return 0; 1566d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 1576d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 1586d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius }).when(mPackageManager).getPackageUidAsUser(anyString(), anyInt(), anyInt()); 15950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 16050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Both the UID's in the test have the configuration override permission granted by 16150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // default. This maybe modified for particular tests if needed. 16250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 16350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public int answer(String permName, int uid) throws Exception { 1641fe1065da82165183fa057ddbbd2e33bc5708c1bRobin Lee if (uid == TEST_CREATOR_UID || uid == TEST_UPDATE_UID || uid == TEST_SYSUI_UID) { 16550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_GRANTED; 16650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 16750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_DENIED; 16850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 16950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 17050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 1711fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius when(mWifiKeyStore 1721fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius .updateNetworkKeys(any(WifiConfiguration.class), any(WifiConfiguration.class))) 1731fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius .thenReturn(true); 1741fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 1753a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(true); 1763a738a26918230b2469d917dbf14323234edd39bRoshan Pius 1770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), anyInt())) 1780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(false); 1790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mWifiPermissionsWrapper.getDevicePolicyManagerInternal()) 1800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(mDevicePolicyManagerInternal); 1812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 18250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 18350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 18450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 185ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius * Called after each test 186ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius */ 187ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius @After 188ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius public void cleanup() { 189ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius validateMockitoUsage(); 190ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius } 191ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius 192ee7bdc30d102e05df8d275ebc133afed21808e34Roshan Pius /** 19350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single network using 194a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 19550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 19650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 19750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSingleOpenNetwork() { 19850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 19950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 20050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 20150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 20350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 20450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 20550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 20650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 20750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 2080ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius // Ensure that the newly added network is disabled. 2090ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius assertEquals(WifiConfiguration.Status.DISABLED, retrievedNetworks.get(0).status); 21050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 21150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 21250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 21350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the modification of a single network using 214a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 21550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 21650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 21750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetwork() { 21850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 21950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 22050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 22150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2226e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 22350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2246e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID for the network. 22550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 2266e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 22750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 22850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that the modification has been effective. 22950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 23050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 23150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 23250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 23350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 23450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 23550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 23650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single ephemeral network using 237a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 238a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * the {@link WifiConfigManager#getSavedNetworks()} does not return this network. 23950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 24050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 241bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius public void testAddSingleEphemeralNetwork() throws Exception { 242bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration ephemeralNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 243bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius ephemeralNetwork.ephemeral = true; 24450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 245bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius networks.add(ephemeralNetwork); 24650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 247bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyAddEphemeralNetworkToWifiConfigManager(ephemeralNetwork); 24850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 24950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 25050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 25150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 25250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 25350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 25450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Ensure that this is not returned in the saved network list. 25550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(mWifiConfigManager.getSavedNetworks().isEmpty()); 25650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 25750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 25850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 259bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Verifies the addition of 2 networks (1 normal and 1 ephemeral) using 260bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and ensures that 261bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * the ephemeral network configuration is not persisted in config store. 262bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 263bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius @Test 264bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius public void testAddMultipleNetworksAndEnsureEphemeralNetworkNotPersisted() { 265bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration ephemeralNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 266bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius ephemeralNetwork.ephemeral = true; 267bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 268bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 269bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(addNetworkToWifiConfigManager(ephemeralNetwork).isSuccess()); 270bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(addNetworkToWifiConfigManager(openNetwork).isSuccess()); 271bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 272bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // The open network addition should trigger a store write. 273bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfigStoreData storeData = captureWriteStoreData(); 274bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertFalse(isNetworkInConfigStoreData(ephemeralNetwork, storeData)); 275bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(isNetworkInConfigStoreData(openNetwork, storeData)); 276bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 277bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 278bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 27950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies that the modification of a single open network using 280a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with a UID which 28150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * has no permission to modify the network fails. 28250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 28350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 28450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetworkFailedDueToPermissionDenied() throws Exception { 28550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 28650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 28750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 28850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2896e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 29050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 2916e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 29250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 29350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 29450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Deny permission for |UPDATE_UID|. 29550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 29650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public int answer(String permName, int uid) throws Exception { 29750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (uid == TEST_CREATOR_UID) { 29850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_GRANTED; 29950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 30050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_DENIED; 30150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 30250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 30350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 30450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration and ensure that the operation failed. 3056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = updateNetworkToWifiConfigManager(openNetwork); 30650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(result.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID); 30750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 30850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 30950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 31050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies that the modification of a single open network using 311a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with the creator UID 31250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * should always succeed. 31350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 31450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 31550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateSingleOpenNetworkSuccessWithCreatorUID() throws Exception { 31650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 31750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 31850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 31950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3206e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 32150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3226e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 32350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 32450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 32550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Deny permission for all UIDs. 32650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius doAnswer(new AnswerWithArguments() { 32750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public int answer(String permName, int uid) throws Exception { 32850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return PackageManager.PERMISSION_DENIED; 32950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 33050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 33150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 33250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration using the creator UID. 3336e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = 3346e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mWifiConfigManager.addOrUpdateNetwork(openNetwork, TEST_CREATOR_UID); 33550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 33650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 33750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that the modification has been effective. 33850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 33950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 34050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 34150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 34250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 34350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 34450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 34550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single PSK network using 346a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 347a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworks()} masks the password. 34850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 34950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 35050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSinglePskNetwork() { 35150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 35250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 35350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(pskNetwork); 35450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 35650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 35750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 35850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 35950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 36050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 36150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 36250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedSavedNetworks = mWifiConfigManager.getSavedNetworks(); 36350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.size(), 1); 36450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.get(0).configKey(), pskNetwork.configKey()); 3656e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedSavedNetworks.get(0)); 36650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 36750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 36850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 36950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the addition of a single WEP network using 370a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and verifies that 371a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworks()} masks the password. 37250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 37350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 37450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testAddSingleWepNetwork() { 37550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 37650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 37750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(wepNetwork); 37850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 3796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 38050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 38150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 38250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 38350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 38450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 38550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 38650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedSavedNetworks = mWifiConfigManager.getSavedNetworks(); 38750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.size(), 1); 38850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertEquals(retrievedSavedNetworks.get(0).configKey(), wepNetwork.configKey()); 3896e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedSavedNetworks.get(0)); 39050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 39150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 39250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 39350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Verifies the modification of an IpConfiguration using 394a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 39550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 39650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius @Test 39750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius public void testUpdateIpConfiguration() { 39850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 39950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 40050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks.add(openNetwork); 40150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 4026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 40350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 4046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Now change BSSID of the network. 40550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 40650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 40750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Update the same configuration and ensure that the IP configuration change flags 40850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // are not set. 4096e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 41050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 4110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Configure mock DevicePolicyManager to give Profile Owner permission so that we can modify 4120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // proxy settings on a configuration 4130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 4140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))).thenReturn(true); 4150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 41650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Change the IpConfiguration now and ensure that the IP configuration flags are set now. 41750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius assertAndSetNetworkIpConfiguration( 41850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius openNetwork, 41950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy()); 4206e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithIpChange(openNetwork); 42150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 42250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius // Now verify that all the modifications have been effective. 42350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius List<WifiConfiguration> retrievedNetworks = 42450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 42550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 42650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius networks, retrievedNetworks); 42750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 42850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 42950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 430c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * Verifies the removal of a single network using 431a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int)} 432c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 433c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius @Test 434c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius public void testRemoveSingleOpenNetwork() { 435c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 436c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 437c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 438bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that configured network list is not empty. 439bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 440c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 441c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(openNetwork); 442bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that configured network list is empty now. 443bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 444bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 445bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 446bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 447bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Verifies the removal of an ephemeral network using 448bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * {@link WifiConfigManager#removeNetwork(int)} 449bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 450bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius @Test 451bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius public void testRemoveSingleEphemeralNetwork() throws Exception { 452bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration ephemeralNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 453bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius ephemeralNetwork.ephemeral = true; 454bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 455bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyAddEphemeralNetworkToWifiConfigManager(ephemeralNetwork); 456bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that configured network list is not empty. 457bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 458c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 459bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyRemoveEphemeralNetworkFromWifiConfigManager(ephemeralNetwork); 460c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Ensure that configured network list is empty now. 461c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 462c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 463c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 464c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 465fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the addition & update of multiple networks using 466a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and the 467c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * removal of networks using 468a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int)} 469c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 470c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius @Test 471fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testAddUpdateRemoveMultipleNetworks() { 472c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 473c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 474c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 475c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 476c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(openNetwork); 477c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(pskNetwork); 478c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks.add(wepNetwork); 479c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 480c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 481c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 482c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 483c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 484c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now verify that all the additions has been effective. 485c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius List<WifiConfiguration> retrievedNetworks = 486c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 487c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 488c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks, retrievedNetworks); 489c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 490c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Modify all the 3 configurations and update it to WifiConfigManager. 491c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkBSSID(openNetwork, TEST_BSSID); 492c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkBSSID(pskNetwork, TEST_BSSID); 493c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertAndSetNetworkIpConfiguration( 494c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius wepNetwork, 495c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy()); 496c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 4970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Configure mock DevicePolicyManager to give Profile Owner permission so that we can modify 4980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // proxy settings on a configuration 4990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 5000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))).thenReturn(true); 5010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 502c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(openNetwork); 503c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(pskNetwork); 504c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithIpChange(wepNetwork); 505c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now verify that all the modifications has been effective. 506c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 507c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 508c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius networks, retrievedNetworks); 509c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 510c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Now remove all 3 networks. 511c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(openNetwork); 512c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(pskNetwork); 513c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyRemoveNetworkFromWifiConfigManager(wepNetwork); 514c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 515c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Ensure that configured network list is empty now. 516c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 517c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 518c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 519c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 520fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the update of network status using 521a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)}. 522fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 523fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 524fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testNetworkSelectionStatus() { 525fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 526fc789b2227e92372b2489ca54691310800835a50Roshan Pius 527fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 528fc789b2227e92372b2489ca54691310800835a50Roshan Pius 529fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 530fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 531fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 532fc789b2227e92372b2489ca54691310800835a50Roshan Pius 533fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled. The threshold for association rejection is 5, so 534fc789b2227e92372b2489ca54691310800835a50Roshan Pius // disable it 5 times to actually mark it temporarily disabled. 535fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectReason = NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION; 536fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectThreshold = 537a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[assocRejectReason]; 538fc789b2227e92372b2489ca54691310800835a50Roshan Pius for (int i = 1; i <= assocRejectThreshold; i++) { 539fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus(result.getNetworkId(), assocRejectReason, i); 540fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 541fc789b2227e92372b2489ca54691310800835a50Roshan Pius 542fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to permanently disabled. 543fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 544fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_BY_WIFI_MANAGER, 0); 545fc789b2227e92372b2489ca54691310800835a50Roshan Pius 546fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it back to enabled. 547fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 548fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 549fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 550fc789b2227e92372b2489ca54691310800835a50Roshan Pius 551fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 552fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the update of network status using 553a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)} and ensures that 554fc789b2227e92372b2489ca54691310800835a50Roshan Pius * enabling a network clears out all the temporary disable counters. 555fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 556fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 557fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testNetworkSelectionStatusEnableClearsDisableCounters() { 558fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 559fc789b2227e92372b2489ca54691310800835a50Roshan Pius 560fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 561fc789b2227e92372b2489ca54691310800835a50Roshan Pius 562fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 563fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 564fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 565fc789b2227e92372b2489ca54691310800835a50Roshan Pius 566fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled 2 times for 2 different reasons. 567fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 568fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 1); 569fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 570fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 2); 571fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 572fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 1); 573fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 574fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 2); 575fc789b2227e92372b2489ca54691310800835a50Roshan Pius 576fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it back to enabled. 577fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 578fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 579fc789b2227e92372b2489ca54691310800835a50Roshan Pius 580fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Ensure that the counters have all been reset now. 581fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 582fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION, 1); 583fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 584fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE, 1); 585fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 586fc789b2227e92372b2489ca54691310800835a50Roshan Pius 587fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 588fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the enabling of temporarily disabled network using 589a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#tryEnableNetwork(int)}. 590fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 591fc789b2227e92372b2489ca54691310800835a50Roshan Pius @Test 592fc789b2227e92372b2489ca54691310800835a50Roshan Pius public void testTryEnableNetwork() { 593fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 594fc789b2227e92372b2489ca54691310800835a50Roshan Pius 595fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 596fc789b2227e92372b2489ca54691310800835a50Roshan Pius 597fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set it to enabled. 598fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus( 599fc789b2227e92372b2489ca54691310800835a50Roshan Pius result.getNetworkId(), NetworkSelectionStatus.NETWORK_SELECTION_ENABLE, 0); 600fc789b2227e92372b2489ca54691310800835a50Roshan Pius 601fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now set it to temporarily disabled. The threshold for association rejection is 5, so 602fc789b2227e92372b2489ca54691310800835a50Roshan Pius // disable it 5 times to actually mark it temporarily disabled. 603fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectReason = NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION; 604fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectThreshold = 605a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[assocRejectReason]; 606fc789b2227e92372b2489ca54691310800835a50Roshan Pius for (int i = 1; i <= assocRejectThreshold; i++) { 607fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkSelectionStatus(result.getNetworkId(), assocRejectReason, i); 608fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 609fc789b2227e92372b2489ca54691310800835a50Roshan Pius 610fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now let's try enabling this network without changing the time, this should fail and the 611fc789b2227e92372b2489ca54691310800835a50Roshan Pius // status remains temporarily disabled. 612fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertFalse(mWifiConfigManager.tryEnableNetwork(result.getNetworkId())); 613fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus retrievedStatus = 614fc789b2227e92372b2489ca54691310800835a50Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 615fc789b2227e92372b2489ca54691310800835a50Roshan Pius .getNetworkSelectionStatus(); 616fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkTemporaryDisabled()); 617fc789b2227e92372b2489ca54691310800835a50Roshan Pius 618fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now advance time by the timeout for association rejection and ensure that the network 619fc789b2227e92372b2489ca54691310800835a50Roshan Pius // is now enabled. 620fc789b2227e92372b2489ca54691310800835a50Roshan Pius int assocRejectTimeout = 621a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_TIMEOUT_MS[assocRejectReason]; 622fc789b2227e92372b2489ca54691310800835a50Roshan Pius when(mClock.getElapsedSinceBootMillis()) 623fc789b2227e92372b2489ca54691310800835a50Roshan Pius .thenReturn(TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS + assocRejectTimeout); 624fc789b2227e92372b2489ca54691310800835a50Roshan Pius 625fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(mWifiConfigManager.tryEnableNetwork(result.getNetworkId())); 626fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedStatus = 627fc789b2227e92372b2489ca54691310800835a50Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 628fc789b2227e92372b2489ca54691310800835a50Roshan Pius .getNetworkSelectionStatus(); 629fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 630fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 631fc789b2227e92372b2489ca54691310800835a50Roshan Pius 632fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 633a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the enabling of network using 634a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} and 635a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#disableNetwork(int, int)}. 636a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 637a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 638a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testEnableDisableNetwork() { 639a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 640a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 641a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 642a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 643a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 644a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), false, TEST_CREATOR_UID)); 645a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 646a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 647a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 648a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 649a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 650a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 651a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now set it disabled. 652a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 653a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 654a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 655a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkPermanentlyDisabled()); 656a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.DISABLED); 657a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 658a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 659a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 660a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the enabling of network using 661a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} with a UID which 662a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * has no permission to modify the network fails.. 663a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 664a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 665a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testEnableDisableNetworkFailedDueToPermissionDenied() throws Exception { 666a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 667a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 668a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 669a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 670a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 671a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), false, TEST_CREATOR_UID)); 672a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 673a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 674a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 675a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 676a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 677a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 678a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Deny permission for |UPDATE_UID|. 679a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius doAnswer(new AnswerWithArguments() { 680a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public int answer(String permName, int uid) throws Exception { 681a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius if (uid == TEST_CREATOR_UID) { 682a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_GRANTED; 683a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 684a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_DENIED; 685a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 686a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 687a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 688a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now try to set it disabled with |TEST_UPDATE_UID|, it should fail and the network 689a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // should remain enabled. 690a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_UPDATE_UID)); 691a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedStatus = 692a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()) 693a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius .getNetworkSelectionStatus(); 694a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 695a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(WifiConfiguration.Status.ENABLED, retrievedNetwork.status); 696a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 697a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 698a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 699a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies the updation of network's connectUid using 700a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#checkAndUpdateLastConnectUid(int, int)}. 701a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 702a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 703a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testUpdateLastConnectUid() throws Exception { 704a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 705a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 706a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 707a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 708a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertTrue( 7092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.checkAndUpdateLastConnectUid( 7102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius result.getNetworkId(), TEST_CREATOR_UID)); 711a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration retrievedNetwork = 712a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 713a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(TEST_CREATOR_UID, retrievedNetwork.lastConnectUid); 714a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 715a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Deny permission for |UPDATE_UID|. 716a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius doAnswer(new AnswerWithArguments() { 717a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public int answer(String permName, int uid) throws Exception { 718a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius if (uid == TEST_CREATOR_UID) { 719a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_GRANTED; 720a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 721a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius return PackageManager.PERMISSION_DENIED; 722a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 723a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius }).when(mFrameworkFacade).checkUidPermission(anyString(), anyInt()); 724a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 725a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Now try to update the last connect UID with |TEST_UPDATE_UID|, it should fail and 726a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // the lastConnectUid should remain the same. 727a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse( 7281fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius mWifiConfigManager.checkAndUpdateLastConnectUid( 7291fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius result.getNetworkId(), TEST_UPDATE_UID)); 730a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 731a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertEquals(TEST_CREATOR_UID, retrievedNetwork.lastConnectUid); 732a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 733a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 734a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 735a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration update attempt with an null config is gracefully 736a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 737a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 738a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 739a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 740a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testAddOrUpdateNetworkWithNullConfig() { 741a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = mWifiConfigManager.addOrUpdateNetwork(null, TEST_CREATOR_UID); 742a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(result.isSuccess()); 743a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 744a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 745a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 746a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration removal attempt with an invalid networkID is gracefully 747a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 748a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#removeNetwork(int)}. 749a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 750a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 751a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testRemoveNetworkWithInvalidNetworkId() { 752a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 753a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 754a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 755a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 756a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius // Change the networkID to an invalid one. 757a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius openNetwork.networkId++; 7586d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertFalse(mWifiConfigManager.removeNetwork(openNetwork.networkId, TEST_CREATOR_UID)); 759a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 760a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 761a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 762a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * Verifies that any configuration update attempt with an invalid networkID is gracefully 763a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius * handled. 764a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * This invokes {@link WifiConfigManager#enableNetwork(int, boolean, int)}, 765a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#disableNetwork(int, int)}, 766a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkSelectionStatus(int, int)} and 767a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#checkAndUpdateLastConnectUid(int, int)}. 768a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius */ 769a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius @Test 770a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius public void testChangeConfigurationWithInvalidNetworkId() { 771a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 772a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 773a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 774a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 775a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertFalse(mWifiConfigManager.enableNetwork( 776a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId() + 1, false, TEST_CREATOR_UID)); 77722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertFalse(mWifiConfigManager.disableNetwork(result.getNetworkId() + 1, TEST_CREATOR_UID)); 778a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.updateNetworkSelectionStatus( 77922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius result.getNetworkId() + 1, NetworkSelectionStatus.DISABLED_BY_WIFI_MANAGER)); 780a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius assertFalse(mWifiConfigManager.checkAndUpdateLastConnectUid( 78122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius result.getNetworkId() + 1, TEST_CREATOR_UID)); 782a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius } 783a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius 784a44a020c95ad74b585c63e1d739942d20d009d23Roshan Pius /** 7851fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies multiple modification of a single network using 786a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 7871fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * This test is basically checking if the apps can reset some of the fields of the config after 7881fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * addition. The fields being reset in this test are the |preSharedKey| and |wepKeys|. 7891fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 1. Create an open network initially. 7901fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 2. Modify the added network config to a WEP network config with all the 4 keys set. 7911fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 3. Modify the added network config to a WEP network config with only 1 key set. 7921fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * 4. Modify the added network config to a PSK network config. 7931fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 7941fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 7951fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testMultipleUpdatesSingleNetwork() { 7961fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createOpenNetwork(); 7971fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 7981fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 7991fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now add |wepKeys| to the network. We don't need to update the |allowedKeyManagement| 8001fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // fields for open to WEP conversion. 8011fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius String[] wepKeys = 8021fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius Arrays.copyOf(WifiConfigurationTestUtil.TEST_WEP_KEYS, 8031fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.TEST_WEP_KEYS.length); 8041fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius int wepTxKeyIdx = WifiConfigurationTestUtil.TEST_WEP_TX_KEY_INDEX; 8051fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 8061fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8071fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 8081fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 8091fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 8101fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8111fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now empty out 3 of the |wepKeys[]| and ensure that those keys have been reset correctly. 8121fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius for (int i = 1; i < network.wepKeys.length; i++) { 8131fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepKeys[i] = ""; 8141fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 8151fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepTxKeyIdx = 0; 8161fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 8171fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8181fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 8191fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 8201fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 8211fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8221fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now change the config to a PSK network config by resetting the remaining |wepKey[0]| 8231fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // field and setting the |preSharedKey| and |allowedKeyManagement| fields. 8241fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepKeys[0] = ""; 8251fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius wepTxKeyIdx = -1; 8261fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkWepKeysAndTxIndex(network, wepKeys, wepTxKeyIdx); 8271fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 8281fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkPreSharedKey(network, WifiConfigurationTestUtil.TEST_PSK); 8291fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8301fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 8311fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 8321fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 8331fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 8341fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8351fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 8361fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies the modification of a WifiEnteriseConfig using 837a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)}. 8381fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 8391fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 8401fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testUpdateWifiEnterpriseConfig() { 8411fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 8421fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 8431fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8441fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Set the |password| field in WifiEnterpriseConfig and modify the config to PEAP/GTC. 8451fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig = 8461fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 8471fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkEnterprisePassword(network, "test"); 8481fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8491fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 8501fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 8511fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 8521fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8531fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Reset the |password| field in WifiEnterpriseConfig and modify the config to TLS/None. 8541fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 8551fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE); 8561fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertAndSetNetworkEnterprisePassword(network, ""); 8571fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8581fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 8591fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 8601fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 8611fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 8621fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8631fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 8641fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Verifies the modification of a single network using 865a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} by passing in nulls 8661fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * in all the publicly exposed fields. 8671fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 8681fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius @Test 8691fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius public void testUpdateSingleNetworkWithNullValues() { 8701fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 8711fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius verifyAddNetworkToWifiConfigManager(network); 8721fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8731fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Save a copy of the original network for comparison. 8741fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration originalNetwork = new WifiConfiguration(network); 8751fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8761fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now set all the public fields to null and try updating the network. 8779cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedAuthAlgorithms.clear(); 8789cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedProtocols.clear(); 8799cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedKeyManagement.clear(); 8809cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedPairwiseCiphers.clear(); 8819cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu network.allowedGroupCiphers.clear(); 8821fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.setIpConfiguration(null); 8831fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius network.enterpriseConfig = null; 8841fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8859cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu // Update the network. 8869cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu NetworkUpdateResult result = updateNetworkToWifiConfigManager(network); 8879cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 8889cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertFalse(result.isNewNetwork()); 8899cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu 8909cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu // Verify no changes to the original network configuration. 8919cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu verifyNetworkUpdateBroadcast(originalNetwork); 8929cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu verifyNetworkInConfigStoreData(originalNetwork); 8939cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertFalse(result.hasIpChanged()); 8949cc8b06885dc5889a1ed503b25faff5b83d20978Peter Qiu assertFalse(result.hasProxyChanged()); 8951fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 8961fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Copy over the updated debug params to the original network config before comparison. 8971fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.lastUpdateUid = network.lastUpdateUid; 8981fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.lastUpdateName = network.lastUpdateName; 8991fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork.updateTime = network.updateTime; 9001fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9011fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius // Now verify that there was no change to the network configurations. 9021fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 9031fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius originalNetwork, 9041fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(originalNetwork.networkId)); 9051fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 9061fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 9071fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 9081230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius * Verifies that the modification of a single network using 909a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} does not modify 9101230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius * existing configuration if there is a failure. 9111230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius */ 9121230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius @Test 9131230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius public void testUpdateSingleNetworkFailureDoesNotModifyOriginal() { 9141230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 9151230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius network.enterpriseConfig = 9161230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 9171230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius verifyAddNetworkToWifiConfigManager(network); 9181230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 9191230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Save a copy of the original network for comparison. 9201230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfiguration originalNetwork = new WifiConfiguration(network); 9211230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 9221230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Now modify the network's EAP method. 9231230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius network.enterpriseConfig = 9241230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.createTLSWifiEnterpriseConfigWithNonePhase2(); 9251230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 9261230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Fail this update because of cert installation failure. 9271230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius when(mWifiKeyStore 9281230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius .updateNetworkKeys(any(WifiConfiguration.class), any(WifiConfiguration.class))) 9291230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius .thenReturn(false); 9301230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius NetworkUpdateResult result = 9311230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius mWifiConfigManager.addOrUpdateNetwork(network, TEST_UPDATE_UID); 9321230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius assertTrue(result.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID); 9331230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 9341230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius // Now verify that there was no change to the network configurations. 9351230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 9361230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius originalNetwork, 9371230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(originalNetwork.networkId)); 9381230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius } 9391230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius 9401230dec4f7c696a08b71785bf1b92d0ba541ecccRoshan Pius /** 94122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies the matching of networks with different encryption types with the 94222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * corresponding scan detail using 943a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)}. 94422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * The test also verifies that the provided scan detail was cached, 94522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 94622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 94722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testMatchScanDetailToNetworksAndCache() { 94822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Create networks of different types and ensure that they're all matched using 94922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // the corresponding ScanDetail correctly. 95022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 95122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createOpenNetwork()); 95222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 95322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createWepNetwork()); 95422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 95522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createPskNetwork()); 95622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 95722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.createEapNetwork()); 95822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 95922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 96022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 96122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies that scan details with wrong SSID/authentication types are not matched using 962a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)} 96322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * to the added networks. 96422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 96522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 96622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testNoMatchScanDetailToNetwork() { 96722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // First create networks of different types. 96822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 96922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 97022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 97122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 97222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 97322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now add them to WifiConfigManager. 97422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 97522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(wepNetwork); 97622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 97722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(eapNetwork); 97822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 97922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now create dummy scan detail corresponding to the networks. 98022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail openNetworkScanDetail = createScanDetailForNetwork(openNetwork); 98122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail wepNetworkScanDetail = createScanDetailForNetwork(wepNetwork); 98222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail pskNetworkScanDetail = createScanDetailForNetwork(pskNetwork); 98322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail eapNetworkScanDetail = createScanDetailForNetwork(eapNetwork); 98422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 98522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now mix and match parameters from different scan details. 98622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetworkScanDetail.getScanResult().SSID = 98722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius wepNetworkScanDetail.getScanResult().SSID; 98822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius wepNetworkScanDetail.getScanResult().capabilities = 98922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius pskNetworkScanDetail.getScanResult().capabilities; 99022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius pskNetworkScanDetail.getScanResult().capabilities = 99122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius eapNetworkScanDetail.getScanResult().capabilities; 99222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius eapNetworkScanDetail.getScanResult().capabilities = 99322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetworkScanDetail.getScanResult().capabilities; 99422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 99522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Try to lookup a saved network using the modified scan details. All of these should fail. 99622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(openNetworkScanDetail)); 99722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(wepNetworkScanDetail)); 99822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(pskNetworkScanDetail)); 99922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(eapNetworkScanDetail)); 100022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 100122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // All the cache's should be empty as well. 100222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId)); 100322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(wepNetwork.networkId)); 100422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(pskNetwork.networkId)); 100522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(eapNetwork.networkId)); 100622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 100722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 100822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 100922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Verifies that scan detail cache is trimmed down when the size of the cache for a network 1010a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * exceeds {@link WifiConfigManager#SCAN_CACHE_ENTRIES_MAX_SIZE}. 101122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 101222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius @Test 101322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius public void testScanDetailCacheTrimForNetwork() { 101422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Add a single network. 101522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 101622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(openNetwork); 101722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 101822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetailCache scanDetailCache; 101922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius String testBssidPrefix = "00:a5:b8:c9:45:"; 102022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 102122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Modify |BSSID| field in the scan result and add copies of scan detail 102222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_MAX_SIZE| times. 102322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius int scanDetailNum = 1; 1024a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius for (; scanDetailNum <= WifiConfigManager.SCAN_CACHE_ENTRIES_MAX_SIZE; scanDetailNum++) { 102522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Create dummy scan detail caches with different BSSID for the network. 102622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = 102722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius createScanDetailForNetwork( 102822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetwork, String.format("%s%02x", testBssidPrefix, scanDetailNum)); 102922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNotNull( 103022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail)); 103122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 103222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // The size of scan detail cache should keep growing until it hits 103322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_MAX_SIZE|. 103422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius scanDetailCache = 103522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId); 103622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertEquals(scanDetailNum, scanDetailCache.size()); 103722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 103822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 103922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now add the |SCAN_CACHE_ENTRIES_MAX_SIZE + 1| entry. This should trigger the trim. 104022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = 104122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius createScanDetailForNetwork( 104222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius openNetwork, String.format("%s%02x", testBssidPrefix, scanDetailNum)); 104322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail)); 104422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 104522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Retrieve the scan detail cache and ensure that the size was trimmed down to 104622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // |SCAN_CACHE_ENTRIES_TRIM_SIZE + 1|. The "+1" is to account for the new entry that 104722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // was added after the trim. 104822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius scanDetailCache = mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId); 1049a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.SCAN_CACHE_ENTRIES_TRIM_SIZE + 1, scanDetailCache.size()); 105022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 105122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 105222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 10532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is false for a newly added network. 10542d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10552d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10562d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testAddNetworkHasEverConnectedFalse() { 10572d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(WifiConfigurationTestUtil.createOpenNetwork()); 10582d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10592d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10602d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10612d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is false for a newly added network even when new config has 10622d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * mistakenly set HasEverConnected to true. 10632d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10642d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10652d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testAddNetworkOverridesHasEverConnectedWhenTrueInNewConfig() { 10662d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 10672d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 10682d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(openNetwork); 10692d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10702d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10712d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10722d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verify that the |HasEverConnected| is set when 1073a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkAfterConnect(int)} is invoked. 10742d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10752d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 1076cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius public void testUpdateConfigAfterConnectHasEverConnectedTrue() { 10772d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 10782d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(openNetwork); 10792d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(openNetwork.networkId); 10802d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10812d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10822d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10832d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |preSharedKey| is updated. 10842d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 10852d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 10862d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdatePreSharedKeyClearsHasEverConnected() { 10872d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 10882d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 10892d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 10902d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10912d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different psk. 10922d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.preSharedKey.equals("newpassword")); 10932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.preSharedKey = "newpassword"; 10942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 10952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 10962d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 10972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 10982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |wepKeys| is updated. 10992d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11002d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateWepKeysClearsHasEverConnected() { 11022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 11032d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(wepNetwork); 11042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(wepNetwork.networkId); 11052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different wep. 11072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(wepNetwork.wepKeys[0].equals("newpassword")); 11082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius wepNetwork.wepKeys[0] = "newpassword"; 11092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(wepNetwork); 11102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11122d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |wepTxKeyIndex| is updated. 11142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateWepTxKeyClearsHasEverConnected() { 11172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 11182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(wepNetwork); 11192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(wepNetwork.networkId); 11202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius // Now update the same network with a different wep. 11222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(wepNetwork.wepTxKeyIndex == 3); 11232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius wepNetwork.wepTxKeyIndex = 3; 11242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(wepNetwork); 11252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedKeyManagement| is 11292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11302d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11312d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11322d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedKeyManagementClearsHasEverConnected() { 11332d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11342d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11352d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11362d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11372d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)); 11382d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X); 11392d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 11402d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11432d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedProtocol| is 11442d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11452d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11462d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11472d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateProtocolsClearsHasEverConnected() { 11482d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11492d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11502d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11512d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11522d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedProtocols.get(WifiConfiguration.Protocol.OSEN)); 11532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedProtocols.set(WifiConfiguration.Protocol.OSEN); 11542d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 11552d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11562d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11572d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11582d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedAuthAlgorithms| is 11592d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11602d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11612d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11622d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedAuthAlgorithmsClearsHasEverConnected() { 11632d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11642d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11652d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11662d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11672d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.LEAP)); 11682d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.LEAP); 11692d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 11702d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11712d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11722d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11732d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedPairwiseCiphers| is 11742d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11752d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11762d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11772d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedPairwiseCiphersClearsHasEverConnected() { 11782d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11792d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11802d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11812d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11822d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.allowedPairwiseCiphers.get(WifiConfiguration.PairwiseCipher.NONE)); 11832d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.NONE); 11842d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 11852d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 11862d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11872d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 11882d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |allowedGroup| is 11892d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 11902d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 11912d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 11922d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateAllowedGroupCiphersClearsHasEverConnected() { 11932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 11942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 11952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 11962d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 11972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue(pskNetwork.allowedGroupCiphers.get(WifiConfiguration.GroupCipher.WEP104)); 11982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.allowedGroupCiphers.clear(WifiConfiguration.GroupCipher.WEP104); 11992d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 12002d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12032d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |hiddenSSID| is 12042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 12052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateHiddenSSIDClearsHasEverConnected() { 12082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 12092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 12102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 12112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12122d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.hiddenSSID); 12132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.hiddenSSID = true; 12142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(pskNetwork); 12152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is not cleared when a network config |requirePMF| is 12192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 12202d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateRequirePMFDoesNotClearHasEverConnected() { 12232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 12242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(pskNetwork); 12252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); 12262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(pskNetwork.requirePMF); 12282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius pskNetwork.requirePMF = true; 12292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12302d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = 12312d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(pskNetwork); 12322d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 12332d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 12342d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue("Updating network non-credentials config should not clear hasEverConnected.", 12352d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 12362d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12372d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12382d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 12392d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Verifies that hasEverConnected is cleared when a network config |enterpriseConfig| is 12402d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * updated. 12412d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 12422d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius @Test 12432d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius public void testUpdateEnterpriseConfigClearsHasEverConnected() { 12442d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 12452d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius eapNetwork.enterpriseConfig = 12462d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 12472d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyAddNetworkHasEverConnectedFalse(eapNetwork); 12482d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkAfterConnectHasEverConnectedTrue(eapNetwork.networkId); 12492d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12502d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse(eapNetwork.enterpriseConfig.getEapMethod() == WifiEnterpriseConfig.Eap.TLS); 12512d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius eapNetwork.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 12522d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse(eapNetwork); 12532d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 12542d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 12552d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 1256fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius * Verifies the ordering of network list generated using 1257a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#retrievePnoNetworkList()}. 1258fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius */ 1259fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius @Test 1260fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius public void testRetrievePnoList() { 1261fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Create and add 3 networks. 1262fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createEapNetwork(); 1263fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 1264fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 1265fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network1); 1266fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network2); 1267fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius verifyAddNetworkToWifiConfigManager(network3); 1268fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1269fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Enable all of them. 1270a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network1.networkId, false, TEST_CREATOR_UID)); 1271a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network2.networkId, false, TEST_CREATOR_UID)); 1272a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork(network3.networkId, false, TEST_CREATOR_UID)); 1273fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1274fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now set scan results in 2 of them to set the corresponding 1275fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // {@link NetworkSelectionStatus#mSeenInLastQualifiedNetworkSelection} field. 1276fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 1277fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius network1.networkId, createScanDetailForNetwork(network1).getScanResult(), 54)); 1278fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 1279fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius network3.networkId, createScanDetailForNetwork(network3).getScanResult(), 54)); 1280fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1281fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now increment |network3|'s association count. This should ensure that this network 1282fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // is preferred over |network1|. 1283fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(network3.networkId)); 1284fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1285fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Retrieve the Pno network list & verify the order of the networks returned. 1286fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius List<WifiScanner.PnoSettings.PnoNetwork> pnoNetworks = 1287fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius mWifiConfigManager.retrievePnoNetworkList(); 1288fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(3, pnoNetworks.size()); 1289fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network3.SSID, pnoNetworks.get(0).ssid); 1290fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network1.SSID, pnoNetworks.get(1).ssid); 1291fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network2.SSID, pnoNetworks.get(2).ssid); 1292fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1293fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Now permanently disable |network3|. This should remove network 3 from the list. 1294fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertTrue(mWifiConfigManager.disableNetwork(network3.networkId, TEST_CREATOR_UID)); 1295fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1296fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius // Retrieve the Pno network list again & verify the order of the networks returned. 1297fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius pnoNetworks = mWifiConfigManager.retrievePnoNetworkList(); 1298fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(2, pnoNetworks.size()); 1299fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network1.SSID, pnoNetworks.get(0).ssid); 1300fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius assertEquals(network2.SSID, pnoNetworks.get(1).ssid); 1301fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius } 1302fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius 1303fb93fa366b9e705ff014bec41dbd1d709e29e44cRoshan Pius /** 13048600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have the same default GW Mac address in 1305a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 13068600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 13078600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 13088600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingGwMacAddress() { 13098600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 13108600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 13118600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 13128600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 13138600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 13148600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 13158600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13168600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Set the same default GW mac address for all of the networks. 13178600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 13188600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 13198600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 13208600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 13218600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 13228600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network3.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 13238600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13248600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now create dummy scan detail corresponding to the networks. 13258600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1); 13268600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2); 13278600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail3 = createScanDetailForNetwork(network3); 13288600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13298600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 13308600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 13318600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 13328600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 13338600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail3)); 13348600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13358600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 13368600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 13378600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 13388600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(2, network.linkedConfigurations.size()); 13398600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 13408600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 13418600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 13428600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13438600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 13448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13458600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13468600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13478600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13488600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 13498600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have scan results with same first 16 ASCII of 13508600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * bssid in 1351a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 13528600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 13538600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 13548600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingBSSIDMatch() { 13558600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 13568600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 13578600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 13588600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 13598600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 13608600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 13618600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13628600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 13638600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 13648600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 13658600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail3 = createScanDetailForNetwork(network3, "af:89:56:34:56:69"); 13668600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13678600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 13688600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 13698600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 13708600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 13718600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail3)); 13728600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13738600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 13748600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 13758600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 13768600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(2, network.linkedConfigurations.size()); 13778600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 13788600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 13798600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 13808600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13818600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 13828600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13838600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13848600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 13858600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13868600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 13878600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks does not happen for non WPA networks when they have scan 13888600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * results with same first 16 ASCII of bssid in 1389a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 13908600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 13918600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 13928600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNoNetworkLinkUsingBSSIDMatchForNonWpaNetworks() { 13938600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork(); 13948600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 13958600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 13968600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 13978600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 13988600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 13998600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 14008600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 14018600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14028600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 14038600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 14048600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14058600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 14068600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 14078600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 14088600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 14098600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14108600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14118600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14128600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 14138600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks does not happen for networks with more than 1414a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#LINK_CONFIGURATION_MAX_SCAN_CACHE_ENTRIES} scan 14158600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * results with same first 16 ASCII of bssid in 1416a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)}. 14178600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 14188600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 14198600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNoNetworkLinkUsingBSSIDMatchForNetworksWithHighScanDetailCacheSize() { 14208600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 14218600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 14228600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 14238600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 14248600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14258600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create 7 scan results with bssid which is different in only the last char. 14268600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 14278600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius int scan_result_num = 0; 1428a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius for (; scan_result_num < WifiConfigManager.LINK_CONFIGURATION_MAX_SCAN_CACHE_ENTRIES + 1; 14292dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius scan_result_num++) { 14308600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail = 14318600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork( 14328600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1, test_bssid_base + Integer.toString(scan_result_num)); 14338600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull( 14348600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 14358600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14368600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14378600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now add 1 scan result to the other network with bssid which is different in only the 14388600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // last char. 14398600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = 14408600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork( 14418600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2, test_bssid_base + Integer.toString(scan_result_num++)); 14428600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 14438600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14448600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 14458600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 14468600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 14478600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 14488600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14498600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14508600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14518600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 14528600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * Verifies the linking of networks when they have scan results with same first 16 ASCII of 1453a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * bssid in {@link WifiConfigManager#getOrCreateScanDetailCacheForNetwork(WifiConfiguration)} 14548600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius * and then subsequently delinked when the networks have default gateway set which do not match. 14558600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius */ 14568600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius @Test 14578600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius public void testNetworkLinkUsingBSSIDMatchAndThenUnlinkDueToGwMacAddress() { 14588600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 14598600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 14608600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 14618600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 14628600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14638600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Create scan results with bssid which is different in only the last char. 14648600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail1 = createScanDetailForNetwork(network1, "af:89:56:34:56:67"); 14658600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius ScanDetail networkScanDetail2 = createScanDetailForNetwork(network2, "af:89:56:34:56:68"); 14668600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14678600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now save all these scan details corresponding to each of this network and expect 14688600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // all of these networks to be linked with each other. 14698600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail1)); 14708600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail2)); 14718600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14728600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius List<WifiConfiguration> retrievedNetworks = 14738600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius mWifiConfigManager.getConfiguredNetworks(); 14748600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 14758600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertEquals(1, network.linkedConfigurations.size()); 14768600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration otherNetwork : retrievedNetworks) { 14778600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius if (otherNetwork == network) { 14788600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius continue; 14798600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14808600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(network.linkedConfigurations.get(otherNetwork.configKey())); 14818600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14828600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 14838600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14848600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Now Set different GW mac address for both the networks and ensure they're unlinked. 14858600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 14868600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network1.networkId, "de:ad:fe:45:23:34")); 14878600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 14888600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius network2.networkId, "ad:de:fe:45:23:34")); 14898600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14908600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius // Add some dummy scan results again to re-evaluate the linking of networks. 14918600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache( 14928600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork(network1, "af:89:56:34:45:67"))); 14938600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNotNull(mWifiConfigManager.getSavedNetworkForScanDetailAndCache( 14948600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius createScanDetailForNetwork(network1, "af:89:56:34:45:68"))); 14958600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 14968600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworks(); 14978600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 14988600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius assertNull(network.linkedConfigurations); 14998600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15008600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius } 15018600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius 150260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan /** 15032dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 150460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)}. 15052dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 15062dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 15072dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetwork() { 15082dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 15092dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 15102dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15112dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 15122dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 15132dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 15142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 15152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 15162dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 15172dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 15182dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 15192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15202dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 152260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network.networkId, 1, 15232ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius TEST_FREQ_LIST[4])); 152460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan } 152560ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 152660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan /** 152760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * Verifies the creation of channel list using 152860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 152960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that the frequenecy of the currently connected network is in the returned 153060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * channel set. 153160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan */ 153260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan @Test 153360ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan public void testFetchChannelSetForNetworkIncludeCurrentNetwork() { 153460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 153560ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan verifyAddNetworkToWifiConfigManager(network); 153660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 153760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan // Create 5 scan results with different bssid's & frequencies. 153860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan String test_bssid_base = "af:89:56:34:56:6"; 153960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 154060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan ScanDetail networkScanDetail = 154160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan createScanDetailForNetwork( 154260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 154360ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan assertNotNull( 154460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 154560ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 154660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan } 154760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 154860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan // Currently connected network frequency 2427 is not in the TEST_FREQ_LIST 154960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan Set<Integer> freqs = mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 155060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network.networkId, 1, 2427); 155160ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan 155260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan assertEquals(true, freqs.contains(2427)); 15532dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15542dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15552dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 15562dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 155760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 155860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that scan results which have a timestamp beyond the provided age are not used 155960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * in the channel list. 15602dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 15612dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 15622dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIgnoresStaleScanResults() { 15632dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 15642dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 15652dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15662dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius long wallClockBase = 0; 15672dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 15682dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 15692dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 15702dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Increment the seen value in the scan results for each of them. 15712dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius when(mClock.getWallClockMillis()).thenReturn(wallClockBase + i); 15722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 15732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 15742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 15752dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 15762dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 15772dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15782dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int ageInMillis = 4; 15802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Now fetch only scan results which are 4 millis stale. This should ignore the first 15812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // scan result. 15822dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals( 15832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius new HashSet<>(Arrays.asList( 15842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius Arrays.copyOfRange( 15852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST, 15862dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST.length - ageInMillis, TEST_FREQ_LIST.length))), 15872dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 158860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network.networkId, ageInMillis, TEST_FREQ_LIST[4])); 15892dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 15902dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 15912dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 15922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 159360ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 159460ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that the list size does not exceed the max configured for the device. 15952dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 15962dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 15972dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIsLimitedToConfiguredSize() { 1598a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius // Need to recreate the WifiConfigManager instance for this test to modify the config 15992dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // value which is read only in the constructor. 16002dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int maxListSize = 3; 16012dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 16022dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 16032dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius maxListSize); 16042dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 16052dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16062dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createPskNetwork(); 16072dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network); 16082dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16092dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 5 scan results with different bssid's & frequencies. 16102dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 16112dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (int i = 0; i < TEST_FREQ_LIST.length; i++) { 16122dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 16132dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 16142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network, test_bssid_base + Integer.toString(i), 0, TEST_FREQ_LIST[i]); 16152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 16162dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 16172dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16182dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Ensure that the fetched list size is limited. 16202dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 16212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 162260ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network.networkId, 1, TEST_FREQ_LIST[4]).size()); 16232dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16242dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 16262dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 162760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 162860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that scan results from linked networks are used in the channel list. 16292dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 16302dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 16312dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIncludesLinkedNetworks() { 16322dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 16332dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 16342dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 16352dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 16362dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16372dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 16382dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int TEST_FREQ_LISTIdx = 0; 16392dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 1. 16402dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length / 2; TEST_FREQ_LISTIdx++) { 16412dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 16422dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 16432dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 16442dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 16452dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 16462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 16472dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16482dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16492dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 2. 16502dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length; TEST_FREQ_LISTIdx++) { 16512dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 16522dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 16532dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 16542dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 16552dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 16562dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 16572dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16582dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16592dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Link the 2 configurations together using the GwMacAddress. 16602dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 16612dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 16622dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 16632dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 16642dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16652dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // The channel list fetched should include scan results from both the linked networks. 16662dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 166760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network1.networkId, 1, 16682ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius TEST_FREQ_LIST[0])); 16692dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(new HashSet<Integer>(Arrays.asList(TEST_FREQ_LIST)), 167060ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan mWifiConfigManager.fetchChannelSetForNetworkForPartialScan(network2.networkId, 1, 16712ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius TEST_FREQ_LIST[0])); 16722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 16732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 16752dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Verifies the creation of channel list using 167660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * {@link WifiConfigManager#fetchChannelSetForNetworkForPartialScan(int, long, int)} and 167760ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * ensures that scan results from linked networks are used in the channel list and that the 167860ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan * list size does not exceed the max configured for the device. 16792dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 16802dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius @Test 16812dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius public void testFetchChannelSetForNetworkIncludesLinkedNetworksIsLimitedToConfiguredSize() { 1682a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius // Need to recreate the WifiConfigManager instance for this test to modify the config 16832dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // value which is read only in the constructor. 16842dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int maxListSize = 3; 16852dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mResources.setInteger( 16862dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius R.integer.config_wifi_framework_associated_partial_scan_max_num_active_channels, 16872dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius maxListSize); 16882dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16892dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createWifiConfigManager(); 16902dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createPskNetwork(); 16912dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 16922dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 16932dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 16942dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 16952dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius String test_bssid_base = "af:89:56:34:56:6"; 16962dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius int TEST_FREQ_LISTIdx = 0; 16972dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 1. 16982dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length / 2; TEST_FREQ_LISTIdx++) { 16992dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 17002dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 17012dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 17022dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 17032dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 17042dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 17052dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17062dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17072dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Create 3 scan results with different bssid's & frequencies for network 2. 17082dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius for (; TEST_FREQ_LISTIdx < TEST_FREQ_LIST.length; TEST_FREQ_LISTIdx++) { 17092dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ScanDetail networkScanDetail = 17102dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius createScanDetailForNetwork( 17112dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2, test_bssid_base + Integer.toString(TEST_FREQ_LISTIdx), 0, 17122dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius TEST_FREQ_LIST[TEST_FREQ_LISTIdx]); 17132dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertNotNull( 17142dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(networkScanDetail)); 17152dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17162dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17172dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Link the 2 configurations together using the GwMacAddress. 17182dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 17192dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network1.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 17202dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertTrue(mWifiConfigManager.setNetworkDefaultGwMacAddress( 17212dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius network2.networkId, TEST_DEFAULT_GW_MAC_ADDRESS)); 17222dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 17232dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius // Ensure that the fetched list size is limited. 17242dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 17252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 172660ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network1.networkId, 1, TEST_FREQ_LIST[0]).size()); 17272dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius assertEquals(maxListSize, 17282dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.fetchChannelSetForNetworkForPartialScan( 172960ecc292c27e34df1a9414da0d6482cce718efbcRandy Pan network2.networkId, 1, TEST_FREQ_LIST[0]).size()); 17302dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 17312dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 1732c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 1733a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 17342ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * and ensures that any shared private networks networkId is not changed. 17352ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Test scenario: 17362ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 1. Load the shared networks from shared store and user 1 store. 17372ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 2. Switch to user 2 and ensure that the shared network's Id is not changed. 17382ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius */ 17392ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius @Test 17402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius public void testHandleUserSwitchDoesNotChangeSharedNetworksId() throws Exception { 17412ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user1 = TEST_DEFAULT_USER; 17422ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 17432ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius setupUserProfiles(user2); 17442ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 17452ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int appId = 674; 17462ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 17472ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Create 3 networks. 1 for user1, 1 for user2 and 1 shared. 17482ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user1Network = WifiConfigurationTestUtil.createPskNetwork(); 17492ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.shared = false; 17502ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.creatorUid = UserHandle.getUid(user1, appId); 17512ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 17522ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.shared = false; 17532ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 17542ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration sharedNetwork1 = WifiConfigurationTestUtil.createPskNetwork(); 17552ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration sharedNetwork2 = WifiConfigurationTestUtil.createPskNetwork(); 17562ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 17572ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the store data that is loaded initially. 17582ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 17592ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 17602ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork1); 17612ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork2); 17622ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 17632ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 17642ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user1Networks = new ArrayList<WifiConfiguration>() { 17652ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 17662ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user1Network); 17672ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 17682ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 17692ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigStoreData loadStoreData = 17702ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new WifiConfigStoreData(sharedNetworks, user1Networks, new HashSet<String>()); 17712ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.read()).thenReturn(loadStoreData); 17722ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 17732ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 17742ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Fetch the network ID's assigned to the shared networks initially. 17752ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int sharedNetwork1Id = WifiConfiguration.INVALID_NETWORK_ID; 17762ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int sharedNetwork2Id = WifiConfiguration.INVALID_NETWORK_ID; 17772ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> retrievedNetworks = 17782ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 17792ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 17802ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius if (network.configKey().equals(sharedNetwork1.configKey())) { 17812ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius sharedNetwork1Id = network.networkId; 17822ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } else if (network.configKey().equals(sharedNetwork2.configKey())) { 17832ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius sharedNetwork2Id = network.networkId; 17842ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 17852ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 17862ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(sharedNetwork1Id != WifiConfiguration.INVALID_NETWORK_ID); 17872ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(sharedNetwork2Id != WifiConfiguration.INVALID_NETWORK_ID); 17882ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 17892ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the user 2 store data that is loaded at user switch. 17902ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user2Networks = new ArrayList<WifiConfiguration>() { 17912ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 17922ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user2Network); 17932ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 17942ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 17952ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigStoreData newUserStoreData = 17962ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new WifiConfigStoreData(new ArrayList<WifiConfiguration>(), user2Networks, 17972ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new HashSet<String>()); 17982ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 17992ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .thenReturn(newUserStoreData); 18002ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now switch the user to user 2 and ensure that shared network's IDs have not changed. 18012ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 18022ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mWifiConfigManager.handleUserSwitch(user2); 18032ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 18042ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Again fetch the network ID's assigned to the shared networks and ensure they have not 18052ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // changed. 18062ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int updatedSharedNetwork1Id = WifiConfiguration.INVALID_NETWORK_ID; 18072ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int updatedSharedNetwork2Id = WifiConfiguration.INVALID_NETWORK_ID; 18082ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 18092ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 18102ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius if (network.configKey().equals(sharedNetwork1.configKey())) { 18112ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius updatedSharedNetwork1Id = network.networkId; 18122ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } else if (network.configKey().equals(sharedNetwork2.configKey())) { 18132ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius updatedSharedNetwork2Id = network.networkId; 18142ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 18152ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 18162ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertEquals(sharedNetwork1Id, updatedSharedNetwork1Id); 18172ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertEquals(sharedNetwork2Id, updatedSharedNetwork2Id); 18182ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 18192ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 18202ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius /** 18212ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 18222ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * and ensures that any old user private networks are not visible anymore. 18232ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Test scenario: 18242ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 1. Load the shared networks from shared store and user 1 store. 18252ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 2. Switch to user 2 and ensure that the user 1's private network has been removed. 18262ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius */ 18272ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius @Test 18282ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius public void testHandleUserSwitchRemovesOldUserPrivateNetworks() throws Exception { 18292ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user1 = TEST_DEFAULT_USER; 18302ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 18312ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius setupUserProfiles(user2); 18322ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 18332ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius int appId = 674; 18342ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 18352ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Create 3 networks. 1 for user1, 1 for user2 and 1 shared. 18362ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user1Network = WifiConfigurationTestUtil.createPskNetwork(); 18372ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.shared = false; 18382ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user1Network.creatorUid = UserHandle.getUid(user1, appId); 18392ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 18402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.shared = false; 18412ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 18422ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork(); 18432ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 18442ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the store data that is loaded initially. 18452ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 18462ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 18472ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork); 18482ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 18492ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 18502ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user1Networks = new ArrayList<WifiConfiguration>() { 18512ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 18522ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user1Network); 18532ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 18542ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 18552ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigStoreData loadStoreData = 18562ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new WifiConfigStoreData(sharedNetworks, user1Networks, new HashSet<String>()); 18572ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.read()).thenReturn(loadStoreData); 18582ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 18592ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 18601cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Fetch the network ID assigned to the user 1 network initially. 18611cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int user1NetworkId = WifiConfiguration.INVALID_NETWORK_ID; 18621cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius List<WifiConfiguration> retrievedNetworks = 18631cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 18641cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius for (WifiConfiguration network : retrievedNetworks) { 18651cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius if (network.configKey().equals(user1Network.configKey())) { 18661cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius user1NetworkId = network.networkId; 18671cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 18681cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 18691cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 18702ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the user 2 store data that is loaded at user switch. 18712ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> user2Networks = new ArrayList<WifiConfiguration>() { 18722ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 18732ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user2Network); 18742ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 18752ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 18762ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigStoreData newUserStoreData = 18772ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new WifiConfigStoreData(new ArrayList<WifiConfiguration>(), user2Networks, 18782ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new HashSet<String>()); 18792ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 18802ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .thenReturn(newUserStoreData); 18812ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now switch the user to user 2 and ensure that user 1's private network has been removed. 18822ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 18831cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius Set<Integer> removedNetworks = mWifiConfigManager.handleUserSwitch(user2); 18841cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue((removedNetworks.size() == 1) && (removedNetworks.contains(user1NetworkId))); 18852ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 18862ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set the expected networks to be |sharedNetwork| and |user2Network|. 18872ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius List<WifiConfiguration> expectedNetworks = new ArrayList<WifiConfiguration>() { 18882ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius { 18892ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(sharedNetwork); 18902ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius add(user2Network); 18912ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 18922ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius }; 18932ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 18942ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius expectedNetworks, mWifiConfigManager.getConfiguredNetworksWithPasswords()); 18951cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 18961cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Send another user switch indication with the same user 2. This should be ignored and 18971cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // hence should not remove any new networks. 18981cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 18991cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius removedNetworks = mWifiConfigManager.handleUserSwitch(user2); 19001cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue(removedNetworks.isEmpty()); 19011cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 19021cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 19031cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius /** 19041cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 19051cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * and ensures that user switch from a user with no private networks is handled. 19061cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * Test scenario: 19071cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * 1. Load the shared networks from shared store and emptu user 1 store. 19081cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * 2. Switch to user 2 and ensure that no private networks were removed. 19091cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius */ 19101cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius @Test 19111cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius public void testHandleUserSwitchWithNoOldUserPrivateNetworks() throws Exception { 19121cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int user1 = TEST_DEFAULT_USER; 19131cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 19141cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius setupUserProfiles(user2); 19151cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 19161cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius int appId = 674; 19171cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 19181cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Create 2 networks. 1 for user2 and 1 shared. 19191cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 19201cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius user2Network.shared = false; 19211cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 19221cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork(); 19231cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 19241cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Set up the store data that is loaded initially. 19251cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 19261cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius { 19271cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius add(sharedNetwork); 19281cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 19291cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius }; 19301cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius WifiConfigStoreData loadStoreData = 19311cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius new WifiConfigStoreData(sharedNetworks, new ArrayList<WifiConfiguration>(), 19321cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius new HashSet<String>()); 19331cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius when(mWifiConfigStore.read()).thenReturn(loadStoreData); 19341cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 19351cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius 19361cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Set up the user 2 store data that is loaded at user switch. 19371cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius List<WifiConfiguration> user2Networks = new ArrayList<WifiConfiguration>() { 19381cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius { 19391cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius add(user2Network); 19401cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius } 19411cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius }; 19421cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius WifiConfigStoreData newUserStoreData = 19431cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius new WifiConfigStoreData(new ArrayList<WifiConfiguration>(), user2Networks, 19441cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius new HashSet<String>()); 19451cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 19461cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius .thenReturn(newUserStoreData); 19471cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius // Now switch the user to user 2 and ensure that no private network has been removed. 19481cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 19491cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius Set<Integer> removedNetworks = mWifiConfigManager.handleUserSwitch(user2); 19501cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius assertTrue(removedNetworks.isEmpty()); 19512ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius } 19522ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19532ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius /** 19542ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 1955c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * and ensures that any non current user private networks are moved to shared store file. 19561cb361461f6ecc684761fc3940c1db622192cad1Roshan Pius * This test simulates the following test case: 19572ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 1. Loads the shared networks from shared store at bootup. 19582ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 2. Load the private networks from user store on user 1 unlock. 19592ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * 3. Switch to user 2 and ensure that the user 2's private network has been moved to user 2's 19602ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius * private store file. 1961c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 1962c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 1963c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchPushesOtherPrivateNetworksToSharedStore() throws Exception { 19646d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 19656d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 1966c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 1967c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1968c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius int appId = 674; 1969c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 1970c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Create 3 networks. 1 for user1, 1 for user2 and 1 shared. 1971c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration user1Network = WifiConfigurationTestUtil.createPskNetwork(); 1972c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user1Network.shared = false; 1973c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user1Network.creatorUid = UserHandle.getUid(user1, appId); 1974c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 1975c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user2Network.shared = false; 1976c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius user2Network.creatorUid = UserHandle.getUid(user2, appId); 1977c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork(); 1978c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 19792ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the shared store data that is loaded at bootup. User 2's private network 19802ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // is still in shared store because they have not yet logged-in after upgrade. 1981c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { 1982c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 1983c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(sharedNetwork); 1984c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user2Network); 1985c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1986c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 19872ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigStoreData loadStoreData = 19882ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new WifiConfigStoreData(sharedNetworks, new ArrayList<WifiConfiguration>(), 19892ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new HashSet<String>()); 19902ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.read()).thenReturn(loadStoreData); 19912ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius assertTrue(mWifiConfigManager.loadFromStore()); 19922ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius 19932ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Set up the user store data that is loaded at user unlock. 1994c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> userNetworks = new ArrayList<WifiConfiguration>() { 1995c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 1996c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user1Network); 1997c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 1998c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 19992ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigStoreData unlockLoadStoreData = 20002ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new WifiConfigStoreData(new ArrayList<WifiConfiguration>(), userNetworks, 20012ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius new HashSet<String>()); 20022ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 20032ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .thenReturn(unlockLoadStoreData); 20042ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mWifiConfigManager.handleUserUnlock(user1); 20052ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Capture the written data for the user 1 and ensure that it corresponds to what was 20062ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // setup. 20072ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigStoreData writtenStoreData = captureWriteStoreData(); 20082ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 20092ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius sharedNetworks, writtenStoreData.getSharedConfigurations()); 20102ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 20112ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius userNetworks, writtenStoreData.getUserConfigurations()); 2012c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 20132ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now switch the user to user2 and ensure that user 2's private network has been moved to 20142ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // the user store. 20152ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 2016c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 2017c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Set the expected network list before comparing. user1Network should be in shared data. 2018c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Note: In the real world, user1Network will no longer be visible now because it should 2019c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // already be in user1's private store file. But, we're purposefully exposing it 2020c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // via |loadStoreData| to test if other user's private networks are pushed to shared store. 2021c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> expectedSharedNetworks = new ArrayList<WifiConfiguration>() { 2022c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 2023c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(sharedNetwork); 2024c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user1Network); 2025c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2026c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 2027c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<WifiConfiguration> expectedUserNetworks = new ArrayList<WifiConfiguration>() { 2028c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius { 2029c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius add(user2Network); 2030c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2031c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius }; 20322ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Capture the first written data triggered for saving the old user's network 20332ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // configurations. 20342ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius writtenStoreData = captureWriteStoreData(); 20352ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 20362ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius sharedNetworks, writtenStoreData.getSharedConfigurations()); 20372ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 20382ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius userNetworks, writtenStoreData.getUserConfigurations()); 2039c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 20402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // Now capture the next written data triggered after the switch and ensure that user 2's 20412ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius // network is now in user store data. 2042c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius writtenStoreData = captureWriteStoreData(); 2043c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 2044c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius expectedSharedNetworks, writtenStoreData.getSharedConfigurations()); 2045c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 2046c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius expectedUserNetworks, writtenStoreData.getUserConfigurations()); 2047c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2048c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2049c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 2050a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 2051a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * and {@link WifiConfigManager#handleUserUnlock(int)} and ensures that the new store is 2052c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * read immediately if the user is unlocked during the switch. 2053c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2054c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 2055c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchWhenUnlocked() throws Exception { 20566d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 20576d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2058c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 2059c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 20602ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 20612ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .thenReturn(new WifiConfigStoreData( 2062c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 2063c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new HashSet<String>())); 2064c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2065c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // user2 is unlocked and switched to foreground. 2066c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 2067c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 2068c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Ensure that the read was invoked. 20692ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 20702ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2071c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2072c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2073c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 2074a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)} 2075a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * and {@link WifiConfigManager#handleUserUnlock(int)} and ensures that the new store is not 2076c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * read until the user is unlocked. 2077c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2078c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserSwitchWhenLocked() throws Exception { 20796d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 20806d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2081c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 2082c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2083c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // user2 is locked and switched to foreground. 2084c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 2085c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 2086c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2087c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Ensure that the read was not invoked. 20882ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 20892ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2090c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2091c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now try unlocking some other user (user1), this should be ignored. 2092c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserUnlock(user1); 20932ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 20942ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2095c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 20962ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 20972ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .thenReturn(new WifiConfigStoreData( 2098c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 2099c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new HashSet<String>())); 2100c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2101c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Unlock the user2 and ensure that we read the data now. 2102c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserUnlock(user2); 21032ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 21042ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2105c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2106c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2107c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 2108a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies that the foreground user stop using {@link WifiConfigManager#handleUserStop(int)} 2109c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * and ensures that the store is written only when the foreground user is stopped. 2110c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 2111c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius @Test 2112c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius public void testHandleUserStop() throws Exception { 21136d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user1 = TEST_DEFAULT_USER; 21146d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 2115c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius setupUserProfiles(user2); 2116c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2117c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Try stopping background user2 first, this should not do anything. 2118c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 2119c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserStop(user2); 21202ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 21212ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2122c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 2123c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius // Now try stopping the foreground user1, this should trigger a write to store. 2124c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mWifiConfigManager.handleUserStop(user1); 21252ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 21262ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2127c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore).write( 2128c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius anyBoolean(), any(WifiConfigStoreData.class)); 2129c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 2130c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 21316d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius /** 2132b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} 2133b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * results in a store read after bootup. 2134b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius */ 2135b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius @Test 2136b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius public void testHandleUserUnlockAfterBootup() throws Exception { 2137b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user1 = TEST_DEFAULT_USER; 2138b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 21392ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 21402ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .thenReturn(new WifiConfigStoreData( 2141b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 2142b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new HashSet<String>())); 2143b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2144b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Unlock the user1 (default user) for the first time and ensure that we read the data. 2145b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserUnlock(user1); 21462ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 21472ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2148b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius } 2149b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2150b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius /** 2151b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * Verifies the foreground user unlock via {@link WifiConfigManager#handleUserUnlock(int)} does 2152b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius * not always result in a store read unless the user had switched or just booted up. 2153b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius */ 2154b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius @Test 2155b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius public void testHandleUserUnlockWithoutSwitchOrBootup() throws Exception { 2156b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user1 = TEST_DEFAULT_USER; 2157b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius int user2 = TEST_DEFAULT_USER + 1; 2158b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius setupUserProfiles(user2); 2159b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 21602ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius when(mWifiConfigStore.switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class))) 21612ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .thenReturn(new WifiConfigStoreData( 2162b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new ArrayList<WifiConfiguration>(), new ArrayList<WifiConfiguration>(), 2163b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius new HashSet<String>())); 2164b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2165b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // user2 is unlocked and switched to foreground. 2166b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(true); 2167b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserSwitch(user2); 2168b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Ensure that the read was invoked. 21692ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 21702ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2171b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2172b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius // Unlock the user2 again and ensure that we don't read the data now. 2173b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius mWifiConfigManager.handleUserUnlock(user2); 21742ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 21752ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius .switchUserStoreAndRead(any(WifiConfigStore.StoreFile.class)); 2176b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius } 2177b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius 2178b3706e8c20fdf0a0e2b4ec15355ae6f98588b732Roshan Pius /** 21796d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * Verifies the private network addition using 2180a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 21816d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * by a non foreground user is rejected. 21826d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius */ 21836d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius @Test 21846d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public void testAddNetworkUsingBackgroundUserUId() throws Exception { 21856d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 21866d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(user2); 21876d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 21886d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int creatorUid = UserHandle.getUid(user2, 674); 21896d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 21906d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Create a network for user2 try adding it. This should be rejected. 21916d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 21926d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius NetworkUpdateResult result = 21936d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius mWifiConfigManager.addOrUpdateNetwork(user2Network, creatorUid); 21946d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertFalse(result.isSuccess()); 21956d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 21966d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 21976d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius /** 21986d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * Verifies the private network addition using 2199a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} 22006d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius * by SysUI is always accepted. 22016d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius */ 22026d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius @Test 22036d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius public void testAddNetworkUsingSysUiUid() throws Exception { 22046d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Set up the user profiles stuff. Needed for |WifiConfigurationUtil.isVisibleToAnyProfile| 22056d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius int user2 = TEST_DEFAULT_USER + 1; 22066d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius setupUserProfiles(user2); 22076d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 22086d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(user2)).thenReturn(false); 22096d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius mWifiConfigManager.handleUserSwitch(user2); 22106d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 22116d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius // Create a network for user2 try adding it. This should be rejected. 22126d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius final WifiConfiguration user2Network = WifiConfigurationTestUtil.createPskNetwork(); 22136d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius NetworkUpdateResult result = 22146d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius mWifiConfigManager.addOrUpdateNetwork(user2Network, TEST_SYSUI_UID); 22156d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertTrue(result.isSuccess()); 22166d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius } 22176d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius 22183a738a26918230b2469d917dbf14323234edd39bRoshan Pius /** 2219a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the loading of networks using {@link WifiConfigManager#loadFromStore()} attempts 22203a738a26918230b2469d917dbf14323234edd39bRoshan Pius * to migrate data from legacy stores when the new store files are absent. 22213a738a26918230b2469d917dbf14323234edd39bRoshan Pius */ 22223a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Test 22233a738a26918230b2469d917dbf14323234edd39bRoshan Pius public void testMigrationFromLegacyStore() throws Exception { 22243a738a26918230b2469d917dbf14323234edd39bRoshan Pius // Create the store data to be returned from legacy stores. 22253a738a26918230b2469d917dbf14323234edd39bRoshan Pius List<WifiConfiguration> networks = new ArrayList<>(); 22263a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createPskNetwork()); 22273a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createEapNetwork()); 22283a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks.add(WifiConfigurationTestUtil.createWepNetwork()); 2229674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius String deletedEphemeralSSID = "EphemeralSSID"; 2230674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius Set<String> deletedEphermalSSIDs = new HashSet<>(Arrays.asList(deletedEphemeralSSID)); 22313a738a26918230b2469d917dbf14323234edd39bRoshan Pius WifiConfigStoreDataLegacy storeData = 2232674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius new WifiConfigStoreDataLegacy(networks, deletedEphermalSSIDs); 22333a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22343a738a26918230b2469d917dbf14323234edd39bRoshan Pius // New store files not present, so migrate from the old store. 22353a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(false); 22363a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(true); 22373a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.read()).thenReturn(storeData); 22383a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22393a738a26918230b2469d917dbf14323234edd39bRoshan Pius // Now trigger a load from store. This should populate the in memory list with all the 22403a738a26918230b2469d917dbf14323234edd39bRoshan Pius // networks above from the legacy store. 22413a738a26918230b2469d917dbf14323234edd39bRoshan Pius mWifiConfigManager.loadFromStore(); 22423a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22433a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStore, never()).read(); 22443a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStoreLegacy).read(); 2245b2c8d28046e96c4506482e030c6320cda6db8f30Roshan Pius verify(mWifiConfigStoreLegacy).removeStores(); 22463a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22473a738a26918230b2469d917dbf14323234edd39bRoshan Pius List<WifiConfiguration> retrievedNetworks = 22483a738a26918230b2469d917dbf14323234edd39bRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 22493a738a26918230b2469d917dbf14323234edd39bRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 22503a738a26918230b2469d917dbf14323234edd39bRoshan Pius networks, retrievedNetworks); 2251674b332946074bba7fae1bb4d0d6d2c72d70f3a8Roshan Pius assertTrue(mWifiConfigManager.wasEphemeralNetworkDeleted(deletedEphemeralSSID)); 22523a738a26918230b2469d917dbf14323234edd39bRoshan Pius } 22533a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22543a738a26918230b2469d917dbf14323234edd39bRoshan Pius /** 2255a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * Verifies the loading of networks using {@link WifiConfigManager#loadFromStore()} does 22563a738a26918230b2469d917dbf14323234edd39bRoshan Pius * not attempt to read from any of the stores (new or legacy) when the store files are 22573a738a26918230b2469d917dbf14323234edd39bRoshan Pius * not present. 22583a738a26918230b2469d917dbf14323234edd39bRoshan Pius */ 22593a738a26918230b2469d917dbf14323234edd39bRoshan Pius @Test 22603a738a26918230b2469d917dbf14323234edd39bRoshan Pius public void testFreshInstallDoesNotLoadFromStore() throws Exception { 22613a738a26918230b2469d917dbf14323234edd39bRoshan Pius // New store files not present, so migrate from the old store. 22623a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStore.areStoresPresent()).thenReturn(false); 22633a738a26918230b2469d917dbf14323234edd39bRoshan Pius when(mWifiConfigStoreLegacy.areStoresPresent()).thenReturn(false); 22643a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22653a738a26918230b2469d917dbf14323234edd39bRoshan Pius // Now trigger a load from store. This should populate the in memory list with all the 22663a738a26918230b2469d917dbf14323234edd39bRoshan Pius // networks above. 22673a738a26918230b2469d917dbf14323234edd39bRoshan Pius mWifiConfigManager.loadFromStore(); 22683a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22693a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStore, never()).read(); 22703a738a26918230b2469d917dbf14323234edd39bRoshan Pius verify(mWifiConfigStoreLegacy, never()).read(); 22713a738a26918230b2469d917dbf14323234edd39bRoshan Pius 22723a738a26918230b2469d917dbf14323234edd39bRoshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworksWithPasswords().isEmpty()); 22733a738a26918230b2469d917dbf14323234edd39bRoshan Pius } 22743a738a26918230b2469d917dbf14323234edd39bRoshan Pius 2275a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius /** 2276a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius * Verifies that the last user selected network parameter is set when 2277a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#enableNetwork(int, boolean, int)} with disableOthers flag is set 2278a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * to true and cleared when either {@link WifiConfigManager#disableNetwork(int, int)} or 2279a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int, int)} is invoked using the same network ID. 2280a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius */ 2281a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius @Test 2282a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius public void testLastSelectedNetwork() throws Exception { 2283a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); 2284a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(openNetwork); 2285a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2286a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius when(mClock.getElapsedSinceBootMillis()).thenReturn(67L); 2287a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 2288a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), true, TEST_CREATOR_UID)); 2289a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(result.getNetworkId(), mWifiConfigManager.getLastSelectedNetwork()); 2290a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(67, mWifiConfigManager.getLastSelectedTimeStamp()); 2291a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2292a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius // Now disable the network and ensure that the last selected flag is cleared. 2293a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.disableNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 2294a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals( 2295a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration.INVALID_NETWORK_ID, mWifiConfigManager.getLastSelectedNetwork()); 2296a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2297a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius // Enable it again and remove the network to ensure that the last selected flag was cleared. 2298a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.enableNetwork( 2299a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius result.getNetworkId(), true, TEST_CREATOR_UID)); 2300a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals(result.getNetworkId(), mWifiConfigManager.getLastSelectedNetwork()); 230165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertEquals(openNetwork.configKey(), mWifiConfigManager.getLastSelectedNetworkConfigKey()); 2302a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 2303a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(result.getNetworkId(), TEST_CREATOR_UID)); 2304a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius assertEquals( 2305a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius WifiConfiguration.INVALID_NETWORK_ID, mWifiConfigManager.getLastSelectedNetwork()); 2306a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius } 2307a95a5d9dfc327f165d4e254f1b11a9204974037dRoshan Pius 230865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius /** 230965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius * Verifies that all the networks for the provided app is removed when 2310a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetworksForApp(ApplicationInfo)} is invoked. 231165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius */ 231265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius @Test 231365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius public void testRemoveNetworksForApp() throws Exception { 231465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createOpenNetwork()); 231565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createPskNetwork()); 231665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createWepNetwork()); 231765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 231865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 231965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 232065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius ApplicationInfo app = new ApplicationInfo(); 232165245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius app.uid = TEST_CREATOR_UID; 232265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius app.packageName = TEST_CREATOR_NAME; 23231fe1065da82165183fa057ddbbd2e33bc5708c1bRobin Lee assertEquals(3, mWifiConfigManager.removeNetworksForApp(app).size()); 232465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 232565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius // Ensure all the networks are removed now. 232665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 232765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius } 232865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 232965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius /** 233065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius * Verifies that all the networks for the provided user is removed when 2331a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetworksForUser(int)} is invoked. 233265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius */ 233365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius @Test 233465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius public void testRemoveNetworksForUser() throws Exception { 233565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createOpenNetwork()); 233665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createPskNetwork()); 233765245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius verifyAddNetworkToWifiConfigManager(WifiConfigurationTestUtil.createWepNetwork()); 233865245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 233965245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertFalse(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 234065245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 23411fe1065da82165183fa057ddbbd2e33bc5708c1bRobin Lee assertEquals(3, mWifiConfigManager.removeNetworksForUser(TEST_DEFAULT_USER).size()); 234265245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 234365245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius // Ensure all the networks are removed now. 234465245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius assertTrue(mWifiConfigManager.getConfiguredNetworks().isEmpty()); 234565245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius } 234665245230dda9f9892af4d9b6afe82ae2e46aeb96Roshan Pius 2347b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius /** 2348b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius * Verifies that the connect choice is removed from all networks when 2349a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#removeNetwork(int, int)} is invoked. 2350b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius */ 2351b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius @Test 2352b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius public void testRemoveNetworkRemovesConnectChoice() throws Exception { 2353b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork(); 2354b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork(); 2355b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createPskNetwork(); 2356b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 2357b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 2358b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 2359b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2360b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Set connect choice of network 2 over network 1. 2361b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue( 2362b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius mWifiConfigManager.setNetworkConnectChoice( 2363b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network1.networkId, network2.configKey(), 78L)); 2364b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2365b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius WifiConfiguration retrievedNetwork = 2366b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2367b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertEquals( 2368b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2369b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2370b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2371b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Remove network 3 and ensure that the connect choice on network 1 is not removed. 2372b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue(mWifiConfigManager.removeNetwork(network3.networkId, TEST_CREATOR_UID)); 2373b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2374b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertEquals( 2375b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2376b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2377b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 2378b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius // Now remove network 2 and ensure that the connect choice on network 1 is removed.. 2379b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertTrue(mWifiConfigManager.removeNetwork(network2.networkId, TEST_CREATOR_UID)); 2380b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(network1.networkId); 2381b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius assertNotEquals( 2382b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius network2.configKey(), 2383b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getConnectChoice()); 2384cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius 2385cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius // This should have triggered 2 buffered writes. 1 for setting the connect choice, 1 for 2386cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius // clearing it after network removal. 2387cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, times(2)) 2388cdd9c486c7c3282ba95f4b52c68457b4ff12e93fRoshan Pius .write(eq(false), any(WifiConfigStoreData.class)); 2389b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius } 2390b44c61bbdad7d973af94566172c99eb4ec502783Roshan Pius 23910f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius /** 23920f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * Verifies that the modification of a single network using 23930f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} and ensures that any 23940f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * updates to the network config in 23950f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * {@link WifiKeyStore#updateNetworkKeys(WifiConfiguration, WifiConfiguration)} is reflected 23960f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius * in the internal database. 23970f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius */ 23980f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius @Test 23990f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius public void testUpdateSingleNetworkWithKeysUpdate() { 24000f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); 24010f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network.enterpriseConfig = 24020f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); 24030f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius verifyAddNetworkToWifiConfigManager(network); 24040f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 24050f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Now verify that network configurations match before we make any change. 24060f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 24070f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network, 24080f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 24090f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 24100f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Modify the network ca_cert field in updateNetworkKeys method during a network 24110f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // config update. 24120f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius final String newCaCertAlias = "test"; 24130f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius assertNotEquals(newCaCertAlias, network.enterpriseConfig.getCaCertificateAlias()); 24140f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 24150f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius doAnswer(new AnswerWithArguments() { 24160f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius public boolean answer(WifiConfiguration newConfig, WifiConfiguration existingConfig) { 24170f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius newConfig.enterpriseConfig.setCaCertificateAlias(newCaCertAlias); 24180f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius return true; 24190f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius } 24200f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius }).when(mWifiKeyStore).updateNetworkKeys( 24210f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius any(WifiConfiguration.class), any(WifiConfiguration.class)); 24220f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 24230f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 24240f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 24250f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // Now verify that the keys update is reflected in the configuration fetched from internal 24260f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius // db. 24270f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network.enterpriseConfig.setCaCertificateAlias(newCaCertAlias); 24280f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 24290f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius network, 24300f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); 24310f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius } 24320f166e9103c4ef46eaa49ad20359ce0db2ef9791Roshan Pius 243342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius /** 243442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius * Verifies that the dump method prints out all the saved network details with passwords masked. 243542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius * {@link WifiConfigManager#dump(FileDescriptor, PrintWriter, String[])}. 243642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius */ 243742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius @Test 243842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius public void testDump() { 243942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); 244042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); 244142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius eapNetwork.enterpriseConfig.setPassword("blah"); 244242ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 244342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius verifyAddNetworkToWifiConfigManager(pskNetwork); 244442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius verifyAddNetworkToWifiConfigManager(eapNetwork); 244542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 244642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius StringWriter stringWriter = new StringWriter(); 244742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius mWifiConfigManager.dump( 244842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius new FileDescriptor(), new PrintWriter(stringWriter), new String[0]); 244942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius String dumpString = stringWriter.toString(); 245042ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 245142ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius // Ensure that the network SSIDs were dumped out. 245242ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertTrue(dumpString.contains(pskNetwork.SSID)); 245342ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertTrue(dumpString.contains(eapNetwork.SSID)); 245442ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 245542ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius // Ensure that the network passwords were not dumped out. 245642ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertFalse(dumpString.contains(pskNetwork.preSharedKey)); 245742ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius assertFalse(dumpString.contains(eapNetwork.enterpriseConfig.getPassword())); 245842ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius } 245942ed8f87e72cdf7780dc3cc87da751253a6d74edRoshan Pius 24605c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius /** 24615c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius * Verifies the ordering of network list generated using 24625c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius * {@link WifiConfigManager#retrieveHiddenNetworkList()}. 24635c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius */ 24645c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius @Test 24655c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius public void testRetrieveHiddenList() { 24665c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Create and add 3 networks. 24675c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network1 = WifiConfigurationTestUtil.createWepHiddenNetwork(); 24685c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network2 = WifiConfigurationTestUtil.createPskHiddenNetwork(); 24695c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius WifiConfiguration network3 = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 24705c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network1); 24715c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network2); 24725c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius verifyAddNetworkToWifiConfigManager(network3); 24735c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 24745c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Enable all of them. 24755c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network1.networkId, false, TEST_CREATOR_UID)); 24765c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network2.networkId, false, TEST_CREATOR_UID)); 24775c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.enableNetwork(network3.networkId, false, TEST_CREATOR_UID)); 24785c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 24795c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now set scan results in 2 of them to set the corresponding 24805c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // {@link NetworkSelectionStatus#mSeenInLastQualifiedNetworkSelection} field. 24815c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 24825c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius network1.networkId, createScanDetailForNetwork(network1).getScanResult(), 54)); 24835c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.setNetworkCandidateScanResult( 24845c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius network3.networkId, createScanDetailForNetwork(network3).getScanResult(), 54)); 24855c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 24865c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now increment |network3|'s association count. This should ensure that this network 24875c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // is preferred over |network1|. 24885c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(network3.networkId)); 24895c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 24905c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Retrieve the hidden network list & verify the order of the networks returned. 24915c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius List<WifiScanner.ScanSettings.HiddenNetwork> hiddenNetworks = 24925c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius mWifiConfigManager.retrieveHiddenNetworkList(); 24935c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(3, hiddenNetworks.size()); 24945c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network3.SSID, hiddenNetworks.get(0).ssid); 24955c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network1.SSID, hiddenNetworks.get(1).ssid); 24965c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network2.SSID, hiddenNetworks.get(2).ssid); 24975c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 24985c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Now permanently disable |network3|. This should remove network 3 from the list. 24995c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertTrue(mWifiConfigManager.disableNetwork(network3.networkId, TEST_CREATOR_UID)); 25005c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 25015c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius // Retrieve the hidden network list again & verify the order of the networks returned. 25025c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius hiddenNetworks = mWifiConfigManager.retrieveHiddenNetworkList(); 25035c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(2, hiddenNetworks.size()); 25045c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network1.SSID, hiddenNetworks.get(0).ssid); 25055c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius assertEquals(network2.SSID, hiddenNetworks.get(1).ssid); 25065c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius } 25075c6da02cf7736d4ba9fc388151177f5277464c89Roshan Pius 25085c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius /** 25095c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * Verifies the addition of network configurations using 25105c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with same SSID and 25115c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * default key mgmt does not add duplicate network configs. 25125c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius */ 25135c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius @Test 25145c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius public void testAddMultipleNetworksWithSameSSIDAndDefaultKeyMgmt() { 25155c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius final String ssid = "test_blah"; 25165c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Add a network with the above SSID and default key mgmt and ensure it was added 25175c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // successfully. 25185c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network1 = new WifiConfiguration(); 25195c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.SSID = ssid; 25205c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network1); 25215c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 25225c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 25235c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25245c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> retrievedNetworks = 25255c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 25265c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 25275c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 25285c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1, retrievedNetworks.get(0)); 25295c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25305c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Now add a second network with the same SSID and default key mgmt and ensure that it 25315c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // didn't add a new duplicate network. 25325c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network2 = new WifiConfiguration(); 25335c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.SSID = ssid; 25345c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius result = addNetworkToWifiConfigManager(network2); 25355c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 25365c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertFalse(result.isNewNetwork()); 25375c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25385c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 25395c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 25405c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 25415c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2, retrievedNetworks.get(0)); 25425c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius } 25435c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25445c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius /** 25455c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * Verifies the addition of network configurations using 25465c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with same SSID and 25475c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius * different key mgmt should add different network configs. 25485c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius */ 25495c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius @Test 25505c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius public void testAddMultipleNetworksWithSameSSIDAndDifferentKeyMgmt() { 25515c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius final String ssid = "test_blah"; 25525c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Add a network with the above SSID and WPA_PSK key mgmt and ensure it was added 25535c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // successfully. 25545c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network1 = new WifiConfiguration(); 25555c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.SSID = ssid; 25565c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 25575c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(network1); 25585c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 25595c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 25605c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25615c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> retrievedNetworks = 25625c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius mWifiConfigManager.getConfiguredNetworksWithPasswords(); 25635c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(1, retrievedNetworks.size()); 25645c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 25655c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network1, retrievedNetworks.get(0)); 25665c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25675c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // Now add a second network with the same SSID and NONE key mgmt and ensure that it 25685c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius // does add a new network. 25695c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfiguration network2 = new WifiConfiguration(); 25705c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.SSID = ssid; 25715c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius network2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 25725c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius result = addNetworkToWifiConfigManager(network2); 25735c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 25745c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertTrue(result.isNewNetwork()); 25755c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25765c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius retrievedNetworks = mWifiConfigManager.getConfiguredNetworksWithPasswords(); 25775c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius assertEquals(2, retrievedNetworks.size()); 25785c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius List<WifiConfiguration> networks = Arrays.asList(network1, network2); 25795c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( 25805c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius networks, retrievedNetworks); 25815c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius } 25825c96fb2af01e2db3060aab970891355fa63542fdRoshan Pius 25830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 25840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a proxy, without having permission OVERRIDE_WIFI_CONFIG, 25850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * holding device policy, or profile owner policy fails. 25860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 25870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 25880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyFails() { 25890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 25900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 25910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 25920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 25930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 25940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 25950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 25960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 25970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 25980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 25990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 26000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 26010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 26020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 26030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 26040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 26050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 26060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a PAC or STATIC proxy with permission 26070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * OVERRIDE_WIFI_CONFIG is successful 26080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 26090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 26100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyWithConfOverride() { 26110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 26130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 26140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 26150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 26160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 26170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 26180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 26200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 26210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 26220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 26230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 26240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 26250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 26260d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 26270d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 26280d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a PAC or STATIC proxy, while holding policy 26290d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER} is successful 26300d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 26310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 26320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyAsProfileOwner() { 26330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 26350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 26360d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 26370d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 26380d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 26390d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 26400d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26410d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 26420d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 26430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 26440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 26450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 26460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 26470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 26480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 26490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that adding a network with a PAC or STATIC proxy, while holding policy 26500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER} is successful 26510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 26520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 26530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testAddNetworkWithProxyAsDeviceOwner() { 26540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 26560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 26570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 26580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 26590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 26600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 26610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 26630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 26640d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 26650d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 26660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 26670d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 26680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 26690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 26700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network (that has no proxy) and adding a PAC or STATIC proxy fails 26710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * without being able to override configs, or holding Device or Profile owner policies. 26720d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 26730d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 26740d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkAddProxyFails() { 26750d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 26760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(network); 26770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 26790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 26800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 26810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 26820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 26830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 26840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 26850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 26860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 26870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 26880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(), 26890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 26900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 26910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 26920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 26930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network and adding a proxy is successful in the cases where app can 26940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * override configs, holds policy {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER}, 26950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * and holds policy {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER}, and that it fails 26960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * otherwise. 26970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 26980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 26990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkAddProxyWithPermissionAndSystem() { 27000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Testing updating network with uid permission OVERRIDE_WIFI_CONFIG 27010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 27020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = 27030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne mWifiConfigManager.addOrUpdateNetwork(network, TEST_CREATOR_UID); 27040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 27050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 27060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 27070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 27080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 27090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 27100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 27110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 27120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 27130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Testing updating network with proxy while holding Profile Owner policy 27140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 27150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = mWifiConfigManager.addOrUpdateNetwork(network, TEST_NO_PERM_UID); 27160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 27170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 27180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 27190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 27200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 27210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 27220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 27230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 27240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 27250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Testing updating network with proxy while holding Device Owner Policy 27260d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 27270d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = mWifiConfigManager.addOrUpdateNetwork(network, TEST_NO_PERM_UID); 27280d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 27290d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 27300d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 27310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 27320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 27330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(), 27340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 27350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 27360d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 27370d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 27380d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 27390d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network that has a proxy without changing the proxy, can succeed 27400d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * without proxy specific permissions. 27410d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 27420d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 27430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkUnchangedProxy() { 27440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf = WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(); 27450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // First create a WifiConfiguration with proxy 27460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 27470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 27480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 27490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 27500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf, 27510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 27520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 27530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update the network while using the same ipConf, and no proxy specific permissions 27540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 27550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 27560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 27570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 27580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf, 27590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 27600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 27610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 27620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 27630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 27640d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network with a different proxy succeeds in the cases where app can 27650d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * override configs, holds policy {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER}, 27660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * and holds policy {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER}, and that it fails 27670d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * otherwise. 27680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 27690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 27700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkDifferentProxy() { 27710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Create two proxy configurations of the same type, but different values 27720d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf1 = 27730d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 27740d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.STATIC_PROXY_SETTING, 27750d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_1, 27760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_1, 27770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_1, 27780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_1); 27790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf2 = 27800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 27810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.STATIC_PROXY_SETTING, 27820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_2, 27830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_2, 27840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_2, 27850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_2); 27860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 27870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with Conf Override 27880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 27890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 27900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 27910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 27920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 27930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 27940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 27950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 27960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 27970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 27980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 27990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 28000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 28020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 28030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Device Owner 28040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 28080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 28090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 28110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 28150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 28160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 28180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 28190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Profile Owner 28200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 28230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 28250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28260d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 28270d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28280d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28290d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 28300d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 28320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 28340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 28350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with no permissions (should fail) 28360d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28370d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28380d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 28390d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28400d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 28410d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28420d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 28430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 28480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 28490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 28500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 28510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne /** 28520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * Verifies that updating a network removing its proxy succeeds in the cases where app can 28530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * override configs, holds policy {@link DeviceAdminInfo.USES_POLICY_PROFILE_OWNER}, 28540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * and holds policy {@link DeviceAdminInfo.USES_POLICY_DEVICE_OWNER}, and that it fails 28550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne * otherwise. 28560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne */ 28570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne @Test 28580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne public void testUpdateNetworkRemoveProxy() { 28590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Create two different IP configurations, one with a proxy and another without. 28600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf1 = 28610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 28620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.STATIC_PROXY_SETTING, 28630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_1, 28640d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_1, 28650d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_1, 28660d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_1); 28670d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConf2 = 28680d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.createDHCPIpConfigurationWithSpecificProxy( 28690d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfigurationTestUtil.NONE_PROXY_SETTING, 28700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_HOST_2, 28710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_PORT_2, 28720d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_STATIC_PROXY_EXCLUSION_LIST_2, 28730d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne TEST_PAC_PROXY_LOCATION_2); 28740d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 28750d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with Conf Override 28760d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28770d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 28780d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28790d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28800d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 28810d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28820d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 28830d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28840d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withConfOverride 28850d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28860d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 28870d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 28880d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28890d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 28900d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 28910d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Device Owner 28920d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 28930d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 28940d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 28950d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 28960d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 28970d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 28980d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 28990d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29000d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29010d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29020d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withDeviceOwnerPolicy 29030d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 29040d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29050d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 29060d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 29070d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update as Profile Owner 29080d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29090d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29100d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 29110d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29120d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 29130d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29140d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29150d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29160d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29170d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 29180d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29190d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 29200d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29210d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 29220d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 29230d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne // Update with no permissions (should fail) 29240d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result = verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29250d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29260d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // withProfileOwnerPolicy 29270d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29280d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf1, 29290d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne true, // assertSuccess 29300d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration.INVALID_NETWORK_ID); // Update networkID 29310d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29320d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withConfOverride 29330d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withProfileOwnerPolicy 29340d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // withDeviceOwnerPolicy 29350d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne ipConf2, 29360d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne false, // assertSuccess 29370d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne result.getNetworkId()); // Update networkID 29380d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 29390d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 29400d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne private NetworkUpdateResult verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( 29410d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean withConfOverride, 29420d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean withProfileOwnerPolicy, 29430d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean withDeviceOwnerPolicy, 29440d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne IpConfiguration ipConfiguration, 29450d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne boolean assertSuccess, 29460d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne int networkId) { 29470d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne WifiConfiguration network; 29480d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne if (networkId == WifiConfiguration.INVALID_NETWORK_ID) { 29490d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = WifiConfigurationTestUtil.createOpenHiddenNetwork(); 29500d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } else { 29510d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network = mWifiConfigManager.getConfiguredNetwork(networkId); 29520d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 29530d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne network.setIpConfiguration(ipConfiguration); 29540d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 29550d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_PROFILE_OWNER))) 29560d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(withProfileOwnerPolicy); 29570d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne when(mDevicePolicyManagerInternal.isActiveAdminWithPolicy(anyInt(), 29580d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne eq(DeviceAdminInfo.USES_POLICY_DEVICE_OWNER))) 29590d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne .thenReturn(withDeviceOwnerPolicy); 29600d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne int uid = withConfOverride ? TEST_CREATOR_UID : TEST_NO_PERM_UID; 29610d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne NetworkUpdateResult result = mWifiConfigManager.addOrUpdateNetwork(network, uid); 29620d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne assertEquals(assertSuccess, result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 29630d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne return result; 29640d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne } 29650d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne 29662dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private void createWifiConfigManager() { 29672dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager = 2968a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius new WifiConfigManager( 296996241bee619ff7073635f680a36869f61a11a225Roshan Pius mContext, mFrameworkFacade, mClock, mUserManager, mTelephonyManager, 29700d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne mWifiKeyStore, mWifiConfigStore, mWifiConfigStoreLegacy, 29710d14dbc1da819e72054b9f168c8e3db767dd34bfGlen Kuhne mWifiPermissionsWrapper); 29722dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mWifiConfigManager.enableVerboseLogging(1); 29732dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 29742dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 29758600bb5b23872d2f67cf7a12c3d8c40c5f990e84Roshan Pius /** 297650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * This method sets defaults in the provided WifiConfiguration object if not set 297750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * so that it can be used for comparison with the configuration retrieved from 297850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * WifiConfigManager. 297950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 298050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setDefaults(WifiConfiguration configuration) { 298150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedAuthAlgorithms.isEmpty()) { 298250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 298350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 298450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedProtocols.isEmpty()) { 298550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 298650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 298750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 298850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedKeyManagement.isEmpty()) { 298950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 299050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); 299150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 299250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedPairwiseCiphers.isEmpty()) { 299350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 299450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 299550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 299650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.allowedGroupCiphers.isEmpty()) { 299750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 299850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 299950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 300050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 300150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 300250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.getIpAssignment() == IpConfiguration.IpAssignment.UNASSIGNED) { 300350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setIpAssignment(IpConfiguration.IpAssignment.DHCP); 300450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 300550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius if (configuration.getProxySettings() == IpConfiguration.ProxySettings.UNASSIGNED) { 300650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setProxySettings(IpConfiguration.ProxySettings.NONE); 300750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 30080ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius configuration.status = WifiConfiguration.Status.DISABLED; 30090ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius configuration.getNetworkSelectionStatus().setNetworkSelectionStatus( 30100ce3ad57f3ce7fcfab17930e8cd48e6da57006fbRoshan Pius NetworkSelectionStatus.NETWORK_SELECTION_PERMANENTLY_DISABLED); 301150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 301250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 301350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 301450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided configuration with creator uid, package name 301550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * and time. 301650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 301750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setCreationDebugParams(WifiConfiguration configuration) { 301850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creatorUid = configuration.lastUpdateUid = TEST_CREATOR_UID; 301950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creatorName = configuration.lastUpdateName = TEST_CREATOR_NAME; 302050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.creationTime = configuration.updateTime = 3021a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.createDebugTimeStampString( 302250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius TEST_WALLCLOCK_CREATION_TIME_MILLIS); 302350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 302450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 302550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 302650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided configuration with update uid, package name 302750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * and time. 302850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 302950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void setUpdateDebugParams(WifiConfiguration configuration) { 303050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.lastUpdateUid = TEST_UPDATE_UID; 303150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.lastUpdateName = TEST_UPDATE_NAME; 303250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.updateTime = 3033a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.createDebugTimeStampString(TEST_WALLCLOCK_UPDATE_TIME_MILLIS); 303450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 303550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 30361fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertNotEquals(Object expected, Object actual) { 30371fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius if (actual != null) { 30381fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertFalse(actual.equals(expected)); 30391fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } else { 30401fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotNull(expected); 30411fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 30421fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 30431fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 304450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 304550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided WifiConfiguration with the specified bssid value. Also, asserts that 304650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * the existing |BSSID| field is not the same value as the one being set 304750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 304850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void assertAndSetNetworkBSSID(WifiConfiguration configuration, String bssid) { 30491fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(bssid, configuration.BSSID); 305050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.BSSID = bssid; 305150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 305250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 305350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 305450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Modifies the provided WifiConfiguration with the specified |IpConfiguration| object. Also, 30551fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * asserts that the existing |mIpConfiguration| field is not the same value as the one being set 305650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 305750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private void assertAndSetNetworkIpConfiguration( 305850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius WifiConfiguration configuration, IpConfiguration ipConfiguration) { 30591fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(ipConfiguration, configuration.getIpConfiguration()); 306050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius configuration.setIpConfiguration(ipConfiguration); 306150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 306250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 306350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 30641fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified |wepKeys| value and 30651fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * |wepTxKeyIndex|. 30661fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 30671fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkWepKeysAndTxIndex( 30681fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String[] wepKeys, int wepTxKeyIdx) { 30691fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(wepKeys, configuration.wepKeys); 30701fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(wepTxKeyIdx, configuration.wepTxKeyIndex); 30711fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.wepKeys = Arrays.copyOf(wepKeys, wepKeys.length); 30721fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.wepTxKeyIndex = wepTxKeyIdx; 30731fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 30741fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 30751fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 30761fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified |preSharedKey| value. 30771fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 30781fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkPreSharedKey( 30791fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String preSharedKey) { 30801fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(preSharedKey, configuration.preSharedKey); 30811fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.preSharedKey = preSharedKey; 30821fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 30831fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 30841fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 30851fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius * Modifies the provided WifiConfiguration with the specified enteprise |password| value. 30861fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius */ 30871fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius private void assertAndSetNetworkEnterprisePassword( 30881fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius WifiConfiguration configuration, String password) { 30891fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius assertNotEquals(password, configuration.enterpriseConfig.getPassword()); 30901fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius configuration.enterpriseConfig.setPassword(password); 30911fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius } 30921fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius 30931fa858ae90e82658e2d5332f66c62c671e736bfbRoshan Pius /** 3094c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Helper method to capture the store data written in WifiConfigStore.write() method. 30956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 3096c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private WifiConfigStoreData captureWriteStoreData() { 30976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius try { 30986e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<WifiConfigStoreData> storeDataCaptor = 30996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor.forClass(WifiConfigStoreData.class); 31006e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore) 31016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius .write(anyBoolean(), storeDataCaptor.capture()); 3102c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return storeDataCaptor.getValue(); 31036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } catch (Exception e) { 31046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius fail("Exception encountered during write " + e); 31056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 3106c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return null; 3107c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3108c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 3109c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 3110c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Returns whether the provided network was in the store data or not. 3111c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 3112c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private boolean isNetworkInConfigStoreData(WifiConfiguration configuration) { 3113c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius WifiConfigStoreData storeData = captureWriteStoreData(); 3114c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius if (storeData == null) { 3115c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return false; 3116c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3117bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius return isNetworkInConfigStoreData(configuration, storeData); 3118bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 3119bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 3120bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 3121bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Returns whether the provided network was in the store data or not. 3122bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 3123bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius private boolean isNetworkInConfigStoreData( 3124bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration configuration, WifiConfigStoreData storeData) { 3125c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius boolean foundNetworkInStoreData = false; 3126c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius for (WifiConfiguration retrievedConfig : storeData.getConfigurations()) { 3127c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius if (retrievedConfig.configKey().equals(configuration.configKey())) { 3128c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius foundNetworkInStoreData = true; 3129bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius break; 3130c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3131c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3132c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius return foundNetworkInStoreData; 31336e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31346e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31356e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 31366e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the provided network was not present in the last config store write. 31376e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 31386e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkNotInConfigStoreData(WifiConfiguration configuration) { 31396e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(isNetworkInConfigStoreData(configuration)); 31406e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31416e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31426e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 31436e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the provided network was present in the last config store write. 31446e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 31456e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkInConfigStoreData(WifiConfiguration configuration) { 31466e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(isNetworkInConfigStoreData(configuration)); 31476e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void assertPasswordsMaskedInWifiConfiguration(WifiConfiguration configuration) { 315022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (!TextUtils.isEmpty(configuration.preSharedKey)) { 3151a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.PASSWORD_MASK, configuration.preSharedKey); 31526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius if (configuration.wepKeys != null) { 31546e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius for (int i = 0; i < configuration.wepKeys.length; i++) { 31556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius if (!TextUtils.isEmpty(configuration.wepKeys[i])) { 3156a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius assertEquals(WifiConfigManager.PASSWORD_MASK, configuration.wepKeys[i]); 31576e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31586e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31596e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 316022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (!TextUtils.isEmpty(configuration.enterpriseConfig.getPassword())) { 31616e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 3162a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.PASSWORD_MASK, 31636e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius configuration.enterpriseConfig.getPassword()); 31646e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31656e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31666e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31676e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 31686e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that the network was present in the network change broadcast and returns the 31696e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * change reason. 31706e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 31716e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private int verifyNetworkInBroadcastAndReturnReason(WifiConfiguration configuration) { 31726e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 31736e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius ArgumentCaptor<UserHandle> userHandleCaptor = ArgumentCaptor.forClass(UserHandle.class); 31746e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius mContextConfigStoreMockOrder.verify(mContext) 31756e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius .sendBroadcastAsUser(intentCaptor.capture(), userHandleCaptor.capture()); 31766e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31776e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals(userHandleCaptor.getValue(), UserHandle.ALL); 31786e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius Intent intent = intentCaptor.getValue(); 31796e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31806e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius int changeReason = intent.getIntExtra(WifiManager.EXTRA_CHANGE_REASON, -1); 31816e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration retrievedConfig = 31826e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius (WifiConfiguration) intent.getExtra(WifiManager.EXTRA_WIFI_CONFIGURATION); 31836e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals(retrievedConfig.configKey(), configuration.configKey()); 31846e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31856e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that all the passwords are masked in the broadcast configuration. 31866e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertPasswordsMaskedInWifiConfiguration(retrievedConfig); 31876e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31886e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return changeReason; 31896e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31906e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 31916e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 31926e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out an add broadcast with the provided network. 31936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 31946e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkAddBroadcast(WifiConfiguration configuration) { 31956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 31966e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 31976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_ADDED); 31986e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 31996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32006e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 32016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out an update broadcast with the provided network. 32026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 32036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkUpdateBroadcast(WifiConfiguration configuration) { 32046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 32056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 32066e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_CONFIG_CHANGE); 32076e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 32086e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32096e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 32106e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Verifies that we sent out a remove broadcast with the provided network. 32116e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 32126e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private void verifyNetworkRemoveBroadcast(WifiConfiguration configuration) { 32136e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertEquals( 32146e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInBroadcastAndReturnReason(configuration), 32156e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiManager.CHANGE_REASON_REMOVED); 32166e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 32176e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32186e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 321950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Adds the provided configuration to WifiConfigManager and modifies the provided configuration 322050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * with creator/update uid, package name and time. This also sets defaults for fields not 322150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * populated. 322250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * These fields are populated internally by WifiConfigManager and hence we need 322350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * to modify the configuration before we compare the added network with the retrieved network. 322450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 322550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration) { 322650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_CREATION_TIME_MILLIS); 322750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius NetworkUpdateResult result = 322850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.addOrUpdateNetwork(configuration, TEST_CREATOR_UID); 322950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setDefaults(configuration); 323050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setCreationDebugParams(configuration); 32316e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius configuration.networkId = result.getNetworkId(); 32326e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 32336e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 32346e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32356e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 32366e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Add network to WifiConfigManager and ensure that it was successful. 32376e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 32386e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyAddNetworkToWifiConfigManager( 32396e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 32406e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(configuration); 32416e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 32426e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.isNewNetwork()); 32436e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 32446e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 32456e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32466e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkAddBroadcast(configuration); 32476e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that the config store write was triggered with this new configuration. 32486e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInConfigStoreData(configuration); 32496e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 32506e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 32516e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32526e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 32536e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Add ephemeral network to WifiConfigManager and ensure that it was successful. 32546e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 32556e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyAddEphemeralNetworkToWifiConfigManager( 3256bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius WifiConfiguration configuration) throws Exception { 32576e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = addNetworkToWifiConfigManager(configuration); 32586e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 32596e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.isNewNetwork()); 32606e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 32616e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 32626e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32636e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkAddBroadcast(configuration); 3264bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that the write was not invoked for ephemeral network addition. 3265bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 3266bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius .write(anyBoolean(), any(WifiConfigStoreData.class)); 326750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return result; 326850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 326950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius 327050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius /** 327150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * Updates the provided configuration to WifiConfigManager and modifies the provided 327250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * configuration with update uid, package name and time. 327350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * These fields are populated internally by WifiConfigManager and hence we need 327450eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius * to modify the configuration before we compare the added network with the retrieved network. 327550eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius */ 327650eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius private NetworkUpdateResult updateNetworkToWifiConfigManager(WifiConfiguration configuration) { 327750eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_UPDATE_TIME_MILLIS); 327850eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius NetworkUpdateResult result = 327950eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius mWifiConfigManager.addOrUpdateNetwork(configuration, TEST_UPDATE_UID); 328050eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius setUpdateDebugParams(configuration); 328150eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius return result; 328250eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius } 32836e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32846e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 32856e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager config change and ensure that it was successful. 32866e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 32876e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManager( 32886e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 32896e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = updateNetworkToWifiConfigManager(configuration); 32906e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); 32916e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.isNewNetwork()); 32926e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32936e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkUpdateBroadcast(configuration); 32946e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius // Verify that the config store write was triggered with this new configuration. 32956e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius verifyNetworkInConfigStoreData(configuration); 32966e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 32976e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 32986e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 32996e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 33006e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager without IP config change and ensure that it was 33016e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * successful. 33026e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 33036e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManagerWithoutIpChange( 33046e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 33056e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManager(configuration); 33066e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.hasIpChanged()); 33076e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertFalse(result.hasProxyChanged()); 33086e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 33096e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 33106e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius 33116e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius /** 33126e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * Update network to WifiConfigManager with IP config change and ensure that it was 33136e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius * successful. 33146e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius */ 33156e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius private NetworkUpdateResult verifyUpdateNetworkToWifiConfigManagerWithIpChange( 33166e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius WifiConfiguration configuration) { 33176e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManager(configuration); 33186e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasIpChanged()); 33196e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius assertTrue(result.hasProxyChanged()); 33206e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius return result; 33216e2780943dc04aae2e6b0fc7890d660f25e7e5fcRoshan Pius } 3322c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 3323c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius /** 3324c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius * Removes network from WifiConfigManager and ensure that it was successful. 3325c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius */ 3326c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius private void verifyRemoveNetworkFromWifiConfigManager( 3327c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius WifiConfiguration configuration) { 33286d9904fdafe96b09babe5b2ec2b90557e75ce94cRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(configuration.networkId, TEST_CREATOR_UID)); 3329c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius 3330c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyNetworkRemoveBroadcast(configuration); 3331c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius // Verify if the config store write was triggered without this new configuration. 3332c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius verifyNetworkNotInConfigStoreData(configuration); 3333c7c6121f6d864aeb4cec065a586229d3be352b43Roshan Pius } 3334fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3335fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 3336bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius * Removes ephemeral network from WifiConfigManager and ensure that it was successful. 3337bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius */ 3338bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius private void verifyRemoveEphemeralNetworkFromWifiConfigManager( 33392ce074c7dfa6f99812f67cad3c1a98a6edd36028Roshan Pius WifiConfiguration configuration) throws Exception { 3340bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius assertTrue(mWifiConfigManager.removeNetwork(configuration.networkId, TEST_CREATOR_UID)); 3341bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 3342bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius verifyNetworkRemoveBroadcast(configuration); 3343bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius // Ensure that the write was not invoked for ephemeral network remove. 3344bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()) 3345bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius .write(anyBoolean(), any(WifiConfigStoreData.class)); 3346bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius } 3347bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius 3348bbf3b21e42e6f13bddd1c30e4266b5be0d1404beRoshan Pius /** 3349fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the provided network's public status and ensures that the network change broadcast 3350fc789b2227e92372b2489ca54691310800835a50Roshan Pius * has been sent out. 3351fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 3352fc789b2227e92372b2489ca54691310800835a50Roshan Pius private void verifyUpdateNetworkStatus(WifiConfiguration configuration, int status) { 3353fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(status, configuration.status); 3354fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyNetworkUpdateBroadcast(configuration); 3355fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3356fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3357fc789b2227e92372b2489ca54691310800835a50Roshan Pius /** 3358fc789b2227e92372b2489ca54691310800835a50Roshan Pius * Verifies the network's selection status update. 3359fc789b2227e92372b2489ca54691310800835a50Roshan Pius * 3360fc789b2227e92372b2489ca54691310800835a50Roshan Pius * For temporarily disabled reasons, the method ensures that the status has changed only if 3361fc789b2227e92372b2489ca54691310800835a50Roshan Pius * disable reason counter has exceeded the threshold. 3362fc789b2227e92372b2489ca54691310800835a50Roshan Pius * 3363fc789b2227e92372b2489ca54691310800835a50Roshan Pius * For permanently disabled/enabled reasons, the method ensures that the public status has 3364fc789b2227e92372b2489ca54691310800835a50Roshan Pius * changed and the network change broadcast has been sent out. 3365fc789b2227e92372b2489ca54691310800835a50Roshan Pius */ 3366fc789b2227e92372b2489ca54691310800835a50Roshan Pius private void verifyUpdateNetworkSelectionStatus( 3367fc789b2227e92372b2489ca54691310800835a50Roshan Pius int networkId, int reason, int temporaryDisableReasonCounter) { 3368fc789b2227e92372b2489ca54691310800835a50Roshan Pius when(mClock.getElapsedSinceBootMillis()) 3369fc789b2227e92372b2489ca54691310800835a50Roshan Pius .thenReturn(TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS); 3370fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3371fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Fetch the current status of the network before we try to update the status. 3372fc789b2227e92372b2489ca54691310800835a50Roshan Pius WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 3373fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus currentStatus = retrievedNetwork.getNetworkSelectionStatus(); 3374fc789b2227e92372b2489ca54691310800835a50Roshan Pius int currentDisableReason = currentStatus.getNetworkSelectionDisableReason(); 3375fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3376fc789b2227e92372b2489ca54691310800835a50Roshan Pius // First set the status to the provided reason. 3377fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(mWifiConfigManager.updateNetworkSelectionStatus(networkId, reason)); 3378fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3379fc789b2227e92372b2489ca54691310800835a50Roshan Pius // Now fetch the network configuration and verify the new status of the network. 3380fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 3381fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3382fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus retrievedStatus = retrievedNetwork.getNetworkSelectionStatus(); 3383fc789b2227e92372b2489ca54691310800835a50Roshan Pius int retrievedDisableReason = retrievedStatus.getNetworkSelectionDisableReason(); 3384fc789b2227e92372b2489ca54691310800835a50Roshan Pius long retrievedDisableTime = retrievedStatus.getDisableTime(); 3385fc789b2227e92372b2489ca54691310800835a50Roshan Pius int retrievedDisableReasonCounter = retrievedStatus.getDisableReasonCounter(reason); 3386fc789b2227e92372b2489ca54691310800835a50Roshan Pius int disableReasonThreshold = 3387a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius WifiConfigManager.NETWORK_SELECTION_DISABLE_THRESHOLD[reason]; 3388fc789b2227e92372b2489ca54691310800835a50Roshan Pius 3389fc789b2227e92372b2489ca54691310800835a50Roshan Pius if (reason == NetworkSelectionStatus.NETWORK_SELECTION_ENABLE) { 3390fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 3391fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkEnabled()); 3392fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3393fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus.INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP, 3394fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedDisableTime); 3395fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.ENABLED); 3396fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else if (reason < NetworkSelectionStatus.DISABLED_TLS_VERSION_MISMATCH) { 3397fc789b2227e92372b2489ca54691310800835a50Roshan Pius // For temporarily disabled networks, we need to ensure that the current status remains 3398fc789b2227e92372b2489ca54691310800835a50Roshan Pius // until the threshold is crossed. 3399fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(temporaryDisableReasonCounter, retrievedDisableReasonCounter); 3400fc789b2227e92372b2489ca54691310800835a50Roshan Pius if (retrievedDisableReasonCounter < disableReasonThreshold) { 3401fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(currentDisableReason, retrievedDisableReason); 3402fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3403fc789b2227e92372b2489ca54691310800835a50Roshan Pius currentStatus.getNetworkSelectionStatus(), 3404fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedStatus.getNetworkSelectionStatus()); 3405fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else { 3406fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 3407fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkTemporaryDisabled()); 3408fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3409fc789b2227e92372b2489ca54691310800835a50Roshan Pius TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS, retrievedDisableTime); 3410fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3411fc789b2227e92372b2489ca54691310800835a50Roshan Pius } else if (reason < NetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX) { 3412fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals(reason, retrievedDisableReason); 3413fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertTrue(retrievedStatus.isNetworkPermanentlyDisabled()); 3414fc789b2227e92372b2489ca54691310800835a50Roshan Pius assertEquals( 3415fc789b2227e92372b2489ca54691310800835a50Roshan Pius NetworkSelectionStatus.INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP, 3416fc789b2227e92372b2489ca54691310800835a50Roshan Pius retrievedDisableTime); 3417fc789b2227e92372b2489ca54691310800835a50Roshan Pius verifyUpdateNetworkStatus(retrievedNetwork, WifiConfiguration.Status.DISABLED); 3418fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3419fc789b2227e92372b2489ca54691310800835a50Roshan Pius } 3420fc789b2227e92372b2489ca54691310800835a50Roshan Pius 342122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 34222dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Creates a scan detail corresponding to the provided network and given BSSID, level &frequency 34232dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * values. 342422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 34252dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private ScanDetail createScanDetailForNetwork( 34262dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius WifiConfiguration configuration, String bssid, int level, int frequency) { 342722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius String caps; 342822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK)) { 342922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WPA2-PSK-CCMP]"; 343022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP) 343122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius || configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)) { 343222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WPA2-EAP-CCMP]"; 343322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE) 343422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius && WifiConfigurationUtil.hasAnyValidWepKey(configuration.wepKeys)) { 343522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[WEP]"; 343622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } else { 343722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius caps = "[]"; 343822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 343922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiSsid ssid = WifiSsid.createFromAsciiEncoded(configuration.getPrintableSsid()); 344022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Fill in 0's in the fields we don't care about. 344122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius return new ScanDetail( 34422dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius ssid, bssid, caps, level, frequency, mClock.getUptimeSinceBootMillis(), 34432dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius mClock.getWallClockMillis()); 34442dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius } 34452dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius 34462dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius /** 34472dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius * Creates a scan detail corresponding to the provided network and BSSID value. 34482dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius */ 34492dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius private ScanDetail createScanDetailForNetwork(WifiConfiguration configuration, String bssid) { 34502dac6c1d0a510eca1ae2a178fd3423b947196e79Roshan Pius return createScanDetailForNetwork(configuration, bssid, 0, 0); 345122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 345222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 345322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 345422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Creates a scan detail corresponding to the provided network and fixed BSSID value. 345522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 345622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius private ScanDetail createScanDetailForNetwork(WifiConfiguration configuration) { 345722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius return createScanDetailForNetwork(configuration, TEST_BSSID); 345822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 345922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 346022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius /** 346122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * Adds the provided network and then creates a scan detail corresponding to the network. The 346222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * method then creates a ScanDetail corresponding to the network and ensures that the network 346322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * is properly matched using 3464a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#getSavedNetworkForScanDetailAndCache(ScanDetail)} and also 346522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius * verifies that the provided scan detail was cached, 346622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius */ 346722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius private void verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( 346822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration network) { 346922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // First add the provided network. 347022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius verifyAddNetworkToWifiConfigManager(network); 347122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 347222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now create a dummy scan detail corresponding to the network. 347322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetail scanDetail = createScanDetailForNetwork(network); 347422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanResult scanResult = scanDetail.getScanResult(); 347522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 347622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfiguration retrievedNetwork = 347722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getSavedNetworkForScanDetailAndCache(scanDetail); 3478e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius // Retrieve the network with password data for comparison. 3479e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius retrievedNetwork = 3480e3159200aaf7b5d760e7dac4d36cb9a549b76d85Roshan Pius mWifiConfigManager.getConfiguredNetworkWithPassword(retrievedNetwork.networkId); 348122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 348222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( 348322b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius network, retrievedNetwork); 348422b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 348522b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius // Now retrieve the scan detail cache and ensure that the new scan detail is in cache. 348622b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanDetailCache retrievedScanDetailCache = 348722b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius mWifiConfigManager.getScanDetailCacheForNetwork(network.networkId); 348822b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius assertEquals(1, retrievedScanDetailCache.size()); 348922b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanResult retrievedScanResult = retrievedScanDetailCache.get(scanResult.BSSID); 349022b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius 349122b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius ScanTestUtil.assertScanResultEquals(scanResult, retrievedScanResult); 349222b5eca14a99c2bbeeae8361c665923ce71e1603Roshan Pius } 34932d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 34942d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 34952d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Adds a new network and verifies that the |HasEverConnected| flag is set to false. 34962d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 34972d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyAddNetworkHasEverConnectedFalse(WifiConfiguration network) { 34982d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = verifyAddNetworkToWifiConfigManager(network); 34992d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 35002d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 35012d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse("Adding a new network should not have hasEverConnected set to true.", 35022d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 35032d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 35042d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 35052d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 35062d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Updates an existing network with some credential change and verifies that the 35072d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * |HasEverConnected| flag is set to false. 35082d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 35092d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyUpdateNetworkWithCredentialChangeHasEverConnectedFalse( 35102d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration network) { 35112d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius NetworkUpdateResult result = verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(network); 35122d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = 35132d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); 35142d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertFalse("Updating network credentials config should clear hasEverConnected.", 35152d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 35162d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 35172d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 35182d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius /** 35192d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * Updates an existing network after connection using 3520a6eb5e6da171c5426a96a8d0f97c75d1b8a46db0Roshan Pius * {@link WifiConfigManager#updateNetworkAfterConnect(int)} and asserts that the 35212d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius * |HasEverConnected| flag is set to true. 35222d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius */ 35232d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius private void verifyUpdateNetworkAfterConnectHasEverConnectedTrue(int networkId) { 35242d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue(mWifiConfigManager.updateNetworkAfterConnect(networkId)); 35252d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(networkId); 35262d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius assertTrue("hasEverConnected expected to be true after connection.", 35272d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); 35282d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius } 35292d327a58a4d39c7b1b700bf06d2fbbe7fb68c7c4Roshan Pius 3530c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius /** 3531c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * Sets up a user profiles for WifiConfigManager testing. 3532c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * 3533c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius * @param userId Id of the user. 3534c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius */ 3535c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius private void setupUserProfiles(int userId) { 3536c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius final UserInfo userInfo = 3537c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius new UserInfo(userId, Integer.toString(userId), UserInfo.FLAG_PRIMARY); 3538c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius List<UserInfo> userProfiles = Arrays.asList(userInfo); 3539c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.getProfiles(userId)).thenReturn(userProfiles); 3540c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius when(mUserManager.isUserUnlockingOrUnlocked(userId)).thenReturn(true); 3541c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius } 3542c381d005c60603aadd30581ce675e979b3fec3feRoshan Pius 354350eed92fe9556fdd9934683690181fea77ce4eacRoshan Pius} 3544