Index: net/base/host_resolver_impl_unittest.cc |
diff --git a/net/base/host_resolver_impl_unittest.cc b/net/base/host_resolver_impl_unittest.cc |
index 91236b3c622369e69cec99a4fdae3e5c328c6a67..6571c465054eef62777c4f6b509d1e627268f52d 100644 |
--- a/net/base/host_resolver_impl_unittest.cc |
+++ b/net/base/host_resolver_impl_unittest.cc |
@@ -1236,21 +1236,46 @@ DnsConfig CreateValidDnsConfig() { |
class HostResolverImplDnsTest : public HostResolverImplTest { |
protected: |
virtual void SetUp() OVERRIDE { |
+ AddDnsRule("er", dns_protocol::kTypeA, MockDnsClientRule::FAIL_SYNC); |
+ AddDnsRule("er", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL_SYNC); |
+ AddDnsRule("nx", dns_protocol::kTypeA, MockDnsClientRule::FAIL_ASYNC); |
+ AddDnsRule("nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL_ASYNC); |
+ AddDnsRule("ok", dns_protocol::kTypeA, MockDnsClientRule::OK); |
+ AddDnsRule("ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK); |
+ AddDnsRule("4ok", dns_protocol::kTypeA, MockDnsClientRule::OK); |
+ AddDnsRule("4ok", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY); |
+ AddDnsRule("6ok", dns_protocol::kTypeA, MockDnsClientRule::EMPTY); |
+ AddDnsRule("6ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK); |
+ AddDnsRule("4nx", dns_protocol::kTypeA, MockDnsClientRule::OK); |
+ AddDnsRule("4nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL_ASYNC); |
+ CreateResolver(); |
+ } |
+ |
+ void CreateResolver() { |
config_service_ = new MockDnsConfigService(); |
resolver_.reset(new HostResolverImpl( |
HostCache::CreateDefaultCache(), |
DefaultLimits(), |
DefaultParams(proc_), |
scoped_ptr<DnsConfigService>(config_service_), |
- CreateMockDnsClient(DnsConfig()), |
+ CreateMockDnsClient(DnsConfig(), dns_rules_), |
NULL)); |
} |
+ // Adds a rule to |dns_rules_|. Must be followed by |CreateResolver| to apply. |
+ void AddDnsRule(const std::string& prefix, |
+ uint16 qtype, |
+ MockDnsClientRule::Result result) { |
+ MockDnsClientRule rule = { prefix, qtype, result }; |
+ dns_rules_.push_back(rule); |
+ } |
+ |
void ChangeDnsConfig(const DnsConfig& config) { |
config_service_->ChangeConfig(config); |
config_service_->ChangeHosts(config.hosts); |
} |
+ MockDnsClientRuleList dns_rules_; |
// Owned by |resolver_|. |
MockDnsConfigService* config_service_; |
}; |
@@ -1298,11 +1323,38 @@ TEST_F(HostResolverImplDnsTest, DnsTask) { |
EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); |
} |
+TEST_F(HostResolverImplDnsTest, DnsTaskUnspec) { |
+ ChangeDnsConfig(CreateValidDnsConfig()); |
+ |
+ proc_->AddRuleForAllFamilies("4nx", "192.168.1.101"); |
+ // All other hostnames will fail in proc_. |
+ |
+ EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80)->Resolve()); |
+ EXPECT_EQ(ERR_IO_PENDING, CreateRequest("4ok", 80)->Resolve()); |
+ EXPECT_EQ(ERR_IO_PENDING, CreateRequest("6ok", 80)->Resolve()); |
+ EXPECT_EQ(ERR_IO_PENDING, CreateRequest("4nx", 80)->Resolve()); |
+ |
+ proc_->SignalMultiple(requests_.size()); |
+ |
+ for (size_t i = 0; i < requests_.size(); ++i) |
+ EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; |
+ |
+ EXPECT_EQ(2u, requests_[0]->NumberOfAddresses()); |
+ EXPECT_TRUE(requests_[0]->HasAddress("127.0.0.1", 80)); |
+ EXPECT_TRUE(requests_[0]->HasAddress("::1", 80)); |
+ EXPECT_EQ(1u, requests_[1]->NumberOfAddresses()); |
+ EXPECT_TRUE(requests_[1]->HasAddress("127.0.0.1", 80)); |
+ EXPECT_EQ(1u, requests_[2]->NumberOfAddresses()); |
+ EXPECT_TRUE(requests_[2]->HasAddress("::1", 80)); |
+ EXPECT_EQ(1u, requests_[3]->NumberOfAddresses()); |
+ EXPECT_TRUE(requests_[3]->HasAddress("192.168.1.101", 80)); |
+} |
+ |
TEST_F(HostResolverImplDnsTest, ServeFromHosts) { |
// Initially, use empty HOSTS file. |
ChangeDnsConfig(CreateValidDnsConfig()); |
- proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. |
+ proc_->AddRuleForAllFamilies("", ""); // Default to failures. |
proc_->SignalMultiple(1u); // For the first request which misses. |
Request* req0 = CreateRequest("er_ipv4", 80); |
@@ -1353,7 +1405,7 @@ TEST_F(HostResolverImplDnsTest, ServeFromHosts) { |
TEST_F(HostResolverImplDnsTest, BypassDnsTask) { |
ChangeDnsConfig(CreateValidDnsConfig()); |
- proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. |
+ proc_->AddRuleForAllFamilies("", ""); // Default to failures. |
EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local", 80)->Resolve()); |
EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local.", 80)->Resolve()); |