From 23d91663f633d28d2917b80b7e9f7d35ee4ed880 Mon Sep 17 00:00:00 2001 From: govenliu Date: Fri, 15 May 2020 15:59:18 +0800 Subject: [PATCH] [Wi-Fi] Enhance AddAppNetworksFragment unit test cases Add new unit test cases in AddAppNetworksFragmentTest.java The coverage rate of com.android.settings.wifi.addappnetworks will raise from 65% to 81% Bug: 151696220 Test: make RunSettingsRoboTests ROBOTEST_FILTER=AddAppNetworksFragmentTest Change-Id: Iae15b5ad27b20f90cbf8b0318a24a9069b738a33 --- .../AddAppNetworksFragment.java | 15 +- .../AddAppNetworksFragmentTest.java | 205 +++++++++++++++++- 2 files changed, 203 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java index a48358f8be6..a2119791d73 100644 --- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java +++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java @@ -86,9 +86,9 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements static final int RESULT_NETWORK_ALREADY_EXISTS = 2; // Handler messages for controlling different state and delay showing the status message. - private static final int MESSAGE_START_SAVING_NETWORK = 1; - private static final int MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK = 2; - private static final int MESSAGE_SHOW_SAVE_FAILED = 3; + @VisibleForTesting static final int MESSAGE_START_SAVING_NETWORK = 1; + @VisibleForTesting static final int MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK = 2; + @VisibleForTesting static final int MESSAGE_SHOW_SAVE_FAILED = 3; private static final int MESSAGE_FINISH = 4; // Signal level for the initial signal icon. @@ -137,7 +137,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements private WifiManager.ActionListener mSaveListener; private WifiManager mWifiManager; - private final Handler mHandler = new Handler() { + @VisibleForTesting + final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { showSaveStatusByState(msg.what); @@ -638,7 +639,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements /** * Call framework API to save single network. */ - private void saveNetwork(int index) { + @VisibleForTesting + void saveNetwork(int index) { final PasspointConfiguration passpointConfig = mUiToRequestedList.get(index).mWifiNetworkSuggestion.getPasspointConfig(); if (passpointConfig != null) { @@ -689,7 +691,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements return SettingsEnums.PANEL_ADD_WIFI_NETWORKS; } - private void showSaveStatusByState(int status) { + @VisibleForTesting + void showSaveStatusByState(int status) { switch (status) { case MESSAGE_START_SAVING_NETWORK: if (mIsSingleNetwork) { diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java index 3f02e2e2c6e..8d843e92be9 100644 --- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java +++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java @@ -18,9 +18,12 @@ package com.android.settings.wifi.addappnetworks; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -35,6 +38,7 @@ import android.provider.Settings; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; import com.android.settings.R; import com.android.wifitrackerlib.WifiEntry; @@ -43,8 +47,10 @@ import com.android.wifitrackerlib.WifiPickerTracker; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.shadows.androidx.fragment.FragmentController; @@ -74,26 +80,33 @@ public class AddAppNetworksFragmentTest { private ArrayList mFakedResultArrayList = new ArrayList<>(); @Mock - private WifiEntry mMockWifiEntry; + private WifiEntry mWifiEntry; @Mock - private WifiPickerTracker mMockWifiPickerTracker; + private WifiPickerTracker mWifiPickerTracker; @Mock - private WifiManager mMockWifiManager; + private WifiManager mWifiManager; + + private FragmentActivity mActivity; @Before public void setUp() { MockitoAnnotations.initMocks(this); mAddAppNetworksFragment = spy(new AddAppNetworksFragment()); + mActivity = spy(Robolectric.setupActivity(FragmentActivity.class)); + doReturn(mActivity).when(mAddAppNetworksFragment).getActivity(); + when(mWifiManager.isWifiEnabled()).thenReturn(true); + when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager); + mNewWpaSuggestionEntry = generateRegularWifiSuggestion(FAKE_NEW_WPA_SSID, WifiConfiguration.KeyMgmt.WPA_PSK, "1234567890"); mNewOpenSuggestionEntry = generateRegularWifiSuggestion(FAKE_NEW_OPEN_SSID, WifiConfiguration.KeyMgmt.NONE, null); mSavedWpaConfigurationEntry = generateRegularWifiConfiguration(FAKE_NEW_SAVED_WPA_SSID, WifiConfiguration.KeyMgmt.WPA_PSK, "\"1234567890\""); - when(mMockWifiManager.isWifiEnabled()).thenReturn(true); - mAddAppNetworksFragment.mWifiPickerTracker = mMockWifiPickerTracker; + + mAddAppNetworksFragment.mWifiPickerTracker = mWifiPickerTracker; setUpOneScannedNetworkWithScanedLevel4(); } @@ -213,7 +226,7 @@ public class AddAppNetworksFragmentTest { @Test public void withOneSuggestion_whenScanResultChanged_uiListShouldHaveNewLevel() { // Arrange - when(mMockWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED); + when(mWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED); // Setup a fake saved network list and assign to fragment. addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry); // Setup one specified networks and its results and assign to fragment. @@ -233,7 +246,7 @@ public class AddAppNetworksFragmentTest { @Test public void withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel() { // Arrange - when(mMockWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED); + when(mWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED); // Setup a fake saved network list and assign to fragment. addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry); // Setup one specified networks and its results and assign to fragment. @@ -263,12 +276,182 @@ public class AddAppNetworksFragmentTest { verify(mAddAppNetworksFragment.mWorkerThread).quit(); } + @Test + public void status_withOneNetworkSave_shouldShowOneNetworkSaving() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + + mAddAppNetworksFragment.showSaveStatusByState( + AddAppNetworksFragment.MESSAGE_START_SAVING_NETWORK); + + final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById( + R.id.single_status); + assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString( + R.string.wifi_add_app_single_network_saving_summary)); + } + + @Test + public void status_withTwoNetworksSave_shouldShowMultipleNetworksSaving() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + + mAddAppNetworksFragment.showSaveStatusByState( + AddAppNetworksFragment.MESSAGE_START_SAVING_NETWORK); + + final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById( + R.id.app_summary); + assertThat(textView.getText()).isEqualTo( + mAddAppNetworksFragment.getString(R.string.wifi_add_app_networks_saving_summary, + 2)); + } + + @Test + public void status_withOneNetworkSaved_shouldShowOneNetworkSaved() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + + mAddAppNetworksFragment.showSaveStatusByState( + AddAppNetworksFragment.MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK); + + final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById( + R.id.single_status); + assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString( + R.string.wifi_add_app_single_network_saved_summary)); + } + + @Test + public void status_withTwoNetworksSaved_shouldShowMultipleNetworksSaved() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + + mAddAppNetworksFragment.showSaveStatusByState( + AddAppNetworksFragment.MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK); + + final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById( + R.id.app_summary); + assertThat(textView.getText()).isEqualTo( + mAddAppNetworksFragment.getString(R.string.wifi_add_app_networks_saved_summary)); + } + + @Test + public void status_withOneNetworkSaveFailed_shouldShowOneNetworkFailed() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + + mAddAppNetworksFragment.showSaveStatusByState( + AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED); + + final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById( + R.id.single_status); + assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString( + R.string.wifi_add_app_network_save_failed_summary)); + } + + @Test + public void status_withTwoNetworksSaveFailed_shouldShowMultipleNetworksFailed() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + + mAddAppNetworksFragment.showSaveStatusByState( + AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED); + + final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById( + R.id.app_summary); + assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString( + R.string.wifi_add_app_network_save_failed_summary)); + } + + @Test + public void saveOneNetwork_shouldCallWifiManagerSaveOnce() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + + mAddAppNetworksFragment.saveNetwork(0 /* index */); + + verify(mWifiManager, times(1)).save(any(), any()); + } + + @Test + public void onSuccess_saveTwoNetworks_shouldCallWifiNamagerSaveTwice() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + mAddAppNetworksFragment.saveNetwork(0 /* index */); + + final ArgumentCaptor wifiCallbackCaptor = + ArgumentCaptor.forClass(WifiManager.ActionListener.class); + verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture()); + wifiCallbackCaptor.getValue().onSuccess(); + + verify(mWifiManager, times(2)).save(any(), any()); + } + + @Test + public void onFailedFirstOne_saveTwoNetworks_shouldAlsoCallWifiNamagerSaveTwice() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + mAddAppNetworksFragment.saveNetwork(0 /* index */); + + final ArgumentCaptor wifiCallbackCaptor = + ArgumentCaptor.forClass(WifiManager.ActionListener.class); + verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture()); + wifiCallbackCaptor.getValue().onFailure(anyInt()); + + verify(mWifiManager, times(2)).save(any(), any()); + } + + @Test + public void saveSuccess_shouldEnterShowAndConnectState() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + mAddAppNetworksFragment.saveNetwork(0 /* index */); + + final ArgumentCaptor wifiCallbackCaptor = + ArgumentCaptor.forClass(WifiManager.ActionListener.class); + verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture()); + wifiCallbackCaptor.getValue().onSuccess(); + + assertThat(mAddAppNetworksFragment.mHandler.hasMessages( + AddAppNetworksFragment.MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK)).isTrue(); + } + + @Test + public void saveFailed_shouldEnterFailedState() { + addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry); + setUpBundle(mFakedSpecifiedNetworksList); + setupFragment(); + mAddAppNetworksFragment.saveNetwork(0 /* index */); + + final ArgumentCaptor wifiCallbackCaptor = + ArgumentCaptor.forClass( + WifiManager.ActionListener.class); + verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture()); + wifiCallbackCaptor.getValue().onFailure(1 /* reason */); + + assertThat(mAddAppNetworksFragment.mHandler.hasMessages( + AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED)).isTrue(); + } + private void setUpOneScannedNetworkWithScanedLevel4() { final ArrayList list = new ArrayList<>(); - list.add(mMockWifiEntry); - when(mMockWifiPickerTracker.getWifiEntries()).thenReturn(list); - when(mMockWifiEntry.getSsid()).thenReturn(FAKE_NEW_OPEN_SSID); - when(mMockWifiEntry.getLevel()).thenReturn(SCANED_LEVEL4); + list.add(mWifiEntry); + when(mWifiPickerTracker.getWifiEntries()).thenReturn(list); + when(mWifiEntry.getSsid()).thenReturn(FAKE_NEW_OPEN_SSID); + when(mWifiEntry.getLevel()).thenReturn(SCANED_LEVEL4); } private void addOneSavedNetworkConfiguration(@NonNull WifiConfiguration wifiConfiguration) {