summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAhmed ElArabawy <arabawy@google.com>2020-03-10 14:30:37 -0700
committerAhmed ElArabawy <arabawy@google.com>2020-03-15 13:13:05 -0700
commit47e13d411954706bc6c4abbeb655355385f95811 (patch)
treed8d79ab47cadd4b8397b800f07f1f5da47a872ad /tests
parentaa27a41652b36b7af74781a586ae7e64ae187627 (diff)
Improve condition for single saved network scan profile
This commit improves the conditions which require following the single saved network scanning profile to include suggestions networks and passpoint. Bug: 148216614 Test: atest com.android.server.wifi Change-Id: Ibe0e62751de000ab392a276d3f8142b52a1826a2
Diffstat (limited to 'tests')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java226
1 files changed, 199 insertions, 27 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
index f6687205e..55bf3b12f 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
@@ -35,6 +35,7 @@ import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
+import android.net.wifi.WifiNetworkSuggestion;
import android.net.wifi.WifiScanner;
import android.net.wifi.WifiScanner.PnoScanListener;
import android.net.wifi.WifiScanner.PnoSettings;
@@ -42,6 +43,7 @@ import android.net.wifi.WifiScanner.ScanData;
import android.net.wifi.WifiScanner.ScanListener;
import android.net.wifi.WifiScanner.ScanSettings;
import android.net.wifi.WifiSsid;
+import android.net.wifi.hotspot2.PasspointConfiguration;
import android.os.Handler;
import android.os.Process;
import android.os.SystemClock;
@@ -107,12 +109,16 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
.thenReturn(mWifiNetworkSuggestionsManager);
when(mWifiNetworkSuggestionsManager.retrieveHiddenNetworkList())
.thenReturn(new ArrayList<>());
+ when(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions())
+ .thenReturn(new HashSet<>());
when(mWifiInjector.getBssidBlocklistMonitor()).thenReturn(mBssidBlocklistMonitor);
when(mWifiInjector.getWifiChannelUtilizationScan()).thenReturn(mWifiChannelUtilization);
when(mWifiInjector.getWifiScoreCard()).thenReturn(mWifiScoreCard);
when(mWifiInjector.getWifiNetworkSuggestionsManager())
.thenReturn(mWifiNetworkSuggestionsManager);
when(mWifiInjector.getPasspointManager()).thenReturn(mPasspointManager);
+ when(mPasspointManager.getProviderConfigs(anyInt(), anyBoolean()))
+ .thenReturn(new ArrayList<>());
mWifiConnectivityManager = createConnectivityManager();
verify(mWifiConfigManager).addOnNetworkUpdateListener(anyObject());
mWifiConnectivityManager.setTrustedConnectionAllowed(true);
@@ -184,6 +190,9 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
@Mock private PasspointManager mPasspointManager;
@Mock private WifiScoreCard.PerNetwork mPerNetwork;
@Mock private WifiScoreCard.PerNetwork mPerNetwork1;
+ @Mock private PasspointConfiguration mPasspointConfiguration;
+ @Mock private WifiConfiguration mSuggestionConfig;
+ @Mock private WifiNetworkSuggestion mWifiNetworkSuggestion;
@Mock WifiCandidates.Candidate mCandidate1;
@Mock WifiCandidates.Candidate mCandidate2;
private List<WifiCandidates.Candidate> mCandidateList;
@@ -220,6 +229,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
private static final String TEST_FQDN = "FQDN";
private static final String TEST_SSID = "SSID";
private static final int TEMP_BSSID_BLOCK_DURATION_MS = 10 * 1000; // 10 seconds
+ private static final int TEST_CONNECTED_NETWORK_ID = 55;
Context mockContext() {
Context context = mock(Context.class);
@@ -383,6 +393,16 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
mLocalLog);
}
+ void setWifiStateConnected() {
+ // Prep for setting WiFi to connected state
+ WifiConfiguration connectedWifiConfiguration = new WifiConfiguration();
+ connectedWifiConfiguration.networkId = TEST_CONNECTED_NETWORK_ID;
+ when(mClientModeImpl.getCurrentWifiConfiguration()).thenReturn(connectedWifiConfiguration);
+
+ mWifiConnectivityManager.handleConnectionStateChanged(
+ WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ }
+
/**
* Wifi enters disconnected state while screen is on.
*
@@ -416,6 +436,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
mWifiConnectivityManager.handleScreenStateChanged(true);
// Set WiFi to connected state
+ setWifiStateConnected();
mWifiConnectivityManager.handleConnectionStateChanged(
WifiConnectivityManager.WIFI_STATE_CONNECTED);
@@ -453,8 +474,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
@Test
public void turnScreenOnWhenWifiInConnectedState() {
// Set WiFi to connected state
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Set screen to on
mWifiConnectivityManager.handleScreenStateChanged(true);
@@ -480,8 +500,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
mWifiConnectivityManager.setTrustedConnectionAllowed(true);
// Set WiFi to connected state
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Set screen to on
mWifiConnectivityManager.handleScreenStateChanged(true);
@@ -1213,8 +1232,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
// Set WiFi to connected state to trigger periodic scan
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Get the first periodic scan interval
long firstIntervalMs = mAlarmManager
@@ -1302,6 +1320,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
/**
* When screen on and single saved network schedule is set
* If we have a single saved network (connected network),
+ * no passpoint or suggestion networks.
* the single-saved-network connected state scan schedule is used
*/
@Test
@@ -1322,7 +1341,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
VALID_CONNECTED_SINGLE_SAVED_NETWORK_SCHEDULE_SEC);
WifiConfiguration wifiConfiguration = new WifiConfiguration();
- wifiConfiguration.status = WifiConfiguration.Status.CURRENT;
+ wifiConfiguration.networkId = TEST_CONNECTED_NETWORK_ID;
List<WifiConfiguration> wifiConfigurationList = new ArrayList<WifiConfiguration>();
wifiConfigurationList.add(wifiConfiguration);
when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(wifiConfigurationList);
@@ -1331,8 +1350,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mWifiConnectivityHelper.isFirmwareRoamingSupported()).thenReturn(true);
// Set WiFi to connected state to trigger periodic scan
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Get the first periodic scan interval
long firstIntervalMs = mAlarmManager
@@ -1344,10 +1362,12 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
/**
* When screen on and single saved network schedule is set
* If we have a single saved network (not connected network),
+ * no passpoint or suggestion networks.
* the regular connected state scan schedule is used
*/
@Test
public void checkScanScheduleForSingleSavedNetwork() {
+ int testSavedNetworkId = TEST_CONNECTED_NETWORK_ID + 1;
long currentTimeStamp = CURRENT_SYSTEM_TIME_MS;
when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
@@ -1368,13 +1388,172 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
+ wifiConfiguration.networkId = testSavedNetworkId;
List<WifiConfiguration> wifiConfigurationList = new ArrayList<WifiConfiguration>();
wifiConfigurationList.add(wifiConfiguration);
when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(wifiConfigurationList);
// Set WiFi to connected state to trigger periodic scan
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
+
+ // Get the first periodic scan interval
+ long firstIntervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - currentTimeStamp;
+ assertEquals(VALID_CONNECTED_SINGLE_SCAN_SCHEDULE_SEC[0] * 1000, firstIntervalMs);
+ }
+
+ /**
+ * When screen on and single saved network schedule is set
+ * If we have a single passpoint network (connected network),
+ * and no saved or suggestion networks the single-saved-network
+ * connected state scan schedule is used.
+ */
+ @Test
+ public void checkScanScheduleForSinglePasspointNetworkConnected() {
+ long currentTimeStamp = CURRENT_SYSTEM_TIME_MS;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+
+ // Set screen to ON
+ mWifiConnectivityManager.handleScreenStateChanged(true);
+
+ // Wait for max scanning interval so that any impact triggered
+ // by screen state change can settle
+ currentTimeStamp += MAX_SCAN_INTERVAL_IN_SCHEDULE_SEC * 1000;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+
+ mResources.setIntArray(
+ R.array.config_wifiSingleSavedNetworkConnectedScanIntervalScheduleSec,
+ VALID_CONNECTED_SINGLE_SAVED_NETWORK_SCHEDULE_SEC);
+
+ // Prepare for a single passpoint network
+ WifiConfiguration config = new WifiConfiguration();
+ config.networkId = TEST_CONNECTED_NETWORK_ID;
+ String passpointKey = "PASSPOINT_KEY";
+ when(mWifiConfigManager.getConfiguredNetwork(passpointKey)).thenReturn(config);
+ List<PasspointConfiguration> passpointNetworks = new ArrayList<PasspointConfiguration>();
+ passpointNetworks.add(mPasspointConfiguration);
+ when(mPasspointConfiguration.getUniqueId()).thenReturn(passpointKey);
+ when(mPasspointManager.getProviderConfigs(anyInt(), anyBoolean()))
+ .thenReturn(passpointNetworks);
+
+ // Prepare for no saved networks
+ when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(new ArrayList<>());
+
+ // Set firmware roaming to enabled
+ when(mWifiConnectivityHelper.isFirmwareRoamingSupported()).thenReturn(true);
+
+ // Set WiFi to connected state to trigger periodic scan
+ setWifiStateConnected();
+
+ // Get the first periodic scan interval
+ long firstIntervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - currentTimeStamp;
+ assertEquals(VALID_CONNECTED_SINGLE_SAVED_NETWORK_SCHEDULE_SEC[0] * 1000, firstIntervalMs);
+ }
+
+ /**
+ * When screen on and single saved network schedule is set
+ * If we have a single suggestion network (connected network),
+ * and no saved network or passpoint networks the single-saved-network
+ * connected state scan schedule is used
+ */
+ @Test
+ public void checkScanScheduleForSingleSuggestionsNetworkConnected() {
+ long currentTimeStamp = CURRENT_SYSTEM_TIME_MS;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+
+ // Set screen to ON
+ mWifiConnectivityManager.handleScreenStateChanged(true);
+
+ // Wait for max scanning interval so that any impact triggered
+ // by screen state change can settle
+ currentTimeStamp += MAX_SCAN_INTERVAL_IN_SCHEDULE_SEC * 1000;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+
+ mResources.setIntArray(
+ R.array.config_wifiSingleSavedNetworkConnectedScanIntervalScheduleSec,
+ VALID_CONNECTED_SINGLE_SAVED_NETWORK_SCHEDULE_SEC);
+
+ // Prepare for a single suggestions network
+ WifiConfiguration config = new WifiConfiguration();
+ config.networkId = TEST_CONNECTED_NETWORK_ID;
+ String networkKey = "NETWORK_KEY";
+ when(mWifiConfigManager.getConfiguredNetwork(networkKey)).thenReturn(config);
+ when(mSuggestionConfig.getKey()).thenReturn(networkKey);
+ when(mWifiNetworkSuggestion.getWifiConfiguration()).thenReturn(mSuggestionConfig);
+ Set<WifiNetworkSuggestion> suggestionNetworks = new HashSet<WifiNetworkSuggestion>();
+ suggestionNetworks.add(mWifiNetworkSuggestion);
+ when(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions())
+ .thenReturn(suggestionNetworks);
+
+ // Prepare for no saved networks
+ when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(new ArrayList<>());
+
+ // Set firmware roaming to enabled
+ when(mWifiConnectivityHelper.isFirmwareRoamingSupported()).thenReturn(true);
+
+ // Set WiFi to connected state to trigger periodic scan
+ setWifiStateConnected();
+
+ // Get the first periodic scan interval
+ long firstIntervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - currentTimeStamp;
+ assertEquals(VALID_CONNECTED_SINGLE_SAVED_NETWORK_SCHEDULE_SEC[0] * 1000, firstIntervalMs);
+ }
+
+ /**
+ * When screen on and single saved network schedule is set
+ * If we have a single suggestion network (connected network),
+ * and saved network/passpoint networks the regular
+ * connected state scan schedule is used
+ */
+ @Test
+ public void checkScanScheduleForSavedPasspointSuggestionNetworkConnected() {
+ long currentTimeStamp = CURRENT_SYSTEM_TIME_MS;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+
+ // Set screen to ON
+ mWifiConnectivityManager.handleScreenStateChanged(true);
+
+ // Wait for max scanning interval so that any impact triggered
+ // by screen state change can settle
+ currentTimeStamp += MAX_SCAN_INTERVAL_IN_SCHEDULE_SEC * 1000;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+
+ mResources.setIntArray(
+ R.array.config_wifiSingleSavedNetworkConnectedScanIntervalScheduleSec,
+ VALID_CONNECTED_SINGLE_SAVED_NETWORK_SCHEDULE_SEC);
+
+ // Prepare for a single suggestions network
+ WifiConfiguration config = new WifiConfiguration();
+ config.networkId = TEST_CONNECTED_NETWORK_ID;
+ String networkKey = "NETWORK_KEY";
+ when(mWifiConfigManager.getConfiguredNetwork(networkKey)).thenReturn(config);
+ when(mSuggestionConfig.getKey()).thenReturn(networkKey);
+ when(mWifiNetworkSuggestion.getWifiConfiguration()).thenReturn(mSuggestionConfig);
+ Set<WifiNetworkSuggestion> suggestionNetworks = new HashSet<WifiNetworkSuggestion>();
+ suggestionNetworks.add(mWifiNetworkSuggestion);
+ when(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions())
+ .thenReturn(suggestionNetworks);
+
+ // Prepare for a single passpoint network
+ WifiConfiguration passpointConfig = new WifiConfiguration();
+ String passpointKey = "PASSPOINT_KEY";
+ when(mWifiConfigManager.getConfiguredNetwork(passpointKey)).thenReturn(passpointConfig);
+ List<PasspointConfiguration> passpointNetworks = new ArrayList<PasspointConfiguration>();
+ passpointNetworks.add(mPasspointConfiguration);
+ when(mPasspointConfiguration.getUniqueId()).thenReturn(passpointKey);
+ when(mPasspointManager.getProviderConfigs(anyInt(), anyBoolean()))
+ .thenReturn(passpointNetworks);
+
+ // Set firmware roaming to enabled
+ when(mWifiConnectivityHelper.isFirmwareRoamingSupported()).thenReturn(true);
+
+ // Set WiFi to connected state to trigger periodic scan
+ setWifiStateConnected();
// Get the first periodic scan interval
long firstIntervalMs = mAlarmManager
@@ -1415,8 +1594,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
// Set WiFi to connected state to trigger its periodic scan
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// The very first scan triggered for connected state is actually via the alarm timer
// and it obeys the minimum scan interval
@@ -1453,8 +1631,8 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
// Set WiFi to connected state to trigger the periodic scan
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
+
verify(mWifiScanner, times(1)).startScan(
anyObject(), anyObject(), anyObject(), anyObject());
@@ -1503,8 +1681,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
// Set WiFi to connected state to trigger the periodic scan
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Set the second scan attempt time stamp
currentTimeStamp += 2000;
@@ -1766,8 +1943,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
@Test
public void waitForFullBandScanResults() {
// Set WiFi to connected state.
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Set up as partial scan results.
when(mScanData.getBandScanned()).thenReturn(WifiScanner.WIFI_BAND_5_GHZ);
@@ -2029,8 +2205,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mWifiConfigManager.getConfiguredNetwork(anyInt())).thenReturn(currentNetwork);
// Set WiFi to connected state
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Set screen to on
mWifiConnectivityManager.handleScreenStateChanged(true);
@@ -2060,8 +2235,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mWifiConnectivityHelper.isFirmwareRoamingSupported()).thenReturn(true);
// Set WiFi to connected state
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Set screen to on
mWifiConnectivityManager.handleScreenStateChanged(true);
@@ -2129,8 +2303,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
when(mWifiNS.selectNetwork(any())).thenReturn(candidate);
// Set WiFi to connected state
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// Set screen to on
mWifiConnectivityManager.handleScreenStateChanged(true);
@@ -2457,8 +2630,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
public void setDeviceMobilityStateBeforePnoScan() {
// ensure no PNO scan running
mWifiConnectivityManager.setWifiEnabled(true);
- mWifiConnectivityManager.handleConnectionStateChanged(
- WifiConnectivityManager.WIFI_STATE_CONNECTED);
+ setWifiStateConnected();
// initial connectivity state uses moving PNO scan interval, now set it to stationary
mWifiConnectivityManager.setDeviceMobilityState(