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

Unified Diff: net/base/mock_host_resolver.cc

Issue 1705001: Unit tests for HttpAuthHandlerNegotiate (Closed)
Patch Set: Respond to eroman's concerns. Created 10 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/base/mock_host_resolver.h ('k') | net/http/http_auth_handler_negotiate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/mock_host_resolver.cc
diff --git a/net/base/mock_host_resolver.cc b/net/base/mock_host_resolver.cc
index d99b24eeb0f1f20bdea241cfd5147e5d281fd3cb..573d57e4be0e02ac513a91cd38b3f19907ce2648 100644
--- a/net/base/mock_host_resolver.cc
+++ b/net/base/mock_host_resolver.cc
@@ -13,10 +13,14 @@
namespace net {
namespace {
-// Fills |addrlist| with a socket address for |host| which should be an
-// IPv6 literal. Returns OK on success.
-int ResolveIPV6LiteralUsingGURL(const std::string& host,
- AddressList* addrlist) {
+
+// Fills |*addrlist| with a socket address for |host| which should be an
+// IPv6 literal without enclosing brackets. If |canonical_name| is non-empty
+// it is used as the DNS canonical name for the host. Returns OK on success,
+// ERR_UNEXPECTED otherwise.
+int CreateIPv6Address(const std::string& host,
+ const std::string& canonical_name,
+ AddressList* addrlist) {
// GURL expects the hostname to be surrounded with brackets.
std::string host_brackets = "[" + host + "]";
url_parse::Component host_comp(0, host_brackets.size());
@@ -31,7 +35,26 @@ int ResolveIPV6LiteralUsingGURL(const std::string& host,
return ERR_UNEXPECTED;
}
- *addrlist = AddressList::CreateIPv6Address(ipv6_addr);
+ *addrlist = AddressList::CreateIPv6Address(ipv6_addr, canonical_name);
+ return OK;
+}
+
+// Fills |*addrlist| with a socket address for |host| which should be an
+// IPv4 literal. If |canonical_name| is non-empty it is used as the DNS
+// canonical name for the host. Returns OK on success, ERR_UNEXPECTED otherwise.
+int CreateIPv4Address(const std::string& host,
+ const std::string& canonical_name,
+ AddressList* addrlist) {
+ unsigned char ipv4_addr[4];
+ url_parse::Component host_comp(0, host.size());
+ int num_components;
+ url_canon::CanonHostInfo::Family family = url_canon::IPv4AddressToNumber(
+ host.data(), host_comp, ipv4_addr, &num_components);
+ if (family != url_canon::CanonHostInfo::IPV4) {
+ LOG(WARNING) << "Not an IPv4 literal: " << host;
+ return ERR_UNEXPECTED;
+ }
+ *addrlist = AddressList::CreateIPv4Address(ipv4_addr, canonical_name);
return OK;
}
@@ -104,23 +127,30 @@ struct RuleBasedHostResolverProc::Rule {
kResolverTypeFail,
kResolverTypeSystem,
kResolverTypeIPV6Literal,
+ kResolverTypeIPV4Literal,
};
ResolverType resolver_type;
std::string host_pattern;
AddressFamily address_family;
+ HostResolverFlags host_resolver_flags;
std::string replacement;
+ std::string canonical_name;
int latency_ms; // In milliseconds.
Rule(ResolverType resolver_type,
const std::string& host_pattern,
AddressFamily address_family,
+ HostResolverFlags host_resolver_flags,
const std::string& replacement,
+ const std::string& canonical_name,
int latency_ms)
: resolver_type(resolver_type),
host_pattern(host_pattern),
address_family(address_family),
+ host_resolver_flags(host_resolver_flags),
replacement(replacement),
+ canonical_name(canonical_name),
latency_ms(latency_ms) {}
};
@@ -143,16 +173,32 @@ void RuleBasedHostResolverProc::AddRuleForAddressFamily(
const std::string& replacement) {
DCHECK(!replacement.empty());
Rule rule(Rule::kResolverTypeSystem, host_pattern,
- address_family, replacement, 0);
+ address_family, 0, replacement, "", 0);
+ rules_.push_back(rule);
+}
+
+void RuleBasedHostResolverProc::AddIPv4Rule(const std::string& host_pattern,
+ const std::string& ipv4_literal,
+ const std::string& canonical_name) {
+ Rule rule(Rule::kResolverTypeIPV4Literal,
+ host_pattern,
+ ADDRESS_FAMILY_UNSPECIFIED,
+ canonical_name.empty() ? 0 : HOST_RESOLVER_CANONNAME,
+ ipv4_literal,
+ canonical_name,
+ 0);
rules_.push_back(rule);
}
void RuleBasedHostResolverProc::AddIPv6Rule(const std::string& host_pattern,
- const std::string& ipv6_literal) {
+ const std::string& ipv6_literal,
+ const std::string& canonical_name) {
Rule rule(Rule::kResolverTypeIPV6Literal,
host_pattern,
ADDRESS_FAMILY_UNSPECIFIED,
+ canonical_name.empty() ? 0 : HOST_RESOLVER_CANONNAME,
ipv6_literal,
+ canonical_name,
0);
rules_.push_back(rule);
}
@@ -163,21 +209,21 @@ void RuleBasedHostResolverProc::AddRuleWithLatency(
int latency_ms) {
DCHECK(!replacement.empty());
Rule rule(Rule::kResolverTypeSystem, host_pattern,
- ADDRESS_FAMILY_UNSPECIFIED, replacement, latency_ms);
+ ADDRESS_FAMILY_UNSPECIFIED, 0, replacement, "", latency_ms);
rules_.push_back(rule);
}
void RuleBasedHostResolverProc::AllowDirectLookup(
const std::string& host_pattern) {
Rule rule(Rule::kResolverTypeSystem, host_pattern,
- ADDRESS_FAMILY_UNSPECIFIED, "", 0);
+ ADDRESS_FAMILY_UNSPECIFIED, 0, "", "", 0);
rules_.push_back(rule);
}
void RuleBasedHostResolverProc::AddSimulatedFailure(
const std::string& host_pattern) {
Rule rule(Rule::kResolverTypeFail, host_pattern,
- ADDRESS_FAMILY_UNSPECIFIED, "", 0);
+ ADDRESS_FAMILY_UNSPECIFIED, 0, "", "", 0);
rules_.push_back(rule);
}
@@ -190,8 +236,14 @@ int RuleBasedHostResolverProc::Resolve(const std::string& host,
bool matches_address_family =
r->address_family == ADDRESS_FAMILY_UNSPECIFIED ||
r->address_family == address_family;
-
- if (matches_address_family && MatchPatternASCII(host, r->host_pattern)) {
+ // Flags match if all of the bitflags in host_resolver_flags are enabled
+ // in the rule's host_resolver_flags. However, the rule may have additional
+ // flags specified, in which case the flags should still be considered a
+ // match.
+ bool matches_flags = (r->host_resolver_flags & host_resolver_flags) ==
+ host_resolver_flags;
+ if (matches_flags && matches_address_family &&
+ MatchPatternASCII(host, r->host_pattern)) {
if (r->latency_ms != 0)
PlatformThread::Sleep(r->latency_ms);
@@ -209,7 +261,9 @@ int RuleBasedHostResolverProc::Resolve(const std::string& host,
host_resolver_flags,
addrlist);
case Rule::kResolverTypeIPV6Literal:
- return ResolveIPV6LiteralUsingGURL(effective_host, addrlist);
+ return CreateIPv6Address(effective_host, r->canonical_name, addrlist);
+ case Rule::kResolverTypeIPV4Literal:
+ return CreateIPv4Address(effective_host, r->canonical_name, addrlist);
default:
NOTREACHED();
return ERR_UNEXPECTED;
« no previous file with comments | « net/base/mock_host_resolver.h ('k') | net/http/http_auth_handler_negotiate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698