[RTT] Modify CTS tests to use associated AP information
Update the test to use the associated AP as the test AP:
- Make sure associated
- Find associated AP
- Disable Wi-Fi
- Run test
- Enable Wi-Fi
Bug: 74518964
Test: CtsNetTestCases:WifiRttTest pass
Change-Id: I0ee4eb56f32b4b3d119b86442d8e5912a6694fc8
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 b235d96..adbe0f6 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
@@ -21,7 +21,9 @@
import android.content.Intent;
import android.content.IntentFilter;
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;
@@ -43,9 +45,8 @@
public class TestBase extends AndroidTestCase {
protected static final String TAG = "WifiRttCtsTests";
- // The SSID of the test AP which supports IEEE 802.11mc
- // TODO b/74518964: finalize correct method to refer to an AP in the test lab
- static final String SSID_OF_TEST_AP = "standalone_rtt";
+ // 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;
@@ -58,6 +59,10 @@
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;
{
@@ -93,22 +98,43 @@
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);
}
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED);
- WifiRttBroadcastReceiver receiver = new WifiRttBroadcastReceiver();
- mContext.registerReceiver(receiver, intentFilter);
+ if (!mWifiManager.getConnectionInfo().getSupplicantState().equals(
+ SupplicantState.COMPLETED)) {
+ WifiConnectedBroadcastReceiver receiver = new WifiConnectedBroadcastReceiver();
+ mContext.registerReceiver(receiver, mWifiConnectedIntent);
+ receiver.waitForConnected();
+ mContext.unregisterReceiver(receiver);
+ }
+
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);
}
}
@@ -122,33 +148,77 @@
super.tearDown();
}
- class WifiRttBroadcastReceiver extends BroadcastReceiver {
+ private class SyncBroadcastReceiver 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 (WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED.equals(intent.getAction())) {
+ if (mAction.equals(intent.getAction())) {
mBlocker.countDown();
}
}
boolean waitForStateChange() throws InterruptedException {
- return mBlocker.await(WAIT_FOR_RTT_CHANGE_SECS, TimeUnit.SECONDS);
+ 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);
}
}
- class WifiScansBroadcastReceiver extends BroadcastReceiver {
+ class WifiConnectedBroadcastReceiver extends BroadcastReceiver {
private CountDownLatch mBlocker = new CountDownLatch(1);
@Override
public void onReceive(Context context, Intent intent) {
- if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {
- mBlocker.countDown();
+ 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();
+ }
}
}
- boolean waitForStateChange() throws InterruptedException {
- return mBlocker.await(WAIT_FOR_SCAN_RESULTS_SECS, TimeUnit.SECONDS);
+ 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);
}
}
@@ -217,10 +287,10 @@
*
* Returns null if test AP is not found in the specified number of scans.
*
- * @param ssid The SSID of the test AP
+ * @param bssid The BSSID of the test AP
* @param maxScanRetries Maximum number of scans retries (in addition to first scan).
*/
- protected ScanResult scanForTestAp(String ssid, int maxScanRetries)
+ protected ScanResult scanForTestAp(String bssid, int maxScanRetries)
throws InterruptedException {
int scanCount = 0;
while (scanCount <= maxScanRetries) {
@@ -228,7 +298,7 @@
if (!scanResult.is80211mcResponder()) {
continue;
}
- if (!ssid.equals(scanResult.SSID)) {
+ if (!bssid.equals(scanResult.BSSID)) {
continue;
}
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 0e6b306..983aa5e 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,11 +16,9 @@
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;
@@ -62,10 +60,18 @@
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(SSID_OF_TEST_AP,
- MAX_NUM_SCAN_RETRIES_SEARCHING_FOR_IEEE80211MC_AP);
- assertTrue("Cannot find test AP", testAp != null);
+ ScanResult testAp = scanForTestAp(bssid, MAX_NUM_SCAN_RETRIES_SEARCHING_FOR_IEEE80211MC_AP);
+ assertTrue("Cannot find test AP: bssid=" + bssid, testAp != null);
// Perform RTT operations
RangingRequest request = new RangingRequest.Builder().addAccessPoint(testAp).build();
@@ -150,26 +156,25 @@
return;
}
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED);
-
// 1. Disable Wi-Fi
WifiRttBroadcastReceiver receiver1 = new WifiRttBroadcastReceiver();
- mContext.registerReceiver(receiver1, intentFilter);
+ mContext.registerReceiver(receiver1, mRttIntent);
mWifiManager.setWifiEnabled(false);
assertTrue("Timeout waiting for Wi-Fi RTT to change status",
receiver1.waitForStateChange());
assertFalse("Wi-Fi RTT is available (should not be)", mWifiRttManager.isAvailable());
+ mContext.unregisterReceiver(receiver1);
// 2. Enable Wi-Fi
WifiRttBroadcastReceiver receiver2 = new WifiRttBroadcastReceiver();
- mContext.registerReceiver(receiver2, intentFilter);
+ mContext.registerReceiver(receiver2, mRttIntent);
mWifiManager.setWifiEnabled(true);
assertTrue("Timeout waiting for Wi-Fi RTT to change status",
receiver2.waitForStateChange());
assertTrue("Wi-Fi RTT is not available (should be)", mWifiRttManager.isAvailable());
+ mContext.unregisterReceiver(receiver2);
}
/**