Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: net/base/host_resolver_impl_unittest.cc

Issue 10855179: [net/dns] Resolve AF_UNSPEC on dual-stacked systems. Sort addresses according to RFC3484. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698