Index: net/base/net_util_unittest.cc |
diff --git a/net/base/net_util_unittest.cc b/net/base/net_util_unittest.cc |
index 78911d0bbbcfae278dede1394333ccc5af834eef..8d2aabe754feec0087c5f6169df51e576c079a73 100644 |
--- a/net/base/net_util_unittest.cc |
+++ b/net/base/net_util_unittest.cc |
@@ -17,6 +17,7 @@ |
#include "base/strings/utf_string_conversions.h" |
#include "base/sys_byteorder.h" |
#include "base/time/time.h" |
+#include "net/base/address_list.h" |
#include "net/base/ip_endpoint.h" |
#if !defined(OS_NACL) && !defined(OS_WIN) |
@@ -54,6 +55,11 @@ struct HeaderCase { |
const char* const expected; |
}; |
+const unsigned char kLocalhostIPv4[] = {127, 0, 0, 1}; |
+const unsigned char kLocalhostIPv6[] = |
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; |
+const uint16_t kLocalhostLookupPort = 80; |
+ |
// Fills in sockaddr for the given 32-bit address (IPv4.) |
// |bytes| should be an array of length 4. |
void MakeIPv4Address(const uint8_t* bytes, int port, SockaddrStorage* storage) { |
@@ -76,6 +82,43 @@ void MakeIPv6Address(const uint8_t* bytes, int port, SockaddrStorage* storage) { |
memcpy(&addr6->sin6_addr, bytes, 16); |
} |
+bool HasEndpoint(const IPEndPoint& endpoint, const AddressList& addresses) { |
+ for (const auto& address : addresses) { |
+ if (endpoint == address) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+void TestBothLoopbackIPs(const std::string& host) { |
+ IPEndPoint localhost_ipv4( |
+ IPAddressNumber(kLocalhostIPv4, |
+ kLocalhostIPv4 + arraysize(kLocalhostIPv4)), |
+ kLocalhostLookupPort); |
+ IPEndPoint localhost_ipv6( |
+ IPAddressNumber(kLocalhostIPv6, |
+ kLocalhostIPv6 + arraysize(kLocalhostIPv6)), |
+ kLocalhostLookupPort); |
+ |
+ AddressList addresses; |
+ EXPECT_TRUE(ResolveLocalHostname(host, kLocalhostLookupPort, &addresses)); |
+ EXPECT_EQ(2u, addresses.size()); |
+ EXPECT_TRUE(HasEndpoint(localhost_ipv4, addresses)); |
+ EXPECT_TRUE(HasEndpoint(localhost_ipv6, addresses)); |
+} |
+ |
+void TestIPv6LoopbackOnly(const std::string& host) { |
+ IPEndPoint localhost_ipv6( |
+ IPAddressNumber(kLocalhostIPv6, |
+ kLocalhostIPv6 + arraysize(kLocalhostIPv6)), |
+ kLocalhostLookupPort); |
+ |
+ AddressList addresses; |
+ EXPECT_TRUE(ResolveLocalHostname(host, kLocalhostLookupPort, &addresses)); |
+ EXPECT_EQ(1u, addresses.size()); |
+ EXPECT_TRUE(HasEndpoint(localhost_ipv6, addresses)); |
+} |
+ |
} // anonymous namespace |
TEST(NetUtilTest, GetIdentityFromURL) { |
@@ -477,9 +520,16 @@ TEST(NetUtilTest, GetAddressFamily) { |
TEST(NetUtilTest, IsLocalhost) { |
EXPECT_TRUE(IsLocalhost("localhost")); |
+ EXPECT_TRUE(IsLocalhost("localHosT")); |
+ EXPECT_TRUE(IsLocalhost("localhost.")); |
+ EXPECT_TRUE(IsLocalhost("localHost.")); |
EXPECT_TRUE(IsLocalhost("localhost.localdomain")); |
+ EXPECT_TRUE(IsLocalhost("localhost.localDOMain")); |
+ EXPECT_TRUE(IsLocalhost("localhost.localdomain.")); |
EXPECT_TRUE(IsLocalhost("localhost6")); |
+ EXPECT_TRUE(IsLocalhost("localhost6.")); |
EXPECT_TRUE(IsLocalhost("localhost6.localdomain6")); |
+ EXPECT_TRUE(IsLocalhost("localhost6.localdomain6.")); |
EXPECT_TRUE(IsLocalhost("127.0.0.1")); |
EXPECT_TRUE(IsLocalhost("127.0.1.0")); |
EXPECT_TRUE(IsLocalhost("127.1.0.0")); |
@@ -489,9 +539,12 @@ TEST(NetUtilTest, IsLocalhost) { |
EXPECT_TRUE(IsLocalhost("::1")); |
EXPECT_TRUE(IsLocalhost("0:0:0:0:0:0:0:1")); |
EXPECT_TRUE(IsLocalhost("foo.localhost")); |
+ EXPECT_TRUE(IsLocalhost("foo.localhost.")); |
EXPECT_FALSE(IsLocalhost("localhostx")); |
+ EXPECT_FALSE(IsLocalhost("localhost.x")); |
EXPECT_FALSE(IsLocalhost("foo.localdomain")); |
+ EXPECT_FALSE(IsLocalhost("foo.localdomain.x")); |
EXPECT_FALSE(IsLocalhost("localhost6x")); |
EXPECT_FALSE(IsLocalhost("localhost.localdomain6")); |
EXPECT_FALSE(IsLocalhost("localhost6.localdomain")); |
@@ -506,9 +559,69 @@ TEST(NetUtilTest, IsLocalhost) { |
EXPECT_FALSE(IsLocalhost("foo.localhoste")); |
} |
+TEST(NetUtilTest, ResolveLocalHostname) { |
+ AddressList addresses; |
+ |
+ TestBothLoopbackIPs("localhost"); |
+ TestBothLoopbackIPs("localhoST"); |
+ TestBothLoopbackIPs("localhost."); |
+ TestBothLoopbackIPs("localhoST."); |
+ TestBothLoopbackIPs("localhost.localdomain"); |
+ TestBothLoopbackIPs("localhost.localdomAIn"); |
+ TestBothLoopbackIPs("localhost.localdomain."); |
+ TestBothLoopbackIPs("localhost.localdomAIn."); |
+ TestBothLoopbackIPs("foo.localhost"); |
+ TestBothLoopbackIPs("foo.localhOSt"); |
+ TestBothLoopbackIPs("foo.localhost."); |
+ TestBothLoopbackIPs("foo.localhOSt."); |
+ |
+ TestIPv6LoopbackOnly("localhost6"); |
+ TestIPv6LoopbackOnly("localhoST6"); |
+ TestIPv6LoopbackOnly("localhost6."); |
+ TestIPv6LoopbackOnly("localhost6.localdomain6"); |
+ TestIPv6LoopbackOnly("localhost6.localdomain6."); |
+ |
+ EXPECT_FALSE( |
+ ResolveLocalHostname("127.0.0.1", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("::1", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("0:0:0:0:0:0:0:1", kLocalhostLookupPort, |
+ &addresses)); |
+ EXPECT_FALSE( |
+ ResolveLocalHostname("localhostx", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE( |
+ ResolveLocalHostname("localhost.x", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("foo.localdomain", kLocalhostLookupPort, |
+ &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("foo.localdomain.x", kLocalhostLookupPort, |
+ &addresses)); |
+ EXPECT_FALSE( |
+ ResolveLocalHostname("localhost6x", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("localhost.localdomain6", |
+ kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("localhost6.localdomain", |
+ kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE( |
+ ResolveLocalHostname("127.0.0.1.1", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE( |
+ ResolveLocalHostname(".127.0.0.255", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("::2", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("::1:1", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("0:0:0:0:1:0:0:1", kLocalhostLookupPort, |
+ &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("::1:1", kLocalhostLookupPort, &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("0:0:0:0:0:0:0:0:1", kLocalhostLookupPort, |
+ &addresses)); |
+ EXPECT_FALSE(ResolveLocalHostname("foo.localhost.com", kLocalhostLookupPort, |
+ &addresses)); |
+ EXPECT_FALSE( |
+ ResolveLocalHostname("foo.localhoste", kLocalhostLookupPort, &addresses)); |
+} |
+ |
TEST(NetUtilTest, IsLocalhostTLD) { |
EXPECT_TRUE(IsLocalhostTLD("foo.localhost")); |
+ EXPECT_TRUE(IsLocalhostTLD("foo.localhoST")); |
EXPECT_TRUE(IsLocalhostTLD("foo.localhost.")); |
+ EXPECT_TRUE(IsLocalhostTLD("foo.localhoST.")); |
EXPECT_FALSE(IsLocalhostTLD("foo.localhos")); |
EXPECT_FALSE(IsLocalhostTLD("foo.localhost.com")); |
EXPECT_FALSE(IsLocalhost("foo.localhoste")); |