Merge changes from topic "wifi-rtt-cts" into pi-dev
am: 29a32336bd Change-Id: I9c30879dfed7d1eb003f60adaccf8c4fd5d70e57
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user