Add Mdns statistics log
When developers run "dumpsys dnsresolver", Mdns statistics
will show the information in the log if the Mdns queries
happened.
Bug: 140857615
Test: cd packages/modules/DnsResolver && atest
Change-Id: Iec0657d417ddf329590f1fc0a599497aaf45639b
diff --git a/DnsStatsTest.cpp b/DnsStatsTest.cpp
index 877085b..d5b8618 100644
--- a/DnsStatsTest.cpp
+++ b/DnsStatsTest.cpp
@@ -116,7 +116,8 @@
// Get the output string from dump() and check the content.
void verifyDumpOutput(const std::vector<StatsData>& tcpData,
const std::vector<StatsData>& udpData,
- const std::vector<StatsData>& dotData) {
+ const std::vector<StatsData>& dotData,
+ const std::vector<StatsData>& mdnsData) {
// A pattern to capture three matches:
// server address (empty allowed), the statistics, and the score.
const std::regex pattern(R"(\s{4,}([0-9a-fA-F:\.]*)[ ]?([<(].*[>)])[ ]?(\S*))");
@@ -128,11 +129,11 @@
ASSERT_NE(dumpString->find(protocol), std::string::npos);
std::smatch sm;
- // Expect to show something even if none of servers is set.
+ // Expect to show something even if none of servers or mdns multicast addresses is set.
if (statsData.empty()) {
ASSERT_TRUE(std::regex_search(*dumpString, sm, pattern));
EXPECT_TRUE(sm[1].str().empty());
- EXPECT_EQ(sm[2], "<no server>");
+ EXPECT_EQ(sm[2], "<no data>");
EXPECT_TRUE(sm[3].str().empty());
*dumpString = sm.suffix();
return;
@@ -150,6 +151,7 @@
check(udpData, "UDP", &dumpString);
check(dotData, "TLS", &dumpString);
check(tcpData, "TCP", &dumpString);
+ check(mdnsData, "MDNS", &dumpString);
// Ensure the whole string has been checked.
EXPECT_EQ(dumpString, "\n");
@@ -171,7 +173,7 @@
TEST_F(DnsStatsTest, SetAddrs) {
// Check before any operation to mDnsStats.
- verifyDumpOutput({}, {}, {});
+ verifyDumpOutput({}, {}, {}, {});
static const struct {
std::vector<std::string> servers;
@@ -228,7 +230,7 @@
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_DOT, expectedStats, NO_AVERAGE_LATENCY));
}
- verifyDumpOutput({}, {}, {});
+ verifyDumpOutput({}, {}, {}, {});
}
TEST_F(DnsStatsTest, SetServersDifferentPorts) {
@@ -247,7 +249,7 @@
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_TCP, {}, NO_AVERAGE_LATENCY));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, {}, NO_AVERAGE_LATENCY));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_DOT, {}, NO_AVERAGE_LATENCY));
- verifyDumpOutput({}, {}, {});
+ verifyDumpOutput({}, {}, {}, {});
EXPECT_TRUE(mDnsStats.setAddrs(std::vector(servers.begin() + 2, servers.end()), PROTO_TCP));
EXPECT_TRUE(mDnsStats.setAddrs(std::vector(servers.begin() + 2, servers.end()), PROTO_UDP));
@@ -262,7 +264,7 @@
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_TCP, expectedStats, NO_AVERAGE_LATENCY));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, expectedStats, NO_AVERAGE_LATENCY));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_DOT, expectedStats, NO_AVERAGE_LATENCY));
- verifyDumpOutput(expectedStats, expectedStats, expectedStats);
+ verifyDumpOutput(expectedStats, expectedStats, expectedStats, {});
}
TEST_F(DnsStatsTest, AddStatsAndClear) {
@@ -270,10 +272,16 @@
IPSockAddr::toIPSockAddr("127.0.0.1", 53),
IPSockAddr::toIPSockAddr("127.0.0.2", 53),
};
+ const std::vector<IPSockAddr> mdnsaddrs = {
+ IPSockAddr::toIPSockAddr("ff02::fb", 5353),
+ IPSockAddr::toIPSockAddr("224.0.0.251", 5353),
+ };
const DnsQueryEvent record = makeDnsQueryEvent(PROTO_UDP, NS_R_NO_ERROR, 10ms);
+ const DnsQueryEvent mdnsrecord = makeDnsQueryEvent(PROTO_MDNS, NS_R_NO_ERROR, 10ms);
EXPECT_TRUE(mDnsStats.setAddrs(servers, PROTO_TCP));
EXPECT_TRUE(mDnsStats.setAddrs(servers, PROTO_UDP));
+ EXPECT_TRUE(mDnsStats.setAddrs(mdnsaddrs, PROTO_MDNS));
// Fail to add stats because of incorrect arguments.
EXPECT_FALSE(mDnsStats.addStats(IPSockAddr::toIPSockAddr("127.0.0.4", 53), record));
@@ -282,6 +290,8 @@
EXPECT_TRUE(mDnsStats.addStats(servers[0], record));
EXPECT_TRUE(mDnsStats.addStats(servers[0], record));
EXPECT_TRUE(mDnsStats.addStats(servers[1], record));
+ EXPECT_TRUE(mDnsStats.addStats(mdnsaddrs[0], mdnsrecord));
+ EXPECT_TRUE(mDnsStats.addStats(mdnsaddrs[1], mdnsrecord));
const std::vector<StatsData> expectedStatsForTcp = {
makeStatsData(servers[0], 0, 0ms, {}),
@@ -292,19 +302,27 @@
makeStatsData(servers[1], 1, 10ms, {{NS_R_NO_ERROR, 1}}),
};
+ const std::vector<StatsData> expectedStatsForMdns = {
+ makeStatsData(mdnsaddrs[1], 1, 10ms, {{NS_R_NO_ERROR, 1}}),
+ makeStatsData(mdnsaddrs[0], 1, 10ms, {{NS_R_NO_ERROR, 1}}),
+ };
+
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_TCP, expectedStatsForTcp, NO_AVERAGE_LATENCY));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, expectedStatsForUdp, 10ms));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_DOT, {}, NO_AVERAGE_LATENCY));
- verifyDumpOutput(expectedStatsForTcp, expectedStatsForUdp, {});
+ EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_MDNS, expectedStatsForMdns, 10ms));
+ verifyDumpOutput(expectedStatsForTcp, expectedStatsForUdp, {}, expectedStatsForMdns);
// Clear stats.
EXPECT_TRUE(mDnsStats.setAddrs({}, PROTO_TCP));
EXPECT_TRUE(mDnsStats.setAddrs({}, PROTO_UDP));
EXPECT_TRUE(mDnsStats.setAddrs({}, PROTO_DOT));
+ EXPECT_TRUE(mDnsStats.setAddrs({}, PROTO_MDNS));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_TCP, {}, NO_AVERAGE_LATENCY));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, {}, NO_AVERAGE_LATENCY));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_DOT, {}, NO_AVERAGE_LATENCY));
- verifyDumpOutput({}, {}, {});
+ EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_MDNS, {}, NO_AVERAGE_LATENCY));
+ verifyDumpOutput({}, {}, {}, {});
}
TEST_F(DnsStatsTest, StatsRemainsInExistentServer) {
@@ -332,7 +350,7 @@
};
EXPECT_THAT(mDnsStats.getStats(PROTO_UDP), UnorderedElementsAreArray(expectedStats));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, expectedStats, 106ms));
- verifyDumpOutput({}, expectedStats, {});
+ verifyDumpOutput({}, expectedStats, {}, {});
// Update the server list, the stats of 127.0.0.2 will remain.
servers = {
@@ -348,7 +366,7 @@
};
EXPECT_THAT(mDnsStats.getStats(PROTO_UDP), UnorderedElementsAreArray(expectedStats));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, expectedStats, 130ms));
- verifyDumpOutput({}, expectedStats, {});
+ verifyDumpOutput({}, expectedStats, {}, {});
// Let's add a record to 127.0.0.2 again.
EXPECT_TRUE(mDnsStats.addStats(servers[0], recordNoError));
@@ -359,7 +377,7 @@
};
EXPECT_THAT(mDnsStats.getStats(PROTO_UDP), UnorderedElementsAreArray(expectedStats));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, expectedStats, 106ms));
- verifyDumpOutput({}, expectedStats, {});
+ verifyDumpOutput({}, expectedStats, {}, {});
}
TEST_F(DnsStatsTest, AddStatsRecords_100000) {
@@ -375,6 +393,11 @@
IPSockAddr::toIPSockAddr("127.0.0.4", 53),
};
+ const std::vector<IPSockAddr> mdnsaddrs = {
+ IPSockAddr::toIPSockAddr("ff02::fb", 5353),
+ IPSockAddr::toIPSockAddr("224.0.0.251", 5353),
+ };
+
// To test unknown rcode in rcodeToName(), store the elements as type int.
const std::array<int, rcodeNum> rcodes = {
NS_R_NO_ERROR, // NOERROR
@@ -386,6 +409,7 @@
EXPECT_TRUE(mDnsStats.setAddrs(servers, PROTO_TCP));
EXPECT_TRUE(mDnsStats.setAddrs(servers, PROTO_UDP));
EXPECT_TRUE(mDnsStats.setAddrs(servers, PROTO_DOT));
+ EXPECT_TRUE(mDnsStats.setAddrs(mdnsaddrs, PROTO_MDNS));
for (size_t i = 0; i < operations; i++) {
const NsRcode rcode = static_cast<NsRcode>(rcodes[i % rcodeNum]);
@@ -398,6 +422,11 @@
ASSERT_TRUE(mDnsStats.addStats(server, eventUdp));
ASSERT_TRUE(mDnsStats.addStats(server, eventDot));
}
+ const auto eventMdns = makeDnsQueryEvent(PROTO_MDNS, rcode, milliseconds(i));
+ for (const auto& mdnsaddr : mdnsaddrs) {
+ SCOPED_TRACE(mdnsaddr.toString() + "-" + std::to_string(i));
+ ASSERT_TRUE(mDnsStats.addStats(mdnsaddr, eventMdns));
+ }
}
std::map<int, int> expectedRcodeCounts;
@@ -414,10 +443,15 @@
makeStatsData(servers[3], logSize, logSize * 99935500us, expectedRcodeCounts),
};
+ const std::vector<StatsData> expectedMdnsStats = {
+ makeStatsData(mdnsaddrs[1], logSize, logSize * 99935500us, expectedRcodeCounts),
+ makeStatsData(mdnsaddrs[0], logSize, logSize * 99935500us, expectedRcodeCounts),
+ };
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_TCP, expectedStats, 99935500us));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_UDP, expectedStats, 99935500us));
EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_DOT, expectedStats, 99935500us));
- verifyDumpOutput(expectedStats, expectedStats, expectedStats);
+ EXPECT_NO_FAILURE(verifyDnsStatsContent(PROTO_MDNS, expectedMdnsStats, 99935500us));
+ verifyDumpOutput(expectedStats, expectedStats, expectedStats, expectedMdnsStats);
}
TEST_F(DnsStatsTest, GetServers_SortingByLatency) {