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

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

Issue 3023048: Don't resolve IP literals. (Closed)
Patch Set: Rebase again Created 10 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
« no previous file with comments | « net/base/address_list.cc ('k') | net/base/host_resolver_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/address_list.h" 5 #include "net/base/address_list.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "net/base/host_resolver_proc.h" 8 #include "net/base/host_resolver_proc.h"
9 #include "net/base/net_util.h" 9 #include "net/base/net_util.h"
10 #include "net/base/sys_addrinfo.h" 10 #include "net/base/sys_addrinfo.h"
11 #if defined(OS_WIN) 11 #if defined(OS_WIN)
12 #include "net/base/winsock_init.h" 12 #include "net/base/winsock_init.h"
13 #endif 13 #endif
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 namespace { 16 namespace {
17 17
18 // Use getaddrinfo() to allocate an addrinfo structure. 18 // Use getaddrinfo() to allocate an addrinfo structure.
19 void CreateAddressList(const std::string& hostname, 19 int CreateAddressList(const std::string& hostname, int port,
20 int port, 20 net::AddressList* addrlist) {
21 net::AddressList* addrlist) {
22 #if defined(OS_WIN) 21 #if defined(OS_WIN)
23 net::EnsureWinsockInit(); 22 net::EnsureWinsockInit();
24 #endif 23 #endif
25 int rv = SystemHostResolverProc(hostname, 24 int rv = SystemHostResolverProc(hostname,
26 net::ADDRESS_FAMILY_UNSPECIFIED, 25 net::ADDRESS_FAMILY_UNSPECIFIED,
27 0, 26 0,
28 addrlist, NULL); 27 addrlist, NULL);
29 EXPECT_EQ(0, rv); 28 if (rv == 0)
30 addrlist->SetPort(port); 29 addrlist->SetPort(port);
30 return rv;
31 } 31 }
32 32
33 void CreateLongAddressList(net::AddressList* addrlist, int port) { 33 void CreateLongAddressList(net::AddressList* addrlist, int port) {
34 CreateAddressList("192.168.1.1", port, addrlist); 34 EXPECT_EQ(0, CreateAddressList("192.168.1.1", port, addrlist));
35 net::AddressList second_list; 35 net::AddressList second_list;
36 CreateAddressList("192.168.1.2", port, &second_list); 36 EXPECT_EQ(0, CreateAddressList("192.168.1.2", port, &second_list));
37 addrlist->Append(second_list.head()); 37 addrlist->Append(second_list.head());
38 } 38 }
39 39
40 TEST(AddressListTest, GetPort) { 40 TEST(AddressListTest, GetPort) {
41 net::AddressList addrlist; 41 net::AddressList addrlist;
42 CreateAddressList("192.168.1.1", 81, &addrlist); 42 EXPECT_EQ(0, CreateAddressList("192.168.1.1", 81, &addrlist));
43 EXPECT_EQ(81, addrlist.GetPort()); 43 EXPECT_EQ(81, addrlist.GetPort());
44 44
45 addrlist.SetPort(83); 45 addrlist.SetPort(83);
46 EXPECT_EQ(83, addrlist.GetPort()); 46 EXPECT_EQ(83, addrlist.GetPort());
47 } 47 }
48 48
49 TEST(AddressListTest, Assignment) { 49 TEST(AddressListTest, Assignment) {
50 net::AddressList addrlist1; 50 net::AddressList addrlist1;
51 CreateAddressList("192.168.1.1", 85, &addrlist1); 51 EXPECT_EQ(0, CreateAddressList("192.168.1.1", 85, &addrlist1));
52 EXPECT_EQ(85, addrlist1.GetPort()); 52 EXPECT_EQ(85, addrlist1.GetPort());
53 53
54 // Should reference the same data as addrlist1 -- so when we change addrlist1 54 // Should reference the same data as addrlist1 -- so when we change addrlist1
55 // both are changed. 55 // both are changed.
56 net::AddressList addrlist2 = addrlist1; 56 net::AddressList addrlist2 = addrlist1;
57 EXPECT_EQ(85, addrlist2.GetPort()); 57 EXPECT_EQ(85, addrlist2.GetPort());
58 58
59 addrlist1.SetPort(80); 59 addrlist1.SetPort(80);
60 EXPECT_EQ(80, addrlist1.GetPort()); 60 EXPECT_EQ(80, addrlist1.GetPort());
61 EXPECT_EQ(80, addrlist2.GetPort()); 61 EXPECT_EQ(80, addrlist2.GetPort());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 // Changes to addrlist1 are not reflected in addrlist2. 100 // Changes to addrlist1 are not reflected in addrlist2.
101 addrlist1.SetPort(70); 101 addrlist1.SetPort(70);
102 addrlist2.SetPort(90); 102 addrlist2.SetPort(90);
103 103
104 EXPECT_EQ(70, addrlist1.GetPort()); 104 EXPECT_EQ(70, addrlist1.GetPort());
105 EXPECT_EQ(90, addrlist2.GetPort()); 105 EXPECT_EQ(90, addrlist2.GetPort());
106 } 106 }
107 107
108 TEST(AddressListTest, Append) { 108 TEST(AddressListTest, Append) {
109 net::AddressList addrlist1; 109 net::AddressList addrlist1;
110 CreateAddressList("192.168.1.1", 11, &addrlist1); 110 EXPECT_EQ(0, CreateAddressList("192.168.1.1", 11, &addrlist1));
111 EXPECT_EQ(11, addrlist1.GetPort()); 111 EXPECT_EQ(11, addrlist1.GetPort());
112 net::AddressList addrlist2; 112 net::AddressList addrlist2;
113 CreateAddressList("192.168.1.2", 12, &addrlist2); 113 EXPECT_EQ(0, CreateAddressList("192.168.1.2", 12, &addrlist2));
114 EXPECT_EQ(12, addrlist2.GetPort()); 114 EXPECT_EQ(12, addrlist2.GetPort());
115 115
116 ASSERT_TRUE(addrlist1.head()->ai_next == NULL); 116 ASSERT_TRUE(addrlist1.head()->ai_next == NULL);
117 addrlist1.Append(addrlist2.head()); 117 addrlist1.Append(addrlist2.head());
118 ASSERT_TRUE(addrlist1.head()->ai_next != NULL); 118 ASSERT_TRUE(addrlist1.head()->ai_next != NULL);
119 119
120 net::AddressList addrlist3; 120 net::AddressList addrlist3;
121 addrlist3.Copy(addrlist1.head()->ai_next, false); 121 addrlist3.Copy(addrlist1.head()->ai_next, false);
122 EXPECT_EQ(12, addrlist3.GetPort()); 122 EXPECT_EQ(12, addrlist3.GetPort());
123 } 123 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 // Make sure that GetCanonicalName correctly returns false 165 // Make sure that GetCanonicalName correctly returns false
166 // when ai_canonname is NULL. 166 // when ai_canonname is NULL.
167 ai.ai_canonname = NULL; 167 ai.ai_canonname = NULL;
168 net::AddressList addrlist_no_canon; 168 net::AddressList addrlist_no_canon;
169 addrlist_no_canon.Copy(&ai, true); 169 addrlist_no_canon.Copy(&ai, true);
170 std::string canon_name3 = "blah"; 170 std::string canon_name3 = "blah";
171 EXPECT_FALSE(addrlist_no_canon.GetCanonicalName(&canon_name3)); 171 EXPECT_FALSE(addrlist_no_canon.GetCanonicalName(&canon_name3));
172 EXPECT_EQ("blah", canon_name3); 172 EXPECT_EQ("blah", canon_name3);
173 } 173 }
174 174
175 TEST(AddressListTest, IPLiteralConstructor) {
176 struct TestData {
177 std::string ip_address;
178 std::string canonical_ip_address;
179 bool is_ipv6;
180 } tests[] = {
181 { "127.0.00.1", "127.0.0.1", false },
182 { "192.168.1.1", "192.168.1.1", false },
183 { "::1", "::1", true },
184 { "2001:db8:0::42", "2001:db8::42", true },
185 };
186 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); i++) {
187 net::AddressList expected_list;
188 int rv = CreateAddressList(tests[i].canonical_ip_address, 80,
189 &expected_list);
190 if (tests[i].is_ipv6 && rv != 0) {
191 LOG(WARNING) << "Unable to resolve ip literal '" << tests[i].ip_address
192 << "' test skipped.";
193 continue;
194 }
195 ASSERT_EQ(0, rv);
196 const struct addrinfo* good_ai = expected_list.head();
197
198 net::IPAddressNumber ip_number;
199 net::ParseIPLiteralToNumber(tests[i].ip_address, &ip_number);
200 net::AddressList test_list(ip_number, 80, true);
201 const struct addrinfo* test_ai = test_list.head();
202
203 EXPECT_EQ(good_ai->ai_family, test_ai->ai_family);
204 EXPECT_EQ(good_ai->ai_socktype, test_ai->ai_socktype);
205 EXPECT_EQ(good_ai->ai_addrlen, test_ai->ai_addrlen);
206 size_t sockaddr_size =
207 good_ai->ai_socktype == AF_INET ? sizeof(struct sockaddr_in) :
208 good_ai->ai_socktype == AF_INET6 ? sizeof(struct sockaddr_in6) : 0;
209 EXPECT_EQ(memcmp(good_ai->ai_addr, test_ai->ai_addr, sockaddr_size), 0);
210 EXPECT_EQ(good_ai->ai_next, test_ai->ai_next);
211 EXPECT_EQ(strcmp(tests[i].canonical_ip_address.c_str(),
212 test_ai->ai_canonname), 0);
213 }
214 }
215
175 } // namespace 216 } // namespace
OLDNEW
« no previous file with comments | « net/base/address_list.cc ('k') | net/base/host_resolver_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698