Chromium Code Reviews| 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 AddDnsRule("4nx", dns_protocol::kTypeA, MockDnsClientRule::OK); | |
| 1250 AddDnsRule("4nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL_ASYNC); | |
| 1251 CreateResolver(); | |
| 1252 } | |
| 1253 | |
| 1254 void CreateResolver() { | |
| 1239 config_service_ = new MockDnsConfigService(); | 1255 config_service_ = new MockDnsConfigService(); |
| 1240 resolver_.reset(new HostResolverImpl( | 1256 resolver_.reset(new HostResolverImpl( |
| 1241 HostCache::CreateDefaultCache(), | 1257 HostCache::CreateDefaultCache(), |
| 1242 DefaultLimits(), | 1258 DefaultLimits(), |
| 1243 DefaultParams(proc_), | 1259 DefaultParams(proc_), |
| 1244 scoped_ptr<DnsConfigService>(config_service_), | 1260 scoped_ptr<DnsConfigService>(config_service_), |
| 1245 CreateMockDnsClient(DnsConfig()), | 1261 CreateMockDnsClient(DnsConfig(), dns_rules_), |
| 1246 NULL)); | 1262 NULL)); |
| 1247 } | 1263 } |
| 1248 | 1264 |
| 1265 void AddDnsRule(const std::string& prefix, | |
|
mmenke
2012/08/14 15:56:12
I suggest a comment that CreateResolver() must be
| |
| 1266 uint16 qtype, | |
| 1267 MockDnsClientRule::Result result) { | |
| 1268 MockDnsClientRule rule = { prefix, qtype, result }; | |
| 1269 dns_rules_.push_back(rule); | |
| 1270 } | |
| 1271 | |
| 1249 void ChangeDnsConfig(const DnsConfig& config) { | 1272 void ChangeDnsConfig(const DnsConfig& config) { |
| 1250 config_service_->ChangeConfig(config); | 1273 config_service_->ChangeConfig(config); |
| 1251 config_service_->ChangeHosts(config.hosts); | 1274 config_service_->ChangeHosts(config.hosts); |
| 1252 } | 1275 } |
| 1253 | 1276 |
| 1277 MockDnsClientRuleList dns_rules_; | |
| 1254 // Owned by |resolver_|. | 1278 // Owned by |resolver_|. |
| 1255 MockDnsConfigService* config_service_; | 1279 MockDnsConfigService* config_service_; |
| 1256 }; | 1280 }; |
| 1257 | 1281 |
| 1258 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change. | 1282 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change. |
| 1259 | 1283 |
| 1260 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. | 1284 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. |
| 1261 | 1285 |
| 1262 // Test successful and fallback resolutions in HostResolverImpl::DnsTask. | 1286 // Test successful and fallback resolutions in HostResolverImpl::DnsTask. |
| 1263 TEST_F(HostResolverImplDnsTest, DnsTask) { | 1287 TEST_F(HostResolverImplDnsTest, DnsTask) { |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 1291 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80)); | 1315 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80)); |
| 1292 // Fallback to ProcTask. | 1316 // Fallback to ProcTask. |
| 1293 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result()); | 1317 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result()); |
| 1294 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result()); | 1318 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result()); |
| 1295 EXPECT_EQ(OK, requests_[4]->result()); | 1319 EXPECT_EQ(OK, requests_[4]->result()); |
| 1296 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80)); | 1320 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80)); |
| 1297 EXPECT_EQ(OK, requests_[5]->result()); | 1321 EXPECT_EQ(OK, requests_[5]->result()); |
| 1298 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); | 1322 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); |
| 1299 } | 1323 } |
| 1300 | 1324 |
| 1325 TEST_F(HostResolverImplDnsTest, DnsTaskUnspec) { | |
| 1326 ChangeDnsConfig(CreateValidDnsConfig()); | |
| 1327 | |
| 1328 proc_->AddRuleForAllFamilies("4nx", "192.168.1.101"); | |
| 1329 // All other hostnames will fail in proc_. | |
| 1330 | |
| 1331 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80)->Resolve()); | |
| 1332 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("4ok", 80)->Resolve()); | |
| 1333 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("6ok", 80)->Resolve()); | |
| 1334 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("4nx", 80)->Resolve()); | |
| 1335 | |
| 1336 proc_->SignalMultiple(requests_.size()); | |
| 1337 | |
| 1338 for (size_t i = 0; i < requests_.size(); ++i) | |
| 1339 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; | |
| 1340 | |
| 1341 EXPECT_EQ(2u, requests_[0]->NumberOfAddresses()); | |
| 1342 EXPECT_TRUE(requests_[0]->HasAddress("127.0.0.1", 80)); | |
| 1343 EXPECT_TRUE(requests_[0]->HasAddress("::1", 80)); | |
| 1344 EXPECT_EQ(1u, requests_[1]->NumberOfAddresses()); | |
| 1345 EXPECT_TRUE(requests_[1]->HasAddress("127.0.0.1", 80)); | |
| 1346 EXPECT_EQ(1u, requests_[2]->NumberOfAddresses()); | |
| 1347 EXPECT_TRUE(requests_[2]->HasAddress("::1", 80)); | |
| 1348 EXPECT_EQ(1u, requests_[3]->NumberOfAddresses()); | |
| 1349 EXPECT_TRUE(requests_[3]->HasAddress("192.168.1.101", 80)); | |
| 1350 } | |
| 1351 | |
| 1301 TEST_F(HostResolverImplDnsTest, ServeFromHosts) { | 1352 TEST_F(HostResolverImplDnsTest, ServeFromHosts) { |
| 1302 // Initially, use empty HOSTS file. | 1353 // Initially, use empty HOSTS file. |
| 1303 ChangeDnsConfig(CreateValidDnsConfig()); | 1354 ChangeDnsConfig(CreateValidDnsConfig()); |
| 1304 | 1355 |
| 1305 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. | 1356 proc_->AddRuleForAllFamilies("", ""); // Default to failures. |
| 1306 proc_->SignalMultiple(1u); // For the first request which misses. | 1357 proc_->SignalMultiple(1u); // For the first request which misses. |
| 1307 | 1358 |
| 1308 Request* req0 = CreateRequest("er_ipv4", 80); | 1359 Request* req0 = CreateRequest("er_ipv4", 80); |
| 1309 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); | 1360 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); |
| 1310 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult()); | 1361 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult()); |
| 1311 | 1362 |
| 1312 IPAddressNumber local_ipv4, local_ipv6; | 1363 IPAddressNumber local_ipv4, local_ipv6; |
| 1313 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &local_ipv4)); | 1364 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &local_ipv4)); |
| 1314 ASSERT_TRUE(ParseIPLiteralToNumber("::1", &local_ipv6)); | 1365 ASSERT_TRUE(ParseIPLiteralToNumber("::1", &local_ipv6)); |
| 1315 | 1366 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 1346 | 1397 |
| 1347 // Request with upper case. | 1398 // Request with upper case. |
| 1348 Request* req6 = CreateRequest("er_IPV4", 80); | 1399 Request* req6 = CreateRequest("er_IPV4", 80); |
| 1349 EXPECT_EQ(OK, req6->Resolve()); | 1400 EXPECT_EQ(OK, req6->Resolve()); |
| 1350 EXPECT_TRUE(req6->HasOneAddress("127.0.0.1", 80)); | 1401 EXPECT_TRUE(req6->HasOneAddress("127.0.0.1", 80)); |
| 1351 } | 1402 } |
| 1352 | 1403 |
| 1353 TEST_F(HostResolverImplDnsTest, BypassDnsTask) { | 1404 TEST_F(HostResolverImplDnsTest, BypassDnsTask) { |
| 1354 ChangeDnsConfig(CreateValidDnsConfig()); | 1405 ChangeDnsConfig(CreateValidDnsConfig()); |
| 1355 | 1406 |
| 1356 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. | 1407 proc_->AddRuleForAllFamilies("", ""); // Default to failures. |
| 1357 | 1408 |
| 1358 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local", 80)->Resolve()); | 1409 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local", 80)->Resolve()); |
| 1359 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local.", 80)->Resolve()); | 1410 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local.", 80)->Resolve()); |
| 1360 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal", 80)->Resolve()); | 1411 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal", 80)->Resolve()); |
| 1361 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal.", 80)->Resolve()); | 1412 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal.", 80)->Resolve()); |
| 1362 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80)->Resolve()); | 1413 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80)->Resolve()); |
| 1363 | 1414 |
| 1364 proc_->SignalMultiple(requests_.size()); | 1415 proc_->SignalMultiple(requests_.size()); |
| 1365 | 1416 |
| 1366 for (size_t i = 0; i < 2; ++i) | 1417 for (size_t i = 0; i < 2; ++i) |
| 1367 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[i]->WaitForResult()) << i; | 1418 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[i]->WaitForResult()) << i; |
| 1368 | 1419 |
| 1369 for (size_t i = 2; i < requests_.size(); ++i) | 1420 for (size_t i = 2; i < requests_.size(); ++i) |
| 1370 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; | 1421 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; |
| 1371 } | 1422 } |
| 1372 | 1423 |
| 1373 } // namespace net | 1424 } // namespace net |
| OLD | NEW |