diff options
author | David Su <dysu@google.com> | 2018-10-10 15:10:07 -0700 |
---|---|---|
committer | David Su <dysu@google.com> | 2018-10-31 09:47:23 -0700 |
commit | f27f8fc96593d686ca8c71fa851635d50a47b549 (patch) | |
tree | 501db90525c1f387a19a392115ffd95635ba6691 /tests | |
parent | 1223e9aa52466139b4de0637c4f9dd3d00b8b20b (diff) |
Increased Wifi Wake consecutive missed scans to 5 and force add last disconnected network to Wakeup Lock.
Due to low latency Wifi scans on new devices being more flaky than
before, increase the number of missed scans required to evict from 3 to
5. In addition, always add the last connected network to the Wakeup
Lock, since we do not want to automatically reconnect to a network that
the user manually disconnected from.
Bug: 112812039
Bug: 112047384
Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Test: connect to AP, disable Wifi on device, wait for scans to
initialize Wakeup Lock (trigger scans by opening Google Maps), turn off
AP, wait for AP to be evicted from Wakeup Lock, turn on AP, Wifi Wake
should turn on Wifi and reconnect to AP.
Test: ACTS WifiWakeTest
Change-Id: I506a1c860ddbd2bfbcd52cf6a23f1ee4e0ca00c6
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java | 57 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WakeupLockTest.java | 11 |
2 files changed, 62 insertions, 6 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java index 3734ba786..dcea61a48 100644 --- a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java @@ -75,6 +75,7 @@ public class WakeupControllerTest { @Mock private WifiWakeMetrics mWifiWakeMetrics; @Mock private WifiController mWifiController; @Mock private WifiNative mWifiNative; + @Mock private Clock mClock; private TestLooper mLooper; private WakeupController mWakeupController; @@ -129,7 +130,8 @@ public class WakeupControllerTest { mWifiConfigStore, mWifiWakeMetrics, mWifiInjector, - mFrameworkFacade); + mFrameworkFacade, + mClock); ArgumentCaptor<WakeupConfigStoreData> captor = ArgumentCaptor.forClass(WakeupConfigStoreData.class); @@ -563,4 +565,57 @@ public class WakeupControllerTest { contentObserver.onChange(false /* selfChange */); verify(mWakeupOnboarding).setOnboarded(); } + + /** + * When Wifi disconnects from a network, and within LAST_DISCONNECT_TIMEOUT_MILLIS Wifi is + * disabled, then the last connected Wifi network should be added to the wakeup lock. + * + * This simulates when a Wifi network sporadically connects and disconnects. During the + * disconnected phase, the user forcibly disables Wifi to stop this intermittent behavior. Then, + * we should add the network to the wake lock to ensure Wifi Wake does not automatically + * reconnect to this network. + * + * Also verifies that after the above flow, when Wifi is re-enabled, then disabled again, the + * last connected network should be reset and no networks should be added to the wakeup lock. + */ + @Test + public void lastConnectedNetworkAddedToLock() { + when(mClock.getElapsedSinceBootMillis()).thenReturn(0L, + (long) (0.8 * WakeupController.LAST_DISCONNECT_TIMEOUT_MILLIS)); + ScanResultMatchInfo matchInfo = ScanResultMatchInfo.fromScanResult(mTestScanResult); + when(mWifiConfigManager.getSavedNetworks()).thenReturn(Collections.emptyList()); + when(mWifiScanner.getSingleScanResults()).thenReturn(Collections.emptyList()); + initializeWakeupController(true); + + mWakeupController.setLastDisconnectInfo(matchInfo); + mWakeupController.start(); + + verify(mWakeupLock).setLock(eq(Collections.singleton(matchInfo))); + + mWakeupController.stop(); + mWakeupController.reset(); + mWakeupController.start(); + + verify(mWakeupLock).setLock(eq(Collections.emptySet())); + } + + /** + * When Wifi disconnects from a network, and Wifi is disabled after more than + * LAST_DISCONNECT_TIMEOUT_MILLIS, the last connected Wifi network should not be added to the + * wakeup lock. + */ + @Test + public void expiredLastConnectedNetworkNotAddedToLock() { + when(mClock.getElapsedSinceBootMillis()).thenReturn(0L, + (long) (1.2 * WakeupController.LAST_DISCONNECT_TIMEOUT_MILLIS)); + ScanResultMatchInfo matchInfo = ScanResultMatchInfo.fromScanResult(mTestScanResult); + when(mWifiConfigManager.getSavedNetworks()).thenReturn(Collections.emptyList()); + when(mWifiScanner.getSingleScanResults()).thenReturn(Collections.emptyList()); + initializeWakeupController(true); + + mWakeupController.setLastDisconnectInfo(matchInfo); + mWakeupController.start(); + + verify(mWakeupLock).setLock(eq(Collections.emptySet())); + } } diff --git a/tests/wifitests/src/com/android/server/wifi/WakeupLockTest.java b/tests/wifitests/src/com/android/server/wifi/WakeupLockTest.java index 43605f484..8bd38e156 100644 --- a/tests/wifitests/src/com/android/server/wifi/WakeupLockTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WakeupLockTest.java @@ -105,10 +105,10 @@ public class WakeupLockTest { mWakeupLock.setLock(networks); assertFalse(mWakeupLock.isInitialized()); - mWakeupLock.update(networks); - assertFalse(mWakeupLock.isInitialized()); - mWakeupLock.update(networks); - assertFalse(mWakeupLock.isInitialized()); + for (int i = 0; i < WakeupLock.CONSECUTIVE_MISSED_SCANS_REQUIRED_TO_EVICT - 1; i++) { + mWakeupLock.update(networks); + assertFalse(mWakeupLock.isInitialized()); + } mWakeupLock.update(networks); assertTrue(mWakeupLock.isInitialized()); } @@ -283,7 +283,8 @@ public class WakeupLockTest { for (int i = 0; i < WakeupLock.CONSECUTIVE_MISSED_SCANS_REQUIRED_TO_EVICT; i++) { mWakeupLock.update(Collections.emptyList()); } - verify(mWifiWakeMetrics).recordUnlockEvent(3 /* numScans */); + verify(mWifiWakeMetrics).recordUnlockEvent( + WakeupLock.CONSECUTIVE_MISSED_SCANS_REQUIRED_TO_EVICT /* numScans */); } private void setLockAndInitializeByTimeout(Collection<ScanResultMatchInfo> networks) { |