blob: 8c49bd1ceba0f45e2b5f1c75398eba5540bad8ec [file] [log] [blame]
// Copyright 2018 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 "components/optimization_guide/host_filter.h"
#include "base/macros.h"
#include "components/optimization_guide/bloom_filter.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace optimization_guide {
namespace {
std::unique_ptr<BloomFilter> CreateBloomFilter() {
std::unique_ptr<BloomFilter> filter = std::make_unique<BloomFilter>(
7 /* num_hash_functions */, 8191 /* num_bits */);
return filter;
}
TEST(HostFilterTest, TestContainsHostSuffix) {
std::unique_ptr<BloomFilter> bloom_filter(CreateBloomFilter());
bloom_filter->Add("fooco.co.uk");
HostFilter host_filter(std::move(bloom_filter));
EXPECT_TRUE(
host_filter.ContainsHostSuffix(GURL("http://shopping.fooco.co.uk")));
EXPECT_TRUE(host_filter.ContainsHostSuffix(
GURL("https://shopping.fooco.co.uk/somepath")));
EXPECT_TRUE(host_filter.ContainsHostSuffix(GURL("https://fooco.co.uk")));
EXPECT_FALSE(host_filter.ContainsHostSuffix(GURL("https://nonfooco.co.uk")));
}
TEST(HostFilterTest, TestContainsHostSuffixMaxSuffix) {
std::unique_ptr<BloomFilter> bloom_filter(CreateBloomFilter());
bloom_filter->Add("one.two.three.four.co.uk");
bloom_filter->Add("one.two.three.four.five.co.uk");
HostFilter host_filter(std::move(bloom_filter));
EXPECT_TRUE(host_filter.ContainsHostSuffix(
GURL("http://host.one.two.three.four.co.uk")));
EXPECT_FALSE(host_filter.ContainsHostSuffix(
GURL("http://host.one.two.three.four.five.co.uk")));
// Note: full host will match even if more than 5 elements.
EXPECT_TRUE(host_filter.ContainsHostSuffix(
GURL("http://one.two.three.four.five.co.uk")));
}
TEST(HostFilterTest, TestContainsHostSuffixMinSuffix) {
std::unique_ptr<BloomFilter> bloom_filter(CreateBloomFilter());
bloom_filter->Add("abc.tv");
bloom_filter->Add("xy.tv");
HostFilter host_filter(std::move(bloom_filter));
EXPECT_TRUE(host_filter.ContainsHostSuffix(GURL("https://abc.tv")));
EXPECT_TRUE(host_filter.ContainsHostSuffix(GURL("https://host.abc.tv")));
EXPECT_FALSE(host_filter.ContainsHostSuffix(GURL("https://host.xy.tv")));
// Note: full host will match even if less than min size.
EXPECT_TRUE(host_filter.ContainsHostSuffix(GURL("https://xy.tv")));
}
} // namespace
} // namespace optimization_guide