Correct isLegacy metric data

The isLegacy field of Nsd metrics should indicate whether the
data was collected from the old backend or not. However, it is
currently only dependent on the ENABLE_PLATFORM_MDNS_BACKEND
compat change value, which is incorrect. This is because the
NsdService always uses the new backend since Android U,
regardless of the compat change value. Therefore, the isLegacy
data should be obtained from each transaction.

Bug: 287546772
Bug: 299880473
Test: atest FrameworksNetTestCases NsdManagerTest
Change-Id: I156abd656b90578d710696a69ccf7dfca97a2c9c
This commit is contained in:
Paul Hu
2023-09-11 15:31:33 +08:00
parent 3521a5ed8a
commit 508a012b2e
4 changed files with 222 additions and 187 deletions

View File

@@ -49,7 +49,6 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
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.anyString;
import static org.mockito.ArgumentMatchers.argThat;
@@ -227,7 +226,7 @@ public class NsdServiceTest {
doReturn(DEFAULT_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF).when(mDeps).getDeviceConfigInt(
eq(NsdService.MDNS_CONFIG_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF), anyInt());
doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any(), any(), any());
doReturn(mMetrics).when(mDeps).makeNetworkNsdReportedMetrics(anyBoolean(), anyInt());
doReturn(mMetrics).when(mDeps).makeNetworkNsdReportedMetrics(anyInt());
doReturn(mClock).when(mDeps).makeClock();
doReturn(TEST_TIME_MS).when(mClock).elapsedRealtime();
mService = makeService();
@@ -412,7 +411,7 @@ public class NsdServiceTest {
// this needs to use a timeout
verify(discListener, timeout(TIMEOUT_MS)).onDiscoveryStarted(SERVICE_TYPE);
final int discId = discIdCaptor.getValue();
verify(mMetrics).reportServiceDiscoveryStarted(discId);
verify(mMetrics).reportServiceDiscoveryStarted(true /* isLegacy */, discId);
final DiscoveryInfo discoveryInfo = new DiscoveryInfo(
discId,
@@ -481,7 +480,7 @@ public class NsdServiceTest {
final ArgumentCaptor<NsdServiceInfo> resInfoCaptor =
ArgumentCaptor.forClass(NsdServiceInfo.class);
verify(resolveListener, timeout(TIMEOUT_MS)).onServiceResolved(resInfoCaptor.capture());
verify(mMetrics).reportServiceResolved(getAddrId, 10L /* durationMs */,
verify(mMetrics).reportServiceResolved(true /* isLegacy */, getAddrId, 10L /* durationMs */,
false /* isServiceFromCache */, 0 /* sentQueryCount */);
final NsdServiceInfo resolvedService = resInfoCaptor.getValue();
@@ -509,7 +508,7 @@ public class NsdServiceTest {
// this needs to use a timeout
verify(discListener, timeout(TIMEOUT_MS)).onDiscoveryStarted(SERVICE_TYPE);
final int discId = discIdCaptor.getValue();
verify(mMetrics).reportServiceDiscoveryStarted(discId);
verify(mMetrics).reportServiceDiscoveryStarted(true /* isLegacy */, discId);
final DiscoveryInfo discoveryInfo = new DiscoveryInfo(
discId,
@@ -559,7 +558,8 @@ public class NsdServiceTest {
.onServiceRegistered(registeredInfoCaptor.capture());
final NsdServiceInfo registeredInfo = registeredInfoCaptor.getValue();
assertEquals(SERVICE_NAME, registeredInfo.getServiceName());
verify(mMetrics).reportServiceRegistrationSucceeded(regId, 10L /* durationMs */);
verify(mMetrics).reportServiceRegistrationSucceeded(
true /* isLegacy */, regId, 10L /* durationMs */);
// Fail to register service.
final RegistrationInfo registrationFailedInfo = new RegistrationInfo(
@@ -574,7 +574,8 @@ public class NsdServiceTest {
eventListener.onServiceRegistrationStatus(registrationFailedInfo);
verify(regListener, timeout(TIMEOUT_MS))
.onRegistrationFailed(any(), eq(FAILURE_INTERNAL_ERROR));
verify(mMetrics).reportServiceRegistrationFailed(regId, 20L /* durationMs */);
verify(mMetrics).reportServiceRegistrationFailed(
true /* isLegacy */, regId, 20L /* durationMs */);
}
@Test
@@ -590,7 +591,7 @@ public class NsdServiceTest {
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);
verify(mMetrics).reportServiceDiscoveryStarted(true /* isLegacy */, discId);
// Fail to discover service.
final DiscoveryInfo discoveryFailedInfo = new DiscoveryInfo(
@@ -605,7 +606,8 @@ public class NsdServiceTest {
eventListener.onServiceDiscoveryStatus(discoveryFailedInfo);
verify(discListener, timeout(TIMEOUT_MS))
.onStartDiscoveryFailed(SERVICE_TYPE, FAILURE_INTERNAL_ERROR);
verify(mMetrics).reportServiceDiscoveryFailed(discId, 10L /* durationMs */);
verify(mMetrics).reportServiceDiscoveryFailed(
true /* isLegacy */, discId, 10L /* durationMs */);
}
@Test
@@ -639,7 +641,8 @@ public class NsdServiceTest {
eventListener.onServiceResolutionStatus(resolutionFailedInfo);
verify(resolveListener, timeout(TIMEOUT_MS))
.onResolveFailed(any(), eq(FAILURE_INTERNAL_ERROR));
verify(mMetrics).reportServiceResolutionFailed(resolvId, 10L /* durationMs */);
verify(mMetrics).reportServiceResolutionFailed(
true /* isLegacy */, resolvId, 10L /* durationMs */);
}
@Test
@@ -689,7 +692,8 @@ public class NsdServiceTest {
eventListener.onGettingServiceAddressStatus(gettingAddrFailedInfo);
verify(resolveListener, timeout(TIMEOUT_MS))
.onResolveFailed(any(), eq(FAILURE_INTERNAL_ERROR));
verify(mMetrics).reportServiceResolutionFailed(getAddrId, 10L /* durationMs */);
verify(mMetrics).reportServiceResolutionFailed(
true /* isLegacy */, getAddrId, 10L /* durationMs */);
}
@Test
@@ -734,7 +738,8 @@ public class NsdServiceTest {
verify(resolveListener, timeout(TIMEOUT_MS)).onResolutionStopped(argThat(ns ->
request.getServiceName().equals(ns.getServiceName())
&& request.getServiceType().equals(ns.getServiceType())));
verify(mMetrics).reportServiceResolutionStop(resolveId, 10L /* durationMs */);
verify(mMetrics).reportServiceResolutionStop(
true /* isLegacy */, resolveId, 10L /* durationMs */);
}
@Test
@@ -805,7 +810,8 @@ public class NsdServiceTest {
verify(resolveListener, timeout(TIMEOUT_MS)).onResolutionStopped(argThat(ns ->
request.getServiceName().equals(ns.getServiceName())
&& request.getServiceType().equals(ns.getServiceType())));
verify(mMetrics).reportServiceResolutionStop(getAddrId, 10L /* durationMs */);
verify(mMetrics).reportServiceResolutionStop(
true /* isLegacy */, getAddrId, 10L /* durationMs */);
}
private void verifyUpdatedServiceInfo(NsdServiceInfo info, String serviceName,
@@ -996,7 +1002,7 @@ public class NsdServiceTest {
final MdnsListener listener = listenerCaptor.getValue();
final int discId = listener.mTransactionId;
verify(mMetrics).reportServiceDiscoveryStarted(discId);
verify(mMetrics).reportServiceDiscoveryStarted(false /* isLegacy */, discId);
// Callbacks for query sent.
listener.onDiscoveryQuerySent(Collections.emptyList(), 1 /* transactionId */);
@@ -1050,9 +1056,9 @@ public class NsdServiceTest {
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 */,
3 /* sentQueryCount */);
verify(mMetrics).reportServiceDiscoveryStop(false /* isLegacy */, discId,
10L /* durationMs */, 1 /* foundCallbackCount */, 1 /* lostCallbackCount */,
1 /* servicesCount */, 3 /* sentQueryCount */);
}
@Test
@@ -1068,8 +1074,8 @@ public class NsdServiceTest {
waitForIdle();
verify(discListener, timeout(TIMEOUT_MS))
.onStartDiscoveryFailed(invalidServiceType, FAILURE_INTERNAL_ERROR);
verify(mMetrics, times(1))
.reportServiceDiscoveryFailed(NO_TRANSACTION, 0L /* durationMs */);
verify(mMetrics, times(1)).reportServiceDiscoveryFailed(
false /* isLegacy */, NO_TRANSACTION, 0L /* durationMs */);
final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
client.discoverServices(
@@ -1077,8 +1083,8 @@ public class NsdServiceTest {
waitForIdle();
verify(discListener, timeout(TIMEOUT_MS))
.onStartDiscoveryFailed(serviceTypeWithLocalDomain, FAILURE_INTERNAL_ERROR);
verify(mMetrics, times(2))
.reportServiceDiscoveryFailed(NO_TRANSACTION, 0L /* durationMs */);
verify(mMetrics, times(2)).reportServiceDiscoveryFailed(
false /* isLegacy */, NO_TRANSACTION, 0L /* durationMs */);
final String serviceTypeWithoutTcpOrUdpEnding = "_test._com";
client.discoverServices(
@@ -1086,8 +1092,8 @@ public class NsdServiceTest {
waitForIdle();
verify(discListener, timeout(TIMEOUT_MS))
.onStartDiscoveryFailed(serviceTypeWithoutTcpOrUdpEnding, FAILURE_INTERNAL_ERROR);
verify(mMetrics, times(3))
.reportServiceDiscoveryFailed(NO_TRANSACTION, 0L /* durationMs */);
verify(mMetrics, times(3)).reportServiceDiscoveryFailed(
false /* isLegacy */, NO_TRANSACTION, 0L /* durationMs */);
}
@Test
@@ -1164,8 +1170,8 @@ public class NsdServiceTest {
final ArgumentCaptor<NsdServiceInfo> infoCaptor =
ArgumentCaptor.forClass(NsdServiceInfo.class);
verify(resolveListener, timeout(TIMEOUT_MS)).onServiceResolved(infoCaptor.capture());
verify(mMetrics).reportServiceResolved(listener.mTransactionId, 10 /* durationMs */,
true /* isServiceFromCache */, 0 /* sendQueryCount */);
verify(mMetrics).reportServiceResolved(false /* isLegacy */, listener.mTransactionId,
10 /* durationMs */, true /* isServiceFromCache */, 0 /* sendQueryCount */);
final NsdServiceInfo info = infoCaptor.getValue();
assertEquals(SERVICE_NAME, info.getServiceName());
@@ -1309,7 +1315,8 @@ public class NsdServiceTest {
verify(regListener, timeout(TIMEOUT_MS)).onServiceRegistered(argThat(info -> matches(info,
new NsdServiceInfo(regInfo.getServiceName(), null))));
verify(mMetrics).reportServiceRegistrationSucceeded(regId, 10L /* durationMs */);
verify(mMetrics).reportServiceRegistrationSucceeded(
false /* isLegacy */, regId, 10L /* durationMs */);
final MdnsAdvertiser.AdvertiserMetrics metrics = new MdnsAdvertiser.AdvertiserMetrics(
50 /* repliedRequestCount */, 100 /* sentPacketCount */,
@@ -1322,8 +1329,8 @@ public class NsdServiceTest {
verify(regListener, timeout(TIMEOUT_MS)).onServiceUnregistered(
argThat(info -> matches(info, regInfo)));
verify(mSocketProvider, timeout(TIMEOUT_MS)).requestStopWhenInactive();
verify(mMetrics).reportServiceUnregistration(regId, 100L /* durationMs */,
50 /* repliedRequestCount */, 100 /* sentPacketCount */,
verify(mMetrics).reportServiceUnregistration(false /* isLegacy */, regId,
100L /* durationMs */, 50 /* repliedRequestCount */, 100 /* sentPacketCount */,
3 /* conflictDuringProbingCount */, 2 /* conflictAfterProbingCount */);
}
@@ -1350,7 +1357,8 @@ public class NsdServiceTest {
verify(regListener, timeout(TIMEOUT_MS)).onRegistrationFailed(
argThat(info -> matches(info, regInfo)), eq(FAILURE_INTERNAL_ERROR));
verify(mMetrics).reportServiceRegistrationFailed(NO_TRANSACTION, 0L /* durationMs */);
verify(mMetrics).reportServiceRegistrationFailed(
false /* isLegacy */, NO_TRANSACTION, 0L /* durationMs */);
}
@Test
@@ -1386,7 +1394,8 @@ public class NsdServiceTest {
verify(regListener, timeout(TIMEOUT_MS)).onServiceRegistered(
argThat(info -> matches(info, new NsdServiceInfo(regInfo.getServiceName(), null))));
verify(mMetrics).reportServiceRegistrationSucceeded(regId, 10L /* durationMs */);
verify(mMetrics).reportServiceRegistrationSucceeded(
false /* isLegacy */, regId, 10L /* durationMs */);
}
@Test
@@ -1426,7 +1435,8 @@ public class NsdServiceTest {
request.getServiceName().equals(ns.getServiceName())
&& request.getServiceType().equals(ns.getServiceType())));
verify(mSocketProvider, timeout(CLEANUP_DELAY_MS + TIMEOUT_MS)).requestStopWhenInactive();
verify(mMetrics).reportServiceResolutionStop(listener.mTransactionId, 10L /* durationMs */);
verify(mMetrics).reportServiceResolutionStop(
false /* isLegacy */, listener.mTransactionId, 10L /* durationMs */);
}
@Test