Add test cases for disconnected/not in range network

Since detail page support to display for saved network which connection
state may be disconnected or not in range, add more test cases for this
new change.

Bug: 124707751
Test: atest WifiDetailPreferenceControllerTest passed
Change-Id: Ia6426ed6336c09f387317c5597f8deb14c1a9502
This commit is contained in:
clownshen
2019-03-29 15:27:03 +08:00
committed by Clown SHEN
parent 7b571b7018
commit 38f4acf77f
2 changed files with 460 additions and 2 deletions

View File

@@ -103,6 +103,8 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
@VisibleForTesting
static final String KEY_HEADER = "connection_header";
@VisibleForTesting
static final String KEY_DATA_USAGE_HEADER = "status_header";
@VisibleForTesting
static final String KEY_BUTTONS_PREF = "buttons";
@VisibleForTesting
static final String KEY_SIGNAL_STRENGTH_PREF = "signal_strength";
@@ -426,7 +428,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
if (usingDataUsageHeader(mContext)) {
headerPref.setVisible(false);
mDataUsageSummaryPref = screen.findPreference("status_header");
mDataUsageSummaryPref = screen.findPreference(KEY_DATA_USAGE_HEADER);
mDataUsageSummaryPref.setVisible(true);
mSummaryHeaderController =
new WifiDataUsageSummaryPreferenceController(mFragment.getActivity(),

View File

@@ -43,6 +43,7 @@ import android.net.ConnectivityManager.NetworkCallback;
import android.net.IpPrefix;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.MacAddress;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
@@ -76,6 +77,8 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.ActionButtonsPreference;
import com.android.settingslib.widget.LayoutPreference;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;
import org.junit.Before;
import org.junit.Test;
@@ -95,6 +98,7 @@ import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
@RunWith(RobolectricTestRunner.class)
@@ -107,6 +111,8 @@ public class WifiDetailPreferenceControllerTest {
private static final int RX_LINK_SPEED = 54;
private static final String SSID = "ssid";
private static final String MAC_ADDRESS = WifiInfo.DEFAULT_MAC_ADDRESS;
private static final String RANDOMIZED_MAC_ADDRESS = "RANDOMIZED_MAC_ADDRESS";
private static final String FACTORY_MAC_ADDRESS = "FACTORY_MAC_ADDRESS";
private static final String SECURITY = "None";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -131,9 +137,13 @@ public class WifiDetailPreferenceControllerTest {
@Mock
private WifiManager mockWifiManager;
@Mock
private WifiTracker mockWifiTracker;
@Mock
private MetricsFeatureProvider mockMetricsFeatureProvider;
@Mock
private WifiDetailPreferenceController.IconInjector mockIconInjector;
@Mock
private MacAddress mockMacAddress;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private EntityHeaderController mockHeaderController;
@@ -285,6 +295,48 @@ public class WifiDetailPreferenceControllerTest {
mController = newWifiDetailPreferenceController();
}
private void setUpForConnectedNetwork() {
// Enable saved network detail page feature for this test
FeatureFlagUtils.setEnabled(mContext, FeatureFlags.WIFI_DETAILS_SAVED_SCREEN, true);
when(mockAccessPoint.isActive()).thenReturn(true);
ArrayList list = new ArrayList<>();
list.add(mockAccessPoint);
when(mockWifiTracker.getAccessPoints()).thenReturn(list);
WifiTrackerFactory.setTestingWifiTracker(mockWifiTracker);
when(mockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(true);
when(mockAccessPoint.isReachable()).thenReturn(true);
mController = newWifiDetailPreferenceController();
}
private void setUpForDisconnectedNetwork() {
// Enable saved network detail page feature for this test
FeatureFlagUtils.setEnabled(mContext, FeatureFlags.WIFI_DETAILS_SAVED_SCREEN, true);
when(mockAccessPoint.isActive()).thenReturn(false);
ArrayList list = new ArrayList<>();
list.add(mockAccessPoint);
when(mockWifiTracker.getAccessPoints()).thenReturn(list);
WifiTrackerFactory.setTestingWifiTracker(mockWifiTracker);
when(mockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(true);
when(mockAccessPoint.isReachable()).thenReturn(true);
mController = newWifiDetailPreferenceController();
}
private void setUpForNotInRangeNetwork() {
// Enable saved network detail page feature for this test
FeatureFlagUtils.setEnabled(mContext, FeatureFlags.WIFI_DETAILS_SAVED_SCREEN, true);
when(mockAccessPoint.isActive()).thenReturn(false);
ArrayList list = new ArrayList<>();
list.add(mockAccessPoint);
when(mockWifiTracker.getAccessPoints()).thenReturn(list);
WifiTrackerFactory.setTestingWifiTracker(mockWifiTracker);
when(mockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(false);
when(mockAccessPoint.isReachable()).thenReturn(false);
mController = newWifiDetailPreferenceController();
}
private WifiDetailPreferenceController newWifiDetailPreferenceController() {
return new WifiDetailPreferenceController(
mockAccessPoint,
@@ -362,6 +414,33 @@ public class WifiDetailPreferenceControllerTest {
verify(mockWifiManager, times(1)).getConnectionInfo();
}
@Test
public void latestWifiInfo_shouldBeFetchedInDisplayPreferenceForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
verify(mockWifiManager, times(1)).getConnectionInfo();
}
@Test
public void latestWifiInfo_shouldNotBeFetchedInDisplayPreferenceForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockWifiManager, never()).getConnectionInfo();
}
@Test
public void latestWifiInfo_shouldNotBeFetchedInDisplayPreferenceForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
verify(mockWifiManager, never()).getConnectionInfo();
}
@Test
public void latestNetworkInfo_shouldBeFetchedInDisplayPreference() {
displayAndResume();
@@ -369,6 +448,33 @@ public class WifiDetailPreferenceControllerTest {
verify(mockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
}
@Test
public void latestNetworkInfo_shouldBeFetchedInDisplayPreferenceForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
verify(mockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
}
@Test
public void latestNetworkInfo_shouldNotBeFetchedInDisplayPreferenceForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockConnectivityManager, never()).getNetworkInfo(any(Network.class));
}
@Test
public void latestNetworkInfo_shouldNotBeFetchedInDisplayPreferenceForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
verify(mockConnectivityManager, never()).getNetworkInfo(any(Network.class));
}
@Test
public void networkCallback_shouldBeRegisteredOnResume() {
displayAndResume();
@@ -395,6 +501,35 @@ public class WifiDetailPreferenceControllerTest {
verify(mockHeaderController).setIcon(expectedIcon);
}
@Test
public void entityHeader_shouldHaveIconSetForConnectedNetwork() {
setUpForConnectedNetwork();
Drawable expectedIcon = mockIconInjector.getIcon(LEVEL);
displayAndResume();
verify(mockHeaderController).setIcon(expectedIcon);
}
@Test
public void entityHeader_shouldHaveIconSetForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
Drawable expectedIcon = mockIconInjector.getIcon(LEVEL);
displayAndResume();
verify(mockHeaderController).setIcon(expectedIcon);
}
@Test
public void entityHeader_shouldNotHaveIconSetForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
verify(mockHeaderController, never()).setIcon(any(Drawable.class));
}
@Test
public void entityHeader_shouldHaveLabelSetToTitle() {
String label = "title";
@@ -422,6 +557,33 @@ public class WifiDetailPreferenceControllerTest {
verify(mockSignalStrengthPref).setIcon(any(Drawable.class));
}
@Test
public void signalStrengthPref_shouldHaveIconSetForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
verify(mockSignalStrengthPref).setIcon(any(Drawable.class));
}
@Test
public void signalStrengthPref_shouldHaveIconSetForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockSignalStrengthPref).setIcon(any(Drawable.class));
}
@Test
public void signalStrengthPref_shouldNotHaveIconSetForOutOfRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
verify(mockSignalStrengthPref, never()).setIcon(any(Drawable.class));
}
@Test
public void signalStrengthPref_shouldHaveDetailTextSet() {
String expectedStrength =
@@ -432,6 +594,37 @@ public class WifiDetailPreferenceControllerTest {
verify(mockSignalStrengthPref).setSummary(expectedStrength);
}
@Test
public void signalStrengthPref_shouldHaveDetailTextSetForConnectedNetwork() {
setUpForConnectedNetwork();
String expectedStrength =
mContext.getResources().getStringArray(R.array.wifi_signal)[LEVEL];
displayAndResume();
verify(mockSignalStrengthPref).setSummary(expectedStrength);
}
@Test
public void signalStrengthPref_shouldHaveDetailTextSetForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
String expectedStrength =
mContext.getResources().getStringArray(R.array.wifi_signal)[LEVEL];
displayAndResume();
verify(mockSignalStrengthPref).setSummary(expectedStrength);
}
@Test
public void signalStrengthPref_shouldNotHaveDetailTextSetForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
verify(mockSignalStrengthPref, never()).setSummary(any(String.class));
}
@Test
public void linkSpeedPref_shouldHaveDetailTextSet() {
String expectedLinkSpeed = mContext.getString(R.string.tx_link_speed, TX_LINK_SPEED);
@@ -450,6 +643,37 @@ public class WifiDetailPreferenceControllerTest {
verify(mockTxLinkSpeedPref).setVisible(false);
}
@Test
public void linkSpeedPref_shouldVisibleForConnectedNetwork() {
setUpForConnectedNetwork();
String expectedLinkSpeed = mContext.getString(R.string.tx_link_speed, TX_LINK_SPEED);
displayAndResume();
verify(mockTxLinkSpeedPref).setVisible(true);
verify(mockTxLinkSpeedPref).setSummary(expectedLinkSpeed);
}
@Test
public void linkSpeedPref_shouldInvisibleForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockTxLinkSpeedPref).setVisible(false);
verify(mockTxLinkSpeedPref, never()).setSummary(any(String.class));
}
@Test
public void linkSpeedPref_shouldInvisibleForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
verify(mockTxLinkSpeedPref).setVisible(false);
verify(mockTxLinkSpeedPref, never()).setSummary(any(String.class));
}
@Test
public void rxLinkSpeedPref_shouldHaveDetailTextSet() {
String expectedLinkSpeed = mContext.getString(R.string.rx_link_speed, RX_LINK_SPEED);
@@ -468,6 +692,37 @@ public class WifiDetailPreferenceControllerTest {
verify(mockRxLinkSpeedPref).setVisible(false);
}
@Test
public void rxLinkSpeedPref_shouldVisibleForConnectedNetwork() {
setUpForConnectedNetwork();
String expectedLinkSpeed = mContext.getString(R.string.rx_link_speed, RX_LINK_SPEED);
displayAndResume();
verify(mockRxLinkSpeedPref).setVisible(true);
verify(mockRxLinkSpeedPref).setSummary(expectedLinkSpeed);
}
@Test
public void rxLinkSpeedPref_shouldInvisibleForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockRxLinkSpeedPref).setVisible(false);
verify(mockRxLinkSpeedPref, never()).setSummary(any(String.class));
}
@Test
public void rxLinkSpeedPref_shouldInvisibleForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
verify(mockRxLinkSpeedPref).setVisible(false);
verify(mockRxLinkSpeedPref, never()).setSummary(any(String.class));
}
@Test
public void ssidPref_shouldHaveDetailTextSet() {
when(mockAccessPoint.isPasspoint()).thenReturn(true);
@@ -519,6 +774,42 @@ public class WifiDetailPreferenceControllerTest {
verify(mockMacAddressPref).setSummary(MAC_ADDRESS);
}
@Test
public void macAddressPref_shouldVisibleForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
verify(mockMacAddressPref).setVisible(true);
verify(mockMacAddressPref).setSummary(MAC_ADDRESS);
}
@Test
public void macAddressPref_shouldVisibleAsRandomizedForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
mockWifiConfig.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_PERSISTENT;
when(mockWifiConfig.getRandomizedMacAddress()).thenReturn(mockMacAddress);
when(mockMacAddress.toString()).thenReturn(RANDOMIZED_MAC_ADDRESS);
displayAndResume();
verify(mockMacAddressPref).setVisible(true);
verify(mockMacAddressPref).setSummary(RANDOMIZED_MAC_ADDRESS);
}
@Test
public void macAddressPref_shouldVisibleAsFactoryForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
mockWifiConfig.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
when(mockWifiManager.getFactoryMacAddresses())
.thenReturn(new String[]{FACTORY_MAC_ADDRESS});
displayAndResume();
verify(mockMacAddressPref).setVisible(true);
verify(mockMacAddressPref).setSummary(FACTORY_MAC_ADDRESS);
}
@Test
public void ipAddressPref_shouldHaveDetailTextSet() {
mLinkProperties.addLinkAddress(Constants.IPV4_ADDR);
@@ -528,6 +819,26 @@ public class WifiDetailPreferenceControllerTest {
verify(mockIpAddressPref).setSummary(Constants.IPV4_ADDR.getAddress().getHostAddress());
}
@Test
public void ipAddressPref_shouldHaveDetailTextSetForConnectedNetwork() {
setUpForConnectedNetwork();
mLinkProperties.addLinkAddress(Constants.IPV4_ADDR);
displayAndResume();
verify(mockIpAddressPref).setSummary(Constants.IPV4_ADDR.getAddress().getHostAddress());
verify(mockIpAddressPref).setVisible(true);
}
@Test
public void ipAddressPref_shouldInvisibleForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockIpAddressPref).setVisible(false);
}
@Test
public void gatewayAndSubnet_shouldHaveDetailTextSet() {
mLinkProperties.addLinkAddress(Constants.IPV4_ADDR);
@@ -540,6 +851,29 @@ public class WifiDetailPreferenceControllerTest {
verify(mockGatewayPref).setSummary("192.0.2.127");
}
@Test
public void gatewayAndSubnet_shouldHaveDetailTextSetForConnectedNetwork() {
setUpForConnectedNetwork();
mLinkProperties.addLinkAddress(Constants.IPV4_ADDR);
mLinkProperties.addRoute(Constants.IPV4_DEFAULT);
mLinkProperties.addRoute(Constants.IPV4_SUBNET);
displayAndResume();
verify(mockSubnetPref).setSummary("255.255.255.128");
verify(mockGatewayPref).setSummary("192.0.2.127");
verify(mockSubnetPref).setVisible(true);
}
@Test
public void gatewayAndSubnet_shouldInvisibleSetForDisconnectedNetwork() {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockSubnetPref).setVisible(false);
}
@Test
public void dnsServersPref_shouldHaveDetailTextSet() throws UnknownHostException {
mLinkProperties.addDnsServer(InetAddress.getByAddress(new byte[] {8, 8, 4, 4}));
@@ -554,6 +888,33 @@ public class WifiDetailPreferenceControllerTest {
Constants.IPV6_DNS.getHostAddress());
}
@Test
public void dnsServersPref_shouldHaveDetailTextSetForConnectedNetwork()
throws UnknownHostException {
setUpForConnectedNetwork();
mLinkProperties.addDnsServer(InetAddress.getByAddress(new byte[] {8, 8, 4, 4}));
mLinkProperties.addDnsServer(InetAddress.getByAddress(new byte[] {8, 8, 8, 8}));
mLinkProperties.addDnsServer(Constants.IPV6_DNS);
displayAndResume();
verify(mockDnsPref).setSummary(
"8.8.4.4\n" +
"8.8.8.8\n" +
Constants.IPV6_DNS.getHostAddress());
verify(mockDnsPref).setVisible(true);
}
@Test
public void dnsServersPref_shouldInvisibleSetForDisconnectedNetwork()
throws UnknownHostException {
setUpForDisconnectedNetwork();
displayAndResume();
verify(mockDnsPref).setVisible(false);
}
@Test
public void noCurrentNetwork_shouldFinishActivity() {
// If WifiManager#getCurrentNetwork() returns null, then the network is neither connected
@@ -565,6 +926,18 @@ public class WifiDetailPreferenceControllerTest {
verify(mockActivity).finish();
}
@Test
public void noCurrentNetwork_shouldNotFinishActivityForConnectedNetwork() {
// For new feature for display detail page for saved network for disconnected network,
// mNetwork may be null, do finish activity
setUpForConnectedNetwork();
when(mockWifiManager.getCurrentNetwork()).thenReturn(null);
displayAndResume();
verify(mockActivity, never()).finish();
}
@Test
public void noLinkProperties_allIpDetailsHidden() {
when(mockConnectivityManager.getLinkProperties(mockNetwork)).thenReturn(null);
@@ -584,6 +957,25 @@ public class WifiDetailPreferenceControllerTest {
verify(mockDnsPref, never()).setVisible(true);
}
@Test
public void disconnectedNetwork_allIpDetailsHidden() {
setUpForDisconnectedNetwork();
reset(mockIpv6Category, mockIpAddressPref, mockSubnetPref, mockGatewayPref, mockDnsPref);
displayAndResume();
verify(mockIpv6Category).setVisible(false);
verify(mockIpAddressPref).setVisible(false);
verify(mockSubnetPref).setVisible(false);
verify(mockGatewayPref).setVisible(false);
verify(mockDnsPref).setVisible(false);
verify(mockIpv6Category, never()).setVisible(true);
verify(mockIpAddressPref, never()).setVisible(true);
verify(mockSubnetPref, never()).setVisible(true);
verify(mockGatewayPref, never()).setVisible(true);
verify(mockDnsPref, never()).setVisible(true);
}
// Convenience method to convert a LinkAddress to a string without a prefix length.
private String asString(LinkAddress l) {
return l.getAddress().getHostAddress();
@@ -762,7 +1154,7 @@ public class WifiDetailPreferenceControllerTest {
displayAndResume();
verify(mockButtonsPref).setButton3Visible(false);
verify(mockButtonsPref).setButton4Visible(false);
}
@Test
@@ -871,6 +1263,20 @@ public class WifiDetailPreferenceControllerTest {
verify(mockWifiManager, times(2)).getConnectionInfo();
}
@Test
public void networkStateChangedIntent_shouldRefetchInfoForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
verify(mockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
verify(mockWifiManager, times(1)).getConnectionInfo();
mContext.sendBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
verify(mockConnectivityManager, times(2)).getNetworkInfo(any(Network.class));
verify(mockWifiManager, times(2)).getConnectionInfo();
}
@Test
public void rssiChangedIntent_shouldRefetchInfo() {
displayAndResume();
@@ -884,6 +1290,20 @@ public class WifiDetailPreferenceControllerTest {
verify(mockWifiManager, times(2)).getConnectionInfo();
}
@Test
public void rssiChangedIntent_shouldRefetchInfoForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
verify(mockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
verify(mockWifiManager, times(1)).getConnectionInfo();
mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
verify(mockConnectivityManager, times(2)).getNetworkInfo(any(Network.class));
verify(mockWifiManager, times(2)).getConnectionInfo();
}
@Test
public void networkDisconnectedState_shouldFinishActivity() {
displayAndResume();
@@ -894,6 +1314,18 @@ public class WifiDetailPreferenceControllerTest {
verify(mockActivity).finish();
}
@Test
public void networkDisconnectedState_shouldNotFinishActivityForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
when(mockConnectivityManager.getNetworkInfo(any(Network.class))).thenReturn(null);
mContext.sendBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
verify(mockActivity, never()).finish();
}
@Test
public void networkOnLost_shouldFinishActivity() {
displayAndResume();
@@ -903,6 +1335,17 @@ public class WifiDetailPreferenceControllerTest {
verify(mockActivity).finish();
}
@Test
public void networkOnLost_shouldNotFinishActivityForConnectedNetwork() {
setUpForConnectedNetwork();
displayAndResume();
mCallbackCaptor.getValue().onLost(mockNetwork);
verify(mockActivity, never()).finish();
}
@Test
public void ipv6AddressPref_shouldHaveHostAddressTextSet() {
mLinkProperties.addLinkAddress(Constants.IPV6_LINKLOCAL);
@@ -982,6 +1425,19 @@ public class WifiDetailPreferenceControllerTest {
verify(mockIconInjector, times(2)).getIcon(anyInt());
}
@Test
public void testRefreshRssiViews_shouldNotUpdateForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
displayAndResume();
when(mockAccessPoint.getLevel()).thenReturn(0);
mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
verify(mockSignalStrengthPref, times(2)).setVisible(false);
}
private ActionButtonsPreference createMock() {
final ActionButtonsPreference pref = mock(ActionButtonsPreference.class);
when(pref.setButton1Text(anyInt())).thenReturn(pref);