Index: net/base/address_list_unittest.cc |
diff --git a/net/base/address_list_unittest.cc b/net/base/address_list_unittest.cc |
index dbd0f24b9c0c90fb69e284b144e597ea53884d20..6ebd0f3e370f67eeb344f2118ae0bb4148669f04 100644 |
--- a/net/base/address_list_unittest.cc |
+++ b/net/base/address_list_unittest.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -17,27 +17,29 @@ namespace { |
// Use getaddrinfo() to allocate an addrinfo structure. |
void CreateAddressList(const std::string& hostname, |
- net::AddressList* addrlist, int port) { |
+ int port, |
+ net::AddressList* addrlist) { |
#if defined(OS_WIN) |
net::EnsureWinsockInit(); |
#endif |
int rv = SystemHostResolverProc(hostname, |
net::ADDRESS_FAMILY_UNSPECIFIED, |
+ 0, |
addrlist); |
EXPECT_EQ(0, rv); |
addrlist->SetPort(port); |
} |
void CreateLongAddressList(net::AddressList* addrlist, int port) { |
- CreateAddressList("192.168.1.1", addrlist, port); |
+ CreateAddressList("192.168.1.1", port, addrlist); |
net::AddressList second_list; |
- CreateAddressList("192.168.1.2", &second_list, port); |
+ CreateAddressList("192.168.1.2", port, &second_list); |
addrlist->Append(second_list.head()); |
} |
TEST(AddressListTest, GetPort) { |
net::AddressList addrlist; |
- CreateAddressList("192.168.1.1", &addrlist, 81); |
+ CreateAddressList("192.168.1.1", 81, &addrlist); |
EXPECT_EQ(81, addrlist.GetPort()); |
addrlist.SetPort(83); |
@@ -46,7 +48,7 @@ TEST(AddressListTest, GetPort) { |
TEST(AddressListTest, Assignment) { |
net::AddressList addrlist1; |
- CreateAddressList("192.168.1.1", &addrlist1, 85); |
+ CreateAddressList("192.168.1.1", 85, &addrlist1); |
EXPECT_EQ(85, addrlist1.GetPort()); |
// Should reference the same data as addrlist1 -- so when we change addrlist1 |
@@ -105,10 +107,10 @@ TEST(AddressListTest, CopyNonRecursive) { |
TEST(AddressListTest, Append) { |
net::AddressList addrlist1; |
- CreateAddressList("192.168.1.1", &addrlist1, 11); |
+ CreateAddressList("192.168.1.1", 11, &addrlist1); |
EXPECT_EQ(11, addrlist1.GetPort()); |
net::AddressList addrlist2; |
- CreateAddressList("192.168.1.2", &addrlist2, 12); |
+ CreateAddressList("192.168.1.2", 12, &addrlist2); |
EXPECT_EQ(12, addrlist2.GetPort()); |
ASSERT_TRUE(addrlist1.head()->ai_next == NULL); |
@@ -120,4 +122,54 @@ TEST(AddressListTest, Append) { |
EXPECT_EQ(12, addrlist3.GetPort()); |
} |
+static const char* kCanonicalHostname = "canonical.bar.com"; |
+ |
+TEST(AddressListTest, Canonical) { |
+ // Create an addrinfo with a canonical name. |
+ sockaddr_in address; |
+ // The contents of address do not matter for this test, |
+ // so just zero-ing them out for consistency. |
+ memset(&address, 0x0, sizeof(address)); |
+ struct addrinfo ai; |
+ memset(&ai, 0x0, sizeof(ai)); |
+ ai.ai_family = AF_INET; |
+ ai.ai_socktype = SOCK_STREAM; |
+ ai.ai_addrlen = sizeof(address); |
+ ai.ai_addr = reinterpret_cast<sockaddr*>(&address); |
+ ai.ai_canonname = const_cast<char *>(kCanonicalHostname); |
+ |
+ // Copy the addrinfo struct into an AddressList object and |
+ // make sure it seems correct. |
+ net::AddressList addrlist1; |
+ addrlist1.Copy(&ai, true); |
+ const struct addrinfo* addrinfo1 = addrlist1.head(); |
+ EXPECT_TRUE(addrinfo1 != NULL); |
+ EXPECT_TRUE(addrinfo1->ai_next == NULL); |
+ std::string canon_name1; |
+ EXPECT_TRUE(addrlist1.GetCanonicalName(&canon_name1)); |
+ EXPECT_EQ("canonical.bar.com", canon_name1); |
+ |
+ // Copy the AddressList to another one. |
+ net::AddressList addrlist2; |
+ addrlist2.Copy(addrinfo1, true); |
+ const struct addrinfo* addrinfo2 = addrlist2.head(); |
+ EXPECT_TRUE(addrinfo2 != NULL); |
+ EXPECT_TRUE(addrinfo2->ai_next == NULL); |
+ EXPECT_TRUE(addrinfo2->ai_canonname != NULL); |
+ EXPECT_NE(addrinfo1, addrinfo2); |
+ EXPECT_NE(addrinfo1->ai_canonname, addrinfo2->ai_canonname); |
+ std::string canon_name2; |
+ EXPECT_TRUE(addrlist2.GetCanonicalName(&canon_name2)); |
+ EXPECT_EQ("canonical.bar.com", canon_name2); |
+ |
+ // Make sure that GetCanonicalName correctly returns false |
+ // when ai_canonname is NULL. |
+ ai.ai_canonname = NULL; |
+ net::AddressList addrlist_no_canon; |
+ addrlist_no_canon.Copy(&ai, true); |
+ std::string canon_name3 = "blah"; |
+ EXPECT_FALSE(addrlist_no_canon.GetCanonicalName(&canon_name3)); |
+ EXPECT_EQ("blah", canon_name3); |
+} |
+ |
} // namespace |