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

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

Issue 6995088: Break the dependency of DnsQuery and DnsResponse from AddressList (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment. Created 9 years, 6 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/dns_query.h" 5 #include "net/base/dns_query.h"
6 #include "net/base/dns_util.h" 6 #include "net/base/dns_util.h"
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 namespace net { 9 namespace net {
10 10
(...skipping 24 matching lines...) Expand all
35 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 35 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
36 // | | 36 // | |
37 // / QNAME / 37 // / QNAME /
38 // / / 38 // / /
39 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 39 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
40 // | QTYPE | 40 // | QTYPE |
41 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 41 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
42 // | QCLASS | 42 // | QCLASS |
43 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 43 // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
44 44
45 TEST(DnsQueryTest, RandomIdTest) { 45 TEST(DnsQueryTest, ConstructorTest) {
46 const std::string kHostname = "www.google.com"; 46 std::string kHostnameDns("\003www\006google\003com", 16);
47 const uint16 kPort = 80;
48 47
49 DnsQuery q1(kHostname, ADDRESS_FAMILY_IPV4, kPort); 48 DnsQuery q1(kHostnameDns, kDNS_A);
50 EXPECT_TRUE(q1.IsValid());
51 EXPECT_EQ(kPort, q1.port());
52 EXPECT_EQ(kDNS_A, q1.qtype()); 49 EXPECT_EQ(kDNS_A, q1.qtype());
53 EXPECT_EQ(kHostname, q1.hostname());
54
55 DnsQuery q2(kHostname, ADDRESS_FAMILY_IPV4, kPort);
56 EXPECT_TRUE(q2.IsValid());
57 EXPECT_EQ(kPort, q2.port());
58 EXPECT_EQ(kDNS_A, q2.qtype());
59 EXPECT_EQ(kHostname, q2.hostname());
60
61 // This has a 1/2^16 probability of failure.
62 EXPECT_FALSE(q1.id() == q2.id());
63 }
64
65 TEST(DnsQueryTest, ConstructorTest) {
66 const std::string kHostname = "www.google.com";
67 const uint16 kPort = 80;
68
69 DnsQuery q1(kHostname, ADDRESS_FAMILY_IPV4, kPort);
70 EXPECT_TRUE(q1.IsValid());
71 EXPECT_EQ(kPort, q1.port());
72 EXPECT_EQ(kDNS_A, q1.qtype());
73 EXPECT_EQ(kHostname, q1.hostname());
74 50
75 uint8 id_hi = q1.id() >> 8, id_lo = q1.id() & 0xff; 51 uint8 id_hi = q1.id() >> 8, id_lo = q1.id() & 0xff;
76 52
77 // See the top of the file for the description of a DNS query. 53 // See the top of the file for the description of a DNS query.
78 const uint8 query_data[] = { 54 const uint8 query_data[] = {
79 // Header 55 // Header
80 id_hi, id_lo, 56 id_hi, id_lo,
81 0x01, 0x00, // Flags -- set RD (recursion desired) bit. 57 0x01, 0x00, // Flags -- set RD (recursion desired) bit.
82 0x00, 0x01, // Set QDCOUNT (question count) to 1, all the 58 0x00, 0x01, // Set QDCOUNT (question count) to 1, all the
83 // rest are 0 for a query. 59 // rest are 0 for a query.
84 0x00, 0x00, 60 0x00, 0x00,
85 0x00, 0x00, 61 0x00, 0x00,
86 0x00, 0x00, 62 0x00, 0x00,
87 63
88 // Question 64 // Question
89 0x03, 0x77, 0x77, 0x77, // QNAME: www.google.com in DNS format. 65 0x03, 0x77, 0x77, 0x77, // QNAME: www.google.com in DNS format.
90 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 66 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
91 0x03, 0x63, 0x6f, 0x6d, 0x00, 67 0x03, 0x63, 0x6f, 0x6d, 0x00,
92 68
93 0x00, 0x01, // QTYPE: A query. 69 0x00, 0x01, // QTYPE: A query.
94 0x00, 0x01, // QCLASS: IN class. 70 0x00, 0x01, // QCLASS: IN class.
95 }; 71 };
96 72
97 int expected_size = arraysize(query_data); 73 int expected_size = arraysize(query_data);
98 EXPECT_EQ(expected_size, q1.io_buffer()->size()); 74 EXPECT_EQ(expected_size, q1.io_buffer()->size());
99 EXPECT_EQ(0, memcmp(q1.io_buffer()->data(), query_data, 75 EXPECT_EQ(0, memcmp(q1.io_buffer()->data(), query_data, expected_size));
100 q1.io_buffer()->size())); 76 }
101 77
102 // Query with a long hostname. 78 TEST(DnsQueryTest, CloneTest) {
103 const char hostname_too_long[] = "123456789.123456789.123456789.123456789.1234 56789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.1234 56789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.1234 56789.123456789.123456789.123456789.123456789.1234"; 79 std::string kHostnameDns("\003www\006google\003com", 16);
104 80
105 DnsQuery q2(hostname_too_long, ADDRESS_FAMILY_IPV4, kPort); 81 DnsQuery q1(kHostnameDns, kDNS_A);
106 EXPECT_FALSE(q2.IsValid()); 82 scoped_ptr<DnsQuery> q2(q1.CloneWithNewId());
83 EXPECT_EQ(q1.io_buffer()->size(), q2->io_buffer()->size());
84 EXPECT_EQ(q1.qtype(), q2->qtype());
85 EXPECT_EQ(q1.question_size(), q2->question_size());
86 EXPECT_EQ(0, memcmp(q1.question_data(), q2->question_data(),
87 q1.question_size()));
88 }
89
90 TEST(DnsQueryTest, RandomIdTest) {
91 std::string kHostnameDns("\003www\006google\003com", 16);
92
93 // Since id fields are 16-bit values, we iterate to reduce the
94 // probability of collision, to avoid a flaky test.
cbentzel 2011/06/09 15:24:25 OK, I guess I can live with a failure probability
95 bool ids_are_random = false;
96 for (int i = 0; i < 1000; ++i) {
97 DnsQuery q1(kHostnameDns, kDNS_A);
98 DnsQuery q2(kHostnameDns, kDNS_A);
99 scoped_ptr<DnsQuery> q3(q1.CloneWithNewId());
100 ids_are_random = q1.id () != q2.id() && q1.id() != q3->id();
101 if (ids_are_random)
102 break;
103 }
104 EXPECT_TRUE(ids_are_random);
107 } 105 }
108 106
109 } // namespace net 107 } // namespace net
OLDNEW
« net/base/dns_query.h ('K') | « net/base/dns_query.cc ('k') | net/base/dns_response.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698