Index: net/base/address_list_unittest.cc |
diff --git a/net/base/address_list_unittest.cc b/net/base/address_list_unittest.cc |
index 140925814a39272564cb3dc542262d382ee01009..202a8b7261955da855472fa4d5f14532bcb4d654 100644 |
--- a/net/base/address_list_unittest.cc |
+++ b/net/base/address_list_unittest.cc |
@@ -274,5 +274,51 @@ TEST(AddressListTest, AddressFromAddrInfo) { |
} |
} |
+TEST(AddressListTest, CreateFromIPAddressList) { |
+ struct TestData { |
+ std::string ip_address; |
+ bool is_ipv6; |
+ } tests[] = { |
+ { "127.0.0.1", false }, |
+ { "2001:db8:0::42", true }, |
+ { "192.168.1.1", false }, |
+ }; |
+ |
+ // Construct a list of ip addresses. |
+ std::vector<IPAddressNumber> ip_list; |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
+ IPAddressNumber ip_number; |
+ ParseIPLiteralToNumber(tests[i].ip_address, &ip_number); |
+ ip_list.push_back(ip_number); |
+ } |
+ |
+ AddressList test_list = AddressList::CreateFromIPAddressList(ip_list, 80); |
+ EXPECT_EQ(80, test_list.GetPort()); |
+ |
+ // Make sure that CreateFromIPAddressList has created an addrinfo |
+ // chain of exactly the same length as the |tests| with correct content. |
+ struct addrinfo* next_ai = const_cast<struct addrinfo*>(test_list.head()); |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
+ ASSERT_TRUE(next_ai != NULL); |
+ AddressList expected_list; |
+ int rv = CreateAddressList(tests[i].ip_address, 80, &expected_list); |
+ if (tests[i].is_ipv6 && rv != 0) { |
+ LOG(WARNING) << "Unable to resolve ip literal '" << tests[i].ip_address |
+ << "' test skipped."; |
+ } else { |
+ ASSERT_EQ(0, rv); |
+ const struct addrinfo* good_ai = expected_list.head(); |
+ EXPECT_EQ(good_ai->ai_family, next_ai->ai_family); |
+ EXPECT_EQ(good_ai->ai_addrlen, next_ai->ai_addrlen); |
+ size_t sockaddr_size = |
+ good_ai->ai_socktype == AF_INET ? sizeof(struct sockaddr_in) : |
+ good_ai->ai_socktype == AF_INET6 ? sizeof(struct sockaddr_in6) : 0; |
+ EXPECT_EQ(memcmp(good_ai->ai_addr, next_ai->ai_addr, sockaddr_size), 0); |
+ } |
+ next_ai = next_ai->ai_next; |
+ } |
+ EXPECT_EQ(NULL, next_ai); |
+} |
+ |
} // namespace |
} // namespace net |