Chromium Code Reviews| 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..9553281cb42189ba5d83f4cb441746353576d122 100644 |
| --- a/net/base/host_resolver_impl_unittest.cc |
| +++ b/net/base/host_resolver_impl_unittest.cc |
| @@ -1236,21 +1236,45 @@ 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)); |
| } |
| + void AddDnsRule(const std::string& prefix, |
|
mmenke
2012/08/14 15:56:12
I suggest a comment that CreateResolver() must be
|
| + 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 +1322,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 +1404,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()); |