diff --git a/tests/cts/net/src/android/net/wifi/rtt/cts/TestBase.java b/tests/cts/net/src/android/net/wifi/rtt/cts/TestBase.java index adbe0f6dd3..57ea2a5da8 100644 --- a/tests/cts/net/src/android/net/wifi/rtt/cts/TestBase.java +++ b/tests/cts/net/src/android/net/wifi/rtt/cts/TestBase.java @@ -20,10 +20,9 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.location.LocationManager; -import android.net.NetworkInfo; import android.net.wifi.ScanResult; -import android.net.wifi.SupplicantState; import android.net.wifi.WifiManager; import android.net.wifi.rtt.RangingResult; import android.net.wifi.rtt.RangingResultCallback; @@ -45,9 +44,6 @@ import java.util.concurrent.TimeUnit; public class TestBase extends AndroidTestCase { protected static final String TAG = "WifiRttCtsTests"; - // wait for Wi-Fi to enable and/or connect - private static final int WAIT_FOR_WIFI_ENABLE_SECS = 10; - // wait for Wi-Fi RTT to become available private static final int WAIT_FOR_RTT_CHANGE_SECS = 10; @@ -59,10 +55,6 @@ public class TestBase extends AndroidTestCase { private LocationManager mLocationManager; private WifiManager.WifiLock mWifiLock; - protected IntentFilter mRttIntent; - protected IntentFilter mWifiStateIntent; - protected IntentFilter mWifiConnectedIntent; - private final HandlerThread mHandlerThread = new HandlerThread("SingleDeviceTest"); protected final Executor mExecutor; { @@ -75,10 +67,8 @@ public class TestBase extends AndroidTestCase { * should be tested if the feature is supported on the current device. */ static boolean shouldTestWifiRtt(Context context) { - // TODO b/74457054: enable when t/31350604 resolved - return false; -// final PackageManager pm = context.getPackageManager(); -// return pm.hasSystemFeature(PackageManager.FEATURE_WIFI_RTT); + final PackageManager pm = context.getPackageManager(); + return pm.hasSystemFeature(PackageManager.FEATURE_WIFI_RTT); } @Override @@ -98,43 +88,22 @@ public class TestBase extends AndroidTestCase { Context.WIFI_RTT_RANGING_SERVICE); assertNotNull("Wi-Fi RTT Manager", mWifiRttManager); - mRttIntent = new IntentFilter(); - mRttIntent.addAction(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED); - - mWifiStateIntent = new IntentFilter(); - mWifiStateIntent.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); - - mWifiConnectedIntent = new IntentFilter(); - mWifiConnectedIntent.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); - mWifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); assertNotNull("Wi-Fi Manager", mWifiManager); mWifiLock = mWifiManager.createWifiLock(TAG); mWifiLock.acquire(); - assertTrue("Location scans must be enabled", mWifiManager.isScanAlwaysAvailable()); if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); - WifiEnableBroadcastReceiver receiver = new WifiEnableBroadcastReceiver(true); - mContext.registerReceiver(receiver, mWifiStateIntent); - receiver.waitForDesiredState(); - mContext.unregisterReceiver(receiver); - } - - if (!mWifiManager.getConnectionInfo().getSupplicantState().equals( - SupplicantState.COMPLETED)) { - WifiConnectedBroadcastReceiver receiver = new WifiConnectedBroadcastReceiver(); - mContext.registerReceiver(receiver, mWifiConnectedIntent); - receiver.waitForConnected(); - mContext.unregisterReceiver(receiver); } + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED); + WifiRttBroadcastReceiver receiver = new WifiRttBroadcastReceiver(); + mContext.registerReceiver(receiver, intentFilter); if (!mWifiRttManager.isAvailable()) { - WifiRttBroadcastReceiver receiver = new WifiRttBroadcastReceiver(); - mContext.registerReceiver(receiver, mRttIntent); assertTrue("Timeout waiting for Wi-Fi RTT to change status", receiver.waitForStateChange()); assertTrue("Wi-Fi RTT is not available (should be)", mWifiRttManager.isAvailable()); - mContext.unregisterReceiver(receiver); } } @@ -148,77 +117,33 @@ public class TestBase extends AndroidTestCase { super.tearDown(); } - private class SyncBroadcastReceiver extends BroadcastReceiver { + class WifiRttBroadcastReceiver extends BroadcastReceiver { private CountDownLatch mBlocker = new CountDownLatch(1); - private String mAction; - private int mTimeout; - - SyncBroadcastReceiver(String action, int timeout) { - mAction = action; - mTimeout = timeout; - } @Override public void onReceive(Context context, Intent intent) { - if (mAction.equals(intent.getAction())) { + if (WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED.equals(intent.getAction())) { mBlocker.countDown(); } } boolean waitForStateChange() throws InterruptedException { - return mBlocker.await(mTimeout, TimeUnit.SECONDS); - } - }; - - class WifiEnableBroadcastReceiver extends BroadcastReceiver { - private CountDownLatch mBlocker = new CountDownLatch(1); - private boolean mDesiredState; - - WifiEnableBroadcastReceiver(boolean desiredState) { - mDesiredState = desiredState; - } - - @Override - public void onReceive(Context context, Intent intent) { - if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) { - if (mWifiManager.isWifiEnabled() == mDesiredState) { - mBlocker.countDown(); - } - } - } - - boolean waitForDesiredState() throws InterruptedException { - return mBlocker.await(WAIT_FOR_WIFI_ENABLE_SECS, TimeUnit.SECONDS); + return mBlocker.await(WAIT_FOR_RTT_CHANGE_SECS, TimeUnit.SECONDS); } } - class WifiConnectedBroadcastReceiver extends BroadcastReceiver { + class WifiScansBroadcastReceiver extends BroadcastReceiver { private CountDownLatch mBlocker = new CountDownLatch(1); @Override public void onReceive(Context context, Intent intent) { - if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { - NetworkInfo ni = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); - if (ni.getState() == NetworkInfo.State.CONNECTED) { - mBlocker.countDown(); - } + if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) { + mBlocker.countDown(); } } - boolean waitForConnected() throws InterruptedException { - return mBlocker.await(WAIT_FOR_WIFI_ENABLE_SECS, TimeUnit.SECONDS); - } - } - - class WifiRttBroadcastReceiver extends SyncBroadcastReceiver { - WifiRttBroadcastReceiver() { - super(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED, WAIT_FOR_RTT_CHANGE_SECS); - } - } - - class WifiScansBroadcastReceiver extends SyncBroadcastReceiver { - WifiScansBroadcastReceiver() { - super(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION, WAIT_FOR_SCAN_RESULTS_SECS); + boolean waitForStateChange() throws InterruptedException { + return mBlocker.await(WAIT_FOR_SCAN_RESULTS_SECS, TimeUnit.SECONDS); } } @@ -281,33 +206,30 @@ public class TestBase extends AndroidTestCase { } /** - * Start a scan and return the test AP with the specified SSID and which supports IEEE 802.11mc. - * If the AP is not found re-attempts the scan maxScanRetries times (i.e. total number of - * scans can be maxScanRetries + 1). + * Start a scan and return a test AP which supports IEEE 802.11mc and which has the highest + * RSSI. Will perform N (parameterized) scans and get the best AP across both scans. * * Returns null if test AP is not found in the specified number of scans. * - * @param bssid The BSSID of the test AP - * @param maxScanRetries Maximum number of scans retries (in addition to first scan). + * @param numScanRetries Maximum number of scans retries (in addition to first scan). */ - protected ScanResult scanForTestAp(String bssid, int maxScanRetries) + protected ScanResult scanForTestAp(int numScanRetries) throws InterruptedException { int scanCount = 0; - while (scanCount <= maxScanRetries) { + ScanResult bestTestAp = null; + while (scanCount <= numScanRetries) { for (ScanResult scanResult : scanAps()) { if (!scanResult.is80211mcResponder()) { continue; } - if (!bssid.equals(scanResult.BSSID)) { - continue; + if (bestTestAp == null || scanResult.level > bestTestAp.level) { + bestTestAp = scanResult; } - - return scanResult; } scanCount++; } - return null; + return bestTestAp; } } diff --git a/tests/cts/net/src/android/net/wifi/rtt/cts/WifiRttTest.java b/tests/cts/net/src/android/net/wifi/rtt/cts/WifiRttTest.java index 8c59a57b54..5995bbd32f 100644 --- a/tests/cts/net/src/android/net/wifi/rtt/cts/WifiRttTest.java +++ b/tests/cts/net/src/android/net/wifi/rtt/cts/WifiRttTest.java @@ -16,9 +16,11 @@ package android.net.wifi.rtt.cts; +import android.content.IntentFilter; import android.net.wifi.ScanResult; import android.net.wifi.rtt.RangingRequest; import android.net.wifi.rtt.RangingResult; +import android.net.wifi.rtt.WifiRttManager; import com.android.compatibility.common.util.DeviceReportLog; import com.android.compatibility.common.util.ResultType; @@ -32,8 +34,8 @@ import java.util.List; * Wi-Fi RTT CTS test: range to all available Access Points which support IEEE 802.11mc. */ public class WifiRttTest extends TestBase { - // Max number of scan retries to do while searching for APs supporting IEEE 802.11mc - private static final int MAX_NUM_SCAN_RETRIES_SEARCHING_FOR_IEEE80211MC_AP = 2; + // Number of scans to do while searching for APs supporting IEEE 802.11mc + private static final int NUM_SCANS_SEARCHING_FOR_IEEE80211MC_AP = 2; // Number of RTT measurements per AP private static final int NUM_OF_RTT_ITERATIONS = 10; @@ -60,18 +62,9 @@ public class WifiRttTest extends TestBase { return; } - // Find the associated AP: get BSSID and disable Wi-Fi - String bssid = mWifiManager.getConnectionInfo().getBSSID(); - assertNotNull("Null BSSID - must be associated!", bssid); - assertTrue("Cannot disable Wi-Fi (to disassociate)", mWifiManager.setWifiEnabled(false)); - WifiEnableBroadcastReceiver receiver = new WifiEnableBroadcastReceiver(false); - mContext.registerReceiver(receiver, mWifiStateIntent); - receiver.waitForDesiredState(); - mContext.unregisterReceiver(receiver); - // Scan for IEEE 802.11mc supporting APs - ScanResult testAp = scanForTestAp(bssid, MAX_NUM_SCAN_RETRIES_SEARCHING_FOR_IEEE80211MC_AP); - assertTrue("Cannot find test AP: bssid=" + bssid, testAp != null); + ScanResult testAp = scanForTestAp(NUM_SCANS_SEARCHING_FOR_IEEE80211MC_AP); + assertTrue("Cannot find test AP", testAp != null); // Perform RTT operations RangingRequest request = new RangingRequest.Builder().addAccessPoint(testAp).build();