blob: 41f0f4d6737a5759187655f14721601ee8a1c1b4 [file] [log] [blame]
// Copyright 2020 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.
#include "net/dns/dns_alias_utility.h"
#include <string>
#include <vector>
#include "net/dns/public/dns_protocol.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
namespace {
TEST(DnsAliasUtilityTest, SanitizeDnsAliases) {
const struct {
const char* dns_alias;
const char* sanitized_dns_alias;
} kTestCases[] = {{"localhost", nullptr},
{"1.2.3.4", nullptr},
{"a.com", "a.com"},
{"", nullptr},
{"test", "test"},
{"0", nullptr},
{"[::1]", nullptr},
{"::1", nullptr},
{"-www.e.com", "-www.e.com"},
{"alias.com", "alias.com"},
{"s .de", "s%20.de"},
{"www-1", "www-1"},
{"2a", "2a"},
{"a-", "a-"},
{"b..net", "b..net"},
{"a.com", nullptr},
{"b_o.org", "b_o.org"},
{"alias.com", nullptr},
{"1..3.2", "1..3.2"},
{"a,b,c", "a%2Cb%2Cc"},
{"f/g", nullptr},
{"www?", nullptr},
{"[3a2:401f::1]", nullptr},
{"0.0.1.2", nullptr},
{"a.b.com", "a.b.com"},
{"c.org", "c.org"},
{"123.tld", "123.tld"},
{"d-e.net", "d-e.net"},
{"f__g", "f__g"},
{"h", "h"}};
std::vector<std::string> aliases;
std::vector<std::string> expected_sanitized_aliases;
for (const auto& test : kTestCases) {
aliases.push_back(test.dns_alias);
if (test.sanitized_dns_alias)
expected_sanitized_aliases.push_back(test.sanitized_dns_alias);
}
std::vector<std::string> sanitized_aliases =
dns_alias_utility::SanitizeDnsAliases(aliases);
EXPECT_EQ(expected_sanitized_aliases, sanitized_aliases);
std::string long_unqualified_alias(dns_protocol::kMaxCharNameLength + 1, 'x');
std::string long_qualified_alias(dns_protocol::kMaxCharNameLength, 'x');
long_qualified_alias += ".";
std::vector<std::string> List_with_long_aliases(
{long_unqualified_alias, long_qualified_alias});
std::vector<std::string> sanitized_list_with_long_aliases =
dns_alias_utility::SanitizeDnsAliases(List_with_long_aliases);
EXPECT_THAT(sanitized_list_with_long_aliases,
testing::ElementsAre(long_qualified_alias));
std::vector<std::string> empty_aliases;
std::vector<std::string> sanitized_empty_aliases =
dns_alias_utility::SanitizeDnsAliases(empty_aliases);
EXPECT_TRUE(sanitized_empty_aliases.empty());
}
} // namespace
} // namespace net