From ee0ab818341d44614ffe56ae73ecc08b974c2cbb Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Thu, 19 May 2016 16:46:57 -0700 Subject: Change clock for time interval/elapsed measurments 1. Use the clock retrieved from WifiInjector in more modules: QNS, Scanner, WifiConfigManager. 2. Use |elapsedRealtime| for time interval/elapsed measurments. Things like scan results, config elements still continue to use |currentTimeMillis| Also, 1. Had to make |tryEnableQualifiedNetwork| public to prevent mockito from calling the real method in WifiConfigManager. 2. Move keystore also into WifiInjector. BUG: 28299258 BUG: 28824635 Change-Id: I91272aa5665abb741da7530d8920d09c8c5ea41f TEST: Compiles & unit-test passes --- .../com/android/server/wifi/WifiConfigManager.java | 22 +++++++------- .../server/wifi/WifiConnectivityManager.java | 30 +++++++++---------- .../java/com/android/server/wifi/WifiInjector.java | 7 +++++ .../server/wifi/WifiQualifiedNetworkSelector.java | 13 ++++---- .../com/android/server/wifi/WifiStateMachine.java | 5 ++-- .../server/wifi/scanner/HalWifiScannerImpl.java | 6 ++-- .../wifi/scanner/SupplicantWifiScannerImpl.java | 35 ++++++++++++---------- .../server/wifi/scanner/WifiScannerImpl.java | 9 +++--- .../wifi/scanner/WifiScanningServiceImpl.java | 17 ++++++----- .../android/server/wifi/WifiConfigManagerTest.java | 20 +++---------- .../server/wifi/WifiConnectivityManagerTest.java | 19 ++++++------ .../wifi/WifiQualifiedNetworkSelectorTest.java | 30 ++++++++++--------- .../android/server/wifi/WifiStateMachineTest.java | 1 + .../wifi/scanner/BaseWifiScannerImplTest.java | 5 +++- .../server/wifi/scanner/HalWifiScannerTest.java | 2 +- .../wifi/scanner/SupplicantPnoScannerTest.java | 10 +++++-- .../wifi/scanner/SupplicantWifiScannerTest.java | 2 +- .../wifi/scanner/WifiScanningServiceTest.java | 7 +++-- 18 files changed, 129 insertions(+), 111 deletions(-) diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index 76a95ccce..e2183e3ab 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java @@ -814,7 +814,7 @@ public class WifiConfigManager { void noteRoamingFailure(WifiConfiguration config, int reason) { if (config == null) return; - config.lastRoamingFailure = System.currentTimeMillis(); + config.lastRoamingFailure = mClock.currentTimeMillis(); config.roamingFailureBlackListTimeMilli = 2 * (config.roamingFailureBlackListTimeMilli + 1000); if (config.roamingFailureBlackListTimeMilli > mNetworkSwitchingBlackListPeriodMs) { @@ -1391,7 +1391,7 @@ public class WifiConfigManager { * @return true if network status has been changed * false network status is not changed */ - boolean tryEnableQualifiedNetwork(int networkId) { + public boolean tryEnableQualifiedNetwork(int networkId) { WifiConfiguration config = getWifiConfiguration(networkId); if (config == null) { localLog("updateQualifiedNetworkstatus invalid network."); @@ -1407,12 +1407,12 @@ public class WifiConfigManager { * @return true if network status has been changed * false network status is not changed */ - boolean tryEnableQualifiedNetwork(WifiConfiguration config) { + private boolean tryEnableQualifiedNetwork(WifiConfiguration config) { WifiConfiguration.NetworkSelectionStatus networkStatus = config.getNetworkSelectionStatus(); if (networkStatus.isNetworkTemporaryDisabled()) { //time difference in minutes - long timeDifference = (System.currentTimeMillis() - - networkStatus.getDisableTime()) / 1000 / 60; + long timeDifference = + (mClock.elapsedRealtime() - networkStatus.getDisableTime()) / 1000 / 60; if (timeDifference < 0 || timeDifference >= NETWORK_SELECTION_DISABLE_TIMEOUT[ networkStatus.getNetworkSelectionDisableReason()]) { @@ -1497,7 +1497,7 @@ public class WifiConfigManager { if (reason < WifiConfiguration.NetworkSelectionStatus.DISABLED_TLS_VERSION_MISMATCH) { networkStatus.setNetworkSelectionStatus(WifiConfiguration.NetworkSelectionStatus .NETWORK_SELECTION_TEMPORARY_DISABLED); - networkStatus.setDisableTime(System.currentTimeMillis()); + networkStatus.setDisableTime(mClock.elapsedRealtime()); } else { networkStatus.setNetworkSelectionStatus(WifiConfiguration.NetworkSelectionStatus .NETWORK_SELECTION_PERMANENTLY_DISABLED); @@ -1855,7 +1855,7 @@ public class WifiConfigManager { mLastSelectedTimeStamp = -1; } else { mLastSelectedConfiguration = selected.configKey(); - mLastSelectedTimeStamp = System.currentTimeMillis(); + mLastSelectedTimeStamp = mClock.elapsedRealtime(); updateNetworkSelectionStatus(netId, WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE); if (sVDBG) { @@ -1868,7 +1868,7 @@ public class WifiConfigManager { public void setLatestUserSelectedConfiguration(WifiConfiguration network) { if (network != null) { mLastSelectedConfiguration = network.configKey(); - mLastSelectedTimeStamp = System.currentTimeMillis(); + mLastSelectedTimeStamp = mClock.elapsedRealtime(); } } @@ -2048,7 +2048,7 @@ public class WifiConfigManager { StringBuilder sb = new StringBuilder(); sb.append("time="); Calendar c = Calendar.getInstance(); - c.setTimeInMillis(System.currentTimeMillis()); + c.setTimeInMillis(mClock.currentTimeMillis()); sb.append(String.format("%tm-%td %tH:%tM:%tS.%tL", c, c, c, c, c, c)); if (newNetwork) { @@ -2391,7 +2391,7 @@ public class WifiConfigManager { if (config == null) { return null; } - long now_ms = System.currentTimeMillis(); + long now_ms = mClock.currentTimeMillis(); HashSet channels = new HashSet(); @@ -3259,7 +3259,7 @@ public class WifiConfigManager { } } // Record last time Connectivity Service switched us away from WiFi and onto Cell - mLastUnwantedNetworkDisconnectTimestamp = System.currentTimeMillis(); + mLastUnwantedNetworkDisconnectTimestamp = mClock.currentTimeMillis(); } int getMaxDhcpRetries() { diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index 8200ef633..54bfdff79 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -510,12 +510,12 @@ public class WifiConnectivityManager { * should be skipped or not. This attempts to rate limit the rate of connections to * prevent us from flapping between networks and draining battery rapidly. */ - private boolean shouldSkipConnectionAttempt(Long currentTimeMillis) { + private boolean shouldSkipConnectionAttempt(Long timeMillis) { Iterator attemptIter = mConnectionAttemptTimeStamps.iterator(); // First evict old entries from the queue. while (attemptIter.hasNext()) { Long connectionAttemptTimeMillis = attemptIter.next(); - if ((currentTimeMillis - connectionAttemptTimeMillis) + if ((timeMillis - connectionAttemptTimeMillis) > MAX_CONNECTION_ATTEMPTS_TIME_INTERVAL_MS) { attemptIter.remove(); } else { @@ -530,8 +530,8 @@ public class WifiConnectivityManager { /** * Add the current connection attempt timestamp to our queue of connection attempts. */ - private void noteConnectionAttempt(Long currentTimeMillis) { - mConnectionAttemptTimeStamps.addLast(currentTimeMillis); + private void noteConnectionAttempt(Long timeMillis) { + mConnectionAttemptTimeStamps.addLast(timeMillis); } /** @@ -572,13 +572,13 @@ public class WifiConnectivityManager { return; } - Long currentTimeMillis = mClock.currentTimeMillis(); - if (!mScreenOn && shouldSkipConnectionAttempt(currentTimeMillis)) { + Long elapsedTimeMillis = mClock.elapsedRealtime(); + if (!mScreenOn && shouldSkipConnectionAttempt(elapsedTimeMillis)) { localLog("connectToNetwork: Too many connection attempts. Skipping this attempt!"); mTotalConnectivityAttemptsRateLimited++; return; } - noteConnectionAttempt(currentTimeMillis); + noteConnectionAttempt(elapsedTimeMillis); mLastConnectionAttemptBssid = targetBssid; @@ -835,16 +835,16 @@ public class WifiConnectivityManager { private void scheduleWatchdogTimer() { Log.i(TAG, "scheduleWatchdogTimer"); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + WATCHDOG_INTERVAL_MS, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + WATCHDOG_INTERVAL_MS, WATCHDOG_TIMER_TAG, mWatchdogListener, mEventHandler); } // Set up periodic scan timer private void schedulePeriodicScanTimer(int intervalMs) { - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + intervalMs, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + intervalMs, PERIODIC_SCAN_TIMER_TAG, mPeriodicScanTimerListener, mEventHandler); } @@ -855,8 +855,8 @@ public class WifiConnectivityManager { RestartSingleScanListener restartSingleScanListener = new RestartSingleScanListener(isWatchdogTriggered, isFullBandScan); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + RESTART_SCAN_DELAY_MS, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + RESTART_SCAN_DELAY_MS, RESTART_SINGLE_SCAN_TIMER_TAG, restartSingleScanListener, mEventHandler); } @@ -865,8 +865,8 @@ public class WifiConnectivityManager { private void scheduleDelayedConnectivityScan(int msFromNow) { localLog("scheduleDelayedConnectivityScan"); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + msFromNow, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + msFromNow, RESTART_CONNECTIVITY_SCAN_TIMER_TAG, mRestartScanListener, mEventHandler); diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 37ceaa84a..cc4048eb9 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -16,6 +16,8 @@ package com.android.server.wifi; +import android.security.KeyStore; + /** * WiFi dependency injector using thread-safe lazy singleton pattern. To be used for accessing * various wifi class instances and as a handle for mock injection. @@ -36,6 +38,7 @@ public class WifiInjector { private final Clock mClock = new Clock(); private final PropertyService mPropertyService = new SystemPropertyService(); private final BuildProperties mBuildProperties = new SystemBuildProperties(); + private final KeyStore mKeyStore = KeyStore.getInstance(); public WifiMetrics getWifiMetrics() { return mWifiMetrics; @@ -54,4 +57,8 @@ public class WifiInjector { } public BuildProperties getBuildProperties() { return mBuildProperties; } + + public KeyStore getKeyStore() { + return mKeyStore; + } } diff --git a/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java b/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java index a1c665a3a..edb539b90 100644 --- a/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java +++ b/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java @@ -297,7 +297,7 @@ public class WifiQualifiedNetworkSelector { //Do not select again if last selection is within //MINIMUM_QUALIFIED_NETWORK_SELECTION_INTERVAL if (mLastQualifiedNetworkSelectionTimeStamp != INVALID_TIME_STAMP) { - long gap = mClock.currentTimeMillis() - mLastQualifiedNetworkSelectionTimeStamp; + long gap = mClock.elapsedRealtime() - mLastQualifiedNetworkSelectionTimeStamp; if (gap < MINIMUM_QUALIFIED_NETWORK_SELECTION_INTERVAL) { localLog("Too short to last successful Qualified Network Selection Gap is:" + gap + " ms!"); @@ -355,7 +355,7 @@ public class WifiQualifiedNetworkSelector { //last user selection award if (sameSelect) { - long timeDifference = mClock.currentTimeMillis() + long timeDifference = mClock.elapsedRealtime() - mWifiConfigManager.getLastSelectedTimeStamp(); if (timeDifference > 0) { @@ -480,6 +480,7 @@ public class WifiQualifiedNetworkSelector { boolean change = false; String key = selected.configKey(); + // This is only used for setting the connect choice timestamp for debugging purposes. long currentTime = mClock.currentTimeMillis(); List savedNetworks = mWifiConfigManager.getSavedNetworks(); @@ -543,7 +544,7 @@ public class WifiQualifiedNetworkSelector { status.mCounter++; if (status.mCounter >= BSSID_BLACKLIST_THRESHOLD) { status.mIsBlacklisted = true; - status.mBlacklistedTimeStamp = mClock.currentTimeMillis(); + status.mBlacklistedTimeStamp = mClock.elapsedRealtime(); return true; } } @@ -563,7 +564,7 @@ public class WifiQualifiedNetworkSelector { while (iter.hasNext()) { BssidBlacklistStatus status = iter.next(); if (status != null && status.mIsBlacklisted) { - if (mClock.currentTimeMillis() - status.mBlacklistedTimeStamp + if (mClock.elapsedRealtime() - status.mBlacklistedTimeStamp >= BSSID_BLACKLIST_EXPIRE_TIME) { iter.remove(); } @@ -639,7 +640,7 @@ public class WifiQualifiedNetworkSelector { mWifiConfigManager.getWifiConfiguration(lastUserSelectedNetWorkKey); if (lastUserSelectedNetwork != null) { localLog("Last selection is " + lastUserSelectedNetwork.SSID + " Time to now: " - + ((mClock.currentTimeMillis() - mWifiConfigManager.getLastSelectedTimeStamp()) + + ((mClock.elapsedRealtime() - mWifiConfigManager.getLastSelectedTimeStamp()) / 1000 / 60 + " minutes")); } @@ -877,7 +878,7 @@ public class WifiQualifiedNetworkSelector { mCurrentBssid = scanResultCandidate.BSSID; mCurrentConnectedNetwork = networkCandidate; - mLastQualifiedNetworkSelectionTimeStamp = mClock.currentTimeMillis(); + mLastQualifiedNetworkSelectionTimeStamp = mClock.elapsedRealtime(); return networkCandidate; } diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index f5309a70f..927cc3f55 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -90,7 +90,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.WorkSource; import android.provider.Settings; -import android.security.KeyStore; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -1021,7 +1020,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss PackageManager.FEATURE_WIFI_DIRECT); mWifiConfigManager = mFacade.makeWifiConfigManager(context, mWifiNative, facade, - mClock, userManager, KeyStore.getInstance()); + mWifiInjector.getClock(), userManager, mWifiInjector.getKeyStore()); mWifiMonitor = WifiMonitor.getInstance(); @@ -1036,7 +1035,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss mWifiInfo = new WifiInfo(); mWifiQualifiedNetworkSelector = new WifiQualifiedNetworkSelector(mWifiConfigManager, - mContext, mWifiInfo, mClock); + mContext, mWifiInfo, mWifiInjector.getClock()); mSupplicantStateTracker = mFacade.makeSupplicantStateTracker( context, mWifiConfigManager, getHandler()); diff --git a/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java index 6351042a8..d85c818d2 100644 --- a/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java @@ -17,13 +17,13 @@ package com.android.server.wifi.scanner; import android.content.Context; -import android.net.wifi.WifiManager; import android.net.wifi.WifiScanner; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; +import com.android.server.wifi.Clock; import com.android.server.wifi.WifiNative; /** @@ -40,11 +40,11 @@ public class HalWifiScannerImpl extends WifiScannerImpl implements Handler.Callb private final SupplicantWifiScannerImpl mSupplicantScannerDelegate; private final boolean mHalBasedPnoSupported; - public HalWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper) { + public HalWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper, Clock clock) { mWifiNative = wifiNative; mChannelHelper = new HalChannelHelper(wifiNative); mSupplicantScannerDelegate = - new SupplicantWifiScannerImpl(context, wifiNative, mChannelHelper, looper); + new SupplicantWifiScannerImpl(context, wifiNative, mChannelHelper, looper, clock); // We are not going to support HAL ePNO currently. mHalBasedPnoSupported = false; diff --git a/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java index aada52ddd..61c87f374 100644 --- a/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java @@ -24,10 +24,10 @@ import android.net.wifi.WifiScanner; import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.os.SystemClock; import android.util.Log; import com.android.internal.R; +import com.android.server.wifi.Clock; import com.android.server.wifi.ScanDetail; import com.android.server.wifi.WifiMonitor; import com.android.server.wifi.WifiNative; @@ -66,6 +66,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle private final AlarmManager mAlarmManager; private final Handler mEventHandler; private final ChannelHelper mChannelHelper; + private final Clock mClock; private Object mSettingsLock = new Object(); @@ -131,13 +132,14 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle }; public SupplicantWifiScannerImpl(Context context, WifiNative wifiNative, - ChannelHelper channelHelper, Looper looper) { + ChannelHelper channelHelper, Looper looper, Clock clock) { mContext = context; mWifiNative = wifiNative; mChannelHelper = channelHelper; mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); mEventHandler = new Handler(looper, this); - mHwPnoDebouncer = new HwPnoDebouncer(mWifiNative, mAlarmManager, mEventHandler); + mClock = clock; + mHwPnoDebouncer = new HwPnoDebouncer(mWifiNative, mAlarmManager, mEventHandler, mClock); // Check if the device supports HW PNO scans. mHwPnoScanSupported = mContext.getResources().getBoolean( @@ -149,9 +151,10 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle WifiMonitor.SCAN_RESULTS_EVENT, mEventHandler); } - public SupplicantWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper) { + public SupplicantWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper, + Clock clock) { // TODO figure out how to get channel information from supplicant - this(context, wifiNative, new NoBandChannelHelper(), looper); + this(context, wifiNative, new NoBandChannelHelper(), looper, clock); } @Override @@ -338,7 +341,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle ChannelCollection allFreqs = mChannelHelper.createChannelCollection(); Set hiddenNetworkIdSet = new HashSet(); final LastScanSettings newScanSettings = - new LastScanSettings(SystemClock.elapsedRealtime()); + new LastScanSettings(mClock.elapsedRealtime()); // Update scan settings if there is a pending scan if (!mBackgroundScanPaused) { @@ -395,8 +398,8 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle mNextBackgroundScanPeriod++; mBackgroundScanPeriodPending = false; - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + mBackgroundScanSettings.base_period_ms, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + mBackgroundScanSettings.base_period_ms, BACKGROUND_PERIOD_ALARM_TAG, mScanPeriodListener, mEventHandler); } } @@ -441,8 +444,8 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle + ", single=" + newScanSettings.singleScanActive); } mLastScanSettings = newScanSettings; - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + SCAN_TIMEOUT_MS, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + SCAN_TIMEOUT_MS, TIMEOUT_ALARM_TAG, mScanTimeoutListener, mEventHandler); } else { Log.e(TAG, "Failed to start scan, freqs=" + freqs); @@ -1006,6 +1009,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle private final WifiNative mWifiNative; private final AlarmManager mAlarmManager; private final Handler mEventHandler; + private final Clock mClock; private long mLastPnoChangeTimeStamp = -1L; private boolean mExpectedPnoState = false; private boolean mCurrentPnoState = false;; @@ -1023,10 +1027,11 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle } public HwPnoDebouncer(WifiNative wifiNative, AlarmManager alarmManager, - Handler eventHandler) { + Handler eventHandler, Clock clock) { mWifiNative = wifiNative; mAlarmManager = alarmManager; mEventHandler = eventHandler; + mClock = clock; } /** @@ -1039,7 +1044,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle return true; } - mLastPnoChangeTimeStamp = System.currentTimeMillis(); + mLastPnoChangeTimeStamp = mClock.elapsedRealtime(); if (mWifiNative.setPnoScan(enable)) { Log.d(TAG, "Changed PNO state from " + mCurrentPnoState + " to " + enable); mCurrentPnoState = enable; @@ -1071,14 +1076,14 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle boolean isSuccess = true; mExpectedPnoState = enable; if (!mWaitForTimer) { - long timeDifference = System.currentTimeMillis() - mLastPnoChangeTimeStamp; + long timeDifference = mClock.elapsedRealtime() - mLastPnoChangeTimeStamp; if (timeDifference >= MINIMUM_PNO_GAP_MS) { isSuccess = updatePnoState(enable); } else { long alarmTimeout = MINIMUM_PNO_GAP_MS - timeDifference; Log.d(TAG, "Start PNO timer with delay " + alarmTimeout); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + alarmTimeout, PNO_DEBOUNCER_ALARM_TAG, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + alarmTimeout, PNO_DEBOUNCER_ALARM_TAG, mAlarmListener, mEventHandler); mWaitForTimer = true; } diff --git a/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java index 66c3eda6f..9012fc6c0 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java @@ -21,6 +21,7 @@ import android.net.wifi.ScanResult; import android.net.wifi.WifiScanner; import android.os.Looper; +import com.android.server.wifi.Clock; import com.android.server.wifi.WifiNative; import java.util.Comparator; @@ -34,7 +35,7 @@ public abstract class WifiScannerImpl { * A factory that create a {@link com.android.server.wifi.scanner.WifiScannerImpl} */ public static interface WifiScannerImplFactory { - WifiScannerImpl create(Context context, Looper looper); + WifiScannerImpl create(Context context, Looper looper, Clock clock); } /** @@ -42,12 +43,12 @@ public abstract class WifiScannerImpl { * This factory should only ever be used once. */ public static final WifiScannerImplFactory DEFAULT_FACTORY = new WifiScannerImplFactory() { - public WifiScannerImpl create(Context context, Looper looper) { + public WifiScannerImpl create(Context context, Looper looper, Clock clock) { WifiNative wifiNative = WifiNative.getWlanNativeInterface(); if (wifiNative.getScanCapabilities(new WifiNative.ScanCapabilities())) { - return new HalWifiScannerImpl(context, wifiNative, looper); + return new HalWifiScannerImpl(context, wifiNative, looper, clock); } else { - return new SupplicantWifiScannerImpl(context, wifiNative, looper); + return new SupplicantWifiScannerImpl(context, wifiNative, looper, clock); } } }; diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java index 76bff29c7..b732a6e77 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java @@ -51,6 +51,7 @@ import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; import com.android.internal.util.State; import com.android.internal.util.StateMachine; +import com.android.server.wifi.Clock; import com.android.server.wifi.WifiInjector; import com.android.server.wifi.WifiMetrics; import com.android.server.wifi.WifiMetricsProto; @@ -65,7 +66,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.Map; import java.util.Set; public class WifiScanningServiceImpl extends IWifiScanner.Stub { @@ -78,8 +78,6 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { private final LocalLog mLocalLog = new LocalLog(1024); - private final WifiMetrics mWifiMetrics; - private void localLog(String message) { mLocalLog.log(message); } @@ -256,6 +254,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { private ClientHandler mClientHandler; private final IBatteryStats mBatteryStats; private final AlarmManager mAlarmManager; + private final WifiMetrics mWifiMetrics; + private final Clock mClock; WifiScanningServiceImpl(Context context, Looper looper, WifiScannerImpl.WifiScannerImplFactory scannerImplFactory, IBatteryStats batteryStats, @@ -267,6 +267,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { mClients = new ArrayMap<>(); mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); mWifiMetrics = wifiInjector.getWifiMetrics(); + mClock = wifiInjector.getClock(); mPreviousSchedule = null; } @@ -868,7 +869,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { // of this state machine. It is ok right now because the driver loaded event // is sent to this state machine first. if (mScannerImpl == null) { - mScannerImpl = mScannerImplFactory.create(mContext, mLooper); + mScannerImpl = mScannerImplFactory.create(mContext, mLooper, mClock); mChannelHelper = mScannerImpl.getChannelHelper(); } @@ -2166,8 +2167,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { mWifiChangeDetected = false; long unchangedDelay = settings.unchangedSampleSize * settings.periodInMs; mAlarmManager.cancel(mTimeoutIntent); - mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + unchangedDelay, + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + unchangedDelay, mTimeoutIntent); break; case WifiScanner.CMD_SCAN_RESULT: @@ -2177,8 +2178,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { reconfigureScan((ScanData[])msg.obj, STATIONARY_SCAN_PERIOD_MS); mWifiChangeDetected = false; - mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + MOVING_STATE_TIMEOUT_MS, + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + MOVING_STATE_TIMEOUT_MS, mTimeoutIntent); mScanResultsPending = false; } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java index 53353f997..a5850005f 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java @@ -17,22 +17,8 @@ package com.android.server.wifi; import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.anyInt; -import static org.mockito.Mockito.anyObject; -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.intThat; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; import android.content.Context; import android.content.pm.UserInfo; @@ -51,6 +37,7 @@ import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.security.Credentials; +import android.security.KeyStore; import android.support.test.InstrumentationRegistry; import android.test.suitebuilder.annotation.SmallTest; import android.text.TextUtils; @@ -154,6 +141,7 @@ public class WifiConfigManagerTest { private ConfigurationMap mConfiguredNetworks; public byte[] mNetworkHistoryBytes; private MockKeyStore mMockKeyStore; + private KeyStore mKeyStore; /** * Called before each test diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java index 2127a0145..c80130035 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java @@ -34,6 +34,7 @@ import android.net.wifi.WifiScanner.PnoSettings; import android.net.wifi.WifiScanner.ScanListener; import android.net.wifi.WifiScanner.ScanSettings; import android.net.wifi.WifiSsid; +import android.os.SystemClock; import android.os.WorkSource; import android.test.suitebuilder.annotation.SmallTest; @@ -72,7 +73,7 @@ public class WifiConnectivityManagerTest { mWifiScanner, mWifiConfigManager, mWifiInfo, mWifiQNS, mWifiInjector, mLooper.getLooper()); mWifiConnectivityManager.setWifiEnabled(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis()); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } /** @@ -337,7 +338,7 @@ public class WifiConnectivityManagerTest { long currentTimeStamp = 0; for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -345,7 +346,7 @@ public class WifiConnectivityManagerTest { } // Now trigger another connection attempt before the rate interval, this should be // skipped because we've crossed rate limit. - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -376,7 +377,7 @@ public class WifiConnectivityManagerTest { long currentTimeStamp = 0; for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -384,7 +385,7 @@ public class WifiConnectivityManagerTest { } // Now trigger another connection attempt after the rate interval, this should not be // skipped because we should've evicted the older attempt. - when(mClock.currentTimeMillis()).thenReturn( + when(mClock.elapsedRealtime()).thenReturn( currentTimeStamp + connectionAttemptIntervals * 2); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( @@ -416,7 +417,7 @@ public class WifiConnectivityManagerTest { long currentTimeStamp = 0; for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -427,7 +428,7 @@ public class WifiConnectivityManagerTest { for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -530,7 +531,7 @@ public class WifiConnectivityManagerTest { */ @Test public void checkPeriodicScanIntervalWhenDisconnected() { - when(mClock.currentTimeMillis()).thenReturn(CURRENT_SYSTEM_TIME_MS); + when(mClock.elapsedRealtime()).thenReturn(CURRENT_SYSTEM_TIME_MS); // Set screen to ON mWifiConnectivityManager.handleScreenStateChanged(true); @@ -579,7 +580,7 @@ public class WifiConnectivityManagerTest { */ @Test public void checkPeriodicScanIntervalWhenConnected() { - when(mClock.currentTimeMillis()).thenReturn(CURRENT_SYSTEM_TIME_MS); + when(mClock.elapsedRealtime()).thenReturn(CURRENT_SYSTEM_TIME_MS); // Set screen to ON mWifiConnectivityManager.handleScreenStateChanged(true); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java index 1d8ec43cb..64fee84fc 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java @@ -40,6 +40,7 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiInfo; import android.net.wifi.WifiSsid; +import android.os.SystemClock; import android.test.suitebuilder.annotation.SmallTest; import android.util.LocalLog; @@ -77,7 +78,7 @@ public class WifiQualifiedNetworkSelectorTest { mWifiQualifiedNetworkSelector.enableVerboseLogging(1); mWifiQualifiedNetworkSelector.setUserPreferredBand(1); mWifiQualifiedNetworkSelector.setWifiNetworkScoreCache(mScoreCache); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis()); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } @After @@ -101,7 +102,7 @@ public class WifiQualifiedNetworkSelectorTest { private List getScanDetails(String[] ssids, String[] bssids, int[] frequencies, String[] caps, int[] levels) { List scanDetailList = new ArrayList(); - long timeStamp = System.currentTimeMillis(); + long timeStamp = mClock.elapsedRealtime(); for (int index = 0; index < ssids.length; index++) { ScanDetail scanDetail = new ScanDetail(WifiSsid.createFromAsciiEncoded(ssids[index]), bssids[index], caps[index], levels[index], frequencies[index], timeStamp, 0); @@ -883,7 +884,7 @@ public class WifiQualifiedNetworkSelectorTest { } //re-enable it - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + WifiQualifiedNetworkSelector.BSSID_BLACKLIST_EXPIRE_TIME); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, false, scanDetails, false, false, true, false); @@ -921,6 +922,7 @@ public class WifiQualifiedNetworkSelectorTest { scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); + when(mWifiConfigManager.tryEnableQualifiedNetwork(anyInt())).thenReturn(true); savedConfigs[1].getNetworkSelectionStatus().setNetworkSelectionStatus( WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, @@ -1144,7 +1146,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.getBSSID()).thenReturn(bssids[1]); when(mWifiInfo.is24GHz()).thenReturn(false); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); levels[0] = -50; // if there is QNS, test1 will be chosen scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); @@ -1187,7 +1189,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.getNetworkId()).thenReturn(1); when(mWifiInfo.getBSSID()).thenReturn(bssids[1]); when(mWifiInfo.is24GHz()).thenReturn(false); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, @@ -1227,7 +1229,7 @@ public class WifiQualifiedNetworkSelectorTest { mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, false, scanDetails, false, false, true, false); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); @@ -1271,7 +1273,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.is24GHz()).thenReturn(false); when(mWifiInfo.is5GHz()).thenReturn(true); when(mWifiConfigManager.isOpenNetwork(savedConfigs[1])).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -60; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); @@ -1322,7 +1324,7 @@ public class WifiQualifiedNetworkSelectorTest { scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); scanResultLinkConfiguration(savedConfigs, scanDetails); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, @@ -1366,7 +1368,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.is5GHz()).thenReturn(true); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); levels[0] = -60; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); scanResultLinkConfiguration(savedConfigs, scanDetails); @@ -1415,7 +1417,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -60; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); @@ -1462,7 +1464,7 @@ public class WifiQualifiedNetworkSelectorTest { levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_BSSID_AWARD / 4 + WifiQualifiedNetworkSelector.SAME_NETWORK_AWARD / 4 - 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(1).getScanResult(); @@ -1508,7 +1510,7 @@ public class WifiQualifiedNetworkSelectorTest { levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_BSSID_AWARD / 4 + WifiQualifiedNetworkSelector.SAME_NETWORK_AWARD / 4 + 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); @@ -1559,7 +1561,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_NETWORK_AWARD / 4 - 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(1).getScanResult(); @@ -1610,7 +1612,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_BSSID_AWARD / 4 + 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java index bcbf940f3..e0f94ad17 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java @@ -348,6 +348,7 @@ public class WifiStateMachineTest { when(mWifiInjector.getWifiLastResortWatchdog()).thenReturn(mWifiLastResortWatchdog); when(mWifiInjector.getPropertyService()).thenReturn(mPropertyService); when(mWifiInjector.getBuildProperties()).thenReturn(mBuildProperties); + when(mWifiInjector.getKeyStore()).thenReturn(mock(KeyStore.class)); FrameworkFacade factory = getFrameworkFacade(); Context context = getContext(); diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java index 15d1465f0..1355961c1 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java @@ -30,6 +30,7 @@ import android.net.wifi.WifiScanner.ScanData; import android.net.wifi.WifiSsid; import android.os.SystemClock; +import com.android.server.wifi.Clock; import com.android.server.wifi.MockAlarmManager; import com.android.server.wifi.MockLooper; import com.android.server.wifi.MockResources; @@ -63,6 +64,7 @@ public abstract class BaseWifiScannerImplTest { MockLooper mLooper; @Mock WifiNative mWifiNative; MockResources mResources; + @Mock Clock mClock; /** * mScanner implementation should be filled in by derived test class @@ -84,6 +86,7 @@ public abstract class BaseWifiScannerImplTest { .thenReturn(mAlarmManager.getAlarmManager()); when(mContext.getResources()).thenReturn(mResources); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } protected Set expectedBandScanFreqs(int band) { @@ -386,7 +389,7 @@ public abstract class BaseWifiScannerImplTest { WifiScanner.WIFI_BAND_24_GHZ) .build(); - long approxScanStartUs = SystemClock.elapsedRealtime() * 1000; + long approxScanStartUs = mClock.elapsedRealtime() * 1000; ArrayList rawResults = new ArrayList<>(Arrays.asList( new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 1"), "00:00:00:00:00:00", "", -70, 2450, diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java index 7da2bad90..d5ff87797 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java @@ -34,6 +34,6 @@ public class HalWifiScannerTest extends BaseWifiScannerImplTest { new int[]{2400, 2450}, new int[]{5150, 5175}, new int[]{5600, 5650}); - mScanner = new HalWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper()); + mScanner = new HalWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper(), mClock); } } diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java index 4ef8a3f8d..39709f84d 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java @@ -25,9 +25,11 @@ import static org.mockito.Mockito.*; import android.content.Context; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiScanner; +import android.os.SystemClock; import android.test.suitebuilder.annotation.SmallTest; import com.android.internal.R; +import com.android.server.wifi.Clock; import com.android.server.wifi.MockAlarmManager; import com.android.server.wifi.MockLooper; import com.android.server.wifi.MockResources; @@ -59,6 +61,7 @@ public class SupplicantPnoScannerTest { MockLooper mLooper; @Mock WifiNative mWifiNative; MockResources mResources; + @Mock Clock mClock; SupplicantWifiScannerImpl mScanner; @Before @@ -74,6 +77,7 @@ public class SupplicantPnoScannerTest { when(mContext.getSystemService(Context.ALARM_SERVICE)) .thenReturn(mAlarmManager.getAlarmManager()); when(mContext.getResources()).thenReturn(mResources); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } /** @@ -229,12 +233,14 @@ public class SupplicantPnoScannerTest { private void createScannerWithHwPnoScanSupport() { mResources.setBoolean(R.bool.config_wifi_background_scan_support, true); - mScanner = new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper()); + mScanner = + new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper(), mClock); } private void createScannerWithSwPnoScanSupport() { mResources.setBoolean(R.bool.config_wifi_background_scan_support, false); - mScanner = new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper()); + mScanner = + new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper(), mClock); } private WifiNative.PnoSettings createDummyPnoSettings(boolean isConnected) { diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java index b107f8124..7bf548109 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java @@ -50,7 +50,7 @@ public class SupplicantWifiScannerTest extends BaseWifiScannerImplTest { @Before public void setup() throws Exception { mScanner = new SupplicantWifiScannerImpl(mContext, mWifiNative, - mLooper.getLooper()); + mLooper.getLooper(), mClock); } @Test diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java index 1fb0f951a..fd48b4b2e 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java @@ -38,6 +38,7 @@ import android.util.Pair; import com.android.internal.app.IBatteryStats; import com.android.internal.util.Protocol; import com.android.server.wifi.BidirectionalAsyncChannel; +import com.android.server.wifi.Clock; import com.android.server.wifi.MockAlarmManager; import com.android.server.wifi.MockAnswerUtil.AnswerWithArguments; import com.android.server.wifi.MockLooper; @@ -98,7 +99,8 @@ public class WifiScanningServiceTest { new int[]{5600, 5650, 5660}); mLooper = new MockLooper(); - when(mWifiScannerImplFactory.create(any(Context.class), any(Looper.class))) + when(mWifiScannerImplFactory + .create(any(Context.class), any(Looper.class), any(Clock.class))) .thenReturn(mWifiScannerImpl); when(mWifiScannerImpl.getChannelHelper()).thenReturn(channelHelper); when(mWifiInjector.getWifiMetrics()).thenReturn(mWifiMetrics); @@ -329,7 +331,8 @@ public class WifiScanningServiceTest { @Test public void loadDriver() throws Exception { startServiceAndLoadDriver(); - verify(mWifiScannerImplFactory, times(1)).create(any(Context.class), any(Looper.class)); + verify(mWifiScannerImplFactory, times(1)) + .create(any(Context.class), any(Looper.class), any(Clock.class)); Handler handler = mock(Handler.class); BidirectionalAsyncChannel controlChannel = connectChannel(handler); -- cgit v1.2.3 From 0195dc3dabc52cfb1455308109625a23ee126880 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Fri, 20 May 2016 10:17:41 -0700 Subject: WifiNetworHistory: Don't persist QNS blacklist QNS blacklists network temporarily by setting the network status. Reset this value when we bootup so that this not persisted. This is especially needed as we move away from using wall clock for blacklist time. Also, Remove the unused blacklist timestamp key from network history parsing. BUG: 28824635 Change-Id: Ie64c11f358b2e3389ec419cfcfdde8bb04298dd4 TEST: Compliles & unit-test passes --- .../com/android/server/wifi/WifiNetworkHistory.java | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/service/java/com/android/server/wifi/WifiNetworkHistory.java b/service/java/com/android/server/wifi/WifiNetworkHistory.java index 623d1cb96..cd1fe8b21 100644 --- a/service/java/com/android/server/wifi/WifiNetworkHistory.java +++ b/service/java/com/android/server/wifi/WifiNetworkHistory.java @@ -21,6 +21,7 @@ import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiConfiguration.NetworkSelectionStatus; import android.net.wifi.WifiSsid; import android.os.Environment; import android.os.Process; @@ -69,7 +70,6 @@ public class WifiNetworkHistory { private static final String FREQ_KEY = "FREQ"; private static final String DATE_KEY = "DATE"; private static final String MILLI_KEY = "MILLI"; - private static final String BLACKLIST_MILLI_KEY = "BLACKLIST_MILLI"; private static final String NETWORK_ID_KEY = "ID"; private static final String PRIORITY_KEY = "PRIORITY"; private static final String DEFAULT_GW_KEY = "DEFAULT_GW"; @@ -146,8 +146,7 @@ public class WifiNetworkHistory { else loge("attempt config w/o lp"); */ - WifiConfiguration.NetworkSelectionStatus status = - config.getNetworkSelectionStatus(); + NetworkSelectionStatus status = config.getNetworkSelectionStatus(); if (VDBG) { int numlink = 0; if (config.linkedConfigurations != null) { @@ -376,8 +375,7 @@ public class WifiNetworkHistory { } } } else if (config != null) { - WifiConfiguration.NetworkSelectionStatus networkStatus = - config.getNetworkSelectionStatus(); + NetworkSelectionStatus networkStatus = config.getNetworkSelectionStatus(); switch (key) { case SSID_KEY: if (config.isPasspoint()) { @@ -432,9 +430,6 @@ public class WifiNetworkHistory { case CREATOR_UID_KEY: config.creatorUid = Integer.parseInt(value); break; - case BLACKLIST_MILLI_KEY: - networkStatus.setDisableTime(Long.parseLong(value)); - break; case SCORER_OVERRIDE_KEY: config.numScorerOverride = Integer.parseInt(value); break; @@ -457,7 +452,14 @@ public class WifiNetworkHistory { config.peerWifiConfiguration = value; break; case NETWORK_SELECTION_STATUS_KEY: - networkStatus.setNetworkSelectionStatus(Integer.parseInt(value)); + int networkStatusValue = Integer.parseInt(value); + // Reset temporarily disabled network status + if (networkStatusValue == + NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED) { + networkStatusValue = + NetworkSelectionStatus.NETWORK_SELECTION_ENABLED; + } + networkStatus.setNetworkSelectionStatus(networkStatusValue); break; case NETWORK_SELECTION_DISABLE_REASON_KEY: networkStatus.setNetworkSelectionDisableReason(Integer.parseInt(value)); -- cgit v1.2.3