| Index: net/reporting/reporting_endpoint_manager_unittest.cc
|
| diff --git a/net/reporting/reporting_endpoint_manager_unittest.cc b/net/reporting/reporting_endpoint_manager_unittest.cc
|
| index f1d50033cf52f212b18624c118fb86c738caf176..113128dbf50f1611ae3e854ec89c458dd2e05385 100644
|
| --- a/net/reporting/reporting_endpoint_manager_unittest.cc
|
| +++ b/net/reporting/reporting_endpoint_manager_unittest.cc
|
| @@ -11,6 +11,7 @@
|
| #include "net/base/backoff_entry.h"
|
| #include "net/reporting/reporting_cache.h"
|
| #include "net/reporting/reporting_client.h"
|
| +#include "net/reporting/reporting_policy.h"
|
| #include "net/reporting/reporting_test_util.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "url/gurl.h"
|
| @@ -19,175 +20,150 @@
|
| namespace net {
|
| namespace {
|
|
|
| -class ReportingEndpointManagerTest : public ::testing::Test {
|
| +class ReportingEndpointManagerTest : public ReportingTestBase {
|
| protected:
|
| - ReportingEndpointManagerTest()
|
| - : manager_(&clock_, &cache_, &backoff_policy_) {
|
| - backoff_policy_.num_errors_to_ignore = 0;
|
| - backoff_policy_.initial_delay_ms = 60000;
|
| - backoff_policy_.multiply_factor = 2.0;
|
| - backoff_policy_.jitter_factor = 0.0;
|
| - backoff_policy_.maximum_backoff_ms = -1;
|
| - backoff_policy_.entry_lifetime_ms = 0;
|
| - backoff_policy_.always_use_initial_delay = false;
|
| - }
|
| -
|
| - base::TimeTicks yesterday() {
|
| - return clock_.NowTicks() - base::TimeDelta::FromDays(1);
|
| - }
|
| -
|
| - base::TimeTicks tomorrow() {
|
| - return clock_.NowTicks() + base::TimeDelta::FromDays(1);
|
| - }
|
| -
|
| const url::Origin kOrigin_ = url::Origin(GURL("https://origin/"));
|
| const GURL kEndpoint_ = GURL("https://endpoint/");
|
| const std::string kGroup_ = "group";
|
| -
|
| - base::SimpleTestTickClock clock_;
|
| - ReportingCache cache_;
|
| - BackoffEntry::Policy backoff_policy_;
|
| - ReportingEndpointManager manager_;
|
| };
|
|
|
| TEST_F(ReportingEndpointManagerTest, NoEndpoint) {
|
| GURL endpoint_url;
|
| - bool found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_FALSE(found_endpoint);
|
| }
|
|
|
| TEST_F(ReportingEndpointManagerTest, Endpoint) {
|
| - cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| - kGroup_, tomorrow());
|
| + cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| + kGroup_, tomorrow());
|
|
|
| GURL endpoint_url;
|
| - bool found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_TRUE(found_endpoint);
|
| EXPECT_EQ(kEndpoint_, endpoint_url);
|
| }
|
|
|
| TEST_F(ReportingEndpointManagerTest, ExpiredEndpoint) {
|
| - cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| - kGroup_, yesterday());
|
| + cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| + kGroup_, yesterday());
|
|
|
| GURL endpoint_url;
|
| - bool found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_FALSE(found_endpoint);
|
| }
|
|
|
| TEST_F(ReportingEndpointManagerTest, PendingEndpoint) {
|
| - cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| - kGroup_, tomorrow());
|
| + cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| + kGroup_, tomorrow());
|
|
|
| - manager_.SetEndpointPending(kEndpoint_);
|
| + endpoint_manager()->SetEndpointPending(kEndpoint_);
|
|
|
| GURL endpoint_url;
|
| - bool found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_FALSE(found_endpoint);
|
|
|
| - manager_.ClearEndpointPending(kEndpoint_);
|
| + endpoint_manager()->ClearEndpointPending(kEndpoint_);
|
|
|
| - found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_TRUE(found_endpoint);
|
| EXPECT_EQ(kEndpoint_, endpoint_url);
|
| }
|
|
|
| TEST_F(ReportingEndpointManagerTest, BackedOffEndpoint) {
|
| - ASSERT_EQ(2.0, backoff_policy_.multiply_factor);
|
| + ASSERT_EQ(2.0, policy().endpoint_backoff_policy.multiply_factor);
|
| +
|
| + base::TimeDelta initial_delay = base::TimeDelta::FromMilliseconds(
|
| + policy().endpoint_backoff_policy.initial_delay_ms);
|
|
|
| - cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| - kGroup_, tomorrow());
|
| + cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| + kGroup_, tomorrow());
|
|
|
| - manager_.InformOfEndpointRequest(kEndpoint_, false);
|
| + endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
|
|
|
| // After one failure, endpoint is in exponential backoff.
|
| GURL endpoint_url;
|
| - bool found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_FALSE(found_endpoint);
|
|
|
| // After initial delay, endpoint is usable again.
|
| - clock_.Advance(
|
| - base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
|
| + tick_clock()->Advance(initial_delay);
|
|
|
| - found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_TRUE(found_endpoint);
|
| EXPECT_EQ(kEndpoint_, endpoint_url);
|
|
|
| - manager_.InformOfEndpointRequest(kEndpoint_, false);
|
| + endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
|
|
|
| // After a second failure, endpoint is backed off again.
|
| - found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_FALSE(found_endpoint);
|
|
|
| - clock_.Advance(
|
| - base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
|
| + tick_clock()->Advance(initial_delay);
|
|
|
| // Next backoff is longer -- 2x the first -- so endpoint isn't usable yet.
|
| - found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_FALSE(found_endpoint);
|
|
|
| - clock_.Advance(
|
| - base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
|
| + tick_clock()->Advance(initial_delay);
|
|
|
| // After 2x the initial delay, the endpoint is usable again.
|
| - found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_TRUE(found_endpoint);
|
| EXPECT_EQ(kEndpoint_, endpoint_url);
|
|
|
| - manager_.InformOfEndpointRequest(kEndpoint_, true);
|
| - manager_.InformOfEndpointRequest(kEndpoint_, true);
|
| + endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true);
|
| + endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true);
|
|
|
| // Two more successful requests should reset the backoff to the initial delay
|
| // again.
|
| - manager_.InformOfEndpointRequest(kEndpoint_, false);
|
| + endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
|
|
|
| - found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_FALSE(found_endpoint);
|
|
|
| - clock_.Advance(
|
| - base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
|
| + tick_clock()->Advance(initial_delay);
|
|
|
| - found_endpoint =
|
| - manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
|
| + found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| + kOrigin_, kGroup_, &endpoint_url);
|
| EXPECT_TRUE(found_endpoint);
|
| }
|
|
|
| // Make sure that multiple endpoints will all be returned at some point, to
|
| // avoid accidentally or intentionally implementing any priority ordering.
|
| TEST_F(ReportingEndpointManagerTest, RandomEndpoint) {
|
| - static const GURL kEndpoint1("https://endpoint1/");
|
| - static const GURL kEndpoint2("https://endpoint2/");
|
| + static const GURL kEndpoint_1("https://endpoint1/");
|
| + static const GURL kEndpoint_2("https://endpoint2/");
|
| static const int kMaxAttempts = 20;
|
|
|
| - cache_.SetClient(kOrigin_, kEndpoint1, ReportingClient::Subdomains::EXCLUDE,
|
| - kGroup_, tomorrow());
|
| - cache_.SetClient(kOrigin_, kEndpoint2, ReportingClient::Subdomains::EXCLUDE,
|
| - kGroup_, tomorrow());
|
| + cache()->SetClient(kOrigin_, kEndpoint_1,
|
| + ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
|
| + cache()->SetClient(kOrigin_, kEndpoint_2,
|
| + ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
|
|
|
| bool endpoint1_seen = false;
|
| bool endpoint2_seen = false;
|
|
|
| for (int i = 0; i < kMaxAttempts; i++) {
|
| GURL endpoint_url;
|
| - bool found_endpoint = manager_.FindEndpointForOriginAndGroup(
|
| + bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
|
| kOrigin_, kGroup_, &endpoint_url);
|
| ASSERT_TRUE(found_endpoint);
|
| - ASSERT_TRUE(endpoint_url == kEndpoint1 || endpoint_url == kEndpoint2);
|
| + ASSERT_TRUE(endpoint_url == kEndpoint_1 || endpoint_url == kEndpoint_2);
|
|
|
| - if (endpoint_url == kEndpoint1)
|
| + if (endpoint_url == kEndpoint_1)
|
| endpoint1_seen = true;
|
| - else if (endpoint_url == kEndpoint2)
|
| + else if (endpoint_url == kEndpoint_2)
|
| endpoint2_seen = true;
|
|
|
| if (endpoint1_seen && endpoint2_seen)
|
|
|