Loading Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -195,9 +195,11 @@ cc_test { "libnetdutils", "libprotobuf-cpp-lite", "libstatslog_resolv", "libstatspush_compat", "libstatssocket", "libsysutils", "libutils", "resolv_stats_test_utils", "server_configurable_flags", "stats_proto", ], Loading TEST_MAPPING +2 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ { "name": "resolv_integration_test" }, { "name": "resolv_gold_test" }, { "name": "resolv_unit_test" }, { "name": "resolv_stress_test" } { "name": "resolv_stress_test" }, { "name": "resolv_stats_test_utils_test" } ] } resolv_unit_test.cpp +170 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <gtest/gtest.h> #include <netdb.h> #include <netdutils/InternetAddresses.h> #include <resolv_stats_test_utils.h> #include "dns_responder.h" #include "getaddrinfo.h" Loading Loading @@ -391,6 +392,62 @@ TEST_F(ResolvGetAddrInfoTest, InvalidParameters_PortNameAndNumber) { TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname_NoData) { constexpr char v4_host_name[] = "v4only.example.com."; // Following fields will not be verified during the test in proto NetworkDnsEventReported. // So don't need to config those values: event_type, return_code, latency_micros, // hints_ai_flags, res_nsend_flags, network_type, private_dns_modes. constexpr char event_ipv6[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, }, { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, }, { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, }, { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, } ] } })Event"; test::DNSResponder dns; dns.addMapping(v4_host_name, ns_type::ns_t_a, "1.2.3.3"); ASSERT_TRUE(dns.startServer()); Loading @@ -401,6 +458,7 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname_NoData) { const addrinfo hints = {.ai_family = AF_INET6}; NetworkDnsEventReported event; int rv = resolv_getaddrinfo("v4only", nullptr, &hints, &mNetcontext, &result, &event); EXPECT_THAT(event, NetworkDnsEventEq(fromNetworkDnsEventReportedStr(event_ipv6))); ScopedAddrinfo result_cleanup(result); EXPECT_LE(1U, GetNumQueries(dns, v4_host_name)); EXPECT_EQ(nullptr, result); Loading @@ -411,7 +469,66 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname) { constexpr char host_name[] = "sawadee.example.com."; constexpr char v4addr[] = "1.2.3.4"; constexpr char v6addr[] = "::1.2.3.4"; // Following fields will not be verified during the test in proto NetworkDnsEventReported. // So don't need to config those values: event_type, return_code, latency_micros, // hints_ai_flags, res_nsend_flags, network_type, private_dns_modes. constexpr char event_ipv4[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 1, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, }, { rcode: 0, type: 1, cache_hit: 2, ip_version: 0, protocol: 0, retry_times: 0, dns_server_index: 0, connected: 0, } ] } })Event"; constexpr char event_ipv6[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, }, { rcode: 0, type: 28, cache_hit: 2, ip_version: 0, protocol: 0, retry_times: 0, dns_server_index: 0, connected: 0, } ] } })Event"; test::DNSResponder dns; dns.addMapping(host_name, ns_type::ns_t_a, v4addr); dns.addMapping(host_name, ns_type::ns_t_aaaa, v6addr); Loading @@ -421,9 +538,10 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname) { static const struct TestConfig { int ai_family; const std::string expected_addr; const std::string expected_event; } testConfigs[]{ {AF_INET, v4addr}, {AF_INET6, v6addr}, {AF_INET, v4addr, event_ipv4}, {AF_INET6, v6addr, event_ipv6}, }; for (const auto& config : testConfigs) { Loading @@ -434,6 +552,8 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname) { const addrinfo hints = {.ai_family = config.ai_family}; NetworkDnsEventReported event; int rv = resolv_getaddrinfo("sawadee", nullptr, &hints, &mNetcontext, &result, &event); EXPECT_THAT(event, NetworkDnsEventEq(fromNetworkDnsEventReportedStr(config.expected_event))); ScopedAddrinfo result_cleanup(result); EXPECT_EQ(0, rv); EXPECT_TRUE(result != nullptr); Loading Loading @@ -694,7 +814,48 @@ TEST_F(GetHostByNameForNetContextTest, AlphabeticalHostname) { constexpr char host_name[] = "jiababuei.example.com."; constexpr char v4addr[] = "1.2.3.4"; constexpr char v6addr[] = "::1.2.3.4"; // Following fields will not be verified during the test in proto NetworkDnsEventReported. // So don't need to config those values: event_type, return_code, latency_micros, // hints_ai_flags, res_nsend_flags, network_type, private_dns_modes. constexpr char event_ipv4[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 1, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, } ] } })Event"; constexpr char event_ipv6[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, } ] } })Event"; test::DNSResponder dns; dns.addMapping(host_name, ns_type::ns_t_a, v4addr); dns.addMapping(host_name, ns_type::ns_t_aaaa, v6addr); Loading @@ -704,9 +865,10 @@ TEST_F(GetHostByNameForNetContextTest, AlphabeticalHostname) { static const struct TestConfig { int ai_family; const std::string expected_addr; const std::string expected_event; } testConfigs[]{ {AF_INET, v4addr}, {AF_INET6, v6addr}, {AF_INET, v4addr, event_ipv4}, {AF_INET6, v6addr, event_ipv6}, }; for (const auto& config : testConfigs) { Loading @@ -719,6 +881,8 @@ TEST_F(GetHostByNameForNetContextTest, AlphabeticalHostname) { NetworkDnsEventReported event; int rv = resolv_gethostbyname("jiababuei", config.ai_family, &hbuf, tmpbuf, sizeof(tmpbuf), &mNetcontext, &hp, &event); EXPECT_THAT(event, NetworkDnsEventEq(fromNetworkDnsEventReportedStr(config.expected_event))); EXPECT_EQ(0, rv); EXPECT_TRUE(hp != nullptr); EXPECT_EQ(1U, GetNumQueries(dns, host_name)); Loading tests/Android.bp +34 −0 Original line number Diff line number Diff line Loading @@ -144,3 +144,37 @@ cc_test { }, }, } cc_test_library { name: "resolv_stats_test_utils", srcs: [ "resolv_stats_test_utils.cpp" ], defaults: ["netd_defaults"], export_include_dirs: ["."], static_libs: [ "libbase", "libgmock", "liblog", "libnetdutils", "libprotobuf-cpp-lite", "stats_proto", ], } cc_test { name: "resolv_stats_test_utils_test", srcs: [ "resolv_stats_test_utils_test.cpp", ], defaults: ["netd_defaults"], test_suites: ["device-tests"], static_libs: [ "libbase", "libgmock", "liblog", "libprotobuf-cpp-lite", "resolv_stats_test_utils", "stats_proto", ], } tests/resolv_integration_test.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,12 @@ class ResolverTest : public ::testing::Test { }; void SetUp() { mDnsClient.SetUp(); } void TearDown() { mDnsClient.TearDown(); } void TearDown() { // Ensure the dump works at the end of each test. DumpResolverService(); mDnsClient.TearDown(); } void StartDns(test::DNSResponder& dns, const std::vector<DnsRecord>& records) { for (const auto& r : records) { Loading @@ -174,6 +179,14 @@ class ResolverTest : public ::testing::Test { dns.clearQueries(); } void DumpResolverService() { unique_fd fd(open("/dev/null", O_WRONLY)); EXPECT_EQ(mDnsClient.resolvService()->dump(fd, nullptr, 0), 0); const char* querylogCmd[] = {"querylog"}; // Keep it sync with DnsQueryLog::DUMP_KEYWORD. EXPECT_EQ(mDnsClient.resolvService()->dump(fd, querylogCmd, std::size(querylogCmd)), 0); } bool WaitForNat64Prefix(ExpectNat64PrefixStatus status, std::chrono::milliseconds timeout = std::chrono::milliseconds(1000)) { return sDnsMetricsListener->waitForNat64Prefix(status, timeout); Loading Loading
Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -195,9 +195,11 @@ cc_test { "libnetdutils", "libprotobuf-cpp-lite", "libstatslog_resolv", "libstatspush_compat", "libstatssocket", "libsysutils", "libutils", "resolv_stats_test_utils", "server_configurable_flags", "stats_proto", ], Loading
TEST_MAPPING +2 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ { "name": "resolv_integration_test" }, { "name": "resolv_gold_test" }, { "name": "resolv_unit_test" }, { "name": "resolv_stress_test" } { "name": "resolv_stress_test" }, { "name": "resolv_stats_test_utils_test" } ] }
resolv_unit_test.cpp +170 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <gtest/gtest.h> #include <netdb.h> #include <netdutils/InternetAddresses.h> #include <resolv_stats_test_utils.h> #include "dns_responder.h" #include "getaddrinfo.h" Loading Loading @@ -391,6 +392,62 @@ TEST_F(ResolvGetAddrInfoTest, InvalidParameters_PortNameAndNumber) { TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname_NoData) { constexpr char v4_host_name[] = "v4only.example.com."; // Following fields will not be verified during the test in proto NetworkDnsEventReported. // So don't need to config those values: event_type, return_code, latency_micros, // hints_ai_flags, res_nsend_flags, network_type, private_dns_modes. constexpr char event_ipv6[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, }, { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, }, { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, }, { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, } ] } })Event"; test::DNSResponder dns; dns.addMapping(v4_host_name, ns_type::ns_t_a, "1.2.3.3"); ASSERT_TRUE(dns.startServer()); Loading @@ -401,6 +458,7 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname_NoData) { const addrinfo hints = {.ai_family = AF_INET6}; NetworkDnsEventReported event; int rv = resolv_getaddrinfo("v4only", nullptr, &hints, &mNetcontext, &result, &event); EXPECT_THAT(event, NetworkDnsEventEq(fromNetworkDnsEventReportedStr(event_ipv6))); ScopedAddrinfo result_cleanup(result); EXPECT_LE(1U, GetNumQueries(dns, v4_host_name)); EXPECT_EQ(nullptr, result); Loading @@ -411,7 +469,66 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname) { constexpr char host_name[] = "sawadee.example.com."; constexpr char v4addr[] = "1.2.3.4"; constexpr char v6addr[] = "::1.2.3.4"; // Following fields will not be verified during the test in proto NetworkDnsEventReported. // So don't need to config those values: event_type, return_code, latency_micros, // hints_ai_flags, res_nsend_flags, network_type, private_dns_modes. constexpr char event_ipv4[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 1, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, }, { rcode: 0, type: 1, cache_hit: 2, ip_version: 0, protocol: 0, retry_times: 0, dns_server_index: 0, connected: 0, } ] } })Event"; constexpr char event_ipv6[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, }, { rcode: 0, type: 28, cache_hit: 2, ip_version: 0, protocol: 0, retry_times: 0, dns_server_index: 0, connected: 0, } ] } })Event"; test::DNSResponder dns; dns.addMapping(host_name, ns_type::ns_t_a, v4addr); dns.addMapping(host_name, ns_type::ns_t_aaaa, v6addr); Loading @@ -421,9 +538,10 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname) { static const struct TestConfig { int ai_family; const std::string expected_addr; const std::string expected_event; } testConfigs[]{ {AF_INET, v4addr}, {AF_INET6, v6addr}, {AF_INET, v4addr, event_ipv4}, {AF_INET6, v6addr, event_ipv6}, }; for (const auto& config : testConfigs) { Loading @@ -434,6 +552,8 @@ TEST_F(ResolvGetAddrInfoTest, AlphabeticalHostname) { const addrinfo hints = {.ai_family = config.ai_family}; NetworkDnsEventReported event; int rv = resolv_getaddrinfo("sawadee", nullptr, &hints, &mNetcontext, &result, &event); EXPECT_THAT(event, NetworkDnsEventEq(fromNetworkDnsEventReportedStr(config.expected_event))); ScopedAddrinfo result_cleanup(result); EXPECT_EQ(0, rv); EXPECT_TRUE(result != nullptr); Loading Loading @@ -694,7 +814,48 @@ TEST_F(GetHostByNameForNetContextTest, AlphabeticalHostname) { constexpr char host_name[] = "jiababuei.example.com."; constexpr char v4addr[] = "1.2.3.4"; constexpr char v6addr[] = "::1.2.3.4"; // Following fields will not be verified during the test in proto NetworkDnsEventReported. // So don't need to config those values: event_type, return_code, latency_micros, // hints_ai_flags, res_nsend_flags, network_type, private_dns_modes. constexpr char event_ipv4[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 1, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, } ] } })Event"; constexpr char event_ipv6[] = R"Event( NetworkDnsEventReported { dns_query_events: { dns_query_event:[ { rcode: 0, type: 28, cache_hit: 1, ip_version: 1, protocol: 1, retry_times: 0, dns_server_index: 0, connected: 0, latency_micros: 0, } ] } })Event"; test::DNSResponder dns; dns.addMapping(host_name, ns_type::ns_t_a, v4addr); dns.addMapping(host_name, ns_type::ns_t_aaaa, v6addr); Loading @@ -704,9 +865,10 @@ TEST_F(GetHostByNameForNetContextTest, AlphabeticalHostname) { static const struct TestConfig { int ai_family; const std::string expected_addr; const std::string expected_event; } testConfigs[]{ {AF_INET, v4addr}, {AF_INET6, v6addr}, {AF_INET, v4addr, event_ipv4}, {AF_INET6, v6addr, event_ipv6}, }; for (const auto& config : testConfigs) { Loading @@ -719,6 +881,8 @@ TEST_F(GetHostByNameForNetContextTest, AlphabeticalHostname) { NetworkDnsEventReported event; int rv = resolv_gethostbyname("jiababuei", config.ai_family, &hbuf, tmpbuf, sizeof(tmpbuf), &mNetcontext, &hp, &event); EXPECT_THAT(event, NetworkDnsEventEq(fromNetworkDnsEventReportedStr(config.expected_event))); EXPECT_EQ(0, rv); EXPECT_TRUE(hp != nullptr); EXPECT_EQ(1U, GetNumQueries(dns, host_name)); Loading
tests/Android.bp +34 −0 Original line number Diff line number Diff line Loading @@ -144,3 +144,37 @@ cc_test { }, }, } cc_test_library { name: "resolv_stats_test_utils", srcs: [ "resolv_stats_test_utils.cpp" ], defaults: ["netd_defaults"], export_include_dirs: ["."], static_libs: [ "libbase", "libgmock", "liblog", "libnetdutils", "libprotobuf-cpp-lite", "stats_proto", ], } cc_test { name: "resolv_stats_test_utils_test", srcs: [ "resolv_stats_test_utils_test.cpp", ], defaults: ["netd_defaults"], test_suites: ["device-tests"], static_libs: [ "libbase", "libgmock", "liblog", "libprotobuf-cpp-lite", "resolv_stats_test_utils", "stats_proto", ], }
tests/resolv_integration_test.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,12 @@ class ResolverTest : public ::testing::Test { }; void SetUp() { mDnsClient.SetUp(); } void TearDown() { mDnsClient.TearDown(); } void TearDown() { // Ensure the dump works at the end of each test. DumpResolverService(); mDnsClient.TearDown(); } void StartDns(test::DNSResponder& dns, const std::vector<DnsRecord>& records) { for (const auto& r : records) { Loading @@ -174,6 +179,14 @@ class ResolverTest : public ::testing::Test { dns.clearQueries(); } void DumpResolverService() { unique_fd fd(open("/dev/null", O_WRONLY)); EXPECT_EQ(mDnsClient.resolvService()->dump(fd, nullptr, 0), 0); const char* querylogCmd[] = {"querylog"}; // Keep it sync with DnsQueryLog::DUMP_KEYWORD. EXPECT_EQ(mDnsClient.resolvService()->dump(fd, querylogCmd, std::size(querylogCmd)), 0); } bool WaitForNat64Prefix(ExpectNat64PrefixStatus status, std::chrono::milliseconds timeout = std::chrono::milliseconds(1000)) { return sDnsMetricsListener->waitForNat64Prefix(status, timeout); Loading