Index: net/dns/dns_hosts_unittest.cc |
diff --git a/net/dns/dns_hosts_unittest.cc b/net/dns/dns_hosts_unittest.cc |
index c0e8805fc47dfdf97de79e6c48746650fb27e811..90748992890aa2753a2eb8e33af29ac5e6a690c3 100644 |
--- a/net/dns/dns_hosts_unittest.cc |
+++ b/net/dns/dns_hosts_unittest.cc |
@@ -10,8 +10,27 @@ namespace net { |
namespace { |
+struct ExpectedHostsEntry { |
+ const char* host; |
+ AddressFamily family; |
+ const char* ip; |
+}; |
+ |
+void PopulateExpectedHosts(const ExpectedHostsEntry* entries, |
+ size_t num_entries, |
+ DnsHosts* expected_hosts_out) { |
+ for (size_t i = 0; i < num_entries; ++i) { |
+ DnsHostsKey key(entries[i].host, entries[i].family); |
+ IPAddressNumber& ip_ref = (*expected_hosts_out)[key]; |
+ ASSERT_TRUE(ip_ref.empty()); |
+ ASSERT_TRUE(ParseIPLiteralToNumber(entries[i].ip, &ip_ref)); |
+ ASSERT_EQ(ip_ref.size(), |
+ (entries[i].family == ADDRESS_FAMILY_IPV4) ? 4u : 16u); |
+ } |
+} |
+ |
TEST(DnsHostsTest, ParseHosts) { |
- std::string contents = |
+ const std::string kContents = |
"127.0.0.1 localhost\tlocalhost.localdomain # standard\n" |
"\n" |
"1.0.0.1 localhost # ignored, first hit above\n" |
@@ -30,11 +49,7 @@ TEST(DnsHostsTest, ParseHosts) { |
"127.0.0.2 cache5\n" |
"gibberish"; |
- const struct { |
- const char* host; |
- AddressFamily family; |
- const char* ip; |
- } entries[] = { |
+ const ExpectedHostsEntry kEntries[] = { |
{ "localhost", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
{ "localhost.localdomain", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
{ "company", ADDRESS_FAMILY_IPV4, "1.0.0.1" }, |
@@ -50,18 +65,60 @@ TEST(DnsHostsTest, ParseHosts) { |
{ "cache5", ADDRESS_FAMILY_IPV4, "127.0.0.2" }, |
}; |
- DnsHosts expected; |
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(entries); ++i) { |
- DnsHostsKey key(entries[i].host, entries[i].family); |
- IPAddressNumber& ip = expected[key]; |
- ASSERT_TRUE(ip.empty()); |
- ASSERT_TRUE(ParseIPLiteralToNumber(entries[i].ip, &ip)); |
- ASSERT_EQ(ip.size(), (entries[i].family == ADDRESS_FAMILY_IPV4) ? 4u : 16u); |
- } |
+ DnsHosts expected_hosts, actual_hosts; |
+ PopulateExpectedHosts(kEntries, ARRAYSIZE_UNSAFE(kEntries), &expected_hosts); |
+ ParseHosts(kContents, &actual_hosts); |
+ ASSERT_EQ(expected_hosts, actual_hosts); |
+} |
- DnsHosts hosts; |
- ParseHosts(contents, &hosts); |
- ASSERT_EQ(expected, hosts); |
+TEST(DnsHostsTest, ParseHosts_CommaIsToken) { |
+ const std::string kContents = "127.0.0.1 comma1,comma2"; |
+ |
+ const ExpectedHostsEntry kEntries[] = { |
+ { "comma1,comma2", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
+ }; |
+ |
+ DnsHosts expected_hosts, actual_hosts; |
+ PopulateExpectedHosts(kEntries, ARRAYSIZE_UNSAFE(kEntries), &expected_hosts); |
+ ParseHostsWithCommaModeForTesting( |
+ kContents, &actual_hosts, PARSE_HOSTS_COMMA_IS_TOKEN); |
+ ASSERT_EQ(expected_hosts, actual_hosts); |
+} |
+ |
+TEST(DnsHostsTest, ParseHosts_CommaIsWhitespace) { |
+ std::string kContents = "127.0.0.1 comma1,comma2"; |
+ |
+ const ExpectedHostsEntry kEntries[] = { |
+ { "comma1", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
+ { "comma2", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
+ }; |
+ |
+ DnsHosts expected_hosts, actual_hosts; |
+ PopulateExpectedHosts(kEntries, ARRAYSIZE_UNSAFE(kEntries), &expected_hosts); |
+ ParseHostsWithCommaModeForTesting( |
+ kContents, &actual_hosts, PARSE_HOSTS_COMMA_IS_WHITESPACE); |
+ ASSERT_EQ(expected_hosts, actual_hosts); |
+} |
+ |
+// Test that the right comma mode is used on each platform. |
+TEST(DnsHostsTest, ParseHosts_CommaModeByPlatform) { |
+ std::string kContents = "127.0.0.1 comma1,comma2"; |
+ |
+#if defined(OS_MACOSX) |
+ const ExpectedHostsEntry kEntries[] = { |
+ { "comma1", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
+ { "comma2", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
+ }; |
+#else |
+ const ExpectedHostsEntry kEntries[] = { |
+ { "comma1,comma2", ADDRESS_FAMILY_IPV4, "127.0.0.1" }, |
+ }; |
+#endif |
+ |
+ DnsHosts expected_hosts, actual_hosts; |
+ PopulateExpectedHosts(kEntries, ARRAYSIZE_UNSAFE(kEntries), &expected_hosts); |
+ ParseHosts(kContents, &actual_hosts); |
+ ASSERT_EQ(expected_hosts, actual_hosts); |
} |
TEST(DnsHostsTest, HostsParser_Empty) { |