summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2020-06-02 10:14:00 -0700
committerRoshan Pius <rpius@google.com>2020-06-02 10:19:09 -0700
commit40a6a0e1fb3efb62b81e24b30820c9ffa778b206 (patch)
tree16ce768161cdadaa6953d071a288e8fecbed2a3e
parent6b61b75021ae98eab575dbcf9ccd244d0a821a1e (diff)
WifiConnectivityManager: Reset connection limiter on force scan
Bug: 156708458 Test: atest com.android.server.wifi Change-Id: Ia7f82e382e3764892287f4358eda280de2bea3cb
-rw-r--r--service/java/com/android/server/wifi/WifiConnectivityManager.java1
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java44
2 files changed, 45 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java
index ad5a8f26c..2ce0bc024 100644
--- a/service/java/com/android/server/wifi/WifiConnectivityManager.java
+++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java
@@ -1847,6 +1847,7 @@ public class WifiConnectivityManager {
if (!mWifiEnabled) return;
localLog("forceConnectivityScan in request of " + workSource);
+ clearConnectionAttemptTimeStamps();
mWaitForFullBandScanResults = true;
startForcedSingleScan(true, workSource);
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
index 7bf21fb27..ba1c4f976 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
@@ -607,6 +607,50 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
}
/**
+ * Multiple back to back connection attempts after a force connectivity scan should not be rate
+ * limited.
+ *
+ * Expected behavior: WifiConnectivityManager calls ClientModeImpl.startConnectToNetwork()
+ * with the expected candidate network ID and BSSID for only the expected number of times within
+ * the given interval.
+ */
+ @Test
+ public void connectionAttemptNotRateLimitedWhenScreenOffForceConnectivityScan() {
+ int maxAttemptRate = WifiConnectivityManager.MAX_CONNECTION_ATTEMPTS_RATE;
+ int timeInterval = WifiConnectivityManager.MAX_CONNECTION_ATTEMPTS_TIME_INTERVAL_MS;
+ int numAttempts = 0;
+ int connectionAttemptIntervals = timeInterval / maxAttemptRate;
+
+ mWifiConnectivityManager.handleScreenStateChanged(false);
+
+ // First attempt the max rate number of connections within the rate interval.
+ long currentTimeStamp = 0;
+ for (int attempt = 0; attempt < maxAttemptRate; attempt++) {
+ currentTimeStamp += connectionAttemptIntervals;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+ // Set WiFi to disconnected state to trigger PNO scan
+ mWifiConnectivityManager.handleConnectionStateChanged(
+ WifiConnectivityManager.WIFI_STATE_DISCONNECTED);
+ numAttempts++;
+ }
+
+ mWifiConnectivityManager.forceConnectivityScan(new WorkSource());
+
+ for (int attempt = 0; attempt < maxAttemptRate; attempt++) {
+ currentTimeStamp += connectionAttemptIntervals;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp);
+ // Set WiFi to disconnected state to trigger PNO scan
+ mWifiConnectivityManager.handleConnectionStateChanged(
+ WifiConnectivityManager.WIFI_STATE_DISCONNECTED);
+ numAttempts++;
+ }
+
+ // Verify that all the connection attempts went through
+ verify(mClientModeImpl, times(numAttempts)).startConnectToNetwork(
+ CANDIDATE_NETWORK_ID, Process.WIFI_UID, CANDIDATE_BSSID);
+ }
+
+ /**
* Multiple back to back connection attempts after a user selection should not be rate limited.
*
* Expected behavior: WifiConnectivityManager calls ClientModeImpl.startConnectToNetwork()