Add null check for hp in DnsProxyListener::GetHostByNameHandler
Bug: 32399924
Bug: 29748723
Test: runtest -x netd_integration_test.cpp
(cherry picked from commit 7a8a601190f948f18b1cc8c043f3a265c1ed183e)
Change-Id: I1faedded9d0cccc5db7fbdcb2498ad2ec7dbefeb
diff --git a/tests/netd_test.cpp b/tests/netd_test.cpp
index 6c7fdac..a958cd9 100644
--- a/tests/netd_test.cpp
+++ b/tests/netd_test.cpp
@@ -52,11 +52,13 @@
#include "ResolverStats.h"
#include "android/net/INetd.h"
+#include "android/net/metrics/INetdEventListener.h"
#include "binder/IServiceManager.h"
using android::base::StringPrintf;
using android::base::StringAppendF;
using android::net::ResolverStats;
+using android::net::metrics::INetdEventListener;
// Emulates the behavior of UnorderedElementsAreArray, which currently cannot be used.
// TODO: Use UnorderedElementsAreArray, which depends on being able to compile libgmock_host,
@@ -125,13 +127,29 @@
};
class ResolverTest : public ::testing::Test, public DnsResponderClient {
+private:
+ int mOriginalMetricsLevel;
+
protected:
virtual void SetUp() {
// Ensure resolutions go via proxy.
DnsResponderClient::SetUp();
+
+ // If DNS reporting is off: turn it on so we run through everything.
+ auto rv = mNetdSrv->getMetricsReportingLevel(&mOriginalMetricsLevel);
+ ASSERT_TRUE(rv.isOk());
+ if (mOriginalMetricsLevel != INetdEventListener::REPORTING_LEVEL_FULL) {
+ rv = mNetdSrv->setMetricsReportingLevel(INetdEventListener::REPORTING_LEVEL_FULL);
+ ASSERT_TRUE(rv.isOk());
+ }
}
virtual void TearDown() {
+ if (mOriginalMetricsLevel != INetdEventListener::REPORTING_LEVEL_FULL) {
+ auto rv = mNetdSrv->setMetricsReportingLevel(mOriginalMetricsLevel);
+ ASSERT_TRUE(rv.isOk());
+ }
+
DnsResponderClient::TearDown();
}
@@ -257,20 +275,30 @@
const char* listen_addr = "127.0.0.3";
const char* listen_srv = "53";
const char* host_name = "hello.example.com.";
+ const char *nonexistent_host_name = "nonexistent.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");
ASSERT_TRUE(dns.startServer());
std::vector<std::string> servers = { listen_addr };
ASSERT_TRUE(SetResolversForNetwork(mDefaultSearchDomains, servers, mDefaultParams));
+ const hostent* result;
+
dns.clearQueries();
- const hostent* result = gethostbyname("hello");
+ result = gethostbyname("nonexistent");
+ EXPECT_EQ(1U, GetNumQueriesForType(dns, ns_type::ns_t_a, nonexistent_host_name));
+ ASSERT_TRUE(result == nullptr);
+ ASSERT_EQ(HOST_NOT_FOUND, h_errno);
+
+ dns.clearQueries();
+ result = gethostbyname("hello");
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);
+
dns.stopServer();
}