Report discovery metrics data
Collect information on discovery start, failure, and stop events, then use this data to build metrics and report them. Bug: 287546772 Test: atest FrameworksNetTestCases NsdManagerTest Change-Id: I2f6a718024870f9658cfeabe8995624a3ad81f05
This commit is contained in:
@@ -31,6 +31,8 @@ import static android.net.nsd.NsdManager.FAILURE_INTERNAL_ERROR;
|
||||
import static android.net.nsd.NsdManager.FAILURE_OPERATION_NOT_RUNNING;
|
||||
|
||||
import static com.android.server.NsdService.DEFAULT_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF;
|
||||
import static com.android.server.NsdService.MdnsListener;
|
||||
import static com.android.server.NsdService.NO_TRANSACTION;
|
||||
import static com.android.server.NsdService.parseTypeAndSubtype;
|
||||
import static com.android.testutils.ContextUtils.mockService;
|
||||
|
||||
@@ -45,7 +47,6 @@ import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.Mockito.any;
|
||||
@@ -401,9 +402,11 @@ public class NsdServiceTest {
|
||||
// NsdManager uses a separate HandlerThread to dispatch callbacks (on ServiceHandler), so
|
||||
// this needs to use a timeout
|
||||
verify(discListener, timeout(TIMEOUT_MS)).onDiscoveryStarted(SERVICE_TYPE);
|
||||
final int discId = discIdCaptor.getValue();
|
||||
verify(mMetrics).reportServiceDiscoveryStarted(discId);
|
||||
|
||||
final DiscoveryInfo discoveryInfo = new DiscoveryInfo(
|
||||
discIdCaptor.getValue(),
|
||||
discId,
|
||||
IMDnsEventListener.SERVICE_FOUND,
|
||||
SERVICE_NAME,
|
||||
SERVICE_TYPE,
|
||||
@@ -491,9 +494,11 @@ public class NsdServiceTest {
|
||||
// NsdManager uses a separate HandlerThread to dispatch callbacks (on ServiceHandler), so
|
||||
// this needs to use a timeout
|
||||
verify(discListener, timeout(TIMEOUT_MS)).onDiscoveryStarted(SERVICE_TYPE);
|
||||
final int discId = discIdCaptor.getValue();
|
||||
verify(mMetrics).reportServiceDiscoveryStarted(discId);
|
||||
|
||||
final DiscoveryInfo discoveryInfo = new DiscoveryInfo(
|
||||
discIdCaptor.getValue(),
|
||||
discId,
|
||||
IMDnsEventListener.SERVICE_FOUND,
|
||||
SERVICE_NAME,
|
||||
SERVICE_TYPE,
|
||||
@@ -570,19 +575,23 @@ public class NsdServiceTest {
|
||||
final ArgumentCaptor<Integer> discIdCaptor = ArgumentCaptor.forClass(Integer.class);
|
||||
verify(mMockMDnsM).discover(discIdCaptor.capture(), eq(SERVICE_TYPE), eq(IFACE_IDX_ANY));
|
||||
verify(discListener, timeout(TIMEOUT_MS)).onDiscoveryStarted(SERVICE_TYPE);
|
||||
final int discId = discIdCaptor.getValue();
|
||||
verify(mMetrics).reportServiceDiscoveryStarted(discId);
|
||||
|
||||
// Fail to discover service.
|
||||
final DiscoveryInfo discoveryFailedInfo = new DiscoveryInfo(
|
||||
discIdCaptor.getValue(),
|
||||
discId,
|
||||
IMDnsEventListener.SERVICE_DISCOVERY_FAILED,
|
||||
null /* serviceName */,
|
||||
null /* registrationType */,
|
||||
null /* domainName */,
|
||||
IFACE_IDX_ANY,
|
||||
0 /* netId */);
|
||||
doReturn(TEST_TIME_MS + 10L).when(mClock).elapsedRealtime();
|
||||
eventListener.onServiceDiscoveryStatus(discoveryFailedInfo);
|
||||
verify(discListener, timeout(TIMEOUT_MS))
|
||||
.onStartDiscoveryFailed(SERVICE_TYPE, FAILURE_INTERNAL_ERROR);
|
||||
verify(mMetrics).reportServiceDiscoveryFailed(discId, 10L /* durationMs */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -936,8 +945,8 @@ public class NsdServiceTest {
|
||||
final Network network = new Network(999);
|
||||
final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
|
||||
// Verify the discovery start / stop.
|
||||
final ArgumentCaptor<MdnsServiceBrowserListener> listenerCaptor =
|
||||
ArgumentCaptor.forClass(MdnsServiceBrowserListener.class);
|
||||
final ArgumentCaptor<MdnsListener> listenerCaptor =
|
||||
ArgumentCaptor.forClass(MdnsListener.class);
|
||||
client.discoverServices(SERVICE_TYPE, PROTOCOL, network, r -> r.run(), discListener);
|
||||
waitForIdle();
|
||||
verify(mSocketProvider).startMonitoringSockets();
|
||||
@@ -945,7 +954,10 @@ public class NsdServiceTest {
|
||||
listenerCaptor.capture(), argThat(options -> network.equals(options.getNetwork())));
|
||||
verify(discListener, timeout(TIMEOUT_MS)).onDiscoveryStarted(SERVICE_TYPE);
|
||||
|
||||
final MdnsServiceBrowserListener listener = listenerCaptor.getValue();
|
||||
final MdnsListener listener = listenerCaptor.getValue();
|
||||
final int discId = listener.mTransactionId;
|
||||
verify(mMetrics).reportServiceDiscoveryStarted(discId);
|
||||
|
||||
final MdnsServiceInfo foundInfo = new MdnsServiceInfo(
|
||||
SERVICE_NAME, /* serviceInstanceName */
|
||||
serviceTypeWithLocalDomain.split("\\."), /* serviceType */
|
||||
@@ -987,11 +999,14 @@ public class NsdServiceTest {
|
||||
&& info.getServiceType().equals(SERVICE_TYPE + ".")
|
||||
&& info.getNetwork().equals(network)));
|
||||
|
||||
doReturn(TEST_TIME_MS + 10L).when(mClock).elapsedRealtime();
|
||||
client.stopServiceDiscovery(discListener);
|
||||
waitForIdle();
|
||||
verify(mDiscoveryManager).unregisterListener(eq(serviceTypeWithLocalDomain), any());
|
||||
verify(discListener, timeout(TIMEOUT_MS)).onDiscoveryStopped(SERVICE_TYPE);
|
||||
verify(mSocketProvider, timeout(CLEANUP_DELAY_MS + TIMEOUT_MS)).requestStopWhenInactive();
|
||||
verify(mMetrics).reportServiceDiscoveryStop(discId, 10L /* durationMs */,
|
||||
1 /* foundCallbackCount */, 1 /* lostCallbackCount */, 1 /* servicesCount */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1007,6 +1022,8 @@ public class NsdServiceTest {
|
||||
waitForIdle();
|
||||
verify(discListener, timeout(TIMEOUT_MS))
|
||||
.onStartDiscoveryFailed(invalidServiceType, FAILURE_INTERNAL_ERROR);
|
||||
verify(mMetrics, times(1))
|
||||
.reportServiceDiscoveryFailed(NO_TRANSACTION, 0L /* durationMs */);
|
||||
|
||||
final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
|
||||
client.discoverServices(
|
||||
@@ -1014,6 +1031,8 @@ public class NsdServiceTest {
|
||||
waitForIdle();
|
||||
verify(discListener, timeout(TIMEOUT_MS))
|
||||
.onStartDiscoveryFailed(serviceTypeWithLocalDomain, FAILURE_INTERNAL_ERROR);
|
||||
verify(mMetrics, times(2))
|
||||
.reportServiceDiscoveryFailed(NO_TRANSACTION, 0L /* durationMs */);
|
||||
|
||||
final String serviceTypeWithoutTcpOrUdpEnding = "_test._com";
|
||||
client.discoverServices(
|
||||
@@ -1021,6 +1040,8 @@ public class NsdServiceTest {
|
||||
waitForIdle();
|
||||
verify(discListener, timeout(TIMEOUT_MS))
|
||||
.onStartDiscoveryFailed(serviceTypeWithoutTcpOrUdpEnding, FAILURE_INTERNAL_ERROR);
|
||||
verify(mMetrics, times(3))
|
||||
.reportServiceDiscoveryFailed(NO_TRANSACTION, 0L /* durationMs */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1271,7 +1292,7 @@ public class NsdServiceTest {
|
||||
|
||||
verify(regListener, timeout(TIMEOUT_MS)).onRegistrationFailed(
|
||||
argThat(info -> matches(info, regInfo)), eq(FAILURE_INTERNAL_ERROR));
|
||||
verify(mMetrics).reportServiceRegistrationFailed(anyInt(), anyLong());
|
||||
verify(mMetrics).reportServiceRegistrationFailed(NO_TRANSACTION, 0L /* durationMs */);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user