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() { | |
1255 config_service_ = new MockDnsConfigService(); | 1239 config_service_ = new MockDnsConfigService(); |
1256 resolver_.reset(new HostResolverImpl( | 1240 resolver_.reset(new HostResolverImpl( |
1257 HostCache::CreateDefaultCache(), | 1241 HostCache::CreateDefaultCache(), |
1258 DefaultLimits(), | 1242 DefaultLimits(), |
1259 DefaultParams(proc_), | 1243 DefaultParams(proc_), |
1260 scoped_ptr<DnsConfigService>(config_service_), | 1244 scoped_ptr<DnsConfigService>(config_service_), |
1261 CreateMockDnsClient(DnsConfig(), dns_rules_), | 1245 CreateMockDnsClient(DnsConfig()), |
1262 NULL)); | 1246 NULL)); |
1263 } | 1247 } |
1264 | 1248 |
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 | |
1273 void ChangeDnsConfig(const DnsConfig& config) { | 1249 void ChangeDnsConfig(const DnsConfig& config) { |
1274 config_service_->ChangeConfig(config); | 1250 config_service_->ChangeConfig(config); |
1275 config_service_->ChangeHosts(config.hosts); | 1251 config_service_->ChangeHosts(config.hosts); |
1276 } | 1252 } |
1277 | 1253 |
1278 MockDnsClientRuleList dns_rules_; | |
1279 // Owned by |resolver_|. | 1254 // Owned by |resolver_|. |
1280 MockDnsConfigService* config_service_; | 1255 MockDnsConfigService* config_service_; |
1281 }; | 1256 }; |
1282 | 1257 |
1283 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change. | 1258 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change. |
1284 | 1259 |
1285 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. | 1260 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. |
1286 | 1261 |
1287 // Test successful and fallback resolutions in HostResolverImpl::DnsTask. | 1262 // Test successful and fallback resolutions in HostResolverImpl::DnsTask. |
1288 TEST_F(HostResolverImplDnsTest, DnsTask) { | 1263 TEST_F(HostResolverImplDnsTest, DnsTask) { |
(...skipping 27 matching lines...) Expand all Loading... |
1316 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80)); | 1291 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80)); |
1317 // Fallback to ProcTask. | 1292 // Fallback to ProcTask. |
1318 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result()); | 1293 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result()); |
1319 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result()); | 1294 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result()); |
1320 EXPECT_EQ(OK, requests_[4]->result()); | 1295 EXPECT_EQ(OK, requests_[4]->result()); |
1321 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80)); | 1296 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80)); |
1322 EXPECT_EQ(OK, requests_[5]->result()); | 1297 EXPECT_EQ(OK, requests_[5]->result()); |
1323 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); | 1298 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); |
1324 } | 1299 } |
1325 | 1300 |
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 | |
1353 TEST_F(HostResolverImplDnsTest, ServeFromHosts) { | 1301 TEST_F(HostResolverImplDnsTest, ServeFromHosts) { |
1354 // Initially, use empty HOSTS file. | 1302 // Initially, use empty HOSTS file. |
1355 ChangeDnsConfig(CreateValidDnsConfig()); | 1303 ChangeDnsConfig(CreateValidDnsConfig()); |
1356 | 1304 |
1357 proc_->AddRuleForAllFamilies("", ""); // Default to failures. | 1305 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. |
1358 proc_->SignalMultiple(1u); // For the first request which misses. | 1306 proc_->SignalMultiple(1u); // For the first request which misses. |
1359 | 1307 |
1360 Request* req0 = CreateRequest("er_ipv4", 80); | 1308 Request* req0 = CreateRequest("er_ipv4", 80); |
1361 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); | 1309 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); |
1362 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult()); | 1310 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult()); |
1363 | 1311 |
1364 IPAddressNumber local_ipv4, local_ipv6; | 1312 IPAddressNumber local_ipv4, local_ipv6; |
1365 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &local_ipv4)); | 1313 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &local_ipv4)); |
1366 ASSERT_TRUE(ParseIPLiteralToNumber("::1", &local_ipv6)); | 1314 ASSERT_TRUE(ParseIPLiteralToNumber("::1", &local_ipv6)); |
1367 | 1315 |
(...skipping 30 matching lines...) Expand all Loading... |
1398 | 1346 |
1399 // Request with upper case. | 1347 // Request with upper case. |
1400 Request* req6 = CreateRequest("er_IPV4", 80); | 1348 Request* req6 = CreateRequest("er_IPV4", 80); |
1401 EXPECT_EQ(OK, req6->Resolve()); | 1349 EXPECT_EQ(OK, req6->Resolve()); |
1402 EXPECT_TRUE(req6->HasOneAddress("127.0.0.1", 80)); | 1350 EXPECT_TRUE(req6->HasOneAddress("127.0.0.1", 80)); |
1403 } | 1351 } |
1404 | 1352 |
1405 TEST_F(HostResolverImplDnsTest, BypassDnsTask) { | 1353 TEST_F(HostResolverImplDnsTest, BypassDnsTask) { |
1406 ChangeDnsConfig(CreateValidDnsConfig()); | 1354 ChangeDnsConfig(CreateValidDnsConfig()); |
1407 | 1355 |
1408 proc_->AddRuleForAllFamilies("", ""); // Default to failures. | 1356 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. |
1409 | 1357 |
1410 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local", 80)->Resolve()); | 1358 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local", 80)->Resolve()); |
1411 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local.", 80)->Resolve()); | 1359 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok.local.", 80)->Resolve()); |
1412 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal", 80)->Resolve()); | 1360 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal", 80)->Resolve()); |
1413 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal.", 80)->Resolve()); | 1361 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("oklocal.", 80)->Resolve()); |
1414 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80)->Resolve()); | 1362 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80)->Resolve()); |
1415 | 1363 |
1416 proc_->SignalMultiple(requests_.size()); | 1364 proc_->SignalMultiple(requests_.size()); |
1417 | 1365 |
1418 for (size_t i = 0; i < 2; ++i) | 1366 for (size_t i = 0; i < 2; ++i) |
1419 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[i]->WaitForResult()) << i; | 1367 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[i]->WaitForResult()) << i; |
1420 | 1368 |
1421 for (size_t i = 2; i < requests_.size(); ++i) | 1369 for (size_t i = 2; i < requests_.size(); ++i) |
1422 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; | 1370 EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i; |
1423 } | 1371 } |
1424 | 1372 |
1425 } // namespace net | 1373 } // namespace net |
OLD | NEW |