Add tests for servers with broken EDNS handling

Bug: 15132200
Test:  This change is only tests.
Change-Id: I39691b54ddc768c3663e45d0b439ae377d032f37
diff --git a/tests/netd_test.cpp b/tests/netd_test.cpp
index 8d945a1..8d77b99 100644
--- a/tests/netd_test.cpp
+++ b/tests/netd_test.cpp
@@ -469,6 +469,55 @@
     }
 }
 
+TEST_F(ResolverTest, GetHostByNameBrokenEdns) {
+    const char* listen_addr = "127.0.0.3";
+    const char* listen_srv = "53";
+    const char* host_name = "edns.example.com.";
+    test::DNSResponder dns(listen_addr, listen_srv, 250, ns_rcode::ns_r_servfail, 1.0);
+    dns.addMapping(host_name, ns_type::ns_t_a, "1.2.3.3");
+    dns.setFailOnEdns(true);  // This is the only change from the basic test.
+    ASSERT_TRUE(dns.startServer());
+    std::vector<std::string> servers = { listen_addr };
+    ASSERT_TRUE(SetResolversForNetwork(servers, mDefaultSearchDomains, mDefaultParams_Binder));
+
+    const hostent* result;
+
+    dns.clearQueries();
+    result = gethostbyname("edns");
+    EXPECT_EQ(1U, GetNumQueriesForType(dns, ns_type::ns_t_a, host_name));
+    ASSERT_FALSE(result == nullptr);
+    ASSERT_EQ(4, result->h_length);
+    ASSERT_FALSE(result->h_addr_list[0] == nullptr);
+    EXPECT_EQ("1.2.3.3", ToString(result));
+    EXPECT_TRUE(result->h_addr_list[1] == nullptr);
+}
+
+TEST_F(ResolverTest, GetAddrInfoBrokenEdns) {
+    addrinfo* result = nullptr;
+
+    const char* listen_addr = "127.0.0.5";
+    const char* listen_srv = "53";
+    const char* host_name = "edns2.example.com.";
+    test::DNSResponder dns(listen_addr, listen_srv, 250,
+                           ns_rcode::ns_r_servfail, 1.0);
+    dns.addMapping(host_name, ns_type::ns_t_a, "1.2.3.5");
+    dns.setFailOnEdns(true);  // This is the only change from the basic test.
+    ASSERT_TRUE(dns.startServer());
+    std::vector<std::string> servers = { listen_addr };
+    ASSERT_TRUE(SetResolversForNetwork(servers, mDefaultSearchDomains, mDefaultParams_Binder));
+
+    addrinfo hints;
+    memset(&hints, 0, sizeof(hints));
+    hints.ai_family = AF_INET;
+    EXPECT_EQ(0, getaddrinfo("edns2", nullptr, &hints, &result));
+    EXPECT_EQ(1U, GetNumQueries(dns, host_name));
+    EXPECT_EQ("1.2.3.5", ToString(result));
+    if (result) {
+        freeaddrinfo(result);
+        result = nullptr;
+    }
+}
+
 TEST_F(ResolverTest, MultidomainResolution) {
     std::vector<std::string> searchDomains = { "example1.com", "example2.com", "example3.com" };
     const char* listen_addr = "127.0.0.6";