// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/tools/tld_cleanup/tld_cleanup_util.h" #include "base/files/file_path.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace net::tld_cleanup { using testing::ElementsAre; using testing::Pair; std::string SetupData(const std::string& icann_domains, const std::string& private_domains) { return "// ===BEGIN ICANN DOMAINS===\n" + icann_domains + "// ===END ICANN DOMAINS===\n" + "// ===BEGIN PRIVATE DOMAINS===\n" + private_domains + "// ===END PRIVATE DOMAINS===\n"; } TEST(TldCleanupUtilTest, TwoRealTldsSuccessfullyRead) { std::string icann_domains = "foo\n" "bar\n"; std::string private_domains = ""; RuleMap rules; ASSERT_EQ( NormalizeDataToRuleMap(SetupData(icann_domains, private_domains), rules), NormalizeResult::kSuccess); EXPECT_THAT( rules, ElementsAre(Pair("bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("foo", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}))); } TEST(TldCleanupUtilTest, TwoRealTldsSuccessfullyRead_WindowsEndings) { std::string icann_domains = "foo\r\n" "bar\r\n"; std::string private_domains = ""; RuleMap rules; ASSERT_EQ( NormalizeDataToRuleMap(SetupData(icann_domains, private_domains), rules), NormalizeResult::kSuccess); EXPECT_THAT( rules, ElementsAre(Pair("bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("foo", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}))); } TEST(TldCleanupUtilTest, RealTldAutomaticallyAddedForSubdomain) { std::string icann_domains = "foo.bar\n"; std::string private_domains = ""; RuleMap rules; ASSERT_EQ( NormalizeDataToRuleMap(SetupData(icann_domains, private_domains), rules), NormalizeResult::kSuccess); EXPECT_THAT( rules, ElementsAre(Pair("bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("foo.bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}))); } TEST(TldCleanupUtilTest, PrivateTldMarkedAsPrivate) { std::string icann_domains = "foo\n" "bar\n"; std::string private_domains = "baz\n"; RuleMap rules; ASSERT_EQ( NormalizeDataToRuleMap(SetupData(icann_domains, private_domains), rules), NormalizeResult::kSuccess); EXPECT_THAT( rules, ElementsAre(Pair("bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("baz", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/true}), Pair("foo", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}))); } TEST(TldCleanupUtilTest, PrivateDomainMarkedAsPrivate) { std::string icann_domains = "bar\n"; std::string private_domains = "foo.bar\n"; RuleMap rules; ASSERT_EQ( NormalizeDataToRuleMap(SetupData(icann_domains, private_domains), rules), NormalizeResult::kSuccess); EXPECT_THAT( rules, ElementsAre(Pair("bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("foo.bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/true}))); } TEST(TldCleanupUtilTest, ExtraTldRuleIsNotMarkedPrivate) { std::string icann_domains = "foo.bar\n" "baz.bar\n"; std::string private_domains = "qux.bar\n"; RuleMap rules; ASSERT_EQ( NormalizeDataToRuleMap(SetupData(icann_domains, private_domains), rules), NormalizeResult::kSuccess); EXPECT_THAT( rules, ElementsAre(Pair("bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("baz.bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("foo.bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}), Pair("qux.bar", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/true}))); } TEST(TldCleanupUtilTest, WildcardAndExceptionParsedCorrectly) { std::string icann_domains = "*.bar\n" "!foo.bar\n"; std::string private_domains = "!baz.bar\n"; RuleMap rules; ASSERT_EQ( NormalizeDataToRuleMap(SetupData(icann_domains, private_domains), rules), NormalizeResult::kSuccess); EXPECT_THAT( rules, ElementsAre(Pair("bar", Rule{/*exception=*/false, /*wildcard=*/true, /*is_private=*/false}), Pair("baz.bar", Rule{/*exception=*/true, /*wildcard=*/false, /*is_private=*/true}), Pair("foo.bar", Rule{/*exception=*/true, /*wildcard=*/false, /*is_private=*/false}))); } TEST(TldCleanupUtilTest, RuleSerialization) { EXPECT_THAT( RulesToGperf({ {"domain0", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/false}}, {"domain1", Rule{/*exception=*/false, /*wildcard=*/false, /*is_private=*/true}}, {"domain2", Rule{/*exception=*/false, /*wildcard=*/true, /*is_private=*/false}}, {"domain3", Rule{/*exception=*/false, /*wildcard=*/true, /*is_private=*/true}}, {"domain4", Rule{/*exception=*/true, /*wildcard=*/false, /*is_private=*/false}}, {"domain5", Rule{/*exception=*/true, /*wildcard=*/false, /*is_private=*/true}}, {"domain6", Rule{/*exception=*/true, /*wildcard=*/true, /*is_private=*/false}}, {"domain7", Rule{/*exception=*/true, /*wildcard=*/true, /*is_private=*/true}}, }), testing::EndsWith( R"(%% domain0, 0 domain1, 4 domain2, 2 domain3, 6 domain4, 1 domain5, 5 domain6, 1 domain7, 5 %% )")); } } // namespace net::tld_cleanup