Merge ab/7061308 into stage.
Bug: 180401296 Merged-In: I35fe00aeeb112d5d9971985619e3ec5095dcdb7b Change-Id: I07d008e38827280c9e9c6b7fa31393309f9de8a3
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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() {
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.wifi.details2;
|
||||
|
||||
import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class WifiNetworkDetailsFragment2Test {
|
||||
|
||||
final String TEST_PREFERENCE_KEY = "TEST_PREFERENCE_KEY";
|
||||
|
||||
private WifiNetworkDetailsFragment2 mFragment;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mFragment = new WifiNetworkDetailsFragment2();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getMetricsCategory_shouldReturnWifiNetworkDetails() {
|
||||
assertThat(mFragment.getMetricsCategory()).isEqualTo(SettingsEnums.WIFI_NETWORK_DETAILS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDialogMetricsCategory_withCorrectId_shouldReturnDialogWifiApEdit() {
|
||||
assertThat(mFragment.getDialogMetricsCategory(WIFI_DIALOG_ID)).isEqualTo(
|
||||
SettingsEnums.DIALOG_WIFI_AP_EDIT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDialogMetricsCategory_withWrongId_shouldReturnZero() {
|
||||
assertThat(mFragment.getDialogMetricsCategory(-1 /* dialogId */)).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreateOptionsMenu_shouldSetCorrectIcon() {
|
||||
final Menu menu = mock(Menu.class);
|
||||
final MenuItem menuItem = mock(MenuItem.class);
|
||||
doReturn(menuItem).when(menu).add(anyInt(), eq(Menu.FIRST), anyInt(), anyInt());
|
||||
|
||||
mFragment.onCreateOptionsMenu(menu, mock(MenuInflater.class));
|
||||
|
||||
verify(menuItem).setIcon(com.android.internal.R.drawable.ic_mode_edit);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void refreshPreferences_controllerShouldUpdateStateAndDisplayPreference() {
|
||||
final FakeFragment fragment = spy(new FakeFragment());
|
||||
final PreferenceScreen screen = mock(PreferenceScreen.class);
|
||||
final Preference preference = mock(Preference.class);
|
||||
final TestController controller = mock(TestController.class);
|
||||
doReturn(screen).when(fragment).getPreferenceScreen();
|
||||
doReturn(preference).when(screen).findPreference(TEST_PREFERENCE_KEY);
|
||||
doReturn(TEST_PREFERENCE_KEY).when(controller).getPreferenceKey();
|
||||
fragment.mControllers = new ArrayList<>();
|
||||
fragment.mControllers.add(controller);
|
||||
fragment.addPreferenceController(controller);
|
||||
|
||||
fragment.refreshPreferences();
|
||||
|
||||
verify(controller).updateState(preference);
|
||||
verify(controller).displayPreference(screen);
|
||||
}
|
||||
|
||||
// Fake WifiNetworkDetailsFragment2 to override the protected method as public.
|
||||
public class FakeFragment extends WifiNetworkDetailsFragment2 {
|
||||
|
||||
@Override
|
||||
public void addPreferenceController(AbstractPreferenceController controller) {
|
||||
super.addPreferenceController(controller);
|
||||
}
|
||||
}
|
||||
|
||||
public class TestController extends BasePreferenceController {
|
||||
|
||||
public TestController() {
|
||||
super(RuntimeEnvironment.application, TEST_PREFERENCE_KEY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
return AVAILABLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -89,7 +89,15 @@ public class WifiPrivacyPreferenceController2Test {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_canSetPrivacy_shouldBeSelectable() {
|
||||
public void testUpdateState_canSetPrivacyInNextUpdate_shouldBeSelectable() {
|
||||
// Return false in WifiEntry#canSetPrivacy to make preference un-selectable first.
|
||||
when(mMockWifiEntry.canSetPrivacy()).thenReturn(false);
|
||||
|
||||
mPreferenceController.updateState(mDropDownPreference);
|
||||
|
||||
assertThat(mDropDownPreference.isSelectable()).isFalse();
|
||||
|
||||
// Return true in WifiEntry#canSetPrivacy to verify preference back to selectable.
|
||||
when(mMockWifiEntry.canSetPrivacy()).thenReturn(true);
|
||||
|
||||
mPreferenceController.updateState(mDropDownPreference);
|
||||
@@ -98,7 +106,15 @@ public class WifiPrivacyPreferenceController2Test {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_canNotSetPrivacy_shouldNotSelectable() {
|
||||
public void testUpdateState_canNotSetPrivacyInNextUpdate_shouldNotBeSelectable() {
|
||||
// Return true in WifiEntry#canSetPrivacy to make preference selectable first.
|
||||
when(mMockWifiEntry.canSetPrivacy()).thenReturn(true);
|
||||
|
||||
mPreferenceController.updateState(mDropDownPreference);
|
||||
|
||||
assertThat(mDropDownPreference.isSelectable()).isTrue();
|
||||
|
||||
// Return false in WifiEntry#canSetPrivacy to verify preference back to un-selectable.
|
||||
when(mMockWifiEntry.canSetPrivacy()).thenReturn(false);
|
||||
|
||||
mPreferenceController.updateState(mDropDownPreference);
|
||||
|
||||
Reference in New Issue
Block a user