summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-07-05 21:15:39 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-07-05 21:15:39 +0000
commitfde238c66f81feccb1900ed182c7d859e8ec47ac (patch)
tree806a91cf91e6da1ff4cae9bca52d25fbff8e759c /tests
parentcca4b57c80ceb087a0bd37fa2cbc0bcca483f3d0 (diff)
parent7a44d3fab050e1aca22317a604a68016c79f5925 (diff)
Merge changes I30d7a841,Idbc526df,Ie90ec6e9,Ib0316663 into oc-dr1-dev
* changes: [AWARE] Add metrics for data-path session duration [AWARE] Add NDP (data-path) creation duration metrics [AWARE] Add NAN data-path (NDP/NDI) metrics [AWARE] Simplify Discovery Session metrics collection
Diffstat (limited to 'tests')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java55
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/WifiAwareMetricsTest.java115
2 files changed, 158 insertions, 12 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
index ceed26661..0ddf765d7 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
@@ -24,6 +24,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyByte;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyShort;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.inOrder;
@@ -36,6 +37,7 @@ import android.Manifest;
import android.app.test.TestAlarmManager;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.hardware.wifi.V1_0.NanStatusType;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkFactory;
@@ -265,13 +267,14 @@ public class WifiAwareDataPathStateManagerTest {
final byte[] peerDiscoveryMac = HexEncoding.decode("000102030405".toCharArray(), false);
InOrder inOrder = inOrder(mMockNative, mMockCm, mMockCallback, mMockSessionCallback);
+ InOrder inOrderM = inOrder(mAwareMetricsMock);
when(mPermissionsWrapperMock.getUidPermission(eq(Manifest.permission.CONNECTIVITY_INTERNAL),
anyInt())).thenReturn(PackageManager.PERMISSION_DENIED);
// (0) initialize
Pair<Integer, Messenger> res = initDataPathEndPoint(clientId, pubSubId, peerHandle,
- peerDiscoveryMac, inOrder, false);
+ peerDiscoveryMac, inOrder, inOrderM, false);
// (1) request network
NetworkRequest nr = getSessionNetworkRequest(clientId, res.first, peerHandle, pmk, null,
@@ -285,7 +288,7 @@ public class WifiAwareDataPathStateManagerTest {
mMockLooper.dispatchAll();
// failure: no interactions with connectivity manager or native manager
- verifyNoMoreInteractions(mMockNative, mMockCm);
+ verifyNoMoreInteractions(mMockNative, mMockCm, mAwareMetricsMock);
}
/*
@@ -503,10 +506,11 @@ public class WifiAwareDataPathStateManagerTest {
final byte[] peerDiscoveryMac = HexEncoding.decode("000102030405".toCharArray(), false);
InOrder inOrder = inOrder(mMockNative, mMockCm, mMockCallback, mMockSessionCallback);
+ InOrder inOrderM = inOrder(mAwareMetricsMock);
// (0) initialize
Pair<Integer, Messenger> res = initDataPathEndPoint(clientId, pubSubId, peerHandle,
- peerDiscoveryMac, inOrder, doPublish);
+ peerDiscoveryMac, inOrder, inOrderM, doPublish);
// (1) request network
NetworkRequest nr = getSessionNetworkRequest(clientId, res.first, peerHandle, pmk, null,
@@ -545,7 +549,7 @@ public class WifiAwareDataPathStateManagerTest {
eq(ndpId), eq(""), eq(null), eq(null), anyBoolean(), any());
}
- verifyNoMoreInteractions(mMockNative, mMockCm);
+ verifyNoMoreInteractions(mMockNative, mMockCm, mAwareMetricsMock);
}
private void testDataPathInitiatorResponderInvalidUidUtility(boolean doPublish,
@@ -558,10 +562,11 @@ public class WifiAwareDataPathStateManagerTest {
final byte[] peerDiscoveryMac = HexEncoding.decode("000102030405".toCharArray(), false);
InOrder inOrder = inOrder(mMockNative, mMockCm, mMockCallback, mMockSessionCallback);
+ InOrder inOrderM = inOrder(mAwareMetricsMock);
// (0) initialize
Pair<Integer, Messenger> res = initDataPathEndPoint(clientId, pubSubId, peerHandle,
- peerDiscoveryMac, inOrder, doPublish);
+ peerDiscoveryMac, inOrder, inOrderM, doPublish);
// (1) create network request
NetworkRequest nr = getSessionNetworkRequest(clientId, res.first, peerHandle, pmk, null,
@@ -601,7 +606,7 @@ public class WifiAwareDataPathStateManagerTest {
eq(ndpId), eq(""), eq(null), eq(null), anyBoolean(), any());
}
- verifyNoMoreInteractions(mMockNative, mMockCm);
+ verifyNoMoreInteractions(mMockNative, mMockCm, mAwareMetricsMock);
}
private void testDataPathInitiatorUtility(boolean useDirect, boolean provideMac,
@@ -620,6 +625,7 @@ public class WifiAwareDataPathStateManagerTest {
ArgumentCaptor<Messenger> messengerCaptor = ArgumentCaptor.forClass(Messenger.class);
ArgumentCaptor<Short> transactionId = ArgumentCaptor.forClass(Short.class);
InOrder inOrder = inOrder(mMockNative, mMockCm, mMockCallback, mMockSessionCallback);
+ InOrder inOrderM = inOrder(mAwareMetricsMock);
if (!providePmk) {
when(mPermissionsWrapperMock.getUidPermission(
@@ -635,7 +641,7 @@ public class WifiAwareDataPathStateManagerTest {
// (0) initialize
Pair<Integer, Messenger> res = initDataPathEndPoint(clientId, pubSubId, peerHandle,
- peerDiscoveryMac, inOrder, false);
+ peerDiscoveryMac, inOrder, inOrderM, false);
// (1) request network
NetworkRequest nr;
@@ -662,7 +668,9 @@ public class WifiAwareDataPathStateManagerTest {
eq(providePassphrase ? passphrase : null), eq(useDirect), any());
if (immediateHalFailure) {
// short-circuit the rest of this test
- verifyNoMoreInteractions(mMockNative, mMockCm);
+ inOrderM.verify(mAwareMetricsMock).recordNdpStatus(eq(NanStatusType.INTERNAL_FAILURE),
+ eq(useDirect), anyLong());
+ verifyNoMoreInteractions(mMockNative, mMockCm, mAwareMetricsMock);
return;
}
@@ -676,6 +684,9 @@ public class WifiAwareDataPathStateManagerTest {
mMockLooper.dispatchAll();
inOrder.verify(mMockCm).registerNetworkAgent(messengerCaptor.capture(), any(), any(),
any(), anyInt(), any());
+ inOrderM.verify(mAwareMetricsMock).recordNdpStatus(eq(NanStatusType.SUCCESS),
+ eq(useDirect), anyLong());
+ inOrderM.verify(mAwareMetricsMock).recordNdpCreation(anyInt(), any());
} else {
assertTrue(mAlarmManager.dispatch(
WifiAwareStateManager.HAL_DATA_PATH_CONFIRM_TIMEOUT_TAG));
@@ -683,6 +694,8 @@ public class WifiAwareDataPathStateManagerTest {
inOrder.verify(mMockNative).endDataPath(transactionId.capture(), eq(ndpId));
mDut.onEndDataPathResponse(transactionId.getValue(), true, 0);
mMockLooper.dispatchAll();
+ inOrderM.verify(mAwareMetricsMock).recordNdpStatus(eq(NanStatusType.INTERNAL_FAILURE),
+ eq(useDirect), anyLong());
}
// (3) end data-path (unless didn't get confirmation)
@@ -699,10 +712,12 @@ public class WifiAwareDataPathStateManagerTest {
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).endDataPath(transactionId.capture(), eq(ndpId));
mDut.onEndDataPathResponse(transactionId.getValue(), true, 0);
+ mDut.onDataPathEndNotification(ndpId);
mMockLooper.dispatchAll();
+ inOrderM.verify(mAwareMetricsMock).recordNdpSessionDuration(anyLong());
}
- verifyNoMoreInteractions(mMockNative, mMockCm);
+ verifyNoMoreInteractions(mMockNative, mMockCm, mAwareMetricsMock);
}
private void testDataPathResponderUtility(boolean useDirect, boolean provideMac,
@@ -721,6 +736,7 @@ public class WifiAwareDataPathStateManagerTest {
ArgumentCaptor<Messenger> messengerCaptor = ArgumentCaptor.forClass(Messenger.class);
ArgumentCaptor<Short> transactionId = ArgumentCaptor.forClass(Short.class);
InOrder inOrder = inOrder(mMockNative, mMockCm, mMockCallback, mMockSessionCallback);
+ InOrder inOrderM = inOrder(mAwareMetricsMock);
if (providePmk) {
when(mPermissionsWrapperMock.getUidPermission(
@@ -730,7 +746,7 @@ public class WifiAwareDataPathStateManagerTest {
// (0) initialize
Pair<Integer, Messenger> res = initDataPathEndPoint(clientId, pubSubId, peerHandle,
- peerDiscoveryMac, inOrder, true);
+ peerDiscoveryMac, inOrder, inOrderM, true);
// (1) request network
NetworkRequest nr;
@@ -767,6 +783,9 @@ public class WifiAwareDataPathStateManagerTest {
mMockLooper.dispatchAll();
inOrder.verify(mMockCm).registerNetworkAgent(messengerCaptor.capture(), any(), any(),
any(), anyInt(), any());
+ inOrderM.verify(mAwareMetricsMock).recordNdpStatus(eq(NanStatusType.SUCCESS),
+ eq(useDirect), anyLong());
+ inOrderM.verify(mAwareMetricsMock).recordNdpCreation(anyInt(), any());
} else {
assertTrue(mAlarmManager.dispatch(
WifiAwareStateManager.HAL_DATA_PATH_CONFIRM_TIMEOUT_TAG));
@@ -774,6 +793,8 @@ public class WifiAwareDataPathStateManagerTest {
inOrder.verify(mMockNative).endDataPath(transactionId.capture(), eq(ndpId));
mDut.onEndDataPathResponse(transactionId.getValue(), true, 0);
mMockLooper.dispatchAll();
+ inOrderM.verify(mAwareMetricsMock).recordNdpStatus(eq(NanStatusType.INTERNAL_FAILURE),
+ eq(useDirect), anyLong());
}
// (4) end data-path (unless didn't get confirmation)
@@ -790,10 +811,12 @@ public class WifiAwareDataPathStateManagerTest {
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).endDataPath(transactionId.capture(), eq(ndpId));
mDut.onEndDataPathResponse(transactionId.getValue(), true, 0);
+ mDut.onDataPathEndNotification(ndpId);
mMockLooper.dispatchAll();
+ inOrderM.verify(mAwareMetricsMock).recordNdpSessionDuration(anyLong());
}
- verifyNoMoreInteractions(mMockNative, mMockCm);
+ verifyNoMoreInteractions(mMockNative, mMockCm, mAwareMetricsMock);
}
private void installDataPathStateManagerMocks() throws Exception {
@@ -922,7 +945,7 @@ public class WifiAwareDataPathStateManagerTest {
}
private Pair<Integer, Messenger> initDataPathEndPoint(int clientId, byte pubSubId,
- PeerHandle peerHandle, byte[] peerDiscoveryMac, InOrder inOrder,
+ PeerHandle peerHandle, byte[] peerDiscoveryMac, InOrder inOrder, InOrder inOrderM,
boolean doPublish)
throws Exception {
final int pid = 2000;
@@ -955,6 +978,7 @@ public class WifiAwareDataPathStateManagerTest {
// (2) enable usage
mDut.enableUsage();
mMockLooper.dispatchAll();
+ inOrderM.verify(mAwareMetricsMock).recordEnableUsage();
// (3) create client & session & rx message
mDut.connect(clientId, Process.myUid(), pid, callingPackage, mMockCallback, configRequest,
@@ -965,6 +989,8 @@ public class WifiAwareDataPathStateManagerTest {
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mMockCallback).onConnectSuccess(clientId);
+ inOrderM.verify(mAwareMetricsMock).recordAttachSession(eq(Process.myUid()), eq(false),
+ any());
inOrder.verify(mMockNative).createAwareNetworkInterface(transactionId.capture(),
strCaptor.capture());
@@ -989,6 +1015,11 @@ public class WifiAwareDataPathStateManagerTest {
mDut.onSessionConfigSuccessResponse(transactionId.getValue(), doPublish, pubSubId);
mMockLooper.dispatchAll();
inOrder.verify(mMockSessionCallback).onSessionStarted(sessionId.capture());
+ inOrderM.verify(mAwareMetricsMock).recordDiscoverySession(eq(Process.myUid()),
+ eq(doPublish), any());
+ inOrderM.verify(mAwareMetricsMock).recordDiscoveryStatus(Process.myUid(),
+ NanStatusType.SUCCESS, doPublish);
+
mDut.onMessageReceivedNotification(pubSubId, peerHandle.peerId, peerDiscoveryMac,
someMsg.getBytes());
mMockLooper.dispatchAll();
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareMetricsTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareMetricsTest.java
index 470a1de3d..8cd1e1097 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareMetricsTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareMetricsTest.java
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
import android.content.Context;
import android.hardware.wifi.V1_0.NanStatusType;
+import android.net.wifi.aware.WifiAwareNetworkSpecifier;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseIntArray;
@@ -41,6 +42,8 @@ import org.mockito.MockitoAnnotations;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
/**
* Unit test harness for WifiAwareMetrics
@@ -369,6 +372,100 @@ public class WifiAwareMetricsTest {
}
/**
+ * Validate the data-path (NDP & NDI) metrics.
+ */
+ @Test
+ public void testDataPathMetrics() {
+ final int uid1 = 1005;
+ final int uid2 = 1006;
+ final String ndi0 = "aware_data0";
+ final String ndi1 = "aware_data1";
+ Map<WifiAwareNetworkSpecifier, WifiAwareDataPathStateManager.AwareNetworkRequestInformation>
+ networkRequestCache = new HashMap<>();
+ WifiMetricsProto.WifiAwareLog log;
+
+ setTime(5);
+
+ // uid1: ndp (non-secure) on ndi0
+ addNetworkInfoToCache(networkRequestCache, 10, uid1, ndi0, null);
+ mDut.recordNdpCreation(uid1, networkRequestCache);
+ setTime(7); // 2ms creation time
+ mDut.recordNdpStatus(NanStatusType.SUCCESS, false, 5);
+
+ // uid2: ndp (non-secure) on ndi0
+ WifiAwareNetworkSpecifier ns = addNetworkInfoToCache(networkRequestCache, 11, uid2, ndi0,
+ null);
+ mDut.recordNdpCreation(uid2, networkRequestCache);
+ setTime(10); // 3 ms creation time
+ mDut.recordNdpStatus(NanStatusType.SUCCESS, false, 7);
+
+ // uid2: ndp (secure) on ndi1 (OOB)
+ addNetworkInfoToCache(networkRequestCache, 12, uid2, ndi1, "passphrase of some kind");
+ mDut.recordNdpCreation(uid2, networkRequestCache);
+ setTime(25); // 15 ms creation time
+ mDut.recordNdpStatus(NanStatusType.SUCCESS, true, 10);
+
+ // uid2: ndp (secure) on ndi0 (OOB)
+ addNetworkInfoToCache(networkRequestCache, 13, uid2, ndi0, "super secret password");
+ mDut.recordNdpCreation(uid2, networkRequestCache);
+ setTime(36); // 11 ms creation time
+ mDut.recordNdpStatus(NanStatusType.SUCCESS, true, 25);
+
+ // uid2: delete the first NDP
+ networkRequestCache.remove(ns);
+
+ // uid2: ndp (non-secure) on ndi0
+ addNetworkInfoToCache(networkRequestCache, 14, uid2, ndi0, null);
+ mDut.recordNdpCreation(uid2, networkRequestCache);
+ setTime(37); // 1 ms creation time!
+ mDut.recordNdpStatus(NanStatusType.SUCCESS, false, 36);
+
+ // a few error codes
+ mDut.recordNdpStatus(NanStatusType.INTERNAL_FAILURE, false, 0);
+ mDut.recordNdpStatus(NanStatusType.INTERNAL_FAILURE, false, 0);
+ mDut.recordNdpStatus(NanStatusType.NO_RESOURCES_AVAILABLE, false, 0);
+
+ // and some durations
+ setTime(150);
+ mDut.recordNdpSessionDuration(7); // 143ms
+ mDut.recordNdpSessionDuration(10); // 140ms
+ mDut.recordNdpSessionDuration(25); // 125ms
+ mDut.recordNdpSessionDuration(140); // 10ms
+
+ //verify
+ log = mDut.consolidateProto();
+
+ collector.checkThat("maxConcurrentNdiInApp", log.maxConcurrentNdiInApp, equalTo(2));
+ collector.checkThat("maxConcurrentNdiInSystem", log.maxConcurrentNdiInSystem, equalTo(2));
+ collector.checkThat("maxConcurrentNdpInApp", log.maxConcurrentNdpInApp, equalTo(3));
+ collector.checkThat("maxConcurrentNdpInSystem", log.maxConcurrentNdpInSystem, equalTo(4));
+ collector.checkThat("maxConcurrentSecureNdpInApp", log.maxConcurrentSecureNdpInApp,
+ equalTo(2));
+ collector.checkThat("maxConcurrentSecureNdpInSystem", log.maxConcurrentSecureNdpInSystem,
+ equalTo(2));
+ collector.checkThat("maxConcurrentNdpPerNdi", log.maxConcurrentNdpPerNdi, equalTo(3));
+ collector.checkThat("histogramRequestNdpStatus.length",
+ log.histogramRequestNdpStatus.length, equalTo(3));
+ collector.checkThat("histogramRequestNdpOobStatus.length",
+ log.histogramRequestNdpOobStatus.length, equalTo(1));
+
+ collector.checkThat("ndpCreationTimeMsMin", log.ndpCreationTimeMsMin, equalTo(1L));
+ collector.checkThat("ndpCreationTimeMsMax", log.ndpCreationTimeMsMax, equalTo(15L));
+ collector.checkThat("ndpCreationTimeMsSum", log.ndpCreationTimeMsSum, equalTo(32L));
+ collector.checkThat("ndpCreationTimeMsSumOfSq", log.ndpCreationTimeMsSumOfSq,
+ equalTo(360L));
+ collector.checkThat("ndpCreationTimeMsNumSamples", log.ndpCreationTimeMsNumSamples,
+ equalTo(5L));
+ validateProtoHistBucket("Creation[0]", log.histogramNdpCreationTimeMs[0], 1, 2, 1);
+ validateProtoHistBucket("Creation[1]", log.histogramNdpCreationTimeMs[1], 2, 3, 1);
+ validateProtoHistBucket("Creation[2]", log.histogramNdpCreationTimeMs[2], 3, 4, 1);
+ validateProtoHistBucket("Creation[3]", log.histogramNdpCreationTimeMs[3], 10, 20, 2);
+
+ validateProtoHistBucket("Duration[0]", log.histogramNdpSessionDurationMs[0], 10, 20, 1);
+ validateProtoHistBucket("Duration[1]", log.histogramNdpSessionDurationMs[1], 100, 200, 3);
+ }
+
+ /**
* Validate that the histogram configuration is initialized correctly: bucket starting points
* and sub-bucket widths.
*/
@@ -549,6 +646,24 @@ public class WifiAwareMetricsTest {
collector.checkThat(logPrefix + ": count", bucket.count, equalTo(count));
}
+ private WifiAwareNetworkSpecifier addNetworkInfoToCache(
+ Map<WifiAwareNetworkSpecifier, WifiAwareDataPathStateManager
+ .AwareNetworkRequestInformation> networkRequestCache,
+ int index, int uid, String interfaceName, String passphrase) {
+ WifiAwareNetworkSpecifier ns = new WifiAwareNetworkSpecifier(0, 0, 0, index, 0, null, null,
+ passphrase, 0);
+ WifiAwareDataPathStateManager.AwareNetworkRequestInformation anri =
+ new WifiAwareDataPathStateManager.AwareNetworkRequestInformation();
+ anri.networkSpecifier = ns;
+ anri.state = WifiAwareDataPathStateManager.AwareNetworkRequestInformation
+ .STATE_RESPONDER_CONFIRMED;
+ anri.uid = uid;
+ anri.interfaceName = interfaceName;
+
+ networkRequestCache.put(ns, anri);
+ return ns;
+ }
+
private void dumpDut(String prefix) {
StringWriter sw = new StringWriter();
mDut.dump(null, new PrintWriter(sw), null);