Merge "Add test cases for disconnected/not in range network"

This commit is contained in:
Clown SHEN
2019-04-02 08:38:05 +00:00
committed by Android (Google) Code Review
2 changed files with 460 additions and 2 deletions

View File

@@ -106,6 +106,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";
@@ -433,7 +435,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);