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

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

Issue 10442098: [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: sync 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 void AddDnsRule(const std::string& prefix,
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698