summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRandy Pan <zpan@google.com>2016-05-16 10:58:20 -0700
committerRandy Pan <zpan@google.com>2016-05-17 10:44:55 -0700
commitb32b649c815b0b50fd0127d9d4a4563c54a536fb (patch)
treed7d3f00fdb6e4e29f5020d5c1b1e1b8e189e84db /tests
parentae9e0ef3efdd579fab8d89b5c653f4069e7ac883 (diff)
WifiConnectivityManagerTest: exponential backoff periodic scan
Add a couple of unit tests to cover the periodic scan exponential backoff feature. Extended MockAlarmManager class such that users can query a pending alarm's trigger time. Bug: 28750989 Change-Id: I9520477180786fce2937e5fa87f790f60f12a3da
Diffstat (limited to 'tests')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/MockAlarmManager.java18
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java99
2 files changed, 117 insertions, 0 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/MockAlarmManager.java b/tests/wifitests/src/com/android/server/wifi/MockAlarmManager.java
index 2bb06cc30..02af28122 100644
--- a/tests/wifitests/src/com/android/server/wifi/MockAlarmManager.java
+++ b/tests/wifitests/src/com/android/server/wifi/MockAlarmManager.java
@@ -90,6 +90,20 @@ public class MockAlarmManager {
return false;
}
+ /**
+ * @return trigger time of an pending alarm with the given tag
+ * -1 if no pending alram with the given tag
+ */
+ public long getTriggerTimeMillis(String tag) {
+ for (int i = 0; i < mPendingAlarms.size(); ++i) {
+ PendingAlarm alarm = mPendingAlarms.get(i);
+ if (Objects.equals(tag, alarm.getTag())) {
+ return alarm.getTriggerTimeMillis();
+ }
+ }
+ return -1;
+ }
+
private static class PendingAlarm {
private final int mType;
private final long mTriggerAtMillis;
@@ -116,6 +130,10 @@ public class MockAlarmManager {
public String getTag() {
return mTag;
}
+
+ public long getTriggerTimeMillis() {
+ return mTriggerAtMillis;
+ }
}
private class SetListenerAnswer extends AnswerWithArguments {
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
index 872430fd8..2127a0145 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
@@ -102,6 +102,7 @@ public class WifiConnectivityManagerTest {
private static final String CANDIDATE_SSID = "\"AnSsid\"";
private static final String CANDIDATE_BSSID = "6c:f3:7f:ae:8c:f3";
private static final String TAG = "WifiConnectivityManager Unit Test";
+ private static final long CURRENT_SYSTEM_TIME_MS = 1000;
Resources mockResource() {
Resources resource = mock(Resources.class);
@@ -519,4 +520,102 @@ public class WifiConnectivityManagerTest {
verify(mWifiMetrics).incrementNumConnectivityWatchdogPnoGood();
verify(mWifiMetrics, never()).incrementNumConnectivityWatchdogPnoBad();
}
+
+ /**
+ * Verify that scan interval for screen on and wifi disconnected scenario
+ * is in the exponential backoff fashion.
+ *
+ * Expected behavior: WifiConnectivityManager doubles periodic
+ * scan interval.
+ */
+ @Test
+ public void checkPeriodicScanIntervalWhenDisconnected() {
+ when(mClock.currentTimeMillis()).thenReturn(CURRENT_SYSTEM_TIME_MS);
+
+ // Set screen to ON
+ mWifiConnectivityManager.handleScreenStateChanged(true);
+
+ // Set WiFi to disconnected state to trigger periodic scan
+ mWifiConnectivityManager.handleConnectionStateChanged(
+ WifiConnectivityManager.WIFI_STATE_DISCONNECTED);
+
+ // Get the first periodic scan interval
+ long firstIntervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - CURRENT_SYSTEM_TIME_MS;
+ assertEquals(firstIntervalMs, WifiConnectivityManager.PERIODIC_SCAN_INTERVAL_MS);
+
+ // Now fire the first periodic scan alarm timer
+ mAlarmManager.dispatch(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG);
+ mLooper.dispatchAll();
+
+ // Get the second periodic scan interval
+ long secondIntervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - CURRENT_SYSTEM_TIME_MS;
+
+ // Verify the intervals are exponential back off
+ assertEquals(firstIntervalMs * 2, secondIntervalMs);
+
+ // Make sure we eventually stay at the maximum scan interval.
+ long intervalMs = 0;
+ for (int i = 0; i < 5; i++) {
+ mAlarmManager.dispatch(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG);
+ mLooper.dispatchAll();
+ intervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - CURRENT_SYSTEM_TIME_MS;
+ }
+
+ assertEquals(intervalMs, WifiConnectivityManager.MAX_PERIODIC_SCAN_INTERVAL_MS);
+ }
+
+ /**
+ * Verify that scan interval for screen on and wifi connected scenario
+ * is in the exponential backoff fashion.
+ *
+ * Expected behavior: WifiConnectivityManager doubles periodic
+ * scan interval.
+ */
+ @Test
+ public void checkPeriodicScanIntervalWhenConnected() {
+ when(mClock.currentTimeMillis()).thenReturn(CURRENT_SYSTEM_TIME_MS);
+
+ // Set screen to ON
+ mWifiConnectivityManager.handleScreenStateChanged(true);
+
+ // Set WiFi to connected state to trigger periodic scan
+ mWifiConnectivityManager.handleConnectionStateChanged(
+ WifiConnectivityManager.WIFI_STATE_CONNECTED);
+
+ // Get the first periodic scan interval
+ long firstIntervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - CURRENT_SYSTEM_TIME_MS;
+ assertEquals(firstIntervalMs, WifiConnectivityManager.PERIODIC_SCAN_INTERVAL_MS);
+
+ // Now fire the first periodic scan alarm timer
+ mAlarmManager.dispatch(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG);
+ mLooper.dispatchAll();
+
+ // Get the second periodic scan interval
+ long secondIntervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - CURRENT_SYSTEM_TIME_MS;
+
+ // Verify the intervals are exponential back off
+ assertEquals(firstIntervalMs * 2, secondIntervalMs);
+
+ // Make sure we eventually stay at the maximum scan interval.
+ long intervalMs = 0;
+ for (int i = 0; i < 5; i++) {
+ mAlarmManager.dispatch(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG);
+ mLooper.dispatchAll();
+ intervalMs = mAlarmManager
+ .getTriggerTimeMillis(WifiConnectivityManager.PERIODIC_SCAN_TIMER_TAG)
+ - CURRENT_SYSTEM_TIME_MS;
+ }
+
+ assertEquals(intervalMs, WifiConnectivityManager.MAX_PERIODIC_SCAN_INTERVAL_MS);
+ }
}