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