Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(371)

Unified Diff: net/dns/host_resolver_impl_unittest.cc

Issue 14208010: [net/dns] Add test DualFamilyLocalhost and fix it when DnsClient enabled. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: test only IPv4 loopback Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/dns/host_resolver_impl.cc ('k') | net/dns/host_resolver_proc.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/dns/host_resolver_impl_unittest.cc
diff --git a/net/dns/host_resolver_impl_unittest.cc b/net/dns/host_resolver_impl_unittest.cc
index 9ff359f14b35ca424bb62452350467fbd584b9df..a26213152621ae37745e76990f9c5873e9f437fc 100644
--- a/net/dns/host_resolver_impl_unittest.cc
+++ b/net/dns/host_resolver_impl_unittest.cc
@@ -177,6 +177,16 @@ class MockHostResolverProc : public HostResolverProc {
DISALLOW_COPY_AND_ASSIGN(MockHostResolverProc);
};
+bool AddressListContains(const AddressList& list, const std::string& address,
+ int port) {
+ IPAddressNumber ip;
+ bool rv = ParseIPLiteralToNumber(address, &ip);
+ DCHECK(rv);
+ return std::find(list.begin(),
+ list.end(),
+ IPEndPoint(ip, port)) != list.end();
+}
+
// A wrapper for requests to a HostResolver.
class Request {
public:
@@ -231,12 +241,7 @@ class Request {
bool pending() const { return handle_ != NULL; }
bool HasAddress(const std::string& address, int port) const {
- IPAddressNumber ip;
- bool rv = ParseIPLiteralToNumber(address, &ip);
- DCHECK(rv);
- return std::find(list_.begin(),
- list_.end(),
- IPEndPoint(ip, port)) != list_.end();
+ return AddressListContains(list_, address, port);
}
// Returns the number of addresses in |list_|.
@@ -1482,4 +1487,67 @@ TEST_F(HostResolverImplDnsTest, DontDisableDnsClientOnSporadicFailure) {
EXPECT_EQ(OK, req->WaitForResult());
}
+// Confirm that resolving "localhost" is unrestricted even if there are no
+// global IPv6 address. See SystemHostResolverCall for rationale.
+// Test both the DnsClient and system host resolver paths.
+TEST_F(HostResolverImplDnsTest, DualFamilyLocalhost) {
+ // Use regular SystemHostResolverCall!
+ scoped_refptr<HostResolverProc> proc(new SystemHostResolverProc());
+ resolver_.reset(new HostResolverImpl(HostCache::CreateDefaultCache(),
+ DefaultLimits(),
+ DefaultParams(proc),
+ NULL));
+ resolver_->SetDnsClient(CreateMockDnsClient(DnsConfig(), dns_rules_));
+ resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
+
+ // Get the expected output.
+ AddressList addrlist;
+ int rv = proc->Resolve("localhost", ADDRESS_FAMILY_UNSPECIFIED, 0, &addrlist,
+ NULL);
+ if (rv != OK)
+ return;
+
+ for (unsigned i = 0; i < addrlist.size(); ++i)
+ LOG(WARNING) << addrlist[i].ToString();
+
+ bool saw_ipv4 = AddressListContains(addrlist, "127.0.0.1", 0);
+ bool saw_ipv6 = AddressListContains(addrlist, "::1", 0);
+ if (!saw_ipv4 && !saw_ipv6)
+ return;
+
+ HostResolver::RequestInfo info(HostPortPair("localhost", 80));
+ info.set_address_family(ADDRESS_FAMILY_UNSPECIFIED);
+ info.set_host_resolver_flags(HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6);
+
+ // Try without DnsClient.
+ ChangeDnsConfig(DnsConfig());
+ Request* req = CreateRequest(info);
+ // It is resolved via getaddrinfo, so expect asynchronous result.
+ EXPECT_EQ(ERR_IO_PENDING, req->Resolve());
+ EXPECT_EQ(OK, req->WaitForResult());
+
+ EXPECT_EQ(saw_ipv4, req->HasAddress("127.0.0.1", 80));
+ EXPECT_EQ(saw_ipv6, req->HasAddress("::1", 80));
+
+ // Configure DnsClient with dual-host HOSTS file.
+ DnsConfig config = CreateValidDnsConfig();
+ DnsHosts hosts;
+ IPAddressNumber local_ipv4, local_ipv6;
+ ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &local_ipv4));
+ ASSERT_TRUE(ParseIPLiteralToNumber("::1", &local_ipv6));
+ if (saw_ipv4)
+ hosts[DnsHostsKey("localhost", ADDRESS_FAMILY_IPV4)] = local_ipv4;
+ if (saw_ipv6)
+ hosts[DnsHostsKey("localhost", ADDRESS_FAMILY_IPV6)] = local_ipv6;
+ config.hosts = hosts;
+
+ ChangeDnsConfig(config);
+ req = CreateRequest(info);
+ // Expect synchronous resolution from DnsHosts.
+ EXPECT_EQ(OK, req->Resolve());
+
+ EXPECT_EQ(saw_ipv4, req->HasAddress("127.0.0.1", 80));
+ EXPECT_EQ(saw_ipv6, req->HasAddress("::1", 80));
+}
+
} // namespace net
« no previous file with comments | « net/dns/host_resolver_impl.cc ('k') | net/dns/host_resolver_proc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698