Index: net/dns/dns_config_service_win_unittest.cc |
diff --git a/net/dns/dns_config_service_win_unittest.cc b/net/dns/dns_config_service_win_unittest.cc |
index 7ac01d1e536fd1e431c85e74f77dcc9a96ee60fa..4219d82b425f303f2b04ff1e48435d94bc969eda 100644 |
--- a/net/dns/dns_config_service_win_unittest.cc |
+++ b/net/dns/dns_config_service_win_unittest.cc |
@@ -19,17 +19,17 @@ TEST(DnsConfigServiceWinTest, ParseSearchList) { |
const wchar_t* input; |
const char* output[4]; // NULL-terminated, empty if expected false |
} cases[] = { |
- { L"chromium.org", { "chromium.org", NULL } }, |
- { L"chromium.org,org", { "chromium.org", "org", NULL } }, |
- // Empty suffixes terminate the list |
- { L"crbug.com,com,,org", { "crbug.com", "com", NULL } }, |
- // IDN are converted to punycode |
- { L"\u017c\xf3\u0142ta.pi\u0119\u015b\u0107.pl,pl", |
- { "xn--ta-4ja03asj.xn--pi-wla5e0q.pl", "pl", NULL } }, |
- // Empty search list is invalid |
- { L"", { NULL } }, |
- { L",,", { NULL } }, |
- }; |
+ {L"chromium.org", {"chromium.org", NULL}}, |
+ {L"chromium.org,org", {"chromium.org", "org", NULL}}, |
+ // Empty suffixes terminate the list |
+ {L"crbug.com,com,,org", {"crbug.com", "com", NULL}}, |
+ // IDN are converted to punycode |
+ {L"\u017c\xf3\u0142ta.pi\u0119\u015b\u0107.pl,pl", |
+ {"xn--ta-4ja03asj.xn--pi-wla5e0q.pl", "pl", NULL}}, |
+ // Empty search list is invalid |
+ {L"", {NULL}}, |
+ {L",,", {NULL}}, |
+ }; |
std::vector<std::string> actual_output, expected_output; |
for (unsigned i = 0; i < arraysize(cases); ++i) { |
@@ -122,60 +122,73 @@ TEST(DnsConfigServiceWinTest, ConvertAdapterAddresses) { |
std::string expected_suffix; |
int expected_ports[4]; |
} cases[] = { |
- { // Ignore loopback and inactive adapters. |
- { |
- { IF_TYPE_SOFTWARE_LOOPBACK, IfOperStatusUp, L"funnyloop", |
- { "2.0.0.2" } }, |
- { IF_TYPE_FASTETHER, IfOperStatusDormant, L"example.com", |
- { "1.0.0.1" } }, |
- { IF_TYPE_USB, IfOperStatusUp, L"chromium.org", |
- { "10.0.0.10", "2001:FFFF::1111" } }, |
- { 0 }, |
- }, |
- { "10.0.0.10", "2001:FFFF::1111" }, |
- "chromium.org", |
- }, |
- { // Respect configured ports. |
- { |
- { IF_TYPE_USB, IfOperStatusUp, L"chromium.org", |
- { "10.0.0.10", "2001:FFFF::1111" }, { 1024, 24 } }, |
- { 0 }, |
- }, |
- { "10.0.0.10", "2001:FFFF::1111" }, |
- "chromium.org", |
- { 1024, 24 }, |
- }, |
- { // Use the preferred adapter (first in binding order) and filter |
- // stateless DNS discovery addresses. |
- { |
- { IF_TYPE_SOFTWARE_LOOPBACK, IfOperStatusUp, L"funnyloop", |
- { "2.0.0.2" } }, |
- { IF_TYPE_FASTETHER, IfOperStatusUp, L"example.com", |
- { "1.0.0.1", "fec0:0:0:ffff::2", "8.8.8.8" } }, |
- { IF_TYPE_USB, IfOperStatusUp, L"chromium.org", |
- { "10.0.0.10", "2001:FFFF::1111" } }, |
- { 0 }, |
- }, |
- { "1.0.0.1", "8.8.8.8" }, |
- "example.com", |
- }, |
- { // No usable adapters. |
- { |
- { IF_TYPE_SOFTWARE_LOOPBACK, IfOperStatusUp, L"localhost", |
- { "2.0.0.2" } }, |
- { IF_TYPE_FASTETHER, IfOperStatusDormant, L"example.com", |
- { "1.0.0.1" } }, |
- { IF_TYPE_USB, IfOperStatusUp, L"chromium.org" }, |
- { 0 }, |
- }, |
- }, |
- }; |
+ {// Ignore loopback and inactive adapters. |
+ { |
+ {IF_TYPE_SOFTWARE_LOOPBACK, |
+ IfOperStatusUp, |
+ L"funnyloop", |
+ {"2.0.0.2"}}, |
+ {IF_TYPE_FASTETHER, IfOperStatusDormant, L"example.com", {"1.0.0.1"}}, |
+ {IF_TYPE_USB, |
+ IfOperStatusUp, |
+ L"chromium.org", |
+ {"10.0.0.10", "2001:FFFF::1111"}}, |
+ {0}, |
+ }, |
+ {"10.0.0.10", "2001:FFFF::1111"}, |
+ "chromium.org", |
+ }, |
+ {// Respect configured ports. |
+ { |
+ {IF_TYPE_USB, |
+ IfOperStatusUp, |
+ L"chromium.org", |
+ {"10.0.0.10", "2001:FFFF::1111"}, |
+ {1024, 24}}, |
+ {0}, |
+ }, |
+ {"10.0.0.10", "2001:FFFF::1111"}, |
+ "chromium.org", |
+ {1024, 24}, |
+ }, |
+ {// Use the preferred adapter (first in binding order) and filter |
+ // stateless DNS discovery addresses. |
+ { |
+ {IF_TYPE_SOFTWARE_LOOPBACK, |
+ IfOperStatusUp, |
+ L"funnyloop", |
+ {"2.0.0.2"}}, |
+ {IF_TYPE_FASTETHER, |
+ IfOperStatusUp, |
+ L"example.com", |
+ {"1.0.0.1", "fec0:0:0:ffff::2", "8.8.8.8"}}, |
+ {IF_TYPE_USB, |
+ IfOperStatusUp, |
+ L"chromium.org", |
+ {"10.0.0.10", "2001:FFFF::1111"}}, |
+ {0}, |
+ }, |
+ {"1.0.0.1", "8.8.8.8"}, |
+ "example.com", |
+ }, |
+ {// No usable adapters. |
+ { |
+ {IF_TYPE_SOFTWARE_LOOPBACK, |
+ IfOperStatusUp, |
+ L"localhost", |
+ {"2.0.0.2"}}, |
+ {IF_TYPE_FASTETHER, IfOperStatusDormant, L"example.com", {"1.0.0.1"}}, |
+ {IF_TYPE_USB, IfOperStatusUp, L"chromium.org"}, |
+ {0}, |
+ }, |
+ }, |
+ }; |
for (size_t i = 0; i < arraysize(cases); ++i) { |
const TestCase& t = cases[i]; |
internal::DnsSystemSettings settings = { |
- CreateAdapterAddresses(t.input_adapters), |
- // Default settings for the rest. |
+ CreateAdapterAddresses(t.input_adapters), |
+ // Default settings for the rest. |
}; |
std::vector<IPEndPoint> expected_nameservers; |
for (size_t j = 0; !t.expected_nameservers[j].empty(); ++j) { |
@@ -192,7 +205,7 @@ TEST(DnsConfigServiceWinTest, ConvertAdapterAddresses) { |
internal::ConvertSettingsToDnsConfig(settings, &config); |
internal::ConfigParseWinResult expected_result = |
expected_nameservers.empty() ? internal::CONFIG_PARSE_WIN_NO_NAMESERVERS |
- : internal::CONFIG_PARSE_WIN_OK; |
+ : internal::CONFIG_PARSE_WIN_OK; |
EXPECT_EQ(expected_result, result); |
EXPECT_EQ(expected_nameservers, config.nameservers); |
if (result == internal::CONFIG_PARSE_WIN_OK) { |
@@ -204,178 +217,177 @@ TEST(DnsConfigServiceWinTest, ConvertAdapterAddresses) { |
TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { |
AdapterInfo infos[2] = { |
- { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } }, |
- { 0 }, |
+ {IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", {"1.0.0.1"}}, {0}, |
}; |
const struct TestCase { |
internal::DnsSystemSettings input_settings; |
std::string expected_search[5]; |
} cases[] = { |
- { // Policy SearchList override. |
- { |
- CreateAdapterAddresses(infos), |
- { true, L"policy.searchlist.a,policy.searchlist.b" }, |
- { true, L"tcpip.searchlist.a,tcpip.searchlist.b" }, |
- { true, L"tcpip.domain" }, |
- { true, L"primary.dns.suffix" }, |
- }, |
- { "policy.searchlist.a", "policy.searchlist.b" }, |
- }, |
- { // User-specified SearchList override. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { true, L"tcpip.searchlist.a,tcpip.searchlist.b" }, |
- { true, L"tcpip.domain" }, |
- { true, L"primary.dns.suffix" }, |
- }, |
- { "tcpip.searchlist.a", "tcpip.searchlist.b" }, |
- }, |
- { // Void SearchList. Using tcpip.domain |
- { |
- CreateAdapterAddresses(infos), |
- { true, L",bad.searchlist,parsed.as.empty" }, |
- { true, L"tcpip.searchlist,good.but.overridden" }, |
- { true, L"tcpip.domain" }, |
- { false }, |
- }, |
- { "tcpip.domain", "connection.suffix" }, |
- }, |
- { // Void SearchList. Using primary.dns.suffix |
- { |
- CreateAdapterAddresses(infos), |
- { true, L",bad.searchlist,parsed.as.empty" }, |
- { true, L"tcpip.searchlist,good.but.overridden" }, |
- { true, L"tcpip.domain" }, |
- { true, L"primary.dns.suffix" }, |
- }, |
- { "primary.dns.suffix", "connection.suffix" }, |
- }, |
- { // Void SearchList. Using tcpip.domain when primary.dns.suffix is empty |
- { |
- CreateAdapterAddresses(infos), |
- { true, L",bad.searchlist,parsed.as.empty" }, |
- { true, L"tcpip.searchlist,good.but.overridden" }, |
- { true, L"tcpip.domain" }, |
- { true, L"" }, |
- }, |
- { "tcpip.domain", "connection.suffix" }, |
- }, |
- { // Void SearchList. Using tcpip.domain when primary.dns.suffix is NULL |
- { |
- CreateAdapterAddresses(infos), |
- { true, L",bad.searchlist,parsed.as.empty" }, |
- { true, L"tcpip.searchlist,good.but.overridden" }, |
- { true, L"tcpip.domain" }, |
- { true }, |
- }, |
- { "tcpip.domain", "connection.suffix" }, |
- }, |
- { // No primary suffix. Devolution does not matter. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true }, |
- { true }, |
- { { true, 1 }, { true, 2 } }, |
- }, |
- { "connection.suffix" }, |
- }, |
- { // Devolution enabled by policy, level by dnscache. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true, L"a.b.c.d.e" }, |
- { false }, |
- { { true, 1 }, { false } }, // policy_devolution: enabled, level |
- { { true, 0 }, { true, 3 } }, // dnscache_devolution |
- { { true, 0 }, { true, 1 } }, // tcpip_devolution |
- }, |
- { "a.b.c.d.e", "connection.suffix", "b.c.d.e", "c.d.e" }, |
- }, |
- { // Devolution enabled by dnscache, level by policy. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true, L"a.b.c.d.e" }, |
- { true, L"f.g.i.l.j" }, |
- { { false }, { true, 4 } }, |
- { { true, 1 }, { false } }, |
- { { true, 0 }, { true, 3 } }, |
- }, |
- { "f.g.i.l.j", "connection.suffix", "g.i.l.j" }, |
- }, |
- { // Devolution enabled by default. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true, L"a.b.c.d.e" }, |
- { false }, |
- { { false }, { false } }, |
- { { false }, { true, 3 } }, |
- { { false }, { true, 1 } }, |
- }, |
- { "a.b.c.d.e", "connection.suffix", "b.c.d.e", "c.d.e" }, |
- }, |
- { // Devolution enabled at level = 2, but nothing to devolve. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true, L"a.b" }, |
- { false }, |
- { { false }, { false } }, |
- { { false }, { true, 2 } }, |
- { { false }, { true, 2 } }, |
- }, |
- { "a.b", "connection.suffix" }, |
- }, |
- { // Devolution disabled when no explicit level. |
- // Windows XP and Vista use a default level = 2, but we don't. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true, L"a.b.c.d.e" }, |
- { false }, |
- { { true, 1 }, { false } }, |
- { { true, 1 }, { false } }, |
- { { true, 1 }, { false } }, |
- }, |
- { "a.b.c.d.e", "connection.suffix" }, |
- }, |
- { // Devolution disabled by policy level. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true, L"a.b.c.d.e" }, |
- { false }, |
- { { false }, { true, 1 } }, |
- { { true, 1 }, { true, 3 } }, |
- { { true, 1 }, { true, 4 } }, |
- }, |
- { "a.b.c.d.e", "connection.suffix" }, |
- }, |
- { // Devolution disabled by user setting. |
- { |
- CreateAdapterAddresses(infos), |
- { false }, |
- { false }, |
- { true, L"a.b.c.d.e" }, |
- { false }, |
- { { false }, { true, 3 } }, |
- { { false }, { true, 3 } }, |
- { { true, 0 }, { true, 3 } }, |
- }, |
- { "a.b.c.d.e", "connection.suffix" }, |
- }, |
- }; |
+ {// Policy SearchList override. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {true, L"policy.searchlist.a,policy.searchlist.b"}, |
+ {true, L"tcpip.searchlist.a,tcpip.searchlist.b"}, |
+ {true, L"tcpip.domain"}, |
+ {true, L"primary.dns.suffix"}, |
+ }, |
+ {"policy.searchlist.a", "policy.searchlist.b"}, |
+ }, |
+ {// User-specified SearchList override. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {true, L"tcpip.searchlist.a,tcpip.searchlist.b"}, |
+ {true, L"tcpip.domain"}, |
+ {true, L"primary.dns.suffix"}, |
+ }, |
+ {"tcpip.searchlist.a", "tcpip.searchlist.b"}, |
+ }, |
+ {// Void SearchList. Using tcpip.domain |
+ { |
+ CreateAdapterAddresses(infos), |
+ {true, L",bad.searchlist,parsed.as.empty"}, |
+ {true, L"tcpip.searchlist,good.but.overridden"}, |
+ {true, L"tcpip.domain"}, |
+ {false}, |
+ }, |
+ {"tcpip.domain", "connection.suffix"}, |
+ }, |
+ {// Void SearchList. Using primary.dns.suffix |
+ { |
+ CreateAdapterAddresses(infos), |
+ {true, L",bad.searchlist,parsed.as.empty"}, |
+ {true, L"tcpip.searchlist,good.but.overridden"}, |
+ {true, L"tcpip.domain"}, |
+ {true, L"primary.dns.suffix"}, |
+ }, |
+ {"primary.dns.suffix", "connection.suffix"}, |
+ }, |
+ {// Void SearchList. Using tcpip.domain when primary.dns.suffix is empty |
+ { |
+ CreateAdapterAddresses(infos), |
+ {true, L",bad.searchlist,parsed.as.empty"}, |
+ {true, L"tcpip.searchlist,good.but.overridden"}, |
+ {true, L"tcpip.domain"}, |
+ {true, L""}, |
+ }, |
+ {"tcpip.domain", "connection.suffix"}, |
+ }, |
+ {// Void SearchList. Using tcpip.domain when primary.dns.suffix is NULL |
+ { |
+ CreateAdapterAddresses(infos), |
+ {true, L",bad.searchlist,parsed.as.empty"}, |
+ {true, L"tcpip.searchlist,good.but.overridden"}, |
+ {true, L"tcpip.domain"}, |
+ {true}, |
+ }, |
+ {"tcpip.domain", "connection.suffix"}, |
+ }, |
+ {// No primary suffix. Devolution does not matter. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true}, |
+ {true}, |
+ {{true, 1}, {true, 2}}, |
+ }, |
+ {"connection.suffix"}, |
+ }, |
+ {// Devolution enabled by policy, level by dnscache. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true, L"a.b.c.d.e"}, |
+ {false}, |
+ {{true, 1}, {false}}, // policy_devolution: enabled, level |
+ {{true, 0}, {true, 3}}, // dnscache_devolution |
+ {{true, 0}, {true, 1}}, // tcpip_devolution |
+ }, |
+ {"a.b.c.d.e", "connection.suffix", "b.c.d.e", "c.d.e"}, |
+ }, |
+ {// Devolution enabled by dnscache, level by policy. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true, L"a.b.c.d.e"}, |
+ {true, L"f.g.i.l.j"}, |
+ {{false}, {true, 4}}, |
+ {{true, 1}, {false}}, |
+ {{true, 0}, {true, 3}}, |
+ }, |
+ {"f.g.i.l.j", "connection.suffix", "g.i.l.j"}, |
+ }, |
+ {// Devolution enabled by default. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true, L"a.b.c.d.e"}, |
+ {false}, |
+ {{false}, {false}}, |
+ {{false}, {true, 3}}, |
+ {{false}, {true, 1}}, |
+ }, |
+ {"a.b.c.d.e", "connection.suffix", "b.c.d.e", "c.d.e"}, |
+ }, |
+ {// Devolution enabled at level = 2, but nothing to devolve. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true, L"a.b"}, |
+ {false}, |
+ {{false}, {false}}, |
+ {{false}, {true, 2}}, |
+ {{false}, {true, 2}}, |
+ }, |
+ {"a.b", "connection.suffix"}, |
+ }, |
+ {// Devolution disabled when no explicit level. |
+ // Windows XP and Vista use a default level = 2, but we don't. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true, L"a.b.c.d.e"}, |
+ {false}, |
+ {{true, 1}, {false}}, |
+ {{true, 1}, {false}}, |
+ {{true, 1}, {false}}, |
+ }, |
+ {"a.b.c.d.e", "connection.suffix"}, |
+ }, |
+ {// Devolution disabled by policy level. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true, L"a.b.c.d.e"}, |
+ {false}, |
+ {{false}, {true, 1}}, |
+ {{true, 1}, {true, 3}}, |
+ {{true, 1}, {true, 4}}, |
+ }, |
+ {"a.b.c.d.e", "connection.suffix"}, |
+ }, |
+ {// Devolution disabled by user setting. |
+ { |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {true, L"a.b.c.d.e"}, |
+ {false}, |
+ {{false}, {true, 3}}, |
+ {{false}, {true, 3}}, |
+ {{true, 0}, {true, 3}}, |
+ }, |
+ {"a.b.c.d.e", "connection.suffix"}, |
+ }, |
+ }; |
for (size_t i = 0; i < arraysize(cases); ++i) { |
const TestCase& t = cases[i]; |
@@ -392,8 +404,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { |
TEST(DnsConfigServiceWinTest, AppendToMultiLabelName) { |
AdapterInfo infos[2] = { |
- { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } }, |
- { 0 }, |
+ {IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", {"1.0.0.1"}}, {0}, |
}; |
// The default setting was true pre-Vista. |
@@ -403,20 +414,21 @@ TEST(DnsConfigServiceWinTest, AppendToMultiLabelName) { |
internal::DnsSystemSettings::RegDword input; |
bool expected_output; |
} cases[] = { |
- { { true, 0 }, false }, |
- { { true, 1 }, true }, |
- { { false, 0 }, default_value }, |
- }; |
+ {{true, 0}, false}, {{true, 1}, true}, {{false, 0}, default_value}, |
+ }; |
for (size_t i = 0; i < arraysize(cases); ++i) { |
const TestCase& t = cases[i]; |
internal::DnsSystemSettings settings = { |
- CreateAdapterAddresses(infos), |
- { false }, { false }, { false }, { false }, |
- { { false }, { false } }, |
- { { false }, { false } }, |
- { { false }, { false } }, |
- t.input, |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {false}, |
+ {false}, |
+ {{false}, {false}}, |
+ {{false}, {false}}, |
+ {{false}, {false}}, |
+ t.input, |
}; |
DnsConfig config; |
EXPECT_EQ(internal::CONFIG_PARSE_WIN_OK, |
@@ -428,8 +440,7 @@ TEST(DnsConfigServiceWinTest, AppendToMultiLabelName) { |
// Setting have_name_resolution_policy_table should set unhandled_options. |
TEST(DnsConfigServiceWinTest, HaveNRPT) { |
AdapterInfo infos[2] = { |
- { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } }, |
- { 0 }, |
+ {IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", {"1.0.0.1"}}, {0}, |
}; |
const struct TestCase { |
@@ -437,20 +448,23 @@ TEST(DnsConfigServiceWinTest, HaveNRPT) { |
bool unhandled_options; |
internal::ConfigParseWinResult result; |
} cases[] = { |
- { false, false, internal::CONFIG_PARSE_WIN_OK }, |
- { true, true, internal::CONFIG_PARSE_WIN_UNHANDLED_OPTIONS }, |
- }; |
+ {false, false, internal::CONFIG_PARSE_WIN_OK}, |
+ {true, true, internal::CONFIG_PARSE_WIN_UNHANDLED_OPTIONS}, |
+ }; |
for (size_t i = 0; i < arraysize(cases); ++i) { |
const TestCase& t = cases[i]; |
internal::DnsSystemSettings settings = { |
- CreateAdapterAddresses(infos), |
- { false }, { false }, { false }, { false }, |
- { { false }, { false } }, |
- { { false }, { false } }, |
- { { false }, { false } }, |
- { false }, |
- t.have_nrpt, |
+ CreateAdapterAddresses(infos), |
+ {false}, |
+ {false}, |
+ {false}, |
+ {false}, |
+ {{false}, {false}}, |
+ {{false}, {false}}, |
+ {{false}, {false}}, |
+ {false}, |
+ t.have_nrpt, |
}; |
DnsConfig config; |
EXPECT_EQ(t.result, |
@@ -460,8 +474,6 @@ TEST(DnsConfigServiceWinTest, HaveNRPT) { |
} |
} |
- |
} // namespace |
} // namespace net |
- |