1 /* 2 * Copyright (C) 2017 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 17 package com.android.settings.wifi; 18 19 import static com.android.settings.wifi.WifiConfigController.PRIVACY_SPINNER_INDEX_DEVICE_MAC; 20 import static com.android.settings.wifi.WifiConfigController.PRIVACY_SPINNER_INDEX_RANDOMIZED_MAC; 21 import static com.android.settings.wifi.WifiConfigController.DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_ENABLE; 22 import static com.android.settings.wifi.WifiConfigController.DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE; 23 24 import static com.google.common.truth.Truth.assertThat; 25 26 import static org.mockito.Mockito.mock; 27 import static org.mockito.Mockito.spy; 28 import static org.mockito.Mockito.when; 29 import static org.robolectric.Shadows.shadowOf; 30 31 import android.content.Context; 32 import android.content.res.Resources; 33 import android.net.IpConfiguration; 34 import android.net.wifi.WifiConfiguration; 35 import android.net.wifi.WifiEnterpriseConfig; 36 import android.net.wifi.WifiEnterpriseConfig.Eap; 37 import android.net.wifi.WifiEnterpriseConfig.Phase2; 38 import android.net.wifi.WifiManager; 39 import android.telephony.SubscriptionInfo; 40 import android.telephony.SubscriptionManager; 41 import android.telephony.TelephonyManager; 42 import android.view.LayoutInflater; 43 import android.view.View; 44 import android.view.inputmethod.InputMethodManager; 45 import android.widget.ArrayAdapter; 46 import android.widget.CheckBox; 47 import android.widget.LinearLayout; 48 import android.widget.Spinner; 49 import android.widget.TextView; 50 51 import androidx.test.core.app.ApplicationProvider; 52 53 import com.android.settings.R; 54 import com.android.settings.network.SubscriptionUtil; 55 import com.android.settings.testutils.shadow.ShadowConnectivityManager; 56 import com.android.settingslib.wifi.AccessPoint; 57 58 import org.junit.Before; 59 import org.junit.Test; 60 import org.junit.runner.RunWith; 61 import org.mockito.Mock; 62 import org.mockito.MockitoAnnotations; 63 import org.robolectric.RobolectricTestRunner; 64 import org.robolectric.Shadows; 65 import org.robolectric.annotation.Config; 66 import org.robolectric.shadows.ShadowInputMethodManager; 67 import org.robolectric.shadows.ShadowSubscriptionManager; 68 69 import java.util.Arrays; 70 71 @RunWith(RobolectricTestRunner.class) 72 @Config(shadows = ShadowConnectivityManager.class) 73 public class WifiConfigControllerTest { 74 75 @Mock 76 private WifiConfigUiBase mConfigUiBase; 77 @Mock 78 private Context mContext; 79 @Mock 80 private AccessPoint mAccessPoint; 81 private View mView; 82 private Spinner mHiddenSettingsSpinner; 83 private ShadowSubscriptionManager mShadowSubscriptionManager; 84 85 public WifiConfigController mController; 86 private static final String HEX_PSK = "01234567012345670123456701234567012345670123456701234567" 87 + "01abcdef"; 88 // An invalid ASCII PSK pass phrase. It is 64 characters long, must not be greater than 63 89 private static final String LONG_PSK = 90 "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl"; 91 // An invalid PSK pass phrase. It is 7 characters long, must be at least 8 92 private static final String SHORT_PSK = "abcdefg"; 93 // Valid PSK pass phrase 94 private static final String GOOD_PSK = "abcdefghijklmnopqrstuvwxyz"; 95 private static final String GOOD_SSID = "abc"; 96 private static final int DHCP = 0; 97 98 @Before setUp()99 public void setUp() { 100 MockitoAnnotations.initMocks(this); 101 mContext = spy(ApplicationProvider.getApplicationContext()); 102 when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mock(WifiManager.class)); 103 when(mConfigUiBase.getContext()).thenReturn(mContext); 104 when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_PSK); 105 mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null); 106 final Spinner ipSettingsSpinner = mView.findViewById(R.id.ip_settings); 107 mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings); 108 ipSettingsSpinner.setSelection(DHCP); 109 mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class)); 110 111 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 112 WifiConfigUiBase.MODE_CONNECT); 113 } 114 115 @Test ssidExceeds32Bytes_shouldShowSsidTooLongWarning()116 public void ssidExceeds32Bytes_shouldShowSsidTooLongWarning() { 117 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 118 WifiConfigUiBase.MODE_CONNECT); 119 final TextView ssid = mView.findViewById(R.id.ssid); 120 assertThat(ssid).isNotNull(); 121 ssid.setText("☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎"); 122 mController.showWarningMessagesIfAppropriate(); 123 124 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 125 .isEqualTo(View.VISIBLE); 126 } 127 128 @Test ssidShorterThan32Bytes_shouldNotShowSsidTooLongWarning()129 public void ssidShorterThan32Bytes_shouldNotShowSsidTooLongWarning() { 130 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 131 WifiConfigUiBase.MODE_CONNECT); 132 133 final TextView ssid = mView.findViewById(R.id.ssid); 134 assertThat(ssid).isNotNull(); 135 ssid.setText("123456789012345678901234567890"); 136 mController.showWarningMessagesIfAppropriate(); 137 138 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 139 .isEqualTo(View.GONE); 140 141 ssid.setText("123"); 142 mController.showWarningMessagesIfAppropriate(); 143 144 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 145 .isEqualTo(View.GONE); 146 } 147 148 @Test isSubmittable_nullAccessPoint_noException()149 public void isSubmittable_nullAccessPoint_noException() { 150 mController = 151 new TestWifiConfigController(mConfigUiBase, mView, null, WifiConfigUiBase.MODE_CONNECT); 152 mController.isSubmittable(); 153 } 154 155 @Test isSubmittable_EapToPskWithValidPassword_shouldReturnTrue()156 public void isSubmittable_EapToPskWithValidPassword_shouldReturnTrue() { 157 mController = new TestWifiConfigController(mConfigUiBase, mView, null, 158 WifiConfigUiBase.MODE_CONNECT); 159 final TextView ssid = mView.findViewById(R.id.ssid); 160 final TextView password = mView.findViewById(R.id.password); 161 final Spinner securitySpinner = mView.findViewById(R.id.security); 162 assertThat(password).isNotNull(); 163 assertThat(securitySpinner).isNotNull(); 164 when(mAccessPoint.isSaved()).thenReturn(true); 165 166 // Change it from EAP to PSK 167 mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_EAP, 0); 168 mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_PSK, 0); 169 password.setText(GOOD_PSK); 170 ssid.setText(GOOD_SSID); 171 172 assertThat(mController.isSubmittable()).isTrue(); 173 } 174 175 @Test isSubmittable_EapWithAkaMethod_shouldReturnTrue()176 public void isSubmittable_EapWithAkaMethod_shouldReturnTrue() { 177 when(mAccessPoint.isSaved()).thenReturn(true); 178 mController.mAccessPointSecurity = AccessPoint.SECURITY_EAP; 179 mView.findViewById(R.id.l_ca_cert).setVisibility(View.GONE); 180 181 assertThat(mController.isSubmittable()).isTrue(); 182 } 183 184 @Test isSubmittable_caCertWithoutDomain_shouldReturnFalse()185 public void isSubmittable_caCertWithoutDomain_shouldReturnFalse() { 186 when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_EAP); 187 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 188 WifiConfigUiBase.MODE_CONNECT); 189 mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); 190 final Spinner eapCaCertSpinner = mView.findViewById(R.id.ca_cert); 191 eapCaCertSpinner.setAdapter(mController.getSpinnerAdapter(new String[]{"certificate"})); 192 eapCaCertSpinner.setSelection(0); 193 mView.findViewById(R.id.l_domain).setVisibility(View.VISIBLE); 194 195 assertThat(mController.isSubmittable()).isFalse(); 196 } 197 198 @Test isSubmittable_caCertWithDomain_shouldReturnTrue()199 public void isSubmittable_caCertWithDomain_shouldReturnTrue() { 200 when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_EAP); 201 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 202 WifiConfigUiBase.MODE_CONNECT); 203 mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); 204 final Spinner eapCaCertSpinner = mView.findViewById(R.id.ca_cert); 205 eapCaCertSpinner.setAdapter(mController.getSpinnerAdapter(new String[]{"certificate"})); 206 eapCaCertSpinner.setSelection(0); 207 mView.findViewById(R.id.l_domain).setVisibility(View.VISIBLE); 208 ((TextView) mView.findViewById(R.id.domain)).setText("fakeDomain"); 209 210 assertThat(mController.isSubmittable()).isTrue(); 211 } 212 213 @Test getSignalString_notReachable_shouldHaveNoSignalString()214 public void getSignalString_notReachable_shouldHaveNoSignalString() { 215 when(mAccessPoint.isReachable()).thenReturn(false); 216 217 assertThat(mController.getSignalString()).isNull(); 218 } 219 220 @Test loadCertificates_undesiredCertificates_shouldNotLoadUndesiredCertificates()221 public void loadCertificates_undesiredCertificates_shouldNotLoadUndesiredCertificates() { 222 final Spinner spinner = new Spinner(mContext); 223 224 mController.loadCertificates(spinner, 225 Arrays.asList(WifiConfigController.UNDESIRED_CERTIFICATES), 226 "doNotProvideEapUserCertString", 227 false /* showMultipleCerts */, 228 false /* showUsePreinstalledCertOption */); 229 230 assertThat(spinner.getAdapter().getCount()).isEqualTo(1); // doNotProvideEapUserCertString 231 } 232 233 @Test ssidGetFocus_addNewNetwork_shouldReturnTrue()234 public void ssidGetFocus_addNewNetwork_shouldReturnTrue() { 235 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 236 WifiConfigUiBase.MODE_CONNECT); 237 final TextView ssid = mView.findViewById(R.id.ssid); 238 // Verify ssid text get focus when add new network (accesspoint is null) 239 assertThat(ssid.isFocused()).isTrue(); 240 } 241 242 @Test passwordGetFocus_connectSecureWifi_shouldReturnTrue()243 public void passwordGetFocus_connectSecureWifi_shouldReturnTrue() { 244 final TextView password = mView.findViewById(R.id.password); 245 // Verify password get focus when connect to secure wifi without eap type 246 assertThat(password.isFocused()).isTrue(); 247 } 248 249 @Test hiddenWarning_warningVisibilityProperlyUpdated()250 public void hiddenWarning_warningVisibilityProperlyUpdated() { 251 View warningView = mView.findViewById(R.id.hidden_settings_warning); 252 mController.onItemSelected(mHiddenSettingsSpinner, null, mController.HIDDEN_NETWORK, 0); 253 assertThat(warningView.getVisibility()).isEqualTo(View.VISIBLE); 254 255 mController.onItemSelected(mHiddenSettingsSpinner, null, mController.NOT_HIDDEN_NETWORK, 0); 256 assertThat(warningView.getVisibility()).isEqualTo(View.GONE); 257 } 258 259 @Test hiddenField_visibilityUpdatesCorrectly()260 public void hiddenField_visibilityUpdatesCorrectly() { 261 View hiddenField = mView.findViewById(R.id.hidden_settings_field); 262 assertThat(hiddenField.getVisibility()).isEqualTo(View.GONE); 263 264 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 265 WifiConfigUiBase.MODE_CONNECT); 266 assertThat(hiddenField.getVisibility()).isEqualTo(View.VISIBLE); 267 } 268 269 @Test securitySpinner_saeSuitebAndOweNotVisible()270 public void securitySpinner_saeSuitebAndOweNotVisible() { 271 securitySpinnerTestHelper(false, false, false); 272 } 273 274 @Test securitySpinner_saeSuitebAndOweVisible()275 public void securitySpinner_saeSuitebAndOweVisible() { 276 securitySpinnerTestHelper(true, true, true); 277 } 278 279 @Test securitySpinner_saeVisible_suitebAndOweNotVisible()280 public void securitySpinner_saeVisible_suitebAndOweNotVisible() { 281 securitySpinnerTestHelper(true, false, false); 282 } 283 284 @Test securitySpinner_oweVisible_suitebAndSaeNotVisible()285 public void securitySpinner_oweVisible_suitebAndSaeNotVisible() { 286 securitySpinnerTestHelper(false, false, true); 287 } 288 securitySpinnerTestHelper(boolean saeVisible, boolean suitebVisible, boolean oweVisible)289 private void securitySpinnerTestHelper(boolean saeVisible, boolean suitebVisible, 290 boolean oweVisible) { 291 WifiManager wifiManager = mock(WifiManager.class); 292 when(wifiManager.isWpa3SaeSupported()).thenReturn(saeVisible); 293 when(wifiManager.isWpa3SuiteBSupported()).thenReturn(suitebVisible); 294 when(wifiManager.isEnhancedOpenSupported()).thenReturn(oweVisible); 295 296 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 297 WifiConfigUiBase.MODE_MODIFY, wifiManager); 298 299 final Spinner securitySpinner = mView.findViewById(R.id.security); 300 final ArrayAdapter<String> adapter = (ArrayAdapter) securitySpinner.getAdapter(); 301 boolean saeFound = false; 302 boolean suitebFound = false; 303 boolean oweFound = false; 304 for (int i = 0; i < adapter.getCount(); i++) { 305 String val = adapter.getItem(i); 306 307 if (val.compareTo(mContext.getString( 308 com.android.settingslib.R.string.wifi_security_sae)) == 0) { 309 saeFound = true; 310 } 311 312 if (val.compareTo(mContext.getString( 313 com.android.settingslib.R.string.wifi_security_eap_suiteb)) == 0) { 314 suitebFound = true; 315 } 316 317 if (val.compareTo(mContext.getString( 318 com.android.settingslib.R.string.wifi_security_owe)) == 0) { 319 oweFound = true; 320 } 321 } 322 323 if (saeVisible) { 324 assertThat(saeFound).isTrue(); 325 } else { 326 assertThat(saeFound).isFalse(); 327 } 328 if (suitebVisible) { 329 assertThat(suitebFound).isTrue(); 330 } else { 331 assertThat(suitebFound).isFalse(); 332 } 333 if (oweVisible) { 334 assertThat(oweFound).isTrue(); 335 } else { 336 assertThat(oweFound).isFalse(); 337 } 338 } 339 340 public class TestWifiConfigController extends WifiConfigController { 341 TestWifiConfigController( WifiConfigUiBase parent, View view, AccessPoint accessPoint, int mode)342 private TestWifiConfigController( 343 WifiConfigUiBase parent, View view, AccessPoint accessPoint, int mode) { 344 super(parent, view, accessPoint, mode); 345 } 346 TestWifiConfigController( WifiConfigUiBase parent, View view, AccessPoint accessPoint, int mode, WifiManager wifiManager)347 private TestWifiConfigController( 348 WifiConfigUiBase parent, View view, AccessPoint accessPoint, int mode, 349 WifiManager wifiManager) { 350 super(parent, view, accessPoint, mode, wifiManager); 351 } 352 353 } 354 355 @Test loadMacRandomizedValue_shouldMandomizedMacAsDefault()356 public void loadMacRandomizedValue_shouldMandomizedMacAsDefault() { 357 final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); 358 359 assertThat(privacySetting.getVisibility()).isEqualTo(View.VISIBLE); 360 assertThat(privacySetting.getSelectedItemPosition()).isEqualTo( 361 PRIVACY_SPINNER_INDEX_RANDOMIZED_MAC); 362 } 363 364 @Test loadSavedMacRandomizedPersistentValue_shouldCorrectMacValue()365 public void loadSavedMacRandomizedPersistentValue_shouldCorrectMacValue() { 366 checkSavedMacRandomizedValue(WifiConfiguration.RANDOMIZATION_PERSISTENT); 367 } 368 369 @Test loadSavedMacRandomizedNoneValue_shouldCorrectMacValue()370 public void loadSavedMacRandomizedNoneValue_shouldCorrectMacValue() { 371 checkSavedMacRandomizedValue(WifiConfiguration.RANDOMIZATION_NONE); 372 } 373 checkSavedMacRandomizedValue(int macRandomizedValue)374 private void checkSavedMacRandomizedValue(int macRandomizedValue) { 375 when(mAccessPoint.isSaved()).thenReturn(true); 376 final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); 377 when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); 378 when(mAccessPoint.getConfig()).thenReturn(mockWifiConfig); 379 mockWifiConfig.macRandomizationSetting = macRandomizedValue; 380 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 381 WifiConfigUiBase.MODE_CONNECT); 382 final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); 383 384 assertThat(privacySetting.getVisibility()).isEqualTo(View.VISIBLE); 385 assertThat(privacySetting.getSelectedItemPosition()).isEqualTo( 386 macRandomizedValue == WifiConfiguration.RANDOMIZATION_PERSISTENT 387 ? PRIVACY_SPINNER_INDEX_RANDOMIZED_MAC : PRIVACY_SPINNER_INDEX_DEVICE_MAC); 388 } 389 390 @Test saveMacRandomizedValue_noChanged_shouldPersistentAsDefault()391 public void saveMacRandomizedValue_noChanged_shouldPersistentAsDefault() { 392 WifiConfiguration config = mController.getConfig(); 393 assertThat(config.macRandomizationSetting).isEqualTo( 394 WifiConfiguration.RANDOMIZATION_PERSISTENT); 395 } 396 397 @Test saveMacRandomizedValue_ChangedToDeviceMac_shouldGetNone()398 public void saveMacRandomizedValue_ChangedToDeviceMac_shouldGetNone() { 399 final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); 400 privacySetting.setSelection(PRIVACY_SPINNER_INDEX_DEVICE_MAC); 401 402 WifiConfiguration config = mController.getConfig(); 403 assertThat(config.macRandomizationSetting).isEqualTo(WifiConfiguration.RANDOMIZATION_NONE); 404 } 405 406 @Test loadSavedDhcpValue_true()407 public void loadSavedDhcpValue_true() { 408 checkSavedDhcpValue(true); 409 } 410 411 @Test loadSavedDhcpValue_false()412 public void loadSavedDhcpValue_false() { 413 checkSavedDhcpValue(false); 414 } 415 checkSavedDhcpValue(boolean dhcpValue)416 private void checkSavedDhcpValue(boolean dhcpValue) { 417 when(mAccessPoint.isSaved()).thenReturn(true); 418 final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); 419 when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); 420 when(mockWifiConfig.isSendDhcpHostnameEnabled()).thenReturn(dhcpValue); 421 when(mAccessPoint.getConfig()).thenReturn(mockWifiConfig); 422 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 423 WifiConfigUiBase.MODE_CONNECT); 424 final Spinner dhcpSetting = mView.findViewById(R.id.dhcp_settings); 425 426 assertThat(dhcpSetting.getVisibility()).isEqualTo(View.VISIBLE); 427 assertThat(dhcpSetting.getSelectedItemPosition()).isEqualTo( 428 dhcpValue ? DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_ENABLE : 429 DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE); 430 } 431 432 @Test saveDhcpValue_changedToFalse()433 public void saveDhcpValue_changedToFalse() { 434 final Spinner privacySetting = mView.findViewById(R.id.dhcp_settings); 435 privacySetting.setSelection(DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE); 436 437 WifiConfiguration config = mController.getConfig(); 438 assertThat(config.isSendDhcpHostnameEnabled()).isEqualTo(false); 439 } 440 441 @Test replaceTtsString_whenTargetMatched_shouldSuccess()442 public void replaceTtsString_whenTargetMatched_shouldSuccess() { 443 final CharSequence[] display = {"PEAP", "AKA1", "AKA2'"}; 444 final CharSequence[] target = {"AKA1", "AKA2'"}; 445 final CharSequence[] ttsString = {"AKA1_TTS", "AKA2_TTS"}; 446 447 final CharSequence[] resultTts = mController.findAndReplaceTargetStrings(display, target, 448 ttsString); 449 450 assertThat(resultTts[0]).isEqualTo("PEAP"); 451 assertThat(resultTts[1]).isEqualTo("AKA1_TTS"); 452 assertThat(resultTts[2]).isEqualTo("AKA2_TTS"); 453 } 454 455 @Test replaceTtsString_whenNoTargetStringMatched_originalStringShouldNotChanged()456 public void replaceTtsString_whenNoTargetStringMatched_originalStringShouldNotChanged() { 457 final CharSequence[] display = {"PEAP", "AKA1", "AKA2"}; 458 final CharSequence[] target = {"WEP1", "WEP2'"}; 459 final CharSequence[] ttsString = {"WEP1_TTS", "WEP2_TTS"}; 460 461 final CharSequence[] resultTts = mController.findAndReplaceTargetStrings(display, target, 462 ttsString); 463 464 assertThat(resultTts[0]).isEqualTo("PEAP"); 465 assertThat(resultTts[1]).isEqualTo("AKA1"); 466 assertThat(resultTts[2]).isEqualTo("AKA2"); 467 } 468 469 @Test checktEapMethodTargetAndTtsArraylength_shouldHaveSameCount()470 public void checktEapMethodTargetAndTtsArraylength_shouldHaveSameCount() { 471 final Resources resources = mContext.getResources(); 472 final String[] targetStringArray = resources.getStringArray( 473 R.array.wifi_eap_method_target_strings); 474 final String[] ttsStringArray = resources.getStringArray( 475 R.array.wifi_eap_method_tts_strings); 476 477 assertThat(targetStringArray.length).isEqualTo(ttsStringArray.length); 478 } 479 480 @Test selectSecurity_wpa3Eap192bit_eapMethodTls()481 public void selectSecurity_wpa3Eap192bit_eapMethodTls() { 482 final WifiManager wifiManager = mock(WifiManager.class); 483 when(wifiManager.isWpa3SuiteBSupported()).thenReturn(true); 484 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 485 WifiConfigUiBase.MODE_MODIFY, wifiManager); 486 final Spinner securitySpinner = mView.findViewById(R.id.security); 487 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 488 int wpa3Eap192bitPosition = -1; 489 final int securityCount = mController.mSecurityInPosition.length; 490 for (int i = 0; i < securityCount; i++) { 491 if (mController.mSecurityInPosition[i] != null && 492 mController.mSecurityInPosition[i] == AccessPoint.SECURITY_EAP_SUITE_B) { 493 wpa3Eap192bitPosition = i; 494 } 495 } 496 497 mController.onItemSelected(securitySpinner, /* view */ null, wpa3Eap192bitPosition, 498 /* id */ 0); 499 500 final int selectedItemPosition = eapMethodSpinner.getSelectedItemPosition(); 501 assertThat(eapMethodSpinner.getSelectedItem().toString()).isEqualTo("TLS"); 502 } 503 504 @Test checkImeStatus_whenAdvancedToggled_shouldBeHide()505 public void checkImeStatus_whenAdvancedToggled_shouldBeHide() { 506 final InputMethodManager inputMethodManager = mContext 507 .getSystemService(InputMethodManager.class); 508 final ShadowInputMethodManager shadowImm = Shadows.shadowOf(inputMethodManager); 509 final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox); 510 511 inputMethodManager.showSoftInput(null /* view */, 0 /* flags */); 512 advButton.performClick(); 513 514 assertThat(shadowImm.isSoftInputVisible()).isFalse(); 515 } 516 517 @Test selectEapMethod_savedAccessPoint_shouldGetCorrectPosition()518 public void selectEapMethod_savedAccessPoint_shouldGetCorrectPosition() { 519 when(mAccessPoint.isSaved()).thenReturn(true); 520 when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_EAP); 521 final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); 522 when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); 523 final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class); 524 when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.PEAP); 525 mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig ; 526 when(mAccessPoint.getConfig()).thenReturn(mockWifiConfig); 527 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 528 WifiConfigUiBase.MODE_MODIFY); 529 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 530 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 531 WifiConfiguration wifiConfiguration; 532 533 // Test EAP method PEAP 534 eapMethodSpinner.setSelection(Eap.PEAP); 535 phase2Spinner.setSelection(WifiConfigController.WIFI_PEAP_PHASE2_MSCHAPV2); 536 wifiConfiguration = mController.getConfig(); 537 538 assertThat(wifiConfiguration.enterpriseConfig.getEapMethod()).isEqualTo(Eap.PEAP); 539 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo( 540 Phase2.MSCHAPV2); 541 542 // Test EAP method TTLS 543 eapMethodSpinner.setSelection(Eap.TTLS); 544 phase2Spinner.setSelection(WifiConfigController.WIFI_TTLS_PHASE2_MSCHAPV2); 545 wifiConfiguration = mController.getConfig(); 546 547 assertThat(wifiConfiguration.enterpriseConfig.getEapMethod()).isEqualTo(Eap.TTLS); 548 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo( 549 Phase2.MSCHAPV2); 550 } 551 552 @Test getHiddenSettingsPosition_whenAdvancedToggled_shouldBeFirst()553 public void getHiddenSettingsPosition_whenAdvancedToggled_shouldBeFirst() { 554 final LinearLayout advancedFieldsLayout = mView.findViewById(R.id.wifi_advanced_fields); 555 final LinearLayout hiddenSettingLayout = mView.findViewById(R.id.hidden_settings_field); 556 557 final LinearLayout firstChild = (LinearLayout) advancedFieldsLayout.getChildAt(0); 558 559 assertThat(firstChild).isEqualTo(hiddenSettingLayout); 560 } 561 562 @Test getAdvancedOptionContentDescription_whenViewInitialed_shouldBeCorrect()563 public void getAdvancedOptionContentDescription_whenViewInitialed_shouldBeCorrect() { 564 final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox); 565 566 assertThat(advButton.getContentDescription()).isEqualTo( 567 mContext.getString(R.string.wifi_advanced_toggle_description)); 568 } 569 570 @Test getVisibility_whenAdvancedOptionClicked_shouldBeGone()571 public void getVisibility_whenAdvancedOptionClicked_shouldBeGone() { 572 final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox); 573 574 advButton.performClick(); 575 576 assertThat(advButton.getVisibility()).isEqualTo(View.GONE); 577 } 578 579 @Test loadSims_noSim_simSpinnerDefaultNoSim()580 public void loadSims_noSim_simSpinnerDefaultNoSim() { 581 when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_EAP); 582 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 583 WifiConfigUiBase.MODE_CONNECT); 584 final Spinner eapMethodSpinner = mock(Spinner.class); 585 when(eapMethodSpinner.getSelectedItemPosition()).thenReturn( 586 WifiConfigController2.WIFI_EAP_METHOD_SIM); 587 mController.mEapMethodSpinner = eapMethodSpinner; 588 589 mController.loadSims(); 590 591 final WifiConfiguration wifiConfiguration = mController.getConfig(); 592 assertThat(wifiConfiguration.carrierId).isEqualTo(TelephonyManager.UNKNOWN_CARRIER_ID); 593 } 594 595 @Test loadSims_oneSim_simSpinnerDefaultSubscription()596 public void loadSims_oneSim_simSpinnerDefaultSubscription() { 597 when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_EAP); 598 final SubscriptionInfo subscriptionInfo = mock(SubscriptionInfo.class); 599 final int carrierId = 6; 600 when(subscriptionInfo.getSubscriptionId()).thenReturn(carrierId); 601 when(subscriptionInfo.getDisplayName()).thenReturn("FAKE-CARRIER"); 602 when(subscriptionInfo.getCarrierId()).thenReturn(carrierId); 603 when(subscriptionInfo.getCarrierName()).thenReturn("FAKE-CARRIER"); 604 SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(subscriptionInfo)); 605 mShadowSubscriptionManager.setActiveSubscriptionInfoList(Arrays.asList(subscriptionInfo)); 606 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 607 WifiConfigUiBase.MODE_CONNECT); 608 final Spinner eapMethodSpinner = mock(Spinner.class); 609 when(eapMethodSpinner.getSelectedItemPosition()).thenReturn( 610 WifiConfigController2.WIFI_EAP_METHOD_SIM); 611 mController.mEapMethodSpinner = eapMethodSpinner; 612 613 mController.loadSims(); 614 615 final WifiConfiguration wifiConfiguration = mController.getConfig(); 616 assertThat(wifiConfiguration.carrierId).isEqualTo(carrierId); 617 } 618 } 619