summaryrefslogtreecommitdiff
path: root/tests/wifitests/src/com/android/server/wifi/rtt/RttMetricsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wifitests/src/com/android/server/wifi/rtt/RttMetricsTest.java')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/rtt/RttMetricsTest.java641
1 files changed, 0 insertions, 641 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/rtt/RttMetricsTest.java b/tests/wifitests/src/com/android/server/wifi/rtt/RttMetricsTest.java
deleted file mode 100644
index 937585610..000000000
--- a/tests/wifitests/src/com/android/server/wifi/rtt/RttMetricsTest.java
+++ /dev/null
@@ -1,641 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wifi.rtt;
-
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.mockito.Mockito.when;
-
-import android.net.MacAddress;
-import android.net.wifi.rtt.RangingRequest;
-import android.net.wifi.rtt.RangingResult;
-import android.net.wifi.rtt.ResponderConfig;
-import android.os.WorkSource;
-import android.util.Log;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.server.wifi.Clock;
-import com.android.server.wifi.WifiBaseTest;
-import com.android.server.wifi.proto.nano.WifiMetricsProto;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ErrorCollector;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Unit test harness for RttMetrics
- */
-@SmallTest
-public class RttMetricsTest extends WifiBaseTest {
- private RttMetrics mDut;
-
- @Mock
- Clock mClock;
-
- @Rule
- public ErrorCollector collector = new ErrorCollector();
-
- /**
- * Pre-test configuration. Initialize and install mocks.
- */
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- setTime(1);
- mDut = new RttMetrics(mClock);
- }
-
- /**
- * Verify that recordRequest() records valid metrics.
- */
- @Test
- public void testRecordRequest() {
- WifiMetricsProto.WifiRttLog log;
-
- // no requests
- log = mDut.consolidateProto();
- checkMainStats("No requests", log, 0, 0, 0, 0);
- checkPeerStats("No requests: AP", log.rttToAp, 0, 0, 0, 0, 0, 0, 0, 0);
- checkPeerStats("No requests: Aware", log.rttToAware, 0, 0, 0, 0, 0, 0, 0, 0);
-
- // multiple AP requests from multiple sources
- WorkSource ws1 = new WorkSource(10);
- WorkSource ws2 = new WorkSource(20);
- ws2.add(10);
-
- RangingRequest requestAp1 = getDummyRangingRequest(1, 0);
- RangingRequest requestAp2 = getDummyRangingRequest(2, 0);
- RangingRequest requestAp5 = getDummyRangingRequest(5, 0);
- RangingRequest requestAp6 = getDummyRangingRequest(6, 0);
-
- mDut.clear();
- mDut.recordRequest(ws1, requestAp1);
- setTime(10); // delta = 9
- mDut.recordRequest(ws1, requestAp2);
- setTime(20); // delta = 10
- mDut.recordRequest(ws1, requestAp5);
- setTime(21); // delta = 1
- mDut.recordRequest(ws1, requestAp6);
- setTime(1000); // delta = 979
- mDut.recordRequest(ws1, requestAp5);
- setTime(5000); // delta = 4,000
- mDut.recordRequest(ws1, requestAp5);
- setTime(1000000); // delta = 995,000
- mDut.recordRequest(ws1, requestAp2);
- mDut.recordRequest(ws2, requestAp5);
- mDut.recordRequest(ws2, requestAp5);
- mDut.recordRequest(ws2, requestAp5);
-
- log = mDut.consolidateProto();
- checkMainStats("Sequence AP-only", log, 10, 0, 0, 0);
-
- checkPeerStats("Sequence AP-only: AP", log.rttToAp, 10, 41, 2, 2, 4, 0, 0, 5);
-
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramNumRequestsPerApp[0]",
- log.rttToAp.histogramNumRequestsPerApp[0], 1, 10, 1);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramNumRequestsPerApp[1]",
- log.rttToAp.histogramNumRequestsPerApp[1], 10, 100, 1);
-
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramNumPeersPerRequest[0]",
- log.rttToAp.histogramNumPeersPerRequest[0], 1, 1, 1);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramNumPeersPerRequest[1]",
- log.rttToAp.histogramNumPeersPerRequest[1], 2, 2, 2);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramNumPeersPerRequest[2]",
- log.rttToAp.histogramNumPeersPerRequest[2], 5, 5, 6);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramNumPeersPerRequest[3]",
- log.rttToAp.histogramNumPeersPerRequest[3], 6, 6, 1);
-
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramRequestIntervalMs[0]",
- log.rttToAp.histogramRequestIntervalMs[0], 1, 10, 5);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramRequestIntervalMs[1]",
- log.rttToAp.histogramRequestIntervalMs[1], 10, 100, 1);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramRequestIntervalMs[2]",
- log.rttToAp.histogramRequestIntervalMs[2], 100, 1000, 1);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramRequestIntervalMs[3]",
- log.rttToAp.histogramRequestIntervalMs[3], 1000, 10000, 1);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramRequestIntervalMs[4]",
- log.rttToAp.histogramRequestIntervalMs[4], 100000, 1000000, 1);
-
- checkPeerStats("Sequence AP-only: Aware", log.rttToAware, 0, 0, 0, 0, 0, 0, 0, 0);
-
- // mix of AP and Aware requests
- WorkSource ws3 = new WorkSource(30);
- ws3.add(20);
- ws3.add(40);
-
- RangingRequest requestMixed03 = getDummyRangingRequest(0, 3);
- RangingRequest requestMixed25 = getDummyRangingRequest(2, 5);
- RangingRequest requestMixed50 = getDummyRangingRequest(5, 0);
- RangingRequest requestMixed08 = getDummyRangingRequest(0, 8);
-
- mDut.clear();
- setTime(100);
- mDut.recordRequest(ws3, requestMixed03);
- setTime(101);
- mDut.recordRequest(ws3, requestMixed25);
- setTime(102);
- mDut.recordRequest(ws3, requestMixed50);
- setTime(103);
- mDut.recordRequest(ws3, requestMixed08);
-
- log = mDut.consolidateProto();
- checkMainStats("Sequence Mixed AP/Aware", log, 4, 0, 0, 0);
-
- checkPeerStats("Sequence Mixed AP/Aware: AP", log.rttToAp, 2, 7, 3, 1, 2, 0, 0, 1);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramNumRequestsPerApp[0]",
- log.rttToAp.histogramNumRequestsPerApp[0], 1, 10, 3);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramNumPeersPerRequest[0]",
- log.rttToAp.histogramNumPeersPerRequest[0], 2, 2, 1);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramNumPeersPerRequest[1]",
- log.rttToAp.histogramNumPeersPerRequest[1], 5, 5, 1);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramRequestIntervalMs[0]",
- log.rttToAp.histogramRequestIntervalMs[0], 1, 10, 1);
-
- checkPeerStats("Sequence Mixed AP/Aware: Aware", log.rttToAware, 3, 16, 3, 1, 3, 0, 0, 1);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramNumRequestsPerApp[0]",
- log.rttToAware.histogramNumRequestsPerApp[0], 1, 10, 3);
-
- validateProtoHistBucket(
- "Sequence Mixed AP/Aware: rttToAware.histogramNumPeersPerRequest[0]",
- log.rttToAware.histogramNumPeersPerRequest[0], 3, 3, 1);
- validateProtoHistBucket(
- "Sequence Mixed AP/Aware: rttToAware.histogramNumPeersPerRequest[1]",
- log.rttToAware.histogramNumPeersPerRequest[1], 5, 5, 1);
- validateProtoHistBucket(
- "Sequence Mixed AP/Aware: rttToAware.histogramNumPeersPerRequest[2]",
- log.rttToAware.histogramNumPeersPerRequest[2], 8, 8, 1);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramRequestIntervalMs[0]",
- log.rttToAware.histogramRequestIntervalMs[0], 1, 10, 2);
- }
-
- /**
- * Verify that recordResult() records valid metrics.
- */
- @Test
- public void testRecordResult() {
- WifiMetricsProto.WifiRttLog log;
-
- // no requests
- log = mDut.consolidateProto();
- checkMainStats("No requests", log, 0, 0, 0, 0);
- checkPeerStats("No requests: AP", log.rttToAp, 0, 0, 0, 0, 0, 0, 0, 0);
- checkPeerStats("No requests: Aware", log.rttToAware, 0, 0, 0, 0, 0, 0, 0, 0);
-
- // multiple AP results
- RangingRequest requestAp1 = getDummyRangingRequest(1, 0);
- RangingRequest requestAp2 = getDummyRangingRequest(2, 0);
- RangingRequest requestAp5 = getDummyRangingRequest(5, 0);
- RangingRequest requestAp6 = getDummyRangingRequest(6, 0);
-
- mDut.clear();
- mDut.recordResult(requestAp1, getDummyRangingResults(RttNative.FRAMEWORK_RTT_STATUS_SUCCESS,
- requestAp1, 5, 0), 500);
- mDut.recordResult(requestAp2, getDummyRangingResults(RttNative.FRAMEWORK_RTT_STATUS_SUCCESS,
- requestAp2, 10, 30), 1500);
- mDut.recordResult(requestAp5, getDummyRangingResults(RttNative.FRAMEWORK_RTT_STATUS_SUCCESS,
- requestAp5, 0.3, -0.2), 700);
- mDut.recordResult(requestAp6, getDummyRangingResults(RttNative.FRAMEWORK_RTT_STATUS_SUCCESS,
- requestAp6, 40, 30), 1800);
- log = mDut.consolidateProto();
-
- checkMainStats("Sequence AP-only", log, 0, 0, 2, 0);
- checkPeerStats("Sequence AP-only: AP", log.rttToAp, 0, 0, 0, 0, 0, 1, 6, 0);
-
- validateProtoHistBucket("Sequence AP-only: histogramMeasurementDurationApOnly[0]",
- log.histogramMeasurementDurationApOnly[0], Integer.MIN_VALUE, 1 * 1000, 2);
- validateProtoHistBucket("Sequence AP-only: histogramMeasurementDurationApOnly[1]",
- log.histogramMeasurementDurationApOnly[1], 1 * 1000, 2 * 1000, 2);
-
- validateProtoIndividualStatusHistBucket(
- "Sequence AP-only: rttToAp.histogramIndividualStatus[0]",
- log.rttToAp.histogramIndividualStatus[0], WifiMetricsProto.WifiRttLog.SUCCESS, 14);
-
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramDistance[0]",
- log.rttToAp.histogramDistance[0], Integer.MIN_VALUE, 0, 3);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramDistance[1]",
- log.rttToAp.histogramDistance[1], 0, 5 * 1000, 2);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramDistance[2]",
- log.rttToAp.histogramDistance[2], 5 * 1000, 15 * 1000, 2);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramDistance[3]",
- log.rttToAp.histogramDistance[3], 30 * 1000, 60 * 1000, 2);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramDistance[4]",
- log.rttToAp.histogramDistance[4], 60 * 1000, 100 * 1000, 1);
- validateProtoHistBucket("Sequence AP-only: rttToAp.histogramDistance[5]",
- log.rttToAp.histogramDistance[5], 100 * 1000, Integer.MAX_VALUE, 4);
-
- checkPeerStats("Sequence AP-only: Aware", log.rttToAware, 0, 0, 0, 0, 0, 0, 0, 0);
-
- // mix of AP and Aware requests
- RangingRequest requestMixed03 = getDummyRangingRequest(0, 3);
- RangingRequest requestMixed25 = getDummyRangingRequest(2, 5);
- RangingRequest requestMixed50 = getDummyRangingRequest(5, 0);
- RangingRequest requestMixed08 = getDummyRangingRequest(0, 8);
-
- mDut.clear();
- mDut.recordResult(requestMixed03, getDummyRangingResults(
- RttNative.FRAMEWORK_RTT_STATUS_SUCCESS, requestMixed03, 5, 0), 6400);
- mDut.recordResult(requestMixed25, getDummyRangingResults(
- RttNative.FRAMEWORK_RTT_STATUS_SUCCESS, requestMixed25, 10, 30), 7800);
- mDut.recordResult(requestMixed50, getDummyRangingResults(
- RttNative.FRAMEWORK_RTT_STATUS_SUCCESS, requestMixed50, 0.3, -0.2), 3100);
- mDut.recordResult(requestMixed08, getDummyRangingResults(
- RttNative.FRAMEWORK_RTT_STATUS_SUCCESS, requestMixed08, 40, 30), 9500);
- log = mDut.consolidateProto();
-
- checkMainStats("Sequence Mixed AP/Aware", log, 0, 0, 1, 2);
-
- checkPeerStats("Sequence Mixed AP/Aware: AP", log.rttToAp, 0, 0, 0, 0, 0, 1, 4, 0);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: histogramMeasurementDurationApOnly[0]",
- log.histogramMeasurementDurationApOnly[0], 3 * 1000, 4 * 1000, 1);
- validateProtoHistBucket("Sequence Mixed AP/Aware: histogramMeasurementDurationWithAware[0]",
- log.histogramMeasurementDurationWithAware[0], 6 * 1000, 8 * 1000, 2);
- validateProtoHistBucket("Sequence Mixed AP/Aware: histogramMeasurementDurationWithAware[1]",
- log.histogramMeasurementDurationWithAware[1], 8 * 1000, Integer.MAX_VALUE, 1);
-
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAp.histogramIndividualStatus[0]",
- log.rttToAp.histogramIndividualStatus[0], WifiMetricsProto.WifiRttLog.SUCCESS, 7);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramDistance[0]",
- log.rttToAp.histogramDistance[0], Integer.MIN_VALUE, 0, 3);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramDistance[1]",
- log.rttToAp.histogramDistance[1], 0, 5 * 1000, 2);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramDistance[2]",
- log.rttToAp.histogramDistance[2], 5 * 1000, 15 * 1000, 1);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramDistance[3]",
- log.rttToAp.histogramDistance[3], 30 * 1000, 60 * 1000, 1);
-
- checkPeerStats("Sequence Mixed AP/Aware: Aware", log.rttToAware, 0, 0, 0, 0, 0, 1, 4, 0);
-
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAware.histogramIndividualStatus[0]",
- log.rttToAware.histogramIndividualStatus[0], WifiMetricsProto.WifiRttLog.SUCCESS,
- 16);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramDistance[0]",
- log.rttToAware.histogramDistance[0], 5 * 1000, 15 * 1000, 3);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramDistance[1]",
- log.rttToAware.histogramDistance[1], 30 * 1000, 60 * 1000, 1);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramDistance[2]",
- log.rttToAware.histogramDistance[2], 60 * 1000, 100 * 1000, 2);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramDistance[3]",
- log.rttToAware.histogramDistance[3], 100 * 1000, Integer.MAX_VALUE, 10);
- }
-
- /**
- * Verify the behavior when the HAL returns with missing results or some results set to null.
- */
- @Test
- public void testRecordMissingResults() {
- WifiMetricsProto.WifiRttLog log;
-
- mDut.clear();
- RangingRequest requestMixed25 = getDummyRangingRequest(2, 5);
- List<RangingResult> resultMixed25 = getDummyRangingResults(
- RttNative.FRAMEWORK_RTT_STATUS_SUCCESS, requestMixed25, 10, 30);
- // remove some results
- resultMixed25.remove(3); // Second Aware result: distance = 100
- resultMixed25.remove(0); // First AP result: distance = 10
- resultMixed25.add(null);
- mDut.recordResult(requestMixed25, resultMixed25, 0);
-
- log = mDut.consolidateProto();
-
- checkMainStats("Sequence Mixed AP/Aware", log, 0, 0, 0, 1);
-
- checkPeerStats("Sequence Mixed AP/Aware: AP", log.rttToAp, 0, 0, 0, 0, 0, 2, 1, 0);
-
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAp.histogramIndividualStatus[0]",
- log.rttToAp.histogramIndividualStatus[0], WifiMetricsProto.WifiRttLog.SUCCESS, 1);
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAp.histogramIndividualStatus[1]",
- log.rttToAp.histogramIndividualStatus[1],
- WifiMetricsProto.WifiRttLog.MISSING_RESULT, 1);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAp.histogramDistance[0]",
- log.rttToAp.histogramDistance[0], 30 * 1000, 60 * 1000, 1);
-
- checkPeerStats("Sequence Mixed AP/Aware: Aware", log.rttToAware, 0, 0, 0, 0, 0, 2, 2, 0);
-
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAware.histogramIndividualStatus[0]",
- log.rttToAware.histogramIndividualStatus[0], WifiMetricsProto.WifiRttLog.SUCCESS,
- 4);
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAware.histogramIndividualStatus[1]",
- log.rttToAware.histogramIndividualStatus[1],
- WifiMetricsProto.WifiRttLog.MISSING_RESULT, 1);
-
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramDistance[0]",
- log.rttToAware.histogramDistance[0], 60 * 1000, 100 * 1000, 1);
- validateProtoHistBucket("Sequence Mixed AP/Aware: rttToAware.histogramDistance[1]",
- log.rttToAware.histogramDistance[1], 100 * 1000, Integer.MAX_VALUE, 3);
- }
-
- /**
- * Verify the behavior when the HAL returns with NULL array.
- */
- @Test
- public void testRecordNullArrayResults() {
- WifiMetricsProto.WifiRttLog log;
-
- mDut.clear();
- RangingRequest requestMixed25 = getDummyRangingRequest(2, 5);
- mDut.recordResult(requestMixed25, null, 0);
-
- log = mDut.consolidateProto();
-
- checkMainStats("Sequence Mixed AP/Aware", log, 0, 0, 0, 0);
-
- checkPeerStats("Sequence Mixed AP/Aware: AP", log.rttToAp, 0, 0, 0, 0, 0, 1, 0, 0);
-
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAp.histogramIndividualStatus[1]",
- log.rttToAp.histogramIndividualStatus[0],
- WifiMetricsProto.WifiRttLog.MISSING_RESULT, 2);
-
- checkPeerStats("Sequence Mixed AP/Aware: Aware", log.rttToAware, 0, 0, 0, 0, 0, 1, 0, 0);
-
- validateProtoIndividualStatusHistBucket(
- "Sequence Mixed AP/Aware: rttToAware.histogramIndividualStatus[0]",
- log.rttToAware.histogramIndividualStatus[0],
- WifiMetricsProto.WifiRttLog.MISSING_RESULT, 5);
- }
-
- /**
- * Verify that all individual status codes are translated correctly.
- */
- @Test
- public void testRecordResultsStatuses() {
- WifiMetricsProto.WifiRttLog log;
-
- mDut.clear();
-
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_SUCCESS, 5);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAILURE, 6);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_NO_RSP, 7);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_REJECTED, 8);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_NOT_SCHEDULED_YET, 9);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_TM_TIMEOUT, 10);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL, 11);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_NO_CAPABILITY, 12);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_ABORTED, 13);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_INVALID_TS, 14);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_PROTOCOL, 15);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_SCHEDULE, 16);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_BUSY_TRY_LATER, 17);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_INVALID_REQ, 18);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_NO_WIFI, 19);
- recordResultNTimes(RttNative.FRAMEWORK_RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE, 20);
-
- log = mDut.consolidateProto();
-
- collector.checkThat("AP histogramIndividualStatus.length",
- log.rttToAp.histogramIndividualStatus.length, equalTo(16));
-
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[0]",
- log.rttToAp.histogramIndividualStatus[0], WifiMetricsProto.WifiRttLog.SUCCESS, 5);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[1]",
- log.rttToAp.histogramIndividualStatus[1], WifiMetricsProto.WifiRttLog.FAILURE, 6);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[2]",
- log.rttToAp.histogramIndividualStatus[2], WifiMetricsProto.WifiRttLog.FAIL_NO_RSP,
- 7);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[3]",
- log.rttToAp.histogramIndividualStatus[3], WifiMetricsProto.WifiRttLog.FAIL_REJECTED,
- 8);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[4]",
- log.rttToAp.histogramIndividualStatus[4],
- WifiMetricsProto.WifiRttLog.FAIL_NOT_SCHEDULED_YET, 9);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[5]",
- log.rttToAp.histogramIndividualStatus[5],
- WifiMetricsProto.WifiRttLog.FAIL_TM_TIMEOUT, 10);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[6]",
- log.rttToAp.histogramIndividualStatus[6],
- WifiMetricsProto.WifiRttLog.FAIL_AP_ON_DIFF_CHANNEL, 11);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[7]",
- log.rttToAp.histogramIndividualStatus[7],
- WifiMetricsProto.WifiRttLog.FAIL_NO_CAPABILITY, 12);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[8]",
- log.rttToAp.histogramIndividualStatus[8], WifiMetricsProto.WifiRttLog.ABORTED, 13);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[9]",
- log.rttToAp.histogramIndividualStatus[9],
- WifiMetricsProto.WifiRttLog.FAIL_INVALID_TS, 14);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[10]",
- log.rttToAp.histogramIndividualStatus[10],
- WifiMetricsProto.WifiRttLog.FAIL_PROTOCOL, 15);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[11]",
- log.rttToAp.histogramIndividualStatus[11],
- WifiMetricsProto.WifiRttLog.FAIL_SCHEDULE, 16);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[12]",
- log.rttToAp.histogramIndividualStatus[12],
- WifiMetricsProto.WifiRttLog.FAIL_BUSY_TRY_LATER, 17);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[13]",
- log.rttToAp.histogramIndividualStatus[13], WifiMetricsProto.WifiRttLog.INVALID_REQ,
- 18);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[14]",
- log.rttToAp.histogramIndividualStatus[14], WifiMetricsProto.WifiRttLog.NO_WIFI, 19);
- validateProtoIndividualStatusHistBucket("rttToAp.histogramIndividualStatus[15]",
- log.rttToAp.histogramIndividualStatus[15],
- WifiMetricsProto.WifiRttLog.FAIL_FTM_PARAM_OVERRIDE, 20);
-
- collector.checkThat("Aware histogramIndividualStatus.length",
- log.rttToAware.histogramIndividualStatus.length, equalTo(0));
- }
-
- /**
- * Verify that all overall status codes are recorded correctly.
- */
- @Test
- public void testRecordOverallStatus() {
- WifiMetricsProto.WifiRttLog log;
-
- mDut.clear();
-
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_SUCCESS, 5);
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_FAIL, 6);
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_RTT_NOT_AVAILABLE, 7);
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_TIMEOUT, 8);
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_THROTTLE, 9);
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_HAL_FAILURE, 10);
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_AWARE_TRANSLATION_FAILURE,
- 11);
- recordOverallStatusNTimes(WifiMetricsProto.WifiRttLog.OVERALL_LOCATION_PERMISSION_MISSING,
- 12);
-
- log = mDut.consolidateProto();
-
- collector.checkThat("histogramOverallStatus.length", log.histogramOverallStatus.length,
- equalTo(8));
-
- validateProtoOverallStatusHistBucket("histogramOverallStatus[0]",
- log.histogramOverallStatus[0], WifiMetricsProto.WifiRttLog.OVERALL_SUCCESS, 5);
- validateProtoOverallStatusHistBucket("histogramOverallStatus[1]",
- log.histogramOverallStatus[1], WifiMetricsProto.WifiRttLog.OVERALL_FAIL, 6);
- validateProtoOverallStatusHistBucket("histogramOverallStatus[2]",
- log.histogramOverallStatus[2],
- WifiMetricsProto.WifiRttLog.OVERALL_RTT_NOT_AVAILABLE, 7);
- validateProtoOverallStatusHistBucket("histogramOverallStatus[3]",
- log.histogramOverallStatus[3], WifiMetricsProto.WifiRttLog.OVERALL_TIMEOUT, 8);
- validateProtoOverallStatusHistBucket("histogramOverallStatus[4]",
- log.histogramOverallStatus[4], WifiMetricsProto.WifiRttLog.OVERALL_THROTTLE, 9);
- validateProtoOverallStatusHistBucket("histogramOverallStatus[5]",
- log.histogramOverallStatus[5], WifiMetricsProto.WifiRttLog.OVERALL_HAL_FAILURE, 10);
- validateProtoOverallStatusHistBucket("histogramOverallStatus[6]",
- log.histogramOverallStatus[6],
- WifiMetricsProto.WifiRttLog.OVERALL_AWARE_TRANSLATION_FAILURE, 11);
- validateProtoOverallStatusHistBucket("histogramOverallStatus[7]",
- log.histogramOverallStatus[7],
- WifiMetricsProto.WifiRttLog.OVERALL_LOCATION_PERMISSION_MISSING, 12);
- }
-
- // Utilities
-
- /**
- * Mock the elapsed time since boot to the input argument.
- */
- private void setTime(long timeMs) {
- when(mClock.getElapsedSinceBootMillis()).thenReturn(timeMs);
- }
-
- private void validateProtoHistBucket(String logPrefix,
- WifiMetricsProto.WifiRttLog.HistogramBucket bucket, long start, long end, int count) {
- collector.checkThat(logPrefix + ": start", bucket.start, equalTo(start));
- collector.checkThat(logPrefix + ": end", bucket.end, equalTo(end));
- collector.checkThat(logPrefix + ": count", bucket.count, equalTo(count));
- }
-
- private void validateProtoOverallStatusHistBucket(String logPrefix,
- WifiMetricsProto.WifiRttLog.RttOverallStatusHistogramBucket bucket, int status,
- int count) {
- collector.checkThat(logPrefix + ": statusType", bucket.statusType, equalTo(status));
- collector.checkThat(logPrefix + ": count", bucket.count, equalTo(count));
- }
-
- private void validateProtoIndividualStatusHistBucket(String logPrefix,
- WifiMetricsProto.WifiRttLog.RttIndividualStatusHistogramBucket bucket, int status,
- int count) {
- collector.checkThat(logPrefix + ": statusType", bucket.statusType, equalTo(status));
- collector.checkThat(logPrefix + ": count", bucket.count, equalTo(count));
- }
-
- private void checkMainStats(String msgPrefix, WifiMetricsProto.WifiRttLog log, int numRequests,
- int histogramOverallStatusLength, int histogramMeasurementDurationApOnlyLength,
- int histogramMeasurementDurationWithAwareLength) {
- collector.checkThat(msgPrefix + ": numRequests", log.numRequests, equalTo(numRequests));
- collector.checkThat(msgPrefix + ": histogramOverallStatus.length",
- log.histogramOverallStatus.length,
- equalTo(histogramOverallStatusLength));
- collector.checkThat(msgPrefix + ": histogramMeasurementDurationApOnly.length",
- log.histogramMeasurementDurationApOnly.length,
- equalTo(histogramMeasurementDurationApOnlyLength));
- collector.checkThat(msgPrefix + ": histogramMeasurementDurationWithAware.length",
- log.histogramMeasurementDurationWithAware.length,
- equalTo(histogramMeasurementDurationWithAwareLength));
- }
-
- private void checkPeerStats(String msgPrefix, WifiMetricsProto.WifiRttLog.RttToPeerLog log,
- int numRequests, int numIndividualRequests,
- int numApps, int histogramNumRequestsPerAppLength,
- int histogramNumPeersPerRequestLength, int histogramIndividualStatusLength,
- int histogramDistanceLength, int histogramRequestIntervalMsLength) {
- collector.checkThat(msgPrefix + ": numRequests", log.numRequests, equalTo(numRequests));
- collector.checkThat(msgPrefix + ": numIndividualRequests", log.numIndividualRequests,
- equalTo(numIndividualRequests));
- collector.checkThat(msgPrefix + ": numApps", log.numApps, equalTo(numApps));
- collector.checkThat(msgPrefix + ": histogramNumRequestsPerApp.length",
- log.histogramNumRequestsPerApp.length, equalTo(histogramNumRequestsPerAppLength));
- collector.checkThat(msgPrefix + ": histogramNumPeersPerRequest.length",
- log.histogramNumPeersPerRequest.length, equalTo(histogramNumPeersPerRequestLength));
- collector.checkThat(msgPrefix + ": histogramIndividualStatus.length",
- log.histogramIndividualStatus.length, equalTo(histogramIndividualStatusLength));
- collector.checkThat(msgPrefix + ": histogramDistance.length",
- log.histogramDistance.length, equalTo(histogramDistanceLength));
- collector.checkThat(msgPrefix + ": histogramRequestIntervalMs.length",
- log.histogramRequestIntervalMs.length, equalTo(histogramRequestIntervalMsLength));
- }
-
- private RangingRequest getDummyRangingRequest(int countAp, int countAware) {
- RangingRequest.Builder builder = new RangingRequest.Builder();
- byte[] dummyMacBase = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5};
-
- for (int i = 0; i < countAp; ++i) {
- dummyMacBase[0]++;
- builder.addResponder(new ResponderConfig(MacAddress.fromBytes(dummyMacBase),
- ResponderConfig.RESPONDER_AP, true, 0, 0, 0, 0, 0));
- }
- for (int i = 0; i < countAware; ++i) {
- dummyMacBase[0]++;
- builder.addResponder(new ResponderConfig(MacAddress.fromBytes(dummyMacBase),
- ResponderConfig.RESPONDER_AWARE, true, 0, 0, 0, 0, 0));
- }
-
- return builder.build();
- }
-
- private List<RangingResult> getDummyRangingResults(int status, RangingRequest request,
- double baseDistanceM, double incrDistanceM) {
- List<RangingResult> rangingResults = new ArrayList<>();
- double distance = baseDistanceM;
-
- for (ResponderConfig peer : request.mRttPeers) {
-
- RangingResult rttResult = new RangingResult(status, peer.macAddress,
- (int) (distance * 1000), 0, 0, 8, 8, null, null, null, 0);
- distance += incrDistanceM;
- rangingResults.add(rttResult);
- }
-
- return rangingResults;
- }
-
- private void recordResultNTimes(int status, int n) {
- RangingRequest request = getDummyRangingRequest(1, 0);
- List<RangingResult> results = getDummyRangingResults(status, request, 0, 0);
-
- for (int i = 0; i < n; ++i) {
- mDut.recordResult(request, results, 0);
- }
- }
-
- private void recordOverallStatusNTimes(int status, int n) {
- for (int i = 0; i < n; ++i) {
- mDut.recordOverallStatus(status);
- }
- }
-
- private void dumpDut(String prefix) {
- StringWriter sw = new StringWriter();
- mDut.dump(null, new PrintWriter(sw), null);
- Log.e("RttMetrics", prefix + sw.toString());
- }
-}