diff options
author | Ahmed ElArabawy <arabawy@google.com> | 2020-03-10 14:30:37 -0700 |
---|---|---|
committer | Ahmed ElArabawy <arabawy@google.com> | 2020-03-15 13:13:05 -0700 |
commit | 47e13d411954706bc6c4abbeb655355385f95811 (patch) | |
tree | d8d79ab47cadd4b8397b800f07f1f5da47a872ad /tests | |
parent | aa27a41652b36b7af74781a586ae7e64ae187627 (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.java | 226 |
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( |