OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/base/host_resolver_impl.h" | 5 #include "net/base/host_resolver_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1229 DnsConfig config; | 1229 DnsConfig config; |
1230 config.nameservers.push_back(IPEndPoint(dns_ip, dns_protocol::kDefaultPort)); | 1230 config.nameservers.push_back(IPEndPoint(dns_ip, dns_protocol::kDefaultPort)); |
1231 EXPECT_TRUE(config.IsValid()); | 1231 EXPECT_TRUE(config.IsValid()); |
1232 return config; | 1232 return config; |
1233 } | 1233 } |
1234 | 1234 |
1235 // Specialized fixture for tests of DnsTask. | 1235 // Specialized fixture for tests of DnsTask. |
1236 class HostResolverImplDnsTest : public HostResolverImplTest { | 1236 class HostResolverImplDnsTest : public HostResolverImplTest { |
1237 protected: | 1237 protected: |
1238 virtual void SetUp() OVERRIDE { | 1238 virtual void SetUp() OVERRIDE { |
| 1239 AddDnsRule("er", dns_protocol::kTypeA, MockDnsClientRule::FAIL_SYNC); |
| 1240 AddDnsRule("er", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL_SYNC); |
| 1241 AddDnsRule("nx", dns_protocol::kTypeA, MockDnsClientRule::FAIL_ASYNC); |
| 1242 AddDnsRule("nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL_ASYNC); |
| 1243 AddDnsRule("ok", dns_protocol::kTypeA, MockDnsClientRule::OK); |
| 1244 AddDnsRule("ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK); |
| 1245 AddDnsRule("4ok", dns_protocol::kTypeA, MockDnsClientRule::OK); |
| 1246 AddDnsRule("4ok", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY); |
| 1247 AddDnsRule("6ok", dns_protocol::kTypeA, MockDnsClientRule::EMPTY); |
| 1248 AddDnsRule("6ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK); |
| 1249 CreateResolver(); |
| 1250 } |
| 1251 |
| 1252 void CreateResolver() { |
1239 config_service_ = new MockDnsConfigService(); | 1253 config_service_ = new MockDnsConfigService(); |
1240 resolver_.reset(new HostResolverImpl( | 1254 resolver_.reset(new HostResolverImpl( |
1241 HostCache::CreateDefaultCache(), | 1255 HostCache::CreateDefaultCache(), |
1242 DefaultLimits(), | 1256 DefaultLimits(), |
1243 DefaultParams(proc_), | 1257 DefaultParams(proc_), |
1244 scoped_ptr<DnsConfigService>(config_service_), | 1258 scoped_ptr<DnsConfigService>(config_service_), |
1245 CreateMockDnsClient(DnsConfig()), | 1259 CreateMockDnsClient(DnsConfig(), dns_rules_), |
1246 NULL)); | 1260 NULL)); |
1247 } | 1261 } |
1248 | 1262 |
| 1263 void AddDnsRule(const std::string& prefix, |
| 1264 uint16 qtype, |
| 1265 MockDnsClientRule::Result result) { |
| 1266 MockDnsClientRule rule = { prefix, qtype, result }; |
| 1267 dns_rules_.push_back(rule); |
| 1268 } |
| 1269 |
1249 void ChangeDnsConfig(const DnsConfig& config) { | 1270 void ChangeDnsConfig(const DnsConfig& config) { |
1250 config_service_->ChangeConfig(config); | 1271 config_service_->ChangeConfig(config); |
1251 config_service_->ChangeHosts(config.hosts); | 1272 config_service_->ChangeHosts(config.hosts); |
1252 } | 1273 } |
1253 | 1274 |
| 1275 MockDnsClientRuleList dns_rules_; |
1254 // Owned by |resolver_|. | 1276 // Owned by |resolver_|. |
1255 MockDnsConfigService* config_service_; | 1277 MockDnsConfigService* config_service_; |
1256 }; | 1278 }; |
1257 | 1279 |
1258 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change. | 1280 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change. |
1259 | 1281 |
1260 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. | 1282 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. |
1261 | 1283 |
1262 // Test successful and fallback resolutions in HostResolverImpl::DnsTask. | 1284 // Test successful and fallback resolutions in HostResolverImpl::DnsTask. |
1263 TEST_F(HostResolverImplDnsTest, DnsTask) { | 1285 TEST_F(HostResolverImplDnsTest, DnsTask) { |
(...skipping 27 matching lines...) Expand all Loading... |
1291 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80)); | 1313 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80)); |
1292 // Fallback to ProcTask. | 1314 // Fallback to ProcTask. |
1293 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result()); | 1315 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result()); |
1294 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result()); | 1316 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result()); |
1295 EXPECT_EQ(OK, requests_[4]->result()); | 1317 EXPECT_EQ(OK, requests_[4]->result()); |
1296 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80)); | 1318 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80)); |
1297 EXPECT_EQ(OK, requests_[5]->result()); | 1319 EXPECT_EQ(OK, requests_[5]->result()); |
1298 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); | 1320 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); |
1299 } | 1321 } |
1300 | 1322 |
| 1323 TEST_F(HostResolverImplDnsTest, DnsTaskUnspec) { |
| 1324 ChangeDnsConfig(CreateValidDnsConfig()); |
| 1325 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80)->Resolve()); |
| 1326 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("4ok", 80)->Resolve()); |
| 1327 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("6ok", 80)->Resolve()); |
| 1328 |
| 1329 for (size_t i = 0; i < requests_.size(); ++i) |
| 1330 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; |
| 1331 |
| 1332 EXPECT_EQ(2u, requests_[0]->NumberOfAddresses()); |
| 1333 EXPECT_TRUE(requests_[0]->HasAddress("127.0.0.1", 80)); |
| 1334 EXPECT_TRUE(requests_[0]->HasAddress("::1", 80)); |
| 1335 EXPECT_EQ(1u, requests_[1]->NumberOfAddresses()); |
| 1336 EXPECT_TRUE(requests_[1]->HasAddress("127.0.0.1", 80)); |
| 1337 EXPECT_EQ(1u, requests_[2]->NumberOfAddresses()); |
| 1338 EXPECT_TRUE(requests_[2]->HasAddress("::1", 80)); |
| 1339 } |
| 1340 |
1301 TEST_F(HostResolverImplDnsTest, ServeFromHosts) { | 1341 TEST_F(HostResolverImplDnsTest, ServeFromHosts) { |
1302 // Initially, use empty HOSTS file. | 1342 // Initially, use empty HOSTS file. |
1303 ChangeDnsConfig(CreateValidDnsConfig()); | 1343 ChangeDnsConfig(CreateValidDnsConfig()); |
1304 | 1344 |
1305 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. | 1345 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. |
1306 proc_->SignalMultiple(1u); // For the first request which misses. | 1346 proc_->SignalMultiple(1u); // For the first request which misses. |
1307 | 1347 |
1308 Request* req0 = CreateRequest("er_ipv4", 80); | 1348 Request* req0 = CreateRequest("er_ipv4", 80); |
1309 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); | 1349 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); |
1310 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult()); | 1350 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult()); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1364 proc_->SignalMultiple(requests_.size()); | 1404 proc_->SignalMultiple(requests_.size()); |
1365 | 1405 |
1366 for (size_t i = 0; i < 2; ++i) | 1406 for (size_t i = 0; i < 2; ++i) |
1367 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[i]->WaitForResult()) << i; | 1407 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[i]->WaitForResult()) << i; |
1368 | 1408 |
1369 for (size_t i = 2; i < requests_.size(); ++i) | 1409 for (size_t i = 2; i < requests_.size(); ++i) |
1370 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; | 1410 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; |
1371 } | 1411 } |
1372 | 1412 |
1373 } // namespace net | 1413 } // namespace net |
OLD | NEW |