summaryrefslogtreecommitdiffstats
path: root/tests/wifitests/src/com/android/server/wifi/rtt
diff options
context:
space:
mode:
authorEtan Cohen <etancohen@google.com>2018-02-08 10:56:53 -0800
committerEtan Cohen <etancohen@google.com>2018-02-12 12:07:18 -0800
commit8154e3543f04838cd6bece12506f31d6843a98c6 (patch)
tree007714072eca1351d52f5348ff45b2b03ad65100 /tests/wifitests/src/com/android/server/wifi/rtt
parent58f7e9384a2d90d6de543294670ff694a19dd660 (diff)
downloadandroid_frameworks_opt_net_wifi-8154e3543f04838cd6bece12506f31d6843a98c6.tar.gz
android_frameworks_opt_net_wifi-8154e3543f04838cd6bece12506f31d6843a98c6.tar.bz2
android_frameworks_opt_net_wifi-8154e3543f04838cd6bece12506f31d6843a98c6.zip
[RTT] Add checks for 802.11mc support on AP RTT requests
Bug: 72975604 Test: unit tests, integration tests Change-Id: I2feee521d7b71684133cc95d8cee5f95095af076
Diffstat (limited to 'tests/wifitests/src/com/android/server/wifi/rtt')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java66
-rw-r--r--tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java140
-rw-r--r--tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java20
3 files changed, 197 insertions, 29 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java b/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
index 6048e52d8..70f63b46e 100644
--- a/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
@@ -104,7 +104,7 @@ public class RttNativeTest {
RangingRequest request = RttTestUtils.getDummyRangingRequest((byte) 0);
// (1) issue range request
- mDut.rangeRequest(cmdId, request);
+ mDut.rangeRequest(cmdId, request, true);
// (2) verify HAL call and parameters
verify(mockRttController).rangeRequest(eq(cmdId), mRttConfigCaptor.capture());
@@ -133,7 +133,65 @@ public class RttNativeTest {
collector.checkThat("entry 2: MAC", rttConfig.type, equalTo(RttType.TWO_SIDED));
collector.checkThat("entry 2: MAC", rttConfig.peer, equalTo(RttPeerType.NAN));
- verifyNoMoreInteractions(mockRttController);
+ verifyNoMoreInteractions(mockRttController, mockRttServiceImpl);
+ }
+
+ /**
+ * Validate ranging request with a mix of Repsonders with and without IEEE 802.11mc support,
+ * from a non- privileged context.
+ */
+ @Test
+ public void testRangeRequestNotPrivilegedNo80211mcSupportMixed() throws Exception {
+ int cmdId = 66;
+
+ // the request has 3 responders: first AP support 802.11mc, second AP does not, third is
+ // Aware (which supports 802.11mc by default)
+ RangingRequest request = RttTestUtils.getDummyRangingRequest((byte) 0);
+
+ // (1) issue range request
+ mDut.rangeRequest(cmdId, request, false);
+
+ // (2) verify HAL call and parameters
+ verify(mockRttController).rangeRequest(eq(cmdId), mRttConfigCaptor.capture());
+
+ // verify contents of HAL request (hard codes knowledge from getDummyRangingRequest()).
+ ArrayList<RttConfig> halRequest = mRttConfigCaptor.getValue();
+
+ collector.checkThat("number of entries", halRequest.size(), equalTo(2));
+
+ RttConfig rttConfig = halRequest.get(0);
+ collector.checkThat("entry 0: MAC", rttConfig.addr,
+ equalTo(MacAddress.fromString("00:01:02:03:04:00").toByteArray()));
+ collector.checkThat("entry 0: MAC", rttConfig.type, equalTo(RttType.TWO_SIDED));
+ collector.checkThat("entry 0: MAC", rttConfig.peer, equalTo(RttPeerType.AP));
+
+ rttConfig = halRequest.get(1);
+ collector.checkThat("entry 1: MAC", rttConfig.addr,
+ equalTo(MacAddress.fromString("08:09:08:07:06:05").toByteArray()));
+ collector.checkThat("entry 1: MAC", rttConfig.type, equalTo(RttType.TWO_SIDED));
+ collector.checkThat("entry 1: MAC", rttConfig.peer, equalTo(RttPeerType.NAN));
+
+ verifyNoMoreInteractions(mockRttController, mockRttServiceImpl);
+ }
+
+ /**
+ * Validate ranging request with all Repsonders without IEEE 802.11mc support, from a non-
+ * privileged context.
+ */
+ @Test
+ public void testRangeRequestNotPrivilegedNo80211mcSupportForAny() throws Exception {
+ int cmdId = 77;
+ RangingRequest request = RttTestUtils.getDummyRangingRequestNo80211mcSupport((byte) 0);
+
+ // (1) issue range request
+ mDut.rangeRequest(cmdId, request, false);
+
+ // (2) verify immediate result callback (empty result set)
+ verify(mockRttServiceImpl).onRangingResults(eq(cmdId), mRttResultCaptor.capture());
+
+ collector.checkThat("Result set", mRttResultCaptor.getValue().size(), equalTo(0));
+
+ verifyNoMoreInteractions(mockRttController, mockRttServiceImpl);
}
/**
@@ -151,7 +209,7 @@ public class RttNativeTest {
assertFalse(mDut.isReady());
// (2) issue range request
- mDut.rangeRequest(cmdId, request);
+ mDut.rangeRequest(cmdId, request, true);
verifyNoMoreInteractions(mockRttServiceImpl, mockRttController);
}
@@ -215,6 +273,6 @@ public class RttNativeTest {
collector.checkThat("distanceCm", rttResult.distanceInMm, equalTo(1500));
collector.checkThat("timestamp", rttResult.timeStampInUs, equalTo(666L));
- verifyNoMoreInteractions(mockRttController);
+ verifyNoMoreInteractions(mockRttController, mockRttServiceImpl);
}
}
diff --git a/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
index 52c996aa1..0172e3848 100644
--- a/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
@@ -47,6 +47,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
import android.hardware.wifi.V1_0.RttResult;
import android.location.LocationManager;
import android.net.MacAddress;
@@ -173,6 +174,10 @@ public class RttServiceImplTest {
mDut.fakeUid = mDefaultUid;
mMockLooper = new TestLooper();
+ when(mockContext.checkCallingOrSelfPermission(
+ android.Manifest.permission.LOCATION_HARDWARE)).thenReturn(
+ PackageManager.PERMISSION_GRANTED);
+
mAlarmManager = new TestAlarmManager();
doNothing().when(mFrameworkFacade).registerContentObserver(eq(mockContext), any(),
anyBoolean(), any());
@@ -189,7 +194,8 @@ public class RttServiceImplTest {
when(mockPermissionUtil.checkCallersLocationPermission(eq(mPackageName),
anyInt())).thenReturn(true);
when(mockNative.isReady()).thenReturn(true);
- when(mockNative.rangeRequest(anyInt(), any(RangingRequest.class))).thenReturn(true);
+ when(mockNative.rangeRequest(anyInt(), any(RangingRequest.class), anyBoolean())).thenReturn(
+ true);
mMockPowerManager = new PowerManager(mockContext, mock(IPowerManager.class),
new Handler(mMockLooper.getLooper()));
@@ -248,7 +254,7 @@ public class RttServiceImplTest {
for (int i = 0; i < numIter; ++i) {
// (2) verify that request issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(requests[i]));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(requests[i]), eq(true));
verifyWakeupSet();
// (3) native calls back with result
@@ -293,7 +299,7 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
// verify that requested with MAC address translated from the PeerHandle issued to Native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), mRequestCaptor.capture());
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), mRequestCaptor.capture(), eq(true));
verifyWakeupSet();
RangingRequest finalRequest = mRequestCaptor.getValue();
@@ -341,11 +347,13 @@ public class RttServiceImplTest {
}
// (1) request 10 ranging operations: fail the first one
- when(mockNative.rangeRequest(anyInt(), any(RangingRequest.class))).thenReturn(false);
+ when(mockNative.rangeRequest(anyInt(), any(RangingRequest.class), anyBoolean())).thenReturn(
+ false);
mDut.startRanging(mockIbinder, mPackageName, null, requests[0], mockCallback);
mMockLooper.dispatchAll();
- when(mockNative.rangeRequest(anyInt(), any(RangingRequest.class))).thenReturn(true);
+ when(mockNative.rangeRequest(anyInt(), any(RangingRequest.class), anyBoolean())).thenReturn(
+ true);
for (int i = 1; i < numIter; ++i) {
mDut.startRanging(mockIbinder, mPackageName, null, requests[i], mockCallback);
}
@@ -353,7 +361,7 @@ public class RttServiceImplTest {
for (int i = 0; i < numIter; ++i) {
// (2) verify that request issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(requests[i]));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(requests[i]), eq(true));
// (3) verify that failure callback dispatched (for the HAL failure)
if (i == 0) {
@@ -391,7 +399,7 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
// (2) verify that request issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// (3) native calls back with result - should get a FAILED callback
@@ -436,7 +444,7 @@ public class RttServiceImplTest {
for (int i = 0; i < numIter; ++i) {
// (3) verify first request and all odd requests issued to HAL
if (i == 0 || i % 2 == 1) {
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(requests[i]));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(requests[i]), eq(true));
verifyWakeupSet();
}
@@ -492,7 +500,7 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
verify(mockIbinder).linkToDeath(mDeathRecipientCaptor.capture(), anyInt());
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// (2) execute binder death
@@ -538,7 +546,7 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
// (2) verify that request issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// (3) cancel the request
@@ -580,7 +588,7 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
// (2) verify that request issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// (3) cancel the request
@@ -612,7 +620,7 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
// (2) verify that request issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// (3) native calls back with result - but wrong ID
@@ -657,7 +665,91 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
// (2) verify that request issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
+ verifyWakeupSet();
+
+ // (3) return results with missing entries
+ mDut.onRangingResults(mIntCaptor.getValue(), results.first);
+ mMockLooper.dispatchAll();
+
+ // (5) verify that (full) results dispatched
+ verify(mockCallback).onRangingResults(mListCaptor.capture());
+ assertTrue(compareListContentsNoOrdering(results.second, mListCaptor.getValue()));
+ verifyWakeupCancelled();
+
+ verify(mockNative, atLeastOnce()).isReady();
+ verifyNoMoreInteractions(mockNative, mockCallback, mAlarmManager.getAlarmManager());
+ }
+
+ /**
+ * Validate that when HAL returns an empty result set (completely empty) - they are filled-in
+ * with FAILED results.
+ */
+ @Test
+ public void testMissingAllResults() throws Exception {
+ RangingRequest request = RttTestUtils.getDummyRangingRequest((byte) 0);
+ Pair<List<RttResult>, List<RangingResult>> results = RttTestUtils.getDummyRangingResults(
+ request);
+ List<RangingResult> allFailResults = new ArrayList<>();
+ for (RangingResult result : results.second) {
+ allFailResults.add(
+ new RangingResult(RangingResult.STATUS_FAIL, result.getMacAddress(), 0, 0, 0,
+ null, null, 0));
+ }
+
+ // (1) request ranging operation
+ mDut.startRanging(mockIbinder, mPackageName, null, request, mockCallback);
+ mMockLooper.dispatchAll();
+
+ // (2) verify that request issued to native
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
+ verifyWakeupSet();
+
+ // (3) return results with ALL results missing
+ mDut.onRangingResults(mIntCaptor.getValue(), new ArrayList<>());
+ mMockLooper.dispatchAll();
+
+ // (5) verify that (full) results dispatched
+ verify(mockCallback).onRangingResults(mListCaptor.capture());
+ assertTrue(compareListContentsNoOrdering(allFailResults, mListCaptor.getValue()));
+ verifyWakeupCancelled();
+
+ verify(mockNative, atLeastOnce()).isReady();
+ verifyNoMoreInteractions(mockNative, mockCallback, mAlarmManager.getAlarmManager());
+ }
+
+ /**
+ * Validate that when the HAL returns results with "missing" entries (i.e. some requests
+ * don't get results) AND these correspond to peers which do not support 802.11mc AND the
+ * request is from a non-privileged context: they are filled-in with FAILED results.
+ */
+ @Test
+ public void testMissingResultsForNonSupportOf80211mc() throws Exception {
+ RangingRequest request = RttTestUtils.getDummyRangingRequest((byte) 0);
+ Pair<List<RttResult>, List<RangingResult>> results = RttTestUtils.getDummyRangingResults(
+ request);
+ results.first.remove(1); // remove the entry which doesn't support 802.11mc
+ RangingResult removed = results.second.remove(1);
+ results.second.add(
+ new RangingResult(RangingResult.STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC,
+ removed.getMacAddress(), 0, 0, 0, null, null, 0));
+ results.first.remove(
+ 0); // remove an AP request (i.e. test combo of missing for different reasons)
+ removed = results.second.remove(0);
+ results.second.add(
+ new RangingResult(RangingResult.STATUS_FAIL, removed.getMacAddress(), 0, 0, 0, null,
+ null, 0));
+
+ when(mockContext.checkCallingOrSelfPermission(
+ android.Manifest.permission.LOCATION_HARDWARE)).thenReturn(
+ PackageManager.PERMISSION_DENIED);
+
+ // (1) request ranging operation
+ mDut.startRanging(mockIbinder, mPackageName, null, request, mockCallback);
+ mMockLooper.dispatchAll();
+
+ // (2) verify that request issued to native
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(false));
verifyWakeupSet();
// (3) return results with missing entries
@@ -692,7 +784,7 @@ public class RttServiceImplTest {
mMockLooper.dispatchAll();
// verify that request 1 issued to native
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1), eq(true));
int cmdId1 = mIntCaptor.getValue();
verifyWakeupSet();
@@ -703,7 +795,7 @@ public class RttServiceImplTest {
// verify that: failure callback + request 2 issued to native
verify(mockNative).rangeCancel(eq(cmdId1), any());
verify(mockCallback).onRangingFailure(RangingResultCallback.STATUS_CODE_FAIL);
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request2));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request2), eq(true));
verifyWakeupSet();
// (3) send both result 1 and result 2
@@ -754,7 +846,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, null, request1, mockCallback);
mMockLooper.dispatchAll();
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1), eq(true));
verifyWakeupSet();
// (1.1) get result
@@ -776,7 +868,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, null, request3, mockCallback);
mMockLooper.dispatchAll();
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request3));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request3), eq(true));
verifyWakeupSet();
// (3.1) get result
@@ -794,7 +886,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, null, request4, mockCallback);
mMockLooper.dispatchAll();
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request4));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request4), eq(true));
verifyWakeupSet();
// (4.1) get result
@@ -870,7 +962,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, wsReq1, request1, mockCallback);
mMockLooper.dispatchAll();
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1), eq(true));
verifyWakeupSet();
// (1.1) get result
@@ -886,7 +978,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, wsReq2, request2, mockCallback);
mMockLooper.dispatchAll();
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request2));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request2), eq(true));
verifyWakeupSet();
// (2.1) get result
@@ -944,7 +1036,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, ws, request, mockCallback);
mMockLooper.dispatchAll();
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// 2. issue FLOOD LEVEL requests + 10 at various UIDs - no failure expected
@@ -998,7 +1090,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, useUids ? null : ws, request, mockCallback);
mMockLooper.dispatchAll();
- nativeInorder.verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ nativeInorder.verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// 2. issue FLOOD LEVEL requests + 10: should get 11 failures (10 extra + 1 original)
@@ -1018,7 +1110,7 @@ public class RttServiceImplTest {
cbInorder.verify(mockCallback).onRangingResults(result.second);
verifyWakeupCancelled();
- nativeInorder.verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request));
+ nativeInorder.verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request), eq(true));
verifyWakeupSet();
// 4. issue a request: don't expect a failure
@@ -1087,7 +1179,7 @@ public class RttServiceImplTest {
mDut.startRanging(mockIbinder, mPackageName, null, request2, mockCallback2);
mMockLooper.dispatchAll();
- verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1));
+ verify(mockNative).rangeRequest(mIntCaptor.capture(), eq(request1), eq(true));
verifyWakeupSet();
// (2) disable RTT: all requests should "fail"
diff --git a/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java b/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java
index f77393f2e..3928db915 100644
--- a/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java
+++ b/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java
@@ -53,9 +53,10 @@ public class RttTestUtils {
}
/**
- * Returns a dummy ranging request with 2 requests:
+ * Returns a dummy ranging request with 3 requests:
* - First: 802.11mc capable
* - Second: 802.11mc not capable
+ * - Third: Aware peer
*/
public static RangingRequest getDummyRangingRequest(byte lastMacByte) {
RangingRequest.Builder builder = new RangingRequest.Builder();
@@ -75,6 +76,23 @@ public class RttTestUtils {
}
/**
+ * Returns a dummy ranging request with 2 requests - neither of which support 802.11mc.
+ */
+ public static RangingRequest getDummyRangingRequestNo80211mcSupport(byte lastMacByte) {
+ RangingRequest.Builder builder = new RangingRequest.Builder();
+
+ ScanResult scan1 = new ScanResult();
+ scan1.BSSID = "00:01:02:03:04:" + String.format("%02d", lastMacByte);
+ ScanResult scan2 = new ScanResult();
+ scan2.BSSID = "0A:0B:0C:0D:0E:" + String.format("%02d", lastMacByte);
+
+ builder.addAccessPoint(scan1);
+ builder.addAccessPoint(scan2);
+
+ return builder.build();
+ }
+
+ /**
* Returns a matched set of dummy ranging results: HAL RttResult and the public API
* RangingResult.
*