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

Side by Side Diff: net/dns/dns_response_unittest.cc

Issue 9369045: [net] HostResolverImpl + DnsTransaction + DnsConfigService = Asynchronous DNS ready for experiments. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix ClientSocketFactory lifetime. Move ScopedAllowIO to StartWatch. Added DnsTask logging. Created 8 years, 10 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/dns/dns_response.h" 5 #include "net/dns/dns_response.h"
6 6
7 #include "base/time.h"
8 #include "net/base/address_list.h"
7 #include "net/base/io_buffer.h" 9 #include "net/base/io_buffer.h"
10 #include "net/base/net_util.h"
11 #include "net/base/sys_addrinfo.h"
8 #include "net/dns/dns_protocol.h" 12 #include "net/dns/dns_protocol.h"
9 #include "net/dns/dns_query.h" 13 #include "net/dns/dns_query.h"
14 #include "net/dns/dns_test_util.h"
10 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
11 16
12 namespace net { 17 namespace net {
13 18
14 namespace { 19 namespace {
15 20
16 TEST(DnsRecordParserTest, Constructor) { 21 TEST(DnsRecordParserTest, Constructor) {
17 const char data[] = { 0 }; 22 const char data[] = { 0 };
18 23
19 EXPECT_FALSE(DnsRecordParser().IsValid()); 24 EXPECT_FALSE(DnsRecordParser().IsValid());
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 239
235 DnsResourceRecord record; 240 DnsResourceRecord record;
236 DnsRecordParser parser = resp.Parser(); 241 DnsRecordParser parser = resp.Parser();
237 EXPECT_TRUE(parser.ParseRecord(&record)); 242 EXPECT_TRUE(parser.ParseRecord(&record));
238 EXPECT_FALSE(parser.AtEnd()); 243 EXPECT_FALSE(parser.AtEnd());
239 EXPECT_TRUE(parser.ParseRecord(&record)); 244 EXPECT_TRUE(parser.ParseRecord(&record));
240 EXPECT_TRUE(parser.AtEnd()); 245 EXPECT_TRUE(parser.AtEnd());
241 EXPECT_FALSE(parser.ParseRecord(&record)); 246 EXPECT_FALSE(parser.ParseRecord(&record));
242 } 247 }
243 248
249 void VerifyAddressList(const std::vector<const char*>& ip_addresses,
250 const AddressList& addrlist) {
251 ASSERT_GT(ip_addresses.size(), 0u);
252 ASSERT_NE(static_cast<addrinfo*>(NULL), addrlist.head());
253
254 IPAddressNumber ip_number;
255 const struct addrinfo* ainfo = addrlist.head();
256 for (std::vector<const char*>::const_iterator i = ip_addresses.begin();
257 i != ip_addresses.end(); ++i, ainfo = ainfo->ai_next) {
258 ASSERT_NE(static_cast<addrinfo*>(NULL), ainfo);
259 EXPECT_EQ(sizeof(struct sockaddr_in),
260 static_cast<size_t>(ainfo->ai_addrlen));
261
262 const struct sockaddr* sa = ainfo->ai_addr;
263 EXPECT_STREQ(*i, NetAddressToString(sa, ainfo->ai_addrlen).c_str());
264 }
265 ASSERT_EQ(static_cast<addrinfo*>(NULL), ainfo);
266 }
267
268 TEST(DnsResponseTest, ParseAddressList) {
269 const struct TestCase {
270 const uint8* query_data;
271 size_t query_size;
272 const uint8* response_data;
273 size_t response_size;
274 const char* const* expected_addresses;
275 size_t num_expected_addresses;
276 const char* expected_cname;
277 int expected_ttl_sec;
278 } cases[] = {
279 {
280 kT0QueryDatagram, arraysize(kT0QueryDatagram),
281 kT0ResponseDatagram, arraysize(kT0ResponseDatagram),
282 kT0IpAddresses, arraysize(kT0IpAddresses),
283 kT0CanonName,
284 kT0TTL,
285 },
286 {
287 kT1QueryDatagram, arraysize(kT1QueryDatagram),
288 kT1ResponseDatagram, arraysize(kT1ResponseDatagram),
289 kT1IpAddresses, arraysize(kT1IpAddresses),
290 kT1CanonName,
291 kT1TTL,
292 },
293 {
294 kT2QueryDatagram, arraysize(kT2QueryDatagram),
295 kT2ResponseDatagram, arraysize(kT2ResponseDatagram),
296 kT2IpAddresses, arraysize(kT2IpAddresses),
297 kT2CanonName,
298 kT2TTL,
299 },
300 {
301 kT3QueryDatagram, arraysize(kT3QueryDatagram),
302 kT3ResponseDatagram, arraysize(kT3ResponseDatagram),
303 kT3IpAddresses, arraysize(kT3IpAddresses),
304 kT3CanonName,
305 kT3TTL,
306 },
307 };
308
309 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
310 const TestCase& t = cases[i];
311 DnsResponse response(t.response_data, t.response_size, t.query_size);
312 AddressList addr_list;
313 base::TimeDelta ttl;
314 EXPECT_TRUE(response.ParseAddressList(&addr_list, &ttl));
315 std::vector<const char*> expected_addresses(
316 t.expected_addresses,
317 t.expected_addresses + t.num_expected_addresses);
318 VerifyAddressList(expected_addresses, addr_list);
319 std::string cname;
320 ASSERT_TRUE(addr_list.GetCanonicalName(&cname));
321 EXPECT_EQ(t.expected_cname, cname);
322 EXPECT_EQ(base::TimeDelta::FromSeconds(t.expected_ttl_sec), ttl);
323 }
324 }
325
244 } // namespace 326 } // namespace
245 327
246 } // namespace net 328 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698