Loading src/com/android/settings/wifi/WifiConfigController2.java +7 −1 Original line number Diff line number Diff line Loading @@ -164,6 +164,7 @@ public class WifiConfigController2 implements TextWatcher, private ScrollView mDialogContainer; private Spinner mSecuritySpinner; @VisibleForTesting Spinner mEapMethodSpinner; private int mLastShownEapMethod; @VisibleForTesting Spinner mEapSimSpinner; // For EAP-SIM, EAP-AKA and EAP-AKA-PRIME. private Spinner mEapCaCertSpinner; private Spinner mEapOcspSpinner; Loading Loading @@ -1057,6 +1058,7 @@ public class WifiConfigController2 implements TextWatcher, final int eapMethod = enterpriseConfig.getEapMethod(); final int phase2Method = enterpriseConfig.getPhase2Method(); mEapMethodSpinner.setSelection(eapMethod); mLastShownEapMethod = eapMethod; showEapFieldsByMethod(eapMethod); switch (eapMethod) { case Eap.PEAP: Loading Loading @@ -1627,7 +1629,11 @@ public class WifiConfigController2 implements TextWatcher, mSsidScanButton.setVisibility(View.GONE); } } else if (parent == mEapMethodSpinner) { final int selectedItemPosition = mEapMethodSpinner.getSelectedItemPosition(); if (mLastShownEapMethod != selectedItemPosition) { mLastShownEapMethod = selectedItemPosition; showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ true); } } else if (parent == mEapCaCertSpinner) { showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ false); } else if (parent == mPhase2Spinner Loading tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java +86 −0 Original line number Diff line number Diff line Loading @@ -18,7 +18,9 @@ package com.android.settings.wifi; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; Loading @@ -32,6 +34,7 @@ import android.net.wifi.WifiEnterpriseConfig.Eap; import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiManager; import android.os.ServiceSpecificException; import android.security.Credentials; import android.security.KeyStore; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; Loading Loading @@ -78,6 +81,10 @@ public class WifiConfigController2Test { private KeyStore mKeyStore; private View mView; private Spinner mHiddenSettingsSpinner; private Spinner mEapCaCertSpinner; private Spinner mEapUserCertSpinner; private String mUseSystemCertsString; private String mDoNotProvideEapUserCertString; private ShadowSubscriptionManager mShadowSubscriptionManager; public WifiConfigController2 mController; Loading @@ -98,6 +105,9 @@ public class WifiConfigController2Test { private static final String NUMBER_AND_CHARACTER_KEY = "123456abcd"; private static final String PARTIAL_NUMBER_AND_CHARACTER_KEY = "123456abc?"; private static final int DHCP = 0; // Saved certificates private static final String SAVED_CA_CERT = "saved CA cert"; private static final String SAVED_USER_CERT = "saved user cert"; @Before public void setUp() { Loading @@ -108,6 +118,11 @@ public class WifiConfigController2Test { mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null); final Spinner ipSettingsSpinner = mView.findViewById(R.id.ip_settings); mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings); mEapCaCertSpinner = mView.findViewById(R.id.ca_cert); mEapUserCertSpinner = mView.findViewById(R.id.user_cert); mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs); mDoNotProvideEapUserCertString = mContext.getString(R.string.wifi_do_not_provide_eap_user_cert); ipSettingsSpinner.setSelection(DHCP); mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class)); Loading Loading @@ -835,4 +850,75 @@ public class WifiConfigController2Test { final WifiConfiguration wifiConfiguration = mController.getConfig(); assertThat(wifiConfiguration.carrierId).isEqualTo(carrierId); } @Test public void loadCaCertificateValue_shouldPersistentAsDefault() { setUpModifyingSavedCertificateConfigController(null, null); assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(mUseSystemCertsString); } @Test public void loadSavedCaCertificateValue_shouldBeCorrectValue() { setUpModifyingSavedCertificateConfigController(SAVED_CA_CERT, null); assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(SAVED_CA_CERT); } @Test public void loadUserCertificateValue_shouldPersistentAsDefault() { setUpModifyingSavedCertificateConfigController(null, null); assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(mDoNotProvideEapUserCertString); } @Test public void loadSavedUserCertificateValue_shouldBeCorrectValue() { setUpModifyingSavedCertificateConfigController(null, SAVED_USER_CERT); assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(SAVED_USER_CERT); } private void setUpModifyingSavedCertificateConfigController(String savedCaCertificate, String savedUserCertificate) { final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class); mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig; when(mWifiEntry.isSaved()).thenReturn(true); when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig); when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.TLS); if (savedCaCertificate != null) { String[] savedCaCertificates = new String[]{savedCaCertificate}; when(mockWifiEnterpriseConfig.getCaCertificateAliases()) .thenReturn(savedCaCertificates); when(mKeyStore.list(eq(Credentials.CA_CERTIFICATE), anyInt())) .thenReturn(savedCaCertificates); } if (savedUserCertificate != null) { String[] savedUserCertificates = new String[]{savedUserCertificate}; when(mockWifiEnterpriseConfig.getClientCertificateAlias()) .thenReturn(savedUserCertificate); when(mKeyStore.list(eq(Credentials.USER_PRIVATE_KEY), anyInt())) .thenReturn(savedUserCertificates); } mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, WifiConfigUiBase2.MODE_MODIFY); // Because Robolectric has a different behavior from normal flow. // // Normal flow: // showSecurityFields start -> mEapMethodSpinner.setSelection // -> showSecurityFields end -> mController.onItemSelected // // Robolectric flow: // showSecurityFields start -> mEapMethodSpinner.setSelection // -> mController.onItemSelected -> showSecurityFields end // // We need to add a redundant mEapMethodSpinner.setSelection here to verify whether the // certificates are covered by mController.onItemSelected after showSecurityFields end. mController.mEapMethodSpinner.setSelection(Eap.TLS); } } Loading
src/com/android/settings/wifi/WifiConfigController2.java +7 −1 Original line number Diff line number Diff line Loading @@ -164,6 +164,7 @@ public class WifiConfigController2 implements TextWatcher, private ScrollView mDialogContainer; private Spinner mSecuritySpinner; @VisibleForTesting Spinner mEapMethodSpinner; private int mLastShownEapMethod; @VisibleForTesting Spinner mEapSimSpinner; // For EAP-SIM, EAP-AKA and EAP-AKA-PRIME. private Spinner mEapCaCertSpinner; private Spinner mEapOcspSpinner; Loading Loading @@ -1057,6 +1058,7 @@ public class WifiConfigController2 implements TextWatcher, final int eapMethod = enterpriseConfig.getEapMethod(); final int phase2Method = enterpriseConfig.getPhase2Method(); mEapMethodSpinner.setSelection(eapMethod); mLastShownEapMethod = eapMethod; showEapFieldsByMethod(eapMethod); switch (eapMethod) { case Eap.PEAP: Loading Loading @@ -1627,7 +1629,11 @@ public class WifiConfigController2 implements TextWatcher, mSsidScanButton.setVisibility(View.GONE); } } else if (parent == mEapMethodSpinner) { final int selectedItemPosition = mEapMethodSpinner.getSelectedItemPosition(); if (mLastShownEapMethod != selectedItemPosition) { mLastShownEapMethod = selectedItemPosition; showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ true); } } else if (parent == mEapCaCertSpinner) { showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ false); } else if (parent == mPhase2Spinner Loading
tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java +86 −0 Original line number Diff line number Diff line Loading @@ -18,7 +18,9 @@ package com.android.settings.wifi; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; Loading @@ -32,6 +34,7 @@ import android.net.wifi.WifiEnterpriseConfig.Eap; import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiManager; import android.os.ServiceSpecificException; import android.security.Credentials; import android.security.KeyStore; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; Loading Loading @@ -78,6 +81,10 @@ public class WifiConfigController2Test { private KeyStore mKeyStore; private View mView; private Spinner mHiddenSettingsSpinner; private Spinner mEapCaCertSpinner; private Spinner mEapUserCertSpinner; private String mUseSystemCertsString; private String mDoNotProvideEapUserCertString; private ShadowSubscriptionManager mShadowSubscriptionManager; public WifiConfigController2 mController; Loading @@ -98,6 +105,9 @@ public class WifiConfigController2Test { private static final String NUMBER_AND_CHARACTER_KEY = "123456abcd"; private static final String PARTIAL_NUMBER_AND_CHARACTER_KEY = "123456abc?"; private static final int DHCP = 0; // Saved certificates private static final String SAVED_CA_CERT = "saved CA cert"; private static final String SAVED_USER_CERT = "saved user cert"; @Before public void setUp() { Loading @@ -108,6 +118,11 @@ public class WifiConfigController2Test { mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null); final Spinner ipSettingsSpinner = mView.findViewById(R.id.ip_settings); mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings); mEapCaCertSpinner = mView.findViewById(R.id.ca_cert); mEapUserCertSpinner = mView.findViewById(R.id.user_cert); mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs); mDoNotProvideEapUserCertString = mContext.getString(R.string.wifi_do_not_provide_eap_user_cert); ipSettingsSpinner.setSelection(DHCP); mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class)); Loading Loading @@ -835,4 +850,75 @@ public class WifiConfigController2Test { final WifiConfiguration wifiConfiguration = mController.getConfig(); assertThat(wifiConfiguration.carrierId).isEqualTo(carrierId); } @Test public void loadCaCertificateValue_shouldPersistentAsDefault() { setUpModifyingSavedCertificateConfigController(null, null); assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(mUseSystemCertsString); } @Test public void loadSavedCaCertificateValue_shouldBeCorrectValue() { setUpModifyingSavedCertificateConfigController(SAVED_CA_CERT, null); assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(SAVED_CA_CERT); } @Test public void loadUserCertificateValue_shouldPersistentAsDefault() { setUpModifyingSavedCertificateConfigController(null, null); assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(mDoNotProvideEapUserCertString); } @Test public void loadSavedUserCertificateValue_shouldBeCorrectValue() { setUpModifyingSavedCertificateConfigController(null, SAVED_USER_CERT); assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(SAVED_USER_CERT); } private void setUpModifyingSavedCertificateConfigController(String savedCaCertificate, String savedUserCertificate) { final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class); mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig; when(mWifiEntry.isSaved()).thenReturn(true); when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig); when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.TLS); if (savedCaCertificate != null) { String[] savedCaCertificates = new String[]{savedCaCertificate}; when(mockWifiEnterpriseConfig.getCaCertificateAliases()) .thenReturn(savedCaCertificates); when(mKeyStore.list(eq(Credentials.CA_CERTIFICATE), anyInt())) .thenReturn(savedCaCertificates); } if (savedUserCertificate != null) { String[] savedUserCertificates = new String[]{savedUserCertificate}; when(mockWifiEnterpriseConfig.getClientCertificateAlias()) .thenReturn(savedUserCertificate); when(mKeyStore.list(eq(Credentials.USER_PRIVATE_KEY), anyInt())) .thenReturn(savedUserCertificates); } mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, WifiConfigUiBase2.MODE_MODIFY); // Because Robolectric has a different behavior from normal flow. // // Normal flow: // showSecurityFields start -> mEapMethodSpinner.setSelection // -> showSecurityFields end -> mController.onItemSelected // // Robolectric flow: // showSecurityFields start -> mEapMethodSpinner.setSelection // -> mController.onItemSelected -> showSecurityFields end // // We need to add a redundant mEapMethodSpinner.setSelection here to verify whether the // certificates are covered by mController.onItemSelected after showSecurityFields end. mController.mEapMethodSpinner.setSelection(Eap.TLS); } }