blob: 8ae5a51e1baa2a2fc858e7b8163fe411ea00137d [file] [log] [blame]
Quang Luongda9087b2019-08-20 16:40:17 -07001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.wifitrackerlib;
18
Arc Wang893e6a12020-04-27 19:39:04 +080019import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE;
20import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_NO_CREDENTIALS;
21import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_BY_WRONG_PASSWORD;
22import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_PERMANENTLY_DISABLED;
23import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED;
Quang Luongff95cbe2021-05-06 17:20:38 -070024import static android.net.wifi.WifiInfo.SECURITY_TYPE_EAP;
25import static android.net.wifi.WifiInfo.SECURITY_TYPE_OPEN;
26import static android.net.wifi.WifiInfo.SECURITY_TYPE_OWE;
27import static android.net.wifi.WifiInfo.SECURITY_TYPE_PSK;
28import static android.net.wifi.WifiInfo.SECURITY_TYPE_SAE;
29import static android.net.wifi.WifiInfo.SECURITY_TYPE_WEP;
Arc Wang893e6a12020-04-27 19:39:04 +080030
Quang Luong10c93d02021-07-21 18:21:32 -070031import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
32import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
Quang Luong28d41ce2021-04-19 16:24:42 -070033import static com.android.wifitrackerlib.StandardWifiEntry.ScanResultKey;
34import static com.android.wifitrackerlib.StandardWifiEntry.StandardWifiEntryKey;
Quang Luongff95cbe2021-05-06 17:20:38 -070035import static com.android.wifitrackerlib.StandardWifiEntry.ssidAndSecurityTypeToStandardWifiEntryKey;
Quang Luongda9087b2019-08-20 16:40:17 -070036import static com.android.wifitrackerlib.TestUtils.buildScanResult;
Quang Luong962de412019-11-01 15:10:17 -070037import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;
38import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_DISCONNECTED;
Quang Luong962de412019-11-01 15:10:17 -070039import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_UNREACHABLE;
Quang Luongda9087b2019-08-20 16:40:17 -070040
41import static com.google.common.truth.Truth.assertThat;
42
43import static org.junit.Assert.fail;
Stephanie Bakd0cd23c2021-11-17 06:41:41 +000044import static org.junit.Assume.assumeTrue;
Quang Luong2e72d952019-12-09 15:57:14 -080045import static org.mockito.Mockito.any;
Arc Wang893e6a12020-04-27 19:39:04 +080046import static org.mockito.Mockito.doReturn;
Quang Luong2e72d952019-12-09 15:57:14 -080047import static org.mockito.Mockito.eq;
Arc Wangc8686242020-01-13 21:33:01 +080048import static org.mockito.Mockito.mock;
Steven Liuea795032020-02-05 16:50:35 -080049import static org.mockito.Mockito.spy;
Quang Luong2e72d952019-12-09 15:57:14 -080050import static org.mockito.Mockito.times;
Quang Luong962de412019-11-01 15:10:17 -070051import static org.mockito.Mockito.when;
Quang Luongda9087b2019-08-20 16:40:17 -070052
Stephanie Bakd0cd23c2021-11-17 06:41:41 +000053import android.app.admin.DevicePolicyManager;
Stephanie Bake00c98f2022-02-02 02:58:06 +000054import android.app.admin.WifiSsidPolicy;
Stephanie Bakd0cd23c2021-11-17 06:41:41 +000055import android.content.ComponentName;
Arc Wang646d8d92020-01-07 19:40:08 +080056import android.content.Context;
Arc Wangc8686242020-01-13 21:33:01 +080057import android.content.res.Resources;
Quang Luong1942e8b2022-11-03 21:27:21 +000058import android.net.ConnectivityDiagnosticsManager;
Arc Wangc8686242020-01-13 21:33:01 +080059import android.net.ConnectivityManager;
Quang Luong05941312020-01-06 18:14:25 -080060import android.net.LinkProperties;
Quang Luong8492ba22019-12-18 17:15:40 -080061import android.net.MacAddress;
Quang Luong54a31802020-02-25 17:52:33 -080062import android.net.NetworkCapabilities;
Quang Luong962de412019-11-01 15:10:17 -070063import android.net.NetworkInfo;
Quang Luongda9087b2019-08-20 16:40:17 -070064import android.net.wifi.ScanResult;
Quang Luong34d9cd22019-10-02 16:26:57 -070065import android.net.wifi.WifiConfiguration;
Arc Wang893e6a12020-04-27 19:39:04 +080066import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
Arc Wangb53e8cb2020-07-13 19:13:37 +080067import android.net.wifi.WifiEnterpriseConfig;
Quang Luong962de412019-11-01 15:10:17 -070068import android.net.wifi.WifiInfo;
Quang Luongda9087b2019-08-20 16:40:17 -070069import android.net.wifi.WifiManager;
Stephanie Bak310a6152022-02-02 03:03:33 +000070import android.net.wifi.WifiSsid;
Quang Luongda9087b2019-08-20 16:40:17 -070071import android.os.Handler;
Stephanie Bakd0cd23c2021-11-17 06:41:41 +000072import android.os.UserHandle;
73import android.os.UserManager;
Quang Luongda9087b2019-08-20 16:40:17 -070074import android.os.test.TestLooper;
Arc Wangb53e8cb2020-07-13 19:13:37 +080075import android.telephony.SubscriptionInfo;
76import android.telephony.SubscriptionManager;
77import android.telephony.TelephonyManager;
Stephanie Bak310a6152022-02-02 03:03:33 +000078import android.util.ArraySet;
Quang Luongda9087b2019-08-20 16:40:17 -070079
Stephanie Bakd0cd23c2021-11-17 06:41:41 +000080import androidx.core.os.BuildCompat;
81
Quang Luongda9087b2019-08-20 16:40:17 -070082import org.junit.Before;
83import org.junit.Test;
Quang Luong157748c2021-05-21 11:48:33 -070084import org.mockito.ArgumentCaptor;
Quang Luongda9087b2019-08-20 16:40:17 -070085import org.mockito.Mock;
86import org.mockito.MockitoAnnotations;
Quang Luong10c93d02021-07-21 18:21:32 -070087import org.mockito.MockitoSession;
Quang Luongda9087b2019-08-20 16:40:17 -070088
Stephanie Bak310a6152022-02-02 03:03:33 +000089import java.nio.charset.StandardCharsets;
Quang Luongda9087b2019-08-20 16:40:17 -070090import java.util.Arrays;
Quang Luong549f83b2020-04-23 21:39:03 -070091import java.util.Collections;
Quang Luongda9087b2019-08-20 16:40:17 -070092
93public class StandardWifiEntryTest {
Quang Luongda9087b2019-08-20 16:40:17 -070094 @Mock private WifiEntry.WifiEntryCallback mMockListener;
Quang Luong22015e22019-12-27 14:40:23 -080095 @Mock private WifiEntry.ConnectCallback mMockConnectCallback;
Quang Luong9f416442019-12-04 14:53:44 -080096 @Mock private WifiManager mMockWifiManager;
Quang Luong54a31802020-02-25 17:52:33 -080097 @Mock private ConnectivityManager mMockConnectivityManager;
Arc Wangb53e8cb2020-07-13 19:13:37 +080098 @Mock private SubscriptionManager mSubscriptionManager;
Quang Luong962de412019-11-01 15:10:17 -070099 @Mock private WifiInfo mMockWifiInfo;
100 @Mock private NetworkInfo mMockNetworkInfo;
Quang Luong5dd1cc42021-09-29 14:50:16 -0700101 @Mock private WifiTrackerInjector mMockInjector;
Arc Wang646d8d92020-01-07 19:40:08 +0800102 @Mock private Context mMockContext;
Quang Luongfdcfc642021-07-09 15:15:50 -0700103 @Mock private Resources mMockResources;
Stephanie Bakd0cd23c2021-11-17 06:41:41 +0000104 @Mock private UserManager mUserManager;
105 @Mock private DevicePolicyManager mDevicePolicyManager;
Quang Luongda9087b2019-08-20 16:40:17 -0700106
107 private TestLooper mTestLooper;
108 private Handler mTestHandler;
109
Stephanie Bakd0cd23c2021-11-17 06:41:41 +0000110 private static final String TEST_PACKAGE_NAME = "com.google.somePackage";
111 private static final int MANAGED_PROFILE_UID = 1100000;
112
Quang Luongda9087b2019-08-20 16:40:17 -0700113 @Before
114 public void setUp() {
115 MockitoAnnotations.initMocks(this);
116
117 mTestLooper = new TestLooper();
118 mTestHandler = new Handler(mTestLooper.getLooper());
Quang Luong962de412019-11-01 15:10:17 -0700119
120 when(mMockWifiInfo.getNetworkId()).thenReturn(WifiConfiguration.INVALID_NETWORK_ID);
121 when(mMockWifiInfo.getRssi()).thenReturn(WifiInfo.INVALID_RSSI);
122 when(mMockNetworkInfo.getDetailedState()).thenReturn(
123 NetworkInfo.DetailedState.DISCONNECTED);
Quang Luong28d41ce2021-04-19 16:24:42 -0700124 when(mMockWifiManager.isWpa3SaeSupported()).thenReturn(true);
125 when(mMockWifiManager.isEnhancedOpenSupported()).thenReturn(true);
126 when(mMockWifiManager.isWpa3SuiteBSupported()).thenReturn(true);
Quang Luong9fe30b02022-02-01 15:45:12 -0800127 when(mMockWifiManager.calculateSignalLevel(TestUtils.GOOD_RSSI))
128 .thenReturn(TestUtils.GOOD_LEVEL);
129 when(mMockWifiManager.calculateSignalLevel(TestUtils.OKAY_RSSI))
130 .thenReturn(TestUtils.OKAY_LEVEL);
131 when(mMockWifiManager.calculateSignalLevel(TestUtils.BAD_RSSI))
132 .thenReturn(TestUtils.BAD_LEVEL);
Quang Luongfdcfc642021-07-09 15:15:50 -0700133 when(mMockContext.getResources()).thenReturn(mMockResources);
Arc Wangb53e8cb2020-07-13 19:13:37 +0800134
Quang Luong9fe30b02022-02-01 15:45:12 -0800135 when(mMockContext.getSystemService(SubscriptionManager.class))
Arc Wangb53e8cb2020-07-13 19:13:37 +0800136 .thenReturn(mSubscriptionManager);
Stephanie Bakd0cd23c2021-11-17 06:41:41 +0000137 when(mMockContext.getSystemService(DevicePolicyManager.class))
138 .thenReturn(mDevicePolicyManager);
139 when(mMockInjector.getUserManager()).thenReturn(mUserManager);
Stephanie Bake00c98f2022-02-02 02:58:06 +0000140 when(mMockInjector.getDevicePolicyManager()).thenReturn(mDevicePolicyManager);
Quang Luongda9087b2019-08-20 16:40:17 -0700141 }
142
143 /**
Quang Luongda9087b2019-08-20 16:40:17 -0700144 * Tests that constructing with a list of scans with differing SSIDs throws an exception
145 */
146 @Test
147 public void testConstructor_mismatchedSsids_throwsException() {
148 try {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700149 new StandardWifiEntry(
150 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700151 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong28d41ce2021-04-19 16:24:42 -0700152 null, Arrays.asList(
Quang Luong9fe30b02022-02-01 15:45:12 -0800153 buildScanResult("ssid0", "bssid0", 0, TestUtils.GOOD_RSSI),
154 buildScanResult("ssid1", "bssid1", 0, TestUtils.GOOD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -0700155 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luongda9087b2019-08-20 16:40:17 -0700156 fail("Scan list with different SSIDs should have thrown exception");
157 } catch (IllegalArgumentException e) {
158 // Test succeeded
159 }
160 }
161
162 /**
163 * Tests that the level is set to the level of the strongest scan
164 */
165 @Test
Quang Luong34d9cd22019-10-02 16:26:57 -0700166 public void testConstructor_scanResults_setsBestLevel() {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700167 final StandardWifiEntry entry = new StandardWifiEntry(
168 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700169 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong28d41ce2021-04-19 16:24:42 -0700170 null, Arrays.asList(
Quang Luong9fe30b02022-02-01 15:45:12 -0800171 buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI),
172 buildScanResult("ssid", "bssid1", 0, TestUtils.OKAY_RSSI),
173 buildScanResult("ssid", "bssid2", 0, TestUtils.BAD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -0700174 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luongda9087b2019-08-20 16:40:17 -0700175
Quang Luong9fe30b02022-02-01 15:45:12 -0800176 assertThat(entry.getLevel()).isEqualTo(TestUtils.GOOD_LEVEL);
Quang Luongda9087b2019-08-20 16:40:17 -0700177 }
178
179 /**
Quang Luong9fd5f562021-05-20 01:35:55 -0700180 * Tests that the security is set to the security capabilities of the scan results if
181 * the entry is targeting new networks.
Quang Luongda9087b2019-08-20 16:40:17 -0700182 */
183 @Test
Quang Luong9fd5f562021-05-20 01:35:55 -0700184 public void testConstructor_targetingNewSecurity_scanResultsSetSecurity() {
Quang Luong9fe30b02022-02-01 15:45:12 -0800185 final ScanResult unsecureScan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
186 final ScanResult secureScan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700187 secureScan.capabilities = "EAP/SHA1";
Quang Luongda9087b2019-08-20 16:40:17 -0700188
Quang Luong5dd1cc42021-09-29 14:50:16 -0700189 final StandardWifiEntry unsecureEntry = new StandardWifiEntry(
190 mMockInjector, mMockContext, mTestHandler,
Quang Luong9fd5f562021-05-20 01:35:55 -0700191 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
192 true /* isTargetingNewNetworks */),
Quang Luong25307052021-07-23 14:57:10 -0700193 null, Arrays.asList(unsecureScan), mMockWifiManager,
Quang Luong549f83b2020-04-23 21:39:03 -0700194 false /* forSavedNetworksPage */);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700195 final StandardWifiEntry secureEntry = new StandardWifiEntry(
196 mMockInjector, mMockContext, mTestHandler,
Quang Luong9fd5f562021-05-20 01:35:55 -0700197 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP,
198 true /* isTargetingNewNetworks */),
Quang Luong25307052021-07-23 14:57:10 -0700199 null, Arrays.asList(secureScan), mMockWifiManager,
Quang Luong549f83b2020-04-23 21:39:03 -0700200 false /* forSavedNetworksPage */);
Quang Luongda9087b2019-08-20 16:40:17 -0700201
202 assertThat(unsecureEntry.getSecurity()).isEqualTo(WifiEntry.SECURITY_NONE);
203 assertThat(secureEntry.getSecurity()).isEqualTo(WifiEntry.SECURITY_EAP);
204 }
205
206 /**
Quang Luongda9087b2019-08-20 16:40:17 -0700207 * Tests that updating with a list of scans with differing SSIDs throws an exception
208 */
209 @Test
210 public void testUpdateScanResultInfo_mismatchedSsids_throwsException() {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700211 final StandardWifiEntry entry = new StandardWifiEntry(
212 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700213 ssidAndSecurityTypeToStandardWifiEntryKey("ssid0", SECURITY_TYPE_EAP),
Quang Luong9fe30b02022-02-01 15:45:12 -0800214 null, Arrays.asList(buildScanResult("ssid0", "bssid0", 0, TestUtils.GOOD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -0700215 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luongda9087b2019-08-20 16:40:17 -0700216
217 try {
218 entry.updateScanResultInfo(Arrays.asList(
Quang Luong9fe30b02022-02-01 15:45:12 -0800219 buildScanResult("ssid1", "bssid1", 0, TestUtils.GOOD_RSSI)));
Quang Luongda9087b2019-08-20 16:40:17 -0700220 fail("Scan list with different SSIDs should have thrown exception");
221 } catch (IllegalArgumentException e) {
222 // Test succeeded
223 }
224 }
225
226 /**
Quang Luongda9087b2019-08-20 16:40:17 -0700227 * Tests that the listener is notified after an update to the scan results
228 */
229 @Test
230 public void testUpdateScanResultInfo_notifiesListener() {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700231 final StandardWifiEntry entry = new StandardWifiEntry(
232 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700233 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong28d41ce2021-04-19 16:24:42 -0700234 null, Arrays.asList(buildScanResult("ssid", "bssid", 0)),
Quang Luong25307052021-07-23 14:57:10 -0700235 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luongda9087b2019-08-20 16:40:17 -0700236 entry.setListener(mMockListener);
237
238 entry.updateScanResultInfo(Arrays.asList(buildScanResult("ssid", "bssid", 1)));
239 mTestLooper.dispatchAll();
240
241 verify(mMockListener).onUpdated();
242 }
243
244 /**
245 * Tests that the level is updated after an update to the scan results
246 */
247 @Test
248 public void testUpdateScanResultInfo_updatesLevel() {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700249 final StandardWifiEntry entry = new StandardWifiEntry(
250 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700251 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong9fe30b02022-02-01 15:45:12 -0800252 null, Arrays.asList(buildScanResult("ssid", "bssid", 0, TestUtils.BAD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -0700253 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luongda9087b2019-08-20 16:40:17 -0700254
Quang Luong9fe30b02022-02-01 15:45:12 -0800255 assertThat(entry.getLevel()).isEqualTo(TestUtils.BAD_LEVEL);
Quang Luongda9087b2019-08-20 16:40:17 -0700256
Quang Luong9fe30b02022-02-01 15:45:12 -0800257 entry.updateScanResultInfo(Arrays.asList(buildScanResult("ssid", "bssid", 0,
258 TestUtils.GOOD_RSSI)));
Quang Luongda9087b2019-08-20 16:40:17 -0700259
Quang Luong9fe30b02022-02-01 15:45:12 -0800260 assertThat(entry.getLevel()).isEqualTo(TestUtils.GOOD_LEVEL);
Quang Luongda9087b2019-08-20 16:40:17 -0700261 }
Quang Luong34d9cd22019-10-02 16:26:57 -0700262
263 @Test
264 public void testConstructor_wifiConfig_setsTitle() {
265 final WifiConfiguration config = new WifiConfiguration();
266 config.SSID = "\"ssid\"";
267 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700268 final StandardWifiEntry entry = new StandardWifiEntry(
269 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700270 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700271 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700272 false /* forSavedNetworksPage */);
Quang Luong34d9cd22019-10-02 16:26:57 -0700273
274 assertThat(entry.getTitle()).isEqualTo("ssid");
275 }
276
277 @Test
278 public void testConstructor_wifiConfig_setsSecurity() {
279 final WifiConfiguration config = new WifiConfiguration();
280 config.SSID = "\"ssid\"";
281 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700282 final StandardWifiEntry entry = new StandardWifiEntry(
283 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700284 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700285 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700286 false /* forSavedNetworksPage */);
Quang Luong34d9cd22019-10-02 16:26:57 -0700287
288 assertThat(entry.getSecurity()).isEqualTo(WifiEntry.SECURITY_EAP);
289 }
290
291 @Test
292 public void testUpdateConfig_mismatchedSsids_throwsException() {
293 final WifiConfiguration config = new WifiConfiguration();
294 config.SSID = "\"ssid\"";
295 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700296 final StandardWifiEntry entry = new StandardWifiEntry(
297 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700298 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700299 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700300 false /* forSavedNetworksPage */);
Quang Luong34d9cd22019-10-02 16:26:57 -0700301
302 final WifiConfiguration config2 = new WifiConfiguration(config);
303 config2.SSID = "\"ssid2\"";
304 try {
Quang Luong28d41ce2021-04-19 16:24:42 -0700305 entry.updateConfig(Collections.singletonList(config2));
Quang Luong34d9cd22019-10-02 16:26:57 -0700306 fail("Updating with wrong SSID config should throw exception");
307 } catch (IllegalArgumentException e) {
308 // Test Succeeded
309 }
310 }
311
312 @Test
313 public void testUpdateConfig_mismatchedSecurity_throwsException() {
314 final WifiConfiguration config = new WifiConfiguration();
315 config.SSID = "\"ssid\"";
Quang Luong28d41ce2021-04-19 16:24:42 -0700316 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700317 final StandardWifiEntry entry = new StandardWifiEntry(
318 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700319 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Quang Luong25307052021-07-23 14:57:10 -0700320 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700321 false /* forSavedNetworksPage */);
Quang Luong34d9cd22019-10-02 16:26:57 -0700322
323 final WifiConfiguration config2 = new WifiConfiguration(config);
324 config2.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
325 try {
Quang Luong28d41ce2021-04-19 16:24:42 -0700326 entry.updateConfig(Collections.singletonList(config2));
Quang Luong34d9cd22019-10-02 16:26:57 -0700327 fail("Updating with wrong security config should throw exception");
328 } catch (IllegalArgumentException e) {
329 // Test Succeeded
330 }
331 }
332
333 @Test
334 public void testUpdateConfig_unsavedToSaved() {
Quang Luong9fe30b02022-02-01 15:45:12 -0800335 final ScanResult scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700336 scan.capabilities = "EAP/SHA1";
Quang Luong5dd1cc42021-09-29 14:50:16 -0700337 final StandardWifiEntry entry = new StandardWifiEntry(
338 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700339 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700340 null, Arrays.asList(scan), mMockWifiManager,
Quang Luong549f83b2020-04-23 21:39:03 -0700341 false /* forSavedNetworksPage */);
Quang Luong34d9cd22019-10-02 16:26:57 -0700342
343 assertThat(entry.isSaved()).isFalse();
344
345 final WifiConfiguration config = new WifiConfiguration();
346 config.SSID = "\"ssid\"";
347 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
348 config.networkId = 1;
Quang Luong28d41ce2021-04-19 16:24:42 -0700349 entry.updateConfig(Collections.singletonList(config));
Quang Luong34d9cd22019-10-02 16:26:57 -0700350
351 assertThat(entry.isSaved()).isTrue();
352 }
353
354 @Test
355 public void testUpdateConfig_savedToUnsaved() {
356 final WifiConfiguration config = new WifiConfiguration();
357 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
358 config.SSID = "\"ssid\"";
359 config.networkId = 1;
Quang Luong5dd1cc42021-09-29 14:50:16 -0700360 final StandardWifiEntry entry = new StandardWifiEntry(
361 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700362 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700363 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700364 false /* forSavedNetworksPage */);
Quang Luong34d9cd22019-10-02 16:26:57 -0700365
366 assertThat(entry.isSaved()).isTrue();
367
368 entry.updateConfig(null);
369
370 assertThat(entry.isSaved()).isFalse();
371 }
Quang Luong962de412019-11-01 15:10:17 -0700372
373 @Test
374 public void testUpdateConnectionInfo_matchingNetId_updatesConnectionInfo() {
375 final WifiConfiguration config = new WifiConfiguration();
376 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
377 config.SSID = "\"ssid\"";
378 config.networkId = 1;
Quang Luong5dd1cc42021-09-29 14:50:16 -0700379 final StandardWifiEntry entry = new StandardWifiEntry(
380 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700381 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700382 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700383 false /* forSavedNetworksPage */);
Quang Luong962de412019-11-01 15:10:17 -0700384 when(mMockWifiInfo.getNetworkId()).thenReturn(1);
Quang Luong9fe30b02022-02-01 15:45:12 -0800385 when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI);
Quang Luong962de412019-11-01 15:10:17 -0700386 when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
387
388 entry.updateConnectionInfo(mMockWifiInfo, mMockNetworkInfo);
389
Quang Luong9fe30b02022-02-01 15:45:12 -0800390 assertThat(entry.getLevel()).isEqualTo(TestUtils.GOOD_LEVEL);
Quang Luong962de412019-11-01 15:10:17 -0700391 assertThat(entry.getConnectedState()).isEqualTo(CONNECTED_STATE_CONNECTED);
392 }
393
394 @Test
395 public void testUpdateConnectionInfo_nonMatchingNetId_doesNotUpdateConnectionInfo() {
396 final WifiConfiguration config = new WifiConfiguration();
397 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
398 config.SSID = "\"ssid\"";
399 config.networkId = 1;
Quang Luong5dd1cc42021-09-29 14:50:16 -0700400 final StandardWifiEntry entry = new StandardWifiEntry(
401 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700402 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700403 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700404 false /* forSavedNetworksPage */);
Quang Luong962de412019-11-01 15:10:17 -0700405 when(mMockWifiInfo.getNetworkId()).thenReturn(2);
406 when(mMockWifiInfo.getRssi()).thenReturn(-50);
407 when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
408
409 entry.updateConnectionInfo(mMockWifiInfo, mMockNetworkInfo);
410
411 assertThat(entry.getLevel()).isEqualTo(WIFI_LEVEL_UNREACHABLE);
412 assertThat(entry.getConnectedState()).isEqualTo(CONNECTED_STATE_DISCONNECTED);
413 }
Quang Luong2e72d952019-12-09 15:57:14 -0800414
Colin Cross2dbac862019-12-31 09:42:59 -0800415 @Test
Quang Luong2e72d952019-12-09 15:57:14 -0800416 public void testConnect_savedNetwork_usesSavedConfig() {
Quang Luong9fe30b02022-02-01 15:45:12 -0800417 final ScanResult scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700418 final StandardWifiEntry entry = new StandardWifiEntry(
419 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700420 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong25307052021-07-23 14:57:10 -0700421 null, Arrays.asList(scan), mMockWifiManager,
Quang Luong549f83b2020-04-23 21:39:03 -0700422 false /* forSavedNetworksPage */);
Quang Luong2e72d952019-12-09 15:57:14 -0800423 final WifiConfiguration config = new WifiConfiguration();
424 config.SSID = "\"ssid\"";
425 config.networkId = 1;
Quang Luong28d41ce2021-04-19 16:24:42 -0700426 entry.updateConfig(Collections.singletonList(config));
Quang Luong2e72d952019-12-09 15:57:14 -0800427
Quang Luong22015e22019-12-27 14:40:23 -0800428 entry.connect(null /* ConnectCallback */);
Quang Luong2e72d952019-12-09 15:57:14 -0800429
430 verify(mMockWifiManager, times(1)).connect(eq(1), any());
431 }
432
433 @Test
Nate Jiangd7f07652021-02-05 09:38:25 -0800434 public void testConnect_savedNetwork_usesSavedConfig_withOutSim() {
Quang Luong9fe30b02022-02-01 15:45:12 -0800435 final ScanResult scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700436 final StandardWifiEntry entry = new StandardWifiEntry(
437 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700438 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700439 null, Arrays.asList(scan), mMockWifiManager,
Nate Jiangd7f07652021-02-05 09:38:25 -0800440 false /* forSavedNetworksPage */);
441 final WifiConfiguration config = new WifiConfiguration();
442 config.SSID = "\"ssid\"";
443 config.networkId = 1;
444 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
445 config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.SIM);
446 config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE);
Quang Luong28d41ce2021-04-19 16:24:42 -0700447 entry.updateConfig(Collections.singletonList(config));
Nate Jiangd7f07652021-02-05 09:38:25 -0800448 when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(null);
449
450 entry.setListener(mMockListener);
451 entry.connect(mMockConnectCallback);
452 mTestLooper.dispatchAll();
453 verify(mMockConnectCallback, times(1))
454 .onConnectResult(WifiEntry.ConnectCallback.CONNECT_STATUS_FAILURE_SIM_ABSENT);
455 }
456
457 @Test
Quang Luong2e72d952019-12-09 15:57:14 -0800458 public void testConnect_openNetwork_callsConnect() {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700459 final StandardWifiEntry entry = new StandardWifiEntry(
460 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700461 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong9fe30b02022-02-01 15:45:12 -0800462 null, Arrays.asList(buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -0700463 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong2e72d952019-12-09 15:57:14 -0800464
Quang Luong22015e22019-12-27 14:40:23 -0800465 entry.connect(null /* ConnectCallback */);
Quang Luong2e72d952019-12-09 15:57:14 -0800466
467 verify(mMockWifiManager, times(1)).connect(any(), any());
468 }
Quang Luong8492ba22019-12-18 17:15:40 -0800469
470 @Test
Quang Luong2b1b0b12019-12-19 17:03:31 -0800471 public void testConnect_unsavedSecureNetwork_returnsNoConfigFailure() {
Quang Luong9fe30b02022-02-01 15:45:12 -0800472 final ScanResult secureScan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luong2b1b0b12019-12-19 17:03:31 -0800473 secureScan.capabilities = "PSK";
Quang Luong5dd1cc42021-09-29 14:50:16 -0700474 final StandardWifiEntry entry = new StandardWifiEntry(
475 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700476 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Quang Luong25307052021-07-23 14:57:10 -0700477 null, Arrays.asList(secureScan), mMockWifiManager,
Quang Luong549f83b2020-04-23 21:39:03 -0700478 false /* forSavedNetworksPage */);
Quang Luong2b1b0b12019-12-19 17:03:31 -0800479 entry.setListener(mMockListener);
480
Quang Luong22015e22019-12-27 14:40:23 -0800481 entry.connect(mMockConnectCallback);
Quang Luong2b1b0b12019-12-19 17:03:31 -0800482 mTestLooper.dispatchAll();
483
Quang Luong22015e22019-12-27 14:40:23 -0800484 verify(mMockConnectCallback, times(1))
485 .onConnectResult(WifiEntry.ConnectCallback.CONNECT_STATUS_FAILURE_NO_CONFIG);
Quang Luong2b1b0b12019-12-19 17:03:31 -0800486 }
487
488 @Test
Quang Luong8492ba22019-12-18 17:15:40 -0800489 public void testGetMacAddress_randomizationOn_usesRandomizedValue() {
490 final String randomizedMac = "01:23:45:67:89:ab";
491 final WifiConfiguration config = new WifiConfiguration();
492 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
493 config.SSID = "\"ssid\"";
494 config.networkId = 1;
xshu89df6e12020-08-02 21:30:56 -0700495 config.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_AUTO;
Steven Liuea795032020-02-05 16:50:35 -0800496 WifiConfiguration spyConfig = spy(config);
497 when(spyConfig.getRandomizedMacAddress())
498 .thenReturn(MacAddress.fromString(randomizedMac));
499
Quang Luong5dd1cc42021-09-29 14:50:16 -0700500 final StandardWifiEntry entry = new StandardWifiEntry(
501 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700502 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700503 Collections.singletonList(spyConfig), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700504 false /* forSavedNetworksPage */);
Quang Luong8492ba22019-12-18 17:15:40 -0800505
506 final String macAddress = entry.getMacAddress();
507
508 assertThat(macAddress).isEqualTo(randomizedMac);
509 }
510
511 @Test
512 public void testGetMacAddress_randomizationOff_usesDeviceMac() {
513 final String factoryMac = "01:23:45:67:89:ab";
514 final WifiConfiguration config = new WifiConfiguration();
515 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
516 config.SSID = "\"ssid\"";
517 config.networkId = 1;
518 config.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
519 when(mMockWifiManager.getFactoryMacAddresses()).thenReturn(new String[]{factoryMac});
Quang Luong5dd1cc42021-09-29 14:50:16 -0700520 final StandardWifiEntry entry = new StandardWifiEntry(
521 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700522 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700523 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700524 false /* forSavedNetworksPage */);
Quang Luong8492ba22019-12-18 17:15:40 -0800525
526 final String macAddress = entry.getMacAddress();
527
528 assertThat(macAddress).isEqualTo(factoryMac);
529 }
Arc Wang18e215d2020-01-02 16:45:06 +0800530
531 @Test
Quang Luong6fd689d2020-07-30 14:43:58 -0700532 public void testGetMacAddress_wifiInfoAvailable_usesWifiInfoMacAddress() {
533 final int networkId = 1;
534 final String factoryMac = "01:23:45:67:89:ab";
535 final String wifiInfoMac = "11:23:45:67:89:ab";
536
537 final NetworkInfo networkInfo =
538 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
539 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
540
541 when(mMockWifiInfo.getNetworkId()).thenReturn(networkId);
542 when(mMockWifiInfo.getMacAddress()).thenReturn(wifiInfoMac);
543 final WifiConfiguration config = new WifiConfiguration();
544 config.SSID = "\"ssid\"";
545 config.networkId = networkId;
546 config.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
547 when(mMockWifiManager.getFactoryMacAddresses()).thenReturn(new String[]{factoryMac});
Quang Luong5dd1cc42021-09-29 14:50:16 -0700548 final StandardWifiEntry entry = new StandardWifiEntry(
549 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700550 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong25307052021-07-23 14:57:10 -0700551 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700552 false /* forSavedNetworksPage */);
Quang Luong6fd689d2020-07-30 14:43:58 -0700553
554 entry.updateConnectionInfo(mMockWifiInfo, networkInfo);
555
556 assertThat(entry.getMacAddress()).isEqualTo(wifiInfoMac);
557 }
558
559 @Test
Arc Wang18e215d2020-01-02 16:45:06 +0800560 public void testCanShare_securityCanShare_shouldReturnTrue() {
561 final StandardWifiEntry pskWifiEntry =
562 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
563 final StandardWifiEntry wepWifiEntry =
564 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_WEP);
565 final StandardWifiEntry openWifiEntry =
566 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_OPEN);
567 final StandardWifiEntry saeWifiEntry =
568 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_SAE);
569 final StandardWifiEntry oweWifiEntry =
570 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_OWE);
571
572 assertThat(pskWifiEntry.canShare()).isTrue();
573 assertThat(wepWifiEntry.canShare()).isTrue();
574 assertThat(openWifiEntry.canShare()).isTrue();
575 assertThat(saeWifiEntry.canShare()).isTrue();
576 assertThat(oweWifiEntry.canShare()).isTrue();
577 }
578
579 @Test
580 public void testCanShare_securityCanNotShare_shouldReturnFalse() {
581 final StandardWifiEntry eapWifiEntry =
582 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_EAP);
583 final StandardWifiEntry eapSuiteBWifiEntry =
Jimmy Chen9d051a82020-11-03 15:12:41 +0800584 getSavedStandardWifiEntry(
585 WifiConfiguration.SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT);
Arc Wang18e215d2020-01-02 16:45:06 +0800586
587 assertThat(eapWifiEntry.canShare()).isFalse();
588 assertThat(eapSuiteBWifiEntry.canShare()).isFalse();
589 }
590
591 @Test
592 public void testCanEasyConnect_deviceNotSupported_shouldReturnFalse() {
593 when(mMockWifiManager.isEasyConnectSupported()).thenReturn(false);
Quang Luong9fe30b02022-02-01 15:45:12 -0800594 final ScanResult pskScanResult = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
Arc Wang18e215d2020-01-02 16:45:06 +0800595 pskScanResult.capabilities = "PSK";
596
Quang Luong5dd1cc42021-09-29 14:50:16 -0700597 final StandardWifiEntry pskWifiEntry = new StandardWifiEntry(
598 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700599 ssidAndSecurityTypeToStandardWifiEntryKey(pskScanResult.SSID, SECURITY_TYPE_PSK),
Quang Luong25307052021-07-23 14:57:10 -0700600 null, Arrays.asList(pskScanResult), mMockWifiManager,
Quang Luong549f83b2020-04-23 21:39:03 -0700601 false /* forSavedNetworksPage */);
Arc Wang18e215d2020-01-02 16:45:06 +0800602
603 assertThat(pskWifiEntry.canEasyConnect()).isFalse();
604 }
605
606 @Test
607 public void testCanEasyConnect_securityCanEasyConnect_shouldReturnTrue() {
608 when(mMockWifiManager.isEasyConnectSupported()).thenReturn(true);
609 final StandardWifiEntry pskWifiEntry =
610 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
611 final StandardWifiEntry saeWifiEntry =
612 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_SAE);
613
614 assertThat(pskWifiEntry.canEasyConnect()).isTrue();
615 assertThat(saeWifiEntry.canEasyConnect()).isTrue();
616 }
617
618 @Test
619 public void testCanEasyConnect_securityCanNotEasyConnect_shouldReturnFalse() {
620 when(mMockWifiManager.isEasyConnectSupported()).thenReturn(true);
621 final StandardWifiEntry openWifiEntry =
622 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_OPEN);
623 final StandardWifiEntry wepWifiEntry =
624 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_WEP);
Quang Luonge9cbca02020-01-07 16:09:35 -0800625 final StandardWifiEntry wpa2EnterpriseWifiEntry =
Arc Wang18e215d2020-01-02 16:45:06 +0800626 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luonge9cbca02020-01-07 16:09:35 -0800627 final StandardWifiEntry wpa3EnterpriseWifiEntry =
Jimmy Chen9d051a82020-11-03 15:12:41 +0800628 getSavedStandardWifiEntry(
629 WifiConfiguration.SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT);
Arc Wang18e215d2020-01-02 16:45:06 +0800630 final StandardWifiEntry oweWifiEntry =
631 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_OWE);
632
633 assertThat(openWifiEntry.canEasyConnect()).isFalse();
634 assertThat(wepWifiEntry.canEasyConnect()).isFalse();
Quang Luonge9cbca02020-01-07 16:09:35 -0800635 assertThat(wpa2EnterpriseWifiEntry.canEasyConnect()).isFalse();
636 assertThat(wpa3EnterpriseWifiEntry.canEasyConnect()).isFalse();
Arc Wang18e215d2020-01-02 16:45:06 +0800637 assertThat(oweWifiEntry.canEasyConnect()).isFalse();
638 }
639
Quang Luong05941312020-01-06 18:14:25 -0800640 @Test
641 public void testUpdateLinkProperties_updatesConnectedInfo() {
642 final WifiConfiguration config = new WifiConfiguration();
643 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
644 config.SSID = "\"ssid\"";
645 config.networkId = 1;
Quang Luong5dd1cc42021-09-29 14:50:16 -0700646 final StandardWifiEntry entry = new StandardWifiEntry(
647 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700648 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700649 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700650 false /* forSavedNetworksPage */);
Quang Luong05941312020-01-06 18:14:25 -0800651 when(mMockWifiInfo.getNetworkId()).thenReturn(1);
Quang Luong9fe30b02022-02-01 15:45:12 -0800652 when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI);
Quang Luong05941312020-01-06 18:14:25 -0800653 when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
654 entry.updateConnectionInfo(mMockWifiInfo, mMockNetworkInfo);
655
656 entry.updateLinkProperties(new LinkProperties());
657
658 assertThat(entry.getConnectedInfo()).isNotNull();
659 }
660
Arc Wang18e215d2020-01-02 16:45:06 +0800661 private StandardWifiEntry getSavedStandardWifiEntry(int wifiConfigurationSecureType) {
662 final WifiConfiguration config = new WifiConfiguration();
663 config.SSID = "\"ssid\"";
664 config.setSecurityParams(wifiConfigurationSecureType);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700665 return new StandardWifiEntry(
666 mMockInjector, mMockContext, mTestHandler,
Quang Luong28d41ce2021-04-19 16:24:42 -0700667 new StandardWifiEntryKey(config), Collections.singletonList(config), null,
Quang Luong25307052021-07-23 14:57:10 -0700668 mMockWifiManager, false /* forSavedNetworksPage */);
Arc Wang18e215d2020-01-02 16:45:06 +0800669 }
Arc Wangc8686242020-01-13 21:33:01 +0800670
Stephanie Bakd0cd23c2021-11-17 06:41:41 +0000671 private StandardWifiEntry getSavedDOStandardWifiEntry(int wifiConfigurationSecureType) {
672 final WifiConfiguration config = new WifiConfiguration();
673 config.SSID = "\"ssid\"";
674 config.setSecurityParams(wifiConfigurationSecureType);
675 config.creatorUid = MANAGED_PROFILE_UID;
676 config.creatorName = TEST_PACKAGE_NAME;
677 return new StandardWifiEntry(
678 mMockInjector, mMockContext, mTestHandler,
679 new StandardWifiEntryKey(config), Collections.singletonList(config), null,
680 mMockWifiManager, false /* forSavedNetworksPage */);
681 }
682
Arc Wangc8686242020-01-13 21:33:01 +0800683 @Test
684 public void testGetSummary_connectedWifiNetwork_showsConnected() {
685 final int networkId = 1;
686 final String summarySeparator = " / ";
687 final String[] wifiStatusArray = new String[]{"", "Scanning", "Connecting",
688 "Authenticating", "Obtaining IP address", "Connected"};
689
Quang Luongfdcfc642021-07-09 15:15:50 -0700690 when(mMockContext.getString(R.string.wifitrackerlib_summary_separator))
Arc Wang2aa2c332020-06-24 13:05:00 +0800691 .thenReturn(summarySeparator);
Quang Luongfdcfc642021-07-09 15:15:50 -0700692 when(mMockContext.getResources()).thenReturn(mMockResources);
693 when(mMockResources.getStringArray(R.array.wifitrackerlib_wifi_status))
Arc Wang2aa2c332020-06-24 13:05:00 +0800694 .thenReturn(wifiStatusArray);
Arc Wangc8686242020-01-13 21:33:01 +0800695 final ConnectivityManager mockConnectivityManager = mock(ConnectivityManager.class);
Quang Luong915b6d12020-08-17 17:36:27 -0700696 final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()
697 .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build();
Quang Luong33c7d302021-06-14 16:40:32 -0700698 when(mMockContext.getSystemService(ConnectivityManager.class))
Arc Wangc8686242020-01-13 21:33:01 +0800699 .thenReturn(mockConnectivityManager);
700
Steven Liuea795032020-02-05 16:50:35 -0800701 final WifiInfo wifiInfo = new WifiInfo.Builder().setNetworkId(networkId).build();
Arc Wangc8686242020-01-13 21:33:01 +0800702 final NetworkInfo networkInfo =
703 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
704 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
705
706 final WifiConfiguration config = new WifiConfiguration();
707 config.SSID = "\"ssid\"";
708 config.networkId = networkId;
Quang Luong5dd1cc42021-09-29 14:50:16 -0700709 final StandardWifiEntry entry = new StandardWifiEntry(
710 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700711 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong25307052021-07-23 14:57:10 -0700712 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700713 false /* forSavedNetworksPage */);
Arc Wangc8686242020-01-13 21:33:01 +0800714
715 entry.updateConnectionInfo(wifiInfo, networkInfo);
Quang Luong915b6d12020-08-17 17:36:27 -0700716 entry.updateNetworkCapabilities(networkCapabilities);
Quang Luong59862832020-08-26 21:18:19 -0700717 entry.setIsDefaultNetwork(true);
Arc Wangc8686242020-01-13 21:33:01 +0800718
719 assertThat(entry.getSummary()).isEqualTo("Connected");
720 }
Arc Wang149731c2020-01-17 17:05:47 +0800721
722 @Test
Quang Luong1cba0c22021-12-02 15:44:06 -0800723 public void testGetSummary_connectedButNotDefault_doesNotShowConnected() {
Quang Luonge47b5b92021-05-04 08:47:44 -0700724 final int networkId = 1;
725 final String summarySeparator = " / ";
726 final String[] wifiStatusArray = new String[]{"", "Scanning", "Connecting",
727 "Authenticating", "Obtaining IP address", "Connected"};
728
Quang Luongfdcfc642021-07-09 15:15:50 -0700729 when(mMockContext.getString(R.string.wifitrackerlib_summary_separator))
Quang Luonge47b5b92021-05-04 08:47:44 -0700730 .thenReturn(summarySeparator);
Quang Luongfdcfc642021-07-09 15:15:50 -0700731 when(mMockResources.getStringArray(R.array.wifitrackerlib_wifi_status))
Quang Luonge47b5b92021-05-04 08:47:44 -0700732 .thenReturn(wifiStatusArray);
733 final ConnectivityManager mockConnectivityManager = mock(ConnectivityManager.class);
734 final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()
735 .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build();
Quang Luong33c7d302021-06-14 16:40:32 -0700736 when(mMockContext.getSystemService(ConnectivityManager.class))
Quang Luonge47b5b92021-05-04 08:47:44 -0700737 .thenReturn(mockConnectivityManager);
738
739 final WifiInfo wifiInfo = new WifiInfo.Builder().setNetworkId(networkId).build();
740 final NetworkInfo networkInfo =
741 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
742 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
743
744 final WifiConfiguration config = new WifiConfiguration();
745 config.SSID = "\"ssid\"";
746 config.networkId = networkId;
Quang Luong5dd1cc42021-09-29 14:50:16 -0700747 final StandardWifiEntry entry = new StandardWifiEntry(
748 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700749 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong25307052021-07-23 14:57:10 -0700750 Collections.singletonList(config), null, mMockWifiManager,
Quang Luonge47b5b92021-05-04 08:47:44 -0700751 false /* forSavedNetworksPage */);
752
753 entry.updateConnectionInfo(wifiInfo, networkInfo);
754 entry.updateNetworkCapabilities(networkCapabilities);
755 entry.setIsDefaultNetwork(false);
756
757 assertThat(entry.getSummary()).isEqualTo("");
758 }
759
760 @Test
Quang Luong59862832020-08-26 21:18:19 -0700761 public void testShouldShowXLevelIcon_unvalidatedOrNotDefault_returnsTrue() {
Quang Luong915b6d12020-08-17 17:36:27 -0700762 final int networkId = 1;
Quang Luong33c7d302021-06-14 16:40:32 -0700763 when(mMockContext.getSystemService(ConnectivityManager.class))
Quang Luongfffbc102021-03-19 16:55:23 +0000764 .thenReturn(mMockConnectivityManager);
Quang Luong915b6d12020-08-17 17:36:27 -0700765 final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()
766 .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build();
767 final WifiInfo wifiInfo = new WifiInfo.Builder().setNetworkId(networkId).build();
768 final NetworkInfo networkInfo =
769 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
770 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
771 final WifiConfiguration config = new WifiConfiguration();
772 config.SSID = "\"ssid\"";
773 config.networkId = networkId;
Quang Luong59862832020-08-26 21:18:19 -0700774
Quang Luong5dd1cc42021-09-29 14:50:16 -0700775 final StandardWifiEntry entry = new StandardWifiEntry(
776 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700777 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong25307052021-07-23 14:57:10 -0700778 Collections.singletonList(config), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700779 false /* forSavedNetworksPage */);
Quang Luong915b6d12020-08-17 17:36:27 -0700780
Quang Luong59862832020-08-26 21:18:19 -0700781 // Disconnected should return false;
782 assertThat(entry.shouldShowXLevelIcon()).isEqualTo(false);
Quang Luong915b6d12020-08-17 17:36:27 -0700783
Quang Luong59862832020-08-26 21:18:19 -0700784 // Not validated, Not Default
785 entry.updateConnectionInfo(wifiInfo, networkInfo);
786
Quang Luong1942e8b2022-11-03 21:27:21 +0000787 // Validation attempt not complete, should not show X level icon yet.
788 assertThat(entry.shouldShowXLevelIcon()).isEqualTo(false);
789
790 // Validation attempt complete, should show X level icon now.
791 ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport = mock(
792 ConnectivityDiagnosticsManager.ConnectivityReport.class);
793 entry.updateConnectivityReport(connectivityReport);
Quang Luong59862832020-08-26 21:18:19 -0700794 assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
795
796 // Not Validated, Default
797 entry.setIsDefaultNetwork(true);
798
799 assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
800
801 // Validated, Default
802 entry.updateNetworkCapabilities(networkCapabilities);
803
804 assertThat(entry.shouldShowXLevelIcon()).isEqualTo(false);
805
806 // Validated, Not Default
807 entry.setIsDefaultNetwork(false);
808
809 assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
Quang Luong915b6d12020-08-17 17:36:27 -0700810 }
811
812 @Test
Quang Luongff95cbe2021-05-06 17:20:38 -0700813 public void testGetSecurityString_pskAndSae_getWpaWpa2Wpa3Personal() {
814 final String wifiSecurityShortWpaWpa2Wpa3 = "WPA/WPA2/WPA3";
Quang Luongfdcfc642021-07-09 15:15:50 -0700815 when(mMockContext.getString(R.string.wifitrackerlib_wifi_security_short_wpa_wpa2_wpa3))
Quang Luongff95cbe2021-05-06 17:20:38 -0700816 .thenReturn(wifiSecurityShortWpaWpa2Wpa3);
Arc Wang149731c2020-01-17 17:05:47 +0800817
Quang Luongff95cbe2021-05-06 17:20:38 -0700818 WifiConfiguration pskConfig = new WifiConfiguration();
819 pskConfig.SSID = "\"ssid\"";
820 pskConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
821 WifiConfiguration saeConfig = new WifiConfiguration();
822 saeConfig.SSID = "\"ssid\"";
823 saeConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
824
Quang Luong9fe30b02022-02-01 15:45:12 -0800825 ScanResult pskScan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700826 pskScan.capabilities = "PSK";
Quang Luong9fe30b02022-02-01 15:45:12 -0800827 ScanResult saeScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700828 saeScan.capabilities = "SAE";
829
Quang Luong5dd1cc42021-09-29 14:50:16 -0700830 StandardWifiEntry entry = new StandardWifiEntry(
831 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700832 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
833 Arrays.asList(pskConfig, saeConfig), Arrays.asList(pskScan, saeScan),
Quang Luong25307052021-07-23 14:57:10 -0700834 mMockWifiManager, false /* forSavedNetworksPage */);
Arc Wang149731c2020-01-17 17:05:47 +0800835
836 assertThat(entry.getSecurityString(true /* concise */))
Quang Luongff95cbe2021-05-06 17:20:38 -0700837 .isEqualTo(wifiSecurityShortWpaWpa2Wpa3);
Arc Wang149731c2020-01-17 17:05:47 +0800838 }
839
840 @Test
Quang Luongff95cbe2021-05-06 17:20:38 -0700841 public void testGetSecurityString_connected_getConnectionSecurityType() {
842 final String wifiSecurityShortWpaWpa2 = "WPA/WPA2";
843 final String wifiSecurityShortWpa3 = "WPA3";
Quang Luongfdcfc642021-07-09 15:15:50 -0700844 when(mMockContext.getString(R.string.wifitrackerlib_wifi_security_short_wpa_wpa2))
Quang Luongff95cbe2021-05-06 17:20:38 -0700845 .thenReturn(wifiSecurityShortWpaWpa2);
Quang Luongfdcfc642021-07-09 15:15:50 -0700846 when(mMockContext.getString(R.string.wifitrackerlib_wifi_security_short_sae))
Quang Luongff95cbe2021-05-06 17:20:38 -0700847 .thenReturn(wifiSecurityShortWpa3);
Arc Wang149731c2020-01-17 17:05:47 +0800848
Quang Luongff95cbe2021-05-06 17:20:38 -0700849 WifiConfiguration pskConfig = new WifiConfiguration();
850 pskConfig.networkId = 1;
851 pskConfig.SSID = "\"ssid\"";
852 pskConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
853 WifiConfiguration saeConfig = new WifiConfiguration();
854 saeConfig.networkId = 1;
855 saeConfig.SSID = "\"ssid\"";
856 saeConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
Arc Wang149731c2020-01-17 17:05:47 +0800857
Quang Luong9fe30b02022-02-01 15:45:12 -0800858 ScanResult pskScan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700859 pskScan.capabilities = "PSK";
Quang Luong9fe30b02022-02-01 15:45:12 -0800860 ScanResult saeScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700861 saeScan.capabilities = "SAE";
862
863 when(mMockWifiInfo.getNetworkId()).thenReturn(1);
Quang Luong9fe30b02022-02-01 15:45:12 -0800864 when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700865 when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
866
Quang Luong5dd1cc42021-09-29 14:50:16 -0700867 StandardWifiEntry entry = new StandardWifiEntry(
868 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700869 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
870 Arrays.asList(pskConfig, saeConfig), Arrays.asList(pskScan, saeScan),
Quang Luong25307052021-07-23 14:57:10 -0700871 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luongff95cbe2021-05-06 17:20:38 -0700872
873 when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_PSK);
874 entry.updateConnectionInfo(mMockWifiInfo, mMockNetworkInfo);
875
876 // Both PSK and SAE in range, but connected to PSK so show PSK security string
877 assertThat(entry.getSecurityString(true /* concise */))
878 .isEqualTo(wifiSecurityShortWpaWpa2);
879
880 when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_SAE);
881 entry.updateConnectionInfo(mMockWifiInfo, mMockNetworkInfo);
882
883 // Both PSK and SAE in range, but connected to SAE so show SAE security string
884 assertThat(entry.getSecurityString(true /* concise */))
885 .isEqualTo(wifiSecurityShortWpa3);
886 }
887
888 @Test
889 public void testGetSecurityString_eapAndEapWpa3_getWpaWpa2Wpa3Enterprise() {
890 final String wifiSecurityEapWpaWpa2Wpa3 = "WPA/WPA2/WPA3-Enterprise";
Quang Luongfdcfc642021-07-09 15:15:50 -0700891 when(mMockContext.getString(R.string.wifitrackerlib_wifi_security_short_eap_wpa_wpa2_wpa3))
Quang Luongff95cbe2021-05-06 17:20:38 -0700892 .thenReturn(wifiSecurityEapWpaWpa2Wpa3);
893
894 WifiConfiguration eapConfig = new WifiConfiguration();
895 eapConfig.SSID = "\"ssid\"";
896 eapConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
897 WifiConfiguration eapWpa3Config = new WifiConfiguration();
898 eapWpa3Config.SSID = "\"ssid\"";
899 eapWpa3Config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_WPA3_ENTERPRISE);
900
Quang Luong9fe30b02022-02-01 15:45:12 -0800901 final ScanResult eapScan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700902 eapScan.capabilities = "[RSN-EAP/SHA1]";
Quang Luong9fe30b02022-02-01 15:45:12 -0800903 final ScanResult eapWpa3Scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -0700904 eapWpa3Scan.capabilities = "[RSN-EAP/SHA256][MFPR][MFPC]";
905
Quang Luong5dd1cc42021-09-29 14:50:16 -0700906 StandardWifiEntry entry = new StandardWifiEntry(
907 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700908 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
909 Arrays.asList(eapConfig, eapWpa3Config), Arrays.asList(eapScan, eapWpa3Scan),
Quang Luong25307052021-07-23 14:57:10 -0700910 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luongff95cbe2021-05-06 17:20:38 -0700911
912 assertThat(entry.getSecurityString(true /* concise */))
913 .isEqualTo(wifiSecurityEapWpaWpa2Wpa3);
Arc Wang149731c2020-01-17 17:05:47 +0800914 }
Arc Wang663804e2020-02-03 15:49:19 +0800915
916 @Test
917 public void testGetMeteredChoice_afterSetMeteredChoice_getCorrectValue() {
918 StandardWifiEntry entry =
919 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
920
921 entry.setMeteredChoice(WifiEntry.METERED_CHOICE_METERED);
922
923 assertThat(entry.getMeteredChoice()).isEqualTo(WifiEntry.METERED_CHOICE_METERED);
924 }
Quang Luong54a31802020-02-25 17:52:33 -0800925
926 @Test
927 public void testCanSignIn_captivePortalCapability_returnsTrue() {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700928 final StandardWifiEntry entry = new StandardWifiEntry(
929 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700930 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong28d41ce2021-04-19 16:24:42 -0700931 null, Arrays.asList(
Quang Luong9fe30b02022-02-01 15:45:12 -0800932 buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -0700933 mMockWifiManager, false /* forSavedNetworksPage */);
Remi NGUYEN VANe10f9802021-03-30 04:39:54 +0000934 NetworkCapabilities captivePortalCapabilities = new NetworkCapabilities.Builder()
935 .addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL).build();
Quang Luong54a31802020-02-25 17:52:33 -0800936 entry.updateNetworkCapabilities(captivePortalCapabilities);
937
938 assertThat(entry.canSignIn()).isTrue();
939 }
940
941 @Test
942 public void testUpdateNetworkCapabilities_userConnect_autoOpenCaptivePortalOnce() {
Quang Luong33c7d302021-06-14 16:40:32 -0700943 when(mMockContext.getSystemService(ConnectivityManager.class))
Quang Luongfffbc102021-03-19 16:55:23 +0000944 .thenReturn(mMockConnectivityManager);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700945 final StandardWifiEntry entry = new StandardWifiEntry(
946 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700947 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong28d41ce2021-04-19 16:24:42 -0700948 null, Arrays.asList(
Quang Luong9fe30b02022-02-01 15:45:12 -0800949 buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -0700950 mMockWifiManager, false /* forSavedNetworksPage */);
Remi NGUYEN VANe10f9802021-03-30 04:39:54 +0000951 NetworkCapabilities captivePortalCapabilities = new NetworkCapabilities.Builder()
952 .addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL).build();
Quang Luong54a31802020-02-25 17:52:33 -0800953
Quang Luongd6c1f8c2022-04-21 14:10:53 -0700954 MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
Quang Luong10c93d02021-07-21 18:21:32 -0700955 try {
956 // Simulate user tapping on the network and receiving captive portal capabilities.
957 // This should trigger the captive portal app.
958 entry.connect(null /* callback */);
959 entry.updateNetworkCapabilities(captivePortalCapabilities);
Quang Luong54a31802020-02-25 17:52:33 -0800960
Quang Luongd6c1f8c2022-04-21 14:10:53 -0700961 verify(() -> NonSdkApiWrapper.startCaptivePortalApp(any(), any()), times(1));
Quang Luong54a31802020-02-25 17:52:33 -0800962
Quang Luong10c93d02021-07-21 18:21:32 -0700963 // Update network capabilities again. This should not trigger the captive portal app.
964 entry.updateNetworkCapabilities(captivePortalCapabilities);
Quang Luong54a31802020-02-25 17:52:33 -0800965
Quang Luongd6c1f8c2022-04-21 14:10:53 -0700966 verify(() -> NonSdkApiWrapper.startCaptivePortalApp(any(), any()), times(1));
Quang Luong10c93d02021-07-21 18:21:32 -0700967 } finally {
968 session.finishMocking();
969 }
Quang Luong54a31802020-02-25 17:52:33 -0800970 }
Arc Wang893e6a12020-04-27 19:39:04 +0800971
972 @Test
973 public void testShouldEditBeforeConnect_nullWifiConfig_returnFalse() {
Quang Luong5dd1cc42021-09-29 14:50:16 -0700974 StandardWifiEntry entry = new StandardWifiEntry(
975 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700976 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong25307052021-07-23 14:57:10 -0700977 mMockWifiManager, false /* forSavedNetworksPage */);
Arc Wang893e6a12020-04-27 19:39:04 +0800978
979 assertThat(entry.shouldEditBeforeConnect()).isFalse();
980 }
981
982 @Test
983 public void testShouldEditBeforeConnect_openNetwork_returnFalse() {
984 // Test open networks.
985 WifiConfiguration wifiConfig = new WifiConfiguration();
986 wifiConfig.SSID = "\"ssid\"";
987 wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700988 StandardWifiEntry entry = new StandardWifiEntry(
989 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -0700990 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong25307052021-07-23 14:57:10 -0700991 Collections.singletonList(wifiConfig), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -0700992 false /* forSavedNetworksPage */);
Arc Wang893e6a12020-04-27 19:39:04 +0800993
994 assertThat(entry.shouldEditBeforeConnect()).isFalse();
995
996 // Test enhanced open networks.
997 wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
Quang Luong5dd1cc42021-09-29 14:50:16 -0700998 entry = new StandardWifiEntry(
999 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001000 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OWE),
Quang Luong25307052021-07-23 14:57:10 -07001001 Collections.singletonList(wifiConfig), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -07001002 false /* forSavedNetworksPage */);
Arc Wang893e6a12020-04-27 19:39:04 +08001003
1004 assertThat(entry.shouldEditBeforeConnect()).isFalse();
1005 }
1006
1007 @Test
Arc Wang893e6a12020-04-27 19:39:04 +08001008 public void testShouldEditBeforeConnect_authenticationFailure_returnTrue() {
1009 // Test DISABLED_AUTHENTICATION_FAILURE.
1010 WifiConfiguration wifiConfig = spy(new WifiConfiguration());
1011 wifiConfig.SSID = "\"ssid\"";
1012 wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong5dd1cc42021-09-29 14:50:16 -07001013 StandardWifiEntry entry = new StandardWifiEntry(
1014 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001015 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Quang Luong25307052021-07-23 14:57:10 -07001016 Collections.singletonList(wifiConfig), null, mMockWifiManager,
Quang Luong28d41ce2021-04-19 16:24:42 -07001017 false /* forSavedNetworksPage */);
Arc Wang893e6a12020-04-27 19:39:04 +08001018 NetworkSelectionStatus.Builder statusBuilder = new NetworkSelectionStatus.Builder();
1019 NetworkSelectionStatus networkSelectionStatus = spy(statusBuilder.setNetworkSelectionStatus(
1020 NETWORK_SELECTION_TEMPORARY_DISABLED)
1021 .setNetworkSelectionDisableReason(
Quang Luong549f83b2020-04-23 21:39:03 -07001022 DISABLED_AUTHENTICATION_FAILURE)
Arc Wang893e6a12020-04-27 19:39:04 +08001023 .build());
1024 doReturn(1).when(networkSelectionStatus).getDisableReasonCounter(
1025 DISABLED_AUTHENTICATION_FAILURE);
1026 doReturn(true).when(networkSelectionStatus).hasEverConnected();
1027 doReturn(networkSelectionStatus).when(wifiConfig).getNetworkSelectionStatus();
1028
1029 assertThat(entry.shouldEditBeforeConnect()).isTrue();
1030
1031 // Test DISABLED_BY_WRONG_PASSWORD.
1032 networkSelectionStatus = spy(statusBuilder.setNetworkSelectionStatus(
1033 NETWORK_SELECTION_PERMANENTLY_DISABLED)
1034 .setNetworkSelectionDisableReason(DISABLED_BY_WRONG_PASSWORD)
1035 .build());
1036 doReturn(1).when(networkSelectionStatus).getDisableReasonCounter(
1037 DISABLED_BY_WRONG_PASSWORD);
1038
1039 assertThat(entry.shouldEditBeforeConnect()).isTrue();
1040
1041 // Test DISABLED_AUTHENTICATION_NO_CREDENTIALS.
1042 networkSelectionStatus = spy(statusBuilder.setNetworkSelectionStatus(
1043 NETWORK_SELECTION_PERMANENTLY_DISABLED)
1044 .setNetworkSelectionDisableReason(DISABLED_AUTHENTICATION_NO_CREDENTIALS)
1045 .build());
1046 doReturn(1).when(networkSelectionStatus).getDisableReasonCounter(
1047 DISABLED_AUTHENTICATION_NO_CREDENTIALS);
1048
1049 assertThat(entry.shouldEditBeforeConnect()).isTrue();
1050 }
Quang Luong549f83b2020-04-23 21:39:03 -07001051
1052 @Test
Arc Wangb53e8cb2020-07-13 19:13:37 +08001053 public void testCanConnect_nonEapMethod_returnTrueIfReachable() {
Quang Luong9fe30b02022-02-01 15:45:12 -08001054 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luong5dd1cc42021-09-29 14:50:16 -07001055 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1056 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001057 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Quang Luong9fe30b02022-02-01 15:45:12 -08001058 null, Arrays.asList(buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI)),
Quang Luong25307052021-07-23 14:57:10 -07001059 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001060 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1061
1062 assertThat(spyEntry.canConnect()).isEqualTo(true);
1063
Quang Luong28d41ce2021-04-19 16:24:42 -07001064 scan.capabilities = "OWE";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001065 spyEntry = spy(new StandardWifiEntry(
1066 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001067 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OWE),
Quang Luong28d41ce2021-04-19 16:24:42 -07001068 null, Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001069 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001070 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1071
1072 assertThat(spyEntry.canConnect()).isEqualTo(true);
1073
Quang Luong28d41ce2021-04-19 16:24:42 -07001074 scan.capabilities = "WEP";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001075 spyEntry = spy(new StandardWifiEntry(
1076 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001077 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_WEP),
Quang Luong28d41ce2021-04-19 16:24:42 -07001078 null, Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001079 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001080 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1081
1082 assertThat(spyEntry.canConnect()).isEqualTo(true);
1083
Quang Luong28d41ce2021-04-19 16:24:42 -07001084 scan.capabilities = "PSK";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001085 spyEntry = spy(new StandardWifiEntry(
1086 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001087 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Quang Luong28d41ce2021-04-19 16:24:42 -07001088 null, Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001089 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001090 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1091
1092 assertThat(spyEntry.canConnect()).isEqualTo(true);
1093
Quang Luong28d41ce2021-04-19 16:24:42 -07001094 scan.capabilities = "SAE";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001095 spyEntry = spy(new StandardWifiEntry(
1096 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001097 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_SAE),
Quang Luong28d41ce2021-04-19 16:24:42 -07001098 null, Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001099 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001100 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1101
1102 assertThat(spyEntry.canConnect()).isEqualTo(true);
1103 }
1104
1105 @Test
1106 public void testCanConnect_nonSimMethod_returnTrueIfReachable() {
Quang Luong28d41ce2021-04-19 16:24:42 -07001107 WifiConfiguration config = new WifiConfiguration();
1108 config.SSID = "\"ssid\"";
Arc Wangb53e8cb2020-07-13 19:13:37 +08001109 WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
1110 when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(false);
Quang Luong28d41ce2021-04-19 16:24:42 -07001111 config.enterpriseConfig = mockWifiEnterpriseConfig;
1112 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luong9fe30b02022-02-01 15:45:12 -08001113 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -07001114 scan.capabilities = "EAP/SHA1";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001115 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1116 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001117 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong28d41ce2021-04-19 16:24:42 -07001118 Collections.singletonList(config), Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001119 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001120 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1121
1122 assertThat(spyEntry.canConnect()).isEqualTo(true);
1123 }
1124
1125 @Test
1126 public void testCanConnect_unknownCarrierId_returnTrueIfActiveSubscriptionAvailable() {
Quang Luong28d41ce2021-04-19 16:24:42 -07001127 WifiConfiguration config = new WifiConfiguration();
1128 config.SSID = "\"ssid\"";
1129 config.carrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
Arc Wangb53e8cb2020-07-13 19:13:37 +08001130 WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
1131 when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(true);
Quang Luong28d41ce2021-04-19 16:24:42 -07001132 config.enterpriseConfig = mockWifiEnterpriseConfig;
1133 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luong9fe30b02022-02-01 15:45:12 -08001134 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -07001135 scan.capabilities = "EAP/SHA1";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001136 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1137 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001138 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong28d41ce2021-04-19 16:24:42 -07001139 Collections.singletonList(config), Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001140 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001141 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1142 when(mSubscriptionManager.getActiveSubscriptionInfoList())
1143 .thenReturn(Arrays.asList(mock(SubscriptionInfo.class)));
1144
1145 assertThat(spyEntry.canConnect()).isEqualTo(true);
1146 }
1147
1148 @Test
1149 public void testCanConnect_specifiedCarrierIdMatched_returnTrue() {
Quang Luong28d41ce2021-04-19 16:24:42 -07001150 WifiConfiguration config = new WifiConfiguration();
1151 config.SSID = "\"ssid\"";
Arc Wangb53e8cb2020-07-13 19:13:37 +08001152 int carrierId = 6;
Quang Luong28d41ce2021-04-19 16:24:42 -07001153 config.carrierId = carrierId;
Arc Wangb53e8cb2020-07-13 19:13:37 +08001154 WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
1155 when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(true);
Quang Luong28d41ce2021-04-19 16:24:42 -07001156 config.enterpriseConfig = mockWifiEnterpriseConfig;
1157 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luong9fe30b02022-02-01 15:45:12 -08001158 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -07001159 scan.capabilities = "EAP/SHA1";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001160 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1161 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001162 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong28d41ce2021-04-19 16:24:42 -07001163 Collections.singletonList(config), Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001164 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001165 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1166 SubscriptionInfo mockSubscriptionInfo = mock(SubscriptionInfo.class);
1167 when(mockSubscriptionInfo.getCarrierId()).thenReturn(carrierId);
1168 when(mSubscriptionManager.getActiveSubscriptionInfoList())
1169 .thenReturn(Arrays.asList(mockSubscriptionInfo));
1170
1171 assertThat(spyEntry.canConnect()).isEqualTo(true);
1172 }
1173
1174 @Test
1175 public void testCanConnect_specifiedCarrierIdNotMatched_returnFalse() {
Quang Luong28d41ce2021-04-19 16:24:42 -07001176 WifiConfiguration config = new WifiConfiguration();
1177 config.SSID = "\"ssid\"";
Arc Wangb53e8cb2020-07-13 19:13:37 +08001178 int specifiedCarrierId = 6;
1179 int simCarrierId = 7;
Quang Luong28d41ce2021-04-19 16:24:42 -07001180 config.carrierId = specifiedCarrierId;
Arc Wangb53e8cb2020-07-13 19:13:37 +08001181 WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
1182 when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(true);
Quang Luong28d41ce2021-04-19 16:24:42 -07001183 config.enterpriseConfig = mockWifiEnterpriseConfig;
1184 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
Quang Luong9fe30b02022-02-01 15:45:12 -08001185 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luongff95cbe2021-05-06 17:20:38 -07001186 scan.capabilities = "EAP/SHA1";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001187 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1188 mMockInjector, mMockContext, mTestHandler,
Quang Luongff95cbe2021-05-06 17:20:38 -07001189 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Quang Luong28d41ce2021-04-19 16:24:42 -07001190 Collections.singletonList(config), Collections.singletonList(scan),
Quang Luong25307052021-07-23 14:57:10 -07001191 mMockWifiManager, false /* forSavedNetworksPage */));
Arc Wangb53e8cb2020-07-13 19:13:37 +08001192 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1193 SubscriptionInfo mockSubscriptionInfo = mock(SubscriptionInfo.class);
1194 when(mockSubscriptionInfo.getCarrierId()).thenReturn(simCarrierId);
1195 when(mSubscriptionManager.getActiveSubscriptionInfoList())
1196 .thenReturn(Arrays.asList(mockSubscriptionInfo));
1197
1198 assertThat(spyEntry.canConnect()).isEqualTo(false);
1199 }
Quang Luong28d41ce2021-04-19 16:24:42 -07001200
Stephanie Bake00c98f2022-02-02 02:58:06 +00001201 @Test
1202 public void testCanConnect_allowlistRestriction_returnTrue() {
1203 assumeTrue(BuildCompat.isAtLeastT());
1204 WifiConfiguration config = new WifiConfiguration();
1205 config.SSID = "\"ssid\"";
1206 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001207 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001208 scan.capabilities = "PSK";
Stephanie Bak2e50bb72022-02-04 07:30:06 +00001209 WifiSsidPolicy policy = new WifiSsidPolicy(
1210 WifiSsidPolicy.WIFI_SSID_POLICY_TYPE_ALLOWLIST,
Stephanie Bak310a6152022-02-02 03:03:33 +00001211 new ArraySet<>(Arrays.asList(
1212 WifiSsid.fromBytes("ssid".getBytes(StandardCharsets.UTF_8)))));
Quang Luong4becd122022-08-02 22:03:53 +00001213 MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
1214 try {
1215 when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
1216 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1217 mMockInjector, mMockContext, mTestHandler,
1218 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1219 Collections.singletonList(config), Collections.singletonList(scan),
1220 mMockWifiManager, false /* forSavedNetworksPage */));
1221 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1222 assertThat(spyEntry.canConnect()).isEqualTo(true);
1223 } finally {
1224 session.finishMocking();
1225 }
Stephanie Bake00c98f2022-02-02 02:58:06 +00001226 }
1227
1228 @Test
1229 public void testCanConnect_allowlistRestriction_returnFalse() {
1230 assumeTrue(BuildCompat.isAtLeastT());
1231 WifiConfiguration config = new WifiConfiguration();
1232 config.SSID = "\"ssid\"";
1233 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001234 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001235 scan.capabilities = "PSK";
Stephanie Bak2e50bb72022-02-04 07:30:06 +00001236 WifiSsidPolicy policy = new WifiSsidPolicy(
1237 WifiSsidPolicy.WIFI_SSID_POLICY_TYPE_ALLOWLIST,
Stephanie Bak310a6152022-02-02 03:03:33 +00001238 new ArraySet<>(Arrays.asList(
1239 WifiSsid.fromBytes("ssid2".getBytes(StandardCharsets.UTF_8)))));
Quang Luong4becd122022-08-02 22:03:53 +00001240 MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
1241 try {
1242 when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
1243 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1244 mMockInjector, mMockContext, mTestHandler,
1245 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1246 Collections.singletonList(config), Collections.singletonList(scan),
1247 mMockWifiManager, false /* forSavedNetworksPage */));
1248 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1249 assertThat(spyEntry.canConnect()).isEqualTo(false);
1250 } finally {
1251 session.finishMocking();
1252 }
Stephanie Bake00c98f2022-02-02 02:58:06 +00001253 }
1254
1255 @Test
1256 public void testCanConnect_denylistRestriction_returnTrue() {
1257 assumeTrue(BuildCompat.isAtLeastT());
1258 WifiConfiguration config = new WifiConfiguration();
1259 config.SSID = "\"ssid\"";
1260 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001261 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001262 scan.capabilities = "PSK";
Stephanie Bak2e50bb72022-02-04 07:30:06 +00001263 WifiSsidPolicy policy = new WifiSsidPolicy(
1264 WifiSsidPolicy.WIFI_SSID_POLICY_TYPE_DENYLIST,
Stephanie Bak310a6152022-02-02 03:03:33 +00001265 new ArraySet<>(Arrays.asList(
1266 WifiSsid.fromBytes("ssid2".getBytes(StandardCharsets.UTF_8)))));
Quang Luong4becd122022-08-02 22:03:53 +00001267 MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
1268 try {
1269 when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
1270 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1271 mMockInjector, mMockContext, mTestHandler,
1272 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1273 Collections.singletonList(config), Collections.singletonList(scan),
1274 mMockWifiManager, false /* forSavedNetworksPage */));
1275 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1276 assertThat(spyEntry.canConnect()).isEqualTo(true);
1277 } finally {
1278 session.finishMocking();
1279 }
Stephanie Bake00c98f2022-02-02 02:58:06 +00001280 }
1281
1282 @Test
1283 public void testCanConnect_denylistRestriction_returnFalse() {
1284 assumeTrue(BuildCompat.isAtLeastT());
1285 WifiConfiguration config = new WifiConfiguration();
1286 config.SSID = "\"ssid\"";
1287 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001288 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001289 scan.capabilities = "PSK";
Stephanie Bak2e50bb72022-02-04 07:30:06 +00001290 WifiSsidPolicy policy = new WifiSsidPolicy(
1291 WifiSsidPolicy.WIFI_SSID_POLICY_TYPE_DENYLIST,
Stephanie Bak310a6152022-02-02 03:03:33 +00001292 new ArraySet<>(Arrays.asList(
1293 WifiSsid.fromBytes("ssid".getBytes(StandardCharsets.UTF_8)))));
Quang Luong4becd122022-08-02 22:03:53 +00001294 MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
1295 try {
1296 when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
1297 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1298 mMockInjector, mMockContext, mTestHandler,
1299 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1300 Collections.singletonList(config), Collections.singletonList(scan),
1301 mMockWifiManager, false /* forSavedNetworksPage */));
1302 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1303 assertThat(spyEntry.canConnect()).isEqualTo(false);
1304 } finally {
1305 session.finishMocking();
1306 }
Stephanie Bake00c98f2022-02-02 02:58:06 +00001307 }
1308
1309 @Test
1310 public void testCanConnect_userRestrictionSet_savedNetwork_returnTrue() {
1311 assumeTrue(BuildCompat.isAtLeastT());
1312 WifiConfiguration config = new WifiConfiguration();
1313 config.SSID = "\"ssid\"";
1314 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001315 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001316 scan.capabilities = "PSK";
1317 when(mUserManager.hasUserRestriction(
1318 UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
1319 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1320 mMockInjector, mMockContext, mTestHandler,
1321 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1322 Collections.singletonList(config), Collections.singletonList(scan),
1323 mMockWifiManager, false /* forSavedNetworksPage */));
1324 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1325 when(spyEntry.isSaved()).thenReturn(true);
1326
1327 assertThat(spyEntry.canConnect()).isEqualTo(true);
1328 }
1329
1330 @Test
1331 public void testCanConnect_userRestrictionSet_suggestionNetwork_returnTrue() {
1332 assumeTrue(BuildCompat.isAtLeastT());
1333 WifiConfiguration config = new WifiConfiguration();
1334 config.SSID = "\"ssid\"";
1335 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001336 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001337 scan.capabilities = "PSK";
1338 when(mUserManager.hasUserRestriction(
1339 UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
1340 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1341 mMockInjector, mMockContext, mTestHandler,
1342 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1343 Collections.singletonList(config), Collections.singletonList(scan),
1344 mMockWifiManager, false /* forSavedNetworksPage */));
1345 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1346 when(spyEntry.isSuggestion()).thenReturn(true);
1347
1348 assertThat(spyEntry.canConnect()).isEqualTo(true);
1349 }
1350
1351 @Test
1352 public void testCanConnect_UserRestrictionSet_returnFalse() {
1353 assumeTrue(BuildCompat.isAtLeastT());
1354 WifiConfiguration config = new WifiConfiguration();
1355 config.SSID = "\"ssid\"";
1356 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001357 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001358 scan.capabilities = "PSK";
1359 when(mUserManager.hasUserRestriction(
1360 UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
1361 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1362 mMockInjector, mMockContext, mTestHandler,
1363 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1364 Collections.singletonList(config), Collections.singletonList(scan),
1365 mMockWifiManager, false /* forSavedNetworksPage */));
1366 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1367 when(spyEntry.isSaved()).thenReturn(false);
1368 when(spyEntry.isSuggestion()).thenReturn(false);
1369
1370 assertThat(spyEntry.canConnect()).isEqualTo(false);
1371 }
1372
1373 @Test
1374 public void testCanConnect_SecurityTypeRestriction_returnTrue() {
1375 assumeTrue(BuildCompat.isAtLeastT());
1376 WifiConfiguration config = new WifiConfiguration();
1377 config.SSID = "\"ssid\"";
1378 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001379 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001380 scan.capabilities = "PSK";
1381 when(mDevicePolicyManager.getMinimumRequiredWifiSecurityLevel()).thenReturn(
1382 DevicePolicyManager.WIFI_SECURITY_PERSONAL);
1383 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1384 mMockInjector, mMockContext, mTestHandler,
1385 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1386 Collections.singletonList(config), Collections.singletonList(scan),
1387 mMockWifiManager, false /* forSavedNetworksPage */));
1388 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1389
1390 assertThat(spyEntry.canConnect()).isEqualTo(true);
1391 }
1392
1393 @Test
1394 public void testCanConnect_SecurityTypeRestriction_returnFalse() {
1395 assumeTrue(BuildCompat.isAtLeastT());
1396 WifiConfiguration config = new WifiConfiguration();
1397 config.SSID = "\"ssid\"";
1398 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
Quang Luong9fe30b02022-02-01 15:45:12 -08001399 ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Stephanie Bake00c98f2022-02-02 02:58:06 +00001400 scan.capabilities = "PSK";
1401 when(mDevicePolicyManager.getMinimumRequiredWifiSecurityLevel()).thenReturn(
1402 DevicePolicyManager.WIFI_SECURITY_ENTERPRISE_EAP);
1403 StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
1404 mMockInjector, mMockContext, mTestHandler,
1405 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
1406 Collections.singletonList(config), Collections.singletonList(scan),
1407 mMockWifiManager, false /* forSavedNetworksPage */));
1408 when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
1409
1410 assertThat(spyEntry.canConnect()).isEqualTo(false);
1411 }
Quang Luong28d41ce2021-04-19 16:24:42 -07001412
1413 @Test
1414 public void testStandardWifiEntryKeyConstructor_fromConfig_matchesFromScanResultKey() {
1415 WifiConfiguration config = new WifiConfiguration();
1416 config.SSID = "\"ssid\"";
1417 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
Quang Luong9fd5f562021-05-20 01:35:55 -07001418 assertThat(new StandardWifiEntryKey(config, true /* isTargetingNewNetworks */))
1419 .isEqualTo(new StandardWifiEntryKey(
1420 new ScanResultKey(config), true /* isTargetingNewNetworks */));
Quang Luong28d41ce2021-04-19 16:24:42 -07001421 }
1422
1423 @Test
1424 public void testStandardWifiEntryKey_toAndFromJson_matches() throws Exception {
1425 WifiConfiguration mockConfig = spy(new WifiConfiguration());
1426 mockConfig.SSID = "\"ssid\"";
1427 when(mockConfig.getProfileKey()).thenReturn("profileKey");
1428 mockConfig.fromWifiNetworkSpecifier = true;
Quang Luong9fd5f562021-05-20 01:35:55 -07001429 final StandardWifiEntryKey entryKey = new StandardWifiEntryKey(
1430 mockConfig, true /* isTargetingNewNetworks */);
Quang Luong28d41ce2021-04-19 16:24:42 -07001431
1432 assertThat(new StandardWifiEntryKey(entryKey.toString())).isEqualTo(entryKey);
1433 }
1434
1435 @Test
1436 public void testGetLevel_multipleSecurities_configAndScansMatch() {
1437 WifiConfiguration pskConfig = new WifiConfiguration();
1438 pskConfig.SSID = "\"ssid\"";
1439 pskConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
1440 WifiConfiguration saeConfig = new WifiConfiguration();
1441 saeConfig.SSID = "\"ssid\"";
1442 saeConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
1443
Quang Luong9fe30b02022-02-01 15:45:12 -08001444 ScanResult pskScan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luong28d41ce2021-04-19 16:24:42 -07001445 pskScan.capabilities = "PSK";
Quang Luong9fe30b02022-02-01 15:45:12 -08001446 ScanResult saeScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
Quang Luong28d41ce2021-04-19 16:24:42 -07001447 saeScan.capabilities = "SAE";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001448 StandardWifiEntry entry = new StandardWifiEntry(
1449 mMockInjector, mMockContext, mTestHandler,
Quang Luong9fd5f562021-05-20 01:35:55 -07001450 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK,
1451 true /* isTargetingNewNetwork */),
Quang Luong28d41ce2021-04-19 16:24:42 -07001452 Collections.singletonList(pskConfig), Arrays.asList(pskScan, saeScan),
Quang Luong25307052021-07-23 14:57:10 -07001453 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong28d41ce2021-04-19 16:24:42 -07001454
1455 // Only PSK config, so use PSK scan level
Quang Luong9fe30b02022-02-01 15:45:12 -08001456 assertThat(entry.getLevel()).isEqualTo(TestUtils.GOOD_LEVEL);
Quang Luong28d41ce2021-04-19 16:24:42 -07001457 assertThat(entry.isSaved()).isTrue();
1458
1459 entry.updateConfig(Collections.singletonList(saeConfig));
1460
1461 // Only SAE config, so use SAE scan level
Quang Luong9fe30b02022-02-01 15:45:12 -08001462 assertThat(entry.getLevel()).isEqualTo(TestUtils.BAD_LEVEL);
Quang Luong28d41ce2021-04-19 16:24:42 -07001463 assertThat(entry.isSaved()).isTrue();
1464
1465 entry.updateScanResultInfo(Collections.singletonList(pskScan));
1466
1467 // SAE config and PSK scan do not match, so entry is unsaved with PSK scan level
Quang Luong9fe30b02022-02-01 15:45:12 -08001468 assertThat(entry.getLevel()).isEqualTo(TestUtils.GOOD_LEVEL);
Quang Luong28d41ce2021-04-19 16:24:42 -07001469 assertThat(entry.isSaved()).isFalse();
1470 }
Quang Luong157748c2021-05-21 11:48:33 -07001471
1472 @Test
1473 public void testConnect_unsavedOpen_configuresOpenNetwork() {
Quang Luong9fe30b02022-02-01 15:45:12 -08001474 ScanResult openScan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
Quang Luong157748c2021-05-21 11:48:33 -07001475 openScan.capabilities = "";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001476 StandardWifiEntry entry = new StandardWifiEntry(
1477 mMockInjector, mMockContext, mTestHandler,
Quang Luong9fd5f562021-05-20 01:35:55 -07001478 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
1479 true /* isTargetingNewNetworks */),
Quang Luong157748c2021-05-21 11:48:33 -07001480 null, Collections.singletonList(openScan),
Quang Luong25307052021-07-23 14:57:10 -07001481 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong157748c2021-05-21 11:48:33 -07001482 ArgumentCaptor<WifiConfiguration> connectConfigCaptor =
1483 ArgumentCaptor.forClass(WifiConfiguration.class);
1484
1485 entry.connect(null);
1486 verify(mMockWifiManager).connect(connectConfigCaptor.capture(), any());
1487
1488 assertThat(Utils.getSecurityTypesFromWifiConfiguration(connectConfigCaptor.getValue()))
1489 .isEqualTo(Collections.singletonList(SECURITY_TYPE_OPEN));
1490 }
1491
1492 @Test
1493 public void testConnect_unsavedOwe_configuresOweNetwork() {
Quang Luong9fe30b02022-02-01 15:45:12 -08001494 ScanResult oweScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
Quang Luong157748c2021-05-21 11:48:33 -07001495 oweScan.capabilities = "OWE";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001496 StandardWifiEntry entry = new StandardWifiEntry(
1497 mMockInjector, mMockContext, mTestHandler,
Quang Luong9fd5f562021-05-20 01:35:55 -07001498 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OWE,
1499 true /* isTargetingNewNetworks */),
Quang Luong157748c2021-05-21 11:48:33 -07001500 null, Collections.singletonList(oweScan),
Quang Luong25307052021-07-23 14:57:10 -07001501 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong157748c2021-05-21 11:48:33 -07001502 ArgumentCaptor<WifiConfiguration> connectConfigCaptor =
1503 ArgumentCaptor.forClass(WifiConfiguration.class);
1504
1505 entry.connect(null);
1506 verify(mMockWifiManager).connect(connectConfigCaptor.capture(), any());
1507
1508 assertThat(Utils.getSecurityTypesFromWifiConfiguration(connectConfigCaptor.getValue()))
1509 .isEqualTo(Collections.singletonList(SECURITY_TYPE_OWE));
1510 }
1511
1512 @Test
1513 public void testConnect_unsavedOpenOwe_configuresOweAndOpenNetwork() {
Quang Luong9fe30b02022-02-01 15:45:12 -08001514 ScanResult oweTransitionScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
Quang Luong157748c2021-05-21 11:48:33 -07001515 oweTransitionScan.capabilities = "OWE_TRANSITION";
Quang Luong5dd1cc42021-09-29 14:50:16 -07001516 StandardWifiEntry entry = new StandardWifiEntry(
1517 mMockInjector, mMockContext, mTestHandler,
Quang Luong9fd5f562021-05-20 01:35:55 -07001518 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
1519 true /* isTargetingNewNetworks */),
Quang Luong157748c2021-05-21 11:48:33 -07001520 null, Collections.singletonList(oweTransitionScan),
Quang Luong25307052021-07-23 14:57:10 -07001521 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong157748c2021-05-21 11:48:33 -07001522 ArgumentCaptor<WifiConfiguration> connectConfigCaptor =
1523 ArgumentCaptor.forClass(WifiConfiguration.class);
1524 ArgumentCaptor<WifiConfiguration> savedConfigCaptor =
1525 ArgumentCaptor.forClass(WifiConfiguration.class);
1526
1527 entry.connect(null);
1528 verify(mMockWifiManager).connect(connectConfigCaptor.capture(), any());
1529 verify(mMockWifiManager).save(savedConfigCaptor.capture(), any());
1530
1531 assertThat(Utils.getSecurityTypesFromWifiConfiguration(connectConfigCaptor.getValue()))
1532 .isEqualTo(Collections.singletonList(SECURITY_TYPE_OWE));
1533 assertThat(Utils.getSecurityTypesFromWifiConfiguration(savedConfigCaptor.getValue()))
1534 .isEqualTo(Collections.singletonList(SECURITY_TYPE_OPEN));
1535 }
Quang Luong931ebc42021-05-25 18:48:29 -07001536
1537 @Test
1538 public void testGetSecurity_openAndOwe_returnsOpen() {
1539 WifiConfiguration openConfig = new WifiConfiguration();
1540 openConfig.SSID = "\"ssid\"";
1541 openConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
1542 WifiConfiguration oweConfig = new WifiConfiguration();
1543 oweConfig.SSID = "\"ssid\"";
1544 oweConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
1545
Quang Luong5dd1cc42021-09-29 14:50:16 -07001546 StandardWifiEntry entry = new StandardWifiEntry(
1547 mMockInjector, mMockContext, mTestHandler,
Quang Luong931ebc42021-05-25 18:48:29 -07001548 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
1549 true /* isTargetingNewNetwork */),
1550 Arrays.asList(openConfig, oweConfig), null,
Quang Luong25307052021-07-23 14:57:10 -07001551 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong931ebc42021-05-25 18:48:29 -07001552
1553 assertThat(entry.getSecurity()).isEqualTo(WifiEntry.SECURITY_NONE);
1554 assertThat(entry.getWifiConfiguration()).isEqualTo(openConfig);
1555 }
1556
1557 @Test
1558 public void testGetSecurity_pskAndSae_returnsPsk() {
1559 WifiConfiguration pskConfig = new WifiConfiguration();
1560 pskConfig.SSID = "\"ssid\"";
1561 pskConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
1562 WifiConfiguration saeConfig = new WifiConfiguration();
1563 saeConfig.SSID = "\"ssid\"";
1564 saeConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
1565
Quang Luong5dd1cc42021-09-29 14:50:16 -07001566 StandardWifiEntry entry = new StandardWifiEntry(
1567 mMockInjector, mMockContext, mTestHandler,
Quang Luong931ebc42021-05-25 18:48:29 -07001568 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK,
1569 true /* isTargetingNewNetwork */),
1570 Arrays.asList(pskConfig, saeConfig), null,
Quang Luong25307052021-07-23 14:57:10 -07001571 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong931ebc42021-05-25 18:48:29 -07001572
1573 assertThat(entry.getSecurity()).isEqualTo(WifiEntry.SECURITY_PSK);
1574 assertThat(entry.getWifiConfiguration()).isEqualTo(pskConfig);
1575 }
1576
1577 @Test
1578 public void testGetSecurity_eapAndEapWpa3_returnsEap() {
1579 WifiConfiguration eapConfig = new WifiConfiguration();
1580 eapConfig.SSID = "\"ssid\"";
1581 eapConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
1582 WifiConfiguration eapWpa3Config = new WifiConfiguration();
1583 eapWpa3Config.SSID = "\"ssid\"";
1584 eapWpa3Config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_WPA3_ENTERPRISE);
1585
Quang Luong5dd1cc42021-09-29 14:50:16 -07001586 StandardWifiEntry entry = new StandardWifiEntry(
1587 mMockInjector, mMockContext, mTestHandler,
Quang Luong931ebc42021-05-25 18:48:29 -07001588 ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP,
1589 true /* isTargetingNewNetwork */),
1590 Arrays.asList(eapConfig, eapWpa3Config), null,
Quang Luong25307052021-07-23 14:57:10 -07001591 mMockWifiManager, false /* forSavedNetworksPage */);
Quang Luong931ebc42021-05-25 18:48:29 -07001592
1593 assertThat(entry.getSecurity()).isEqualTo(WifiEntry.SECURITY_EAP);
1594 assertThat(entry.getWifiConfiguration()).isEqualTo(eapConfig);
1595 }
Quang Luong5dd1cc42021-09-29 14:50:16 -07001596
1597 @Test
1598 public void testCanShare_isDemoMode_returnsFalse() {
1599 when(mMockInjector.isDemoMode()).thenReturn(true);
1600
1601 final StandardWifiEntry pskWifiEntry =
1602 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
1603
1604 assertThat(pskWifiEntry.canShare()).isFalse();
1605 }
1606
1607 @Test
1608 public void testCanEasyConnect_isDemoMode_returnsFalse() {
1609 when(mMockInjector.isDemoMode()).thenReturn(true);
1610
1611 final StandardWifiEntry pskWifiEntry =
1612 getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
1613
1614 assertThat(pskWifiEntry.canEasyConnect()).isFalse();
1615 }
1616
Stephanie Bakd0cd23c2021-11-17 06:41:41 +00001617 @Test
1618 public void testCanShare_UserRestrictionSet_returnsFalse() {
1619 assumeTrue(BuildCompat.isAtLeastT());
1620 when(mMockInjector.isDemoMode()).thenReturn(false);
1621 when(mUserManager.hasUserRestrictionForUser(
1622 eq(UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI), any())).thenReturn(true);
1623 when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser())
1624 .thenReturn(new ComponentName(TEST_PACKAGE_NAME, new String()));
1625 when(mDevicePolicyManager.getDeviceOwnerUser())
1626 .thenReturn(UserHandle.getUserHandleForUid(MANAGED_PROFILE_UID));
1627
1628 final StandardWifiEntry pskWifiEntry =
1629 getSavedDOStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
1630
1631 assertThat(pskWifiEntry.canShare()).isFalse();
1632 }
1633
1634 @Test
1635 public void testCanEasyConnect_UserRestrictionSet_returnsFalse() {
1636 assumeTrue(BuildCompat.isAtLeastT());
1637 when(mMockInjector.isDemoMode()).thenReturn(false);
1638 when(mUserManager.hasUserRestrictionForUser(
1639 eq(UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI), any())).thenReturn(true);
1640 when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser())
1641 .thenReturn(new ComponentName(TEST_PACKAGE_NAME, new String()));
1642 when(mDevicePolicyManager.getDeviceOwnerUser())
1643 .thenReturn(UserHandle.getUserHandleForUid(MANAGED_PROFILE_UID));
1644
1645 final StandardWifiEntry pskWifiEntry =
1646 getSavedDOStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
1647
1648 assertThat(pskWifiEntry.canEasyConnect()).isFalse();
1649 }
Quang Luongda9087b2019-08-20 16:40:17 -07001650}