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