From 021f8dde9b816537b67b664e91e0589d5da89fe0 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Fri, 6 Apr 2018 15:24:19 -0700 Subject: [PATCH] ScanResultTest: Retry scan attempts on failure Scans can fail for multiple reasons (throttling, driver error, framework aborting scans, etc). Add a retry mechanism for scans in this test because these tests are dependendent on a successful scan being completed. Bug: 77601110 Test: atest ScanResultTest#testScanResultTimeStamp Test: atest android.net.wifi.cts Change-Id: Ic15e455394dde6fc01c01ea7f3eed2e27976d666 --- .../android/net/wifi/cts/ScanResultTest.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java b/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java index c9b82eecc7..8a22bef4e1 100644 --- a/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java @@ -42,12 +42,14 @@ public class ScanResultTest extends AndroidTestCase { private static final int STATE_WIFI_CHANGED = 2; private static final int STATE_START_SCAN = 3; private static final int STATE_SCAN_RESULTS_AVAILABLE = 4; + private static final int STATE_SCAN_FAILURE = 5; private static final String TAG = "WifiInfoTest"; private static final int TIMEOUT_MSEC = 6000; private static final int WAIT_MSEC = 60; private static final int ENABLE_WAIT_MSEC = 10000; private static final int SCAN_WAIT_MSEC = 10000; + private static final int SCAN_MAX_RETRY_COUNT = 6; private IntentFilter mIntentFilter; private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override @@ -60,7 +62,11 @@ public class ScanResultTest extends AndroidTestCase { } } else if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { synchronized (mMySync) { - mMySync.expectedState = STATE_SCAN_RESULTS_AVAILABLE; + if (intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)) { + mMySync.expectedState = STATE_SCAN_RESULTS_AVAILABLE; + } else { + mMySync.expectedState = STATE_SCAN_FAILURE; + } mMySync.notify(); } } @@ -120,11 +126,12 @@ public class ScanResultTest extends AndroidTestCase { } } - private void waitForBroadcast(long timeout, int expectedState) throws Exception { + private boolean waitForBroadcast(long timeout, int expectedState) throws Exception { long waitTime = System.currentTimeMillis() + timeout; while (System.currentTimeMillis() < waitTime && mMySync.expectedState != expectedState) mMySync.wait(WAIT_MSEC); + return mMySync.expectedState == expectedState; } public void testScanResultProperties() { @@ -140,11 +147,16 @@ public class ScanResultTest extends AndroidTestCase { } } + /* Multiple scans to ensure bssid is updated */ private void scanAndWait() throws Exception { synchronized (mMySync) { - mMySync.expectedState = STATE_START_SCAN; - mWifiManager.startScan(); - waitForBroadcast(SCAN_WAIT_MSEC, STATE_SCAN_RESULTS_AVAILABLE); + for (int retry = 0; retry < SCAN_MAX_RETRY_COUNT; retry++) { + mMySync.expectedState = STATE_START_SCAN; + mWifiManager.startScan(); + if (waitForBroadcast(SCAN_WAIT_MSEC, STATE_SCAN_RESULTS_AVAILABLE)) { + break; + } + } } } @@ -157,9 +169,6 @@ public class ScanResultTest extends AndroidTestCase { long timestamp = 0; String BSSID = null; - /* Multiple scans to ensure bssid is updated */ - scanAndWait(); - scanAndWait(); scanAndWait(); List scanResults = mWifiManager.getScanResults(); @@ -170,8 +179,6 @@ public class ScanResultTest extends AndroidTestCase { break; } - scanAndWait(); - scanAndWait(); scanAndWait(); scanResults = mWifiManager.getScanResults();