| 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 |