Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Unified Diff: net/reporting/reporting_delivery_agent_unittest.cc

Issue 2751103002: Reporting: Wrap existing classes in context. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/reporting/reporting_delivery_agent.cc ('k') | net/reporting/reporting_endpoint_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/reporting/reporting_delivery_agent_unittest.cc
diff --git a/net/reporting/reporting_delivery_agent_unittest.cc b/net/reporting/reporting_delivery_agent_unittest.cc
index b2d8fbfd3e4c561639e631ba77093d8e77448020..d62f97c0133a8623a80d76d6e6d72ccefd85c1eb 100644
--- a/net/reporting/reporting_delivery_agent_unittest.cc
+++ b/net/reporting/reporting_delivery_agent_unittest.cc
@@ -24,88 +24,27 @@
namespace net {
namespace {
-class MockUploader : public ReportingUploader {
- public:
- class PendingUpload {
- public:
- PendingUpload(MockUploader* uploader,
- const GURL& url,
- const std::string& json,
- const Callback& callback)
- : uploader_(uploader), url_(url), json_(json), callback_(callback) {
- DCHECK(uploader_);
- }
-
- ~PendingUpload() {}
-
- void Complete(Outcome outcome) {
- callback_.Run(outcome);
- // Deletes |this|.
- uploader_->OnUploadComplete(this);
- }
-
- const GURL& url() const { return url_; }
- const std::string& json() const { return json_; }
-
- std::unique_ptr<base::Value> GetValue() const {
- return base::JSONReader::Read(json_);
- }
-
- private:
- MockUploader* uploader_;
- GURL url_;
- std::string json_;
- Callback callback_;
- };
-
- MockUploader() {}
- ~MockUploader() override {}
-
- void StartUpload(const GURL& url,
- const std::string& json,
- const Callback& callback) override {
- uploads_.push_back(
- base::MakeUnique<PendingUpload>(this, url, json, callback));
- }
-
- const std::vector<std::unique_ptr<PendingUpload>>& pending_uploads() const {
- return uploads_;
- }
-
- void OnUploadComplete(PendingUpload* upload) {
- for (auto it = uploads_.begin(); it != uploads_.end(); ++it) {
- if (it->get() == upload) {
- uploads_.erase(it);
- return;
- }
- }
- NOTREACHED();
- }
-
- private:
- std::vector<std::unique_ptr<PendingUpload>> uploads_;
-};
-
-class ReportingDeliveryAgentTest : public ::testing::Test {
+class ReportingDeliveryAgentTest : public ReportingTestBase {
protected:
- ReportingDeliveryAgentTest()
- : agent_(&clock_, &cache_, &uploader_, &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;
+ ReportingDeliveryAgentTest() {
+ ReportingPolicy policy;
+ policy.endpoint_backoff_policy.num_errors_to_ignore = 0;
+ policy.endpoint_backoff_policy.initial_delay_ms = 60000;
+ policy.endpoint_backoff_policy.multiply_factor = 2.0;
+ policy.endpoint_backoff_policy.jitter_factor = 0.0;
+ policy.endpoint_backoff_policy.maximum_backoff_ms = -1;
+ policy.endpoint_backoff_policy.entry_lifetime_ms = 0;
+ policy.endpoint_backoff_policy.always_use_initial_delay = false;
+ UsePolicy(policy);
}
base::TimeTicks tomorrow() {
- return clock_.NowTicks() + base::TimeDelta::FromDays(1);
+ return tick_clock()->NowTicks() + base::TimeDelta::FromDays(1);
}
- const std::vector<std::unique_ptr<MockUploader::PendingUpload>>&
- pending_uploads() const {
- return uploader_.pending_uploads();
+ const std::vector<std::unique_ptr<TestReportingUploader::PendingUpload>>&
+ pending_uploads() {
+ return uploader()->pending_uploads();
}
const GURL kUrl_ = GURL("https://origin/path");
@@ -113,12 +52,6 @@ class ReportingDeliveryAgentTest : public ::testing::Test {
const GURL kEndpoint_ = GURL("https://endpoint/");
const std::string kGroup_ = "group";
const std::string kType_ = "type";
-
- base::SimpleTestTickClock clock_;
- ReportingCache cache_;
- MockUploader uploader_;
- BackoffEntry::Policy backoff_policy_;
- ReportingDeliveryAgent agent_;
};
TEST_F(ReportingDeliveryAgentTest, SuccessfulUpload) {
@@ -127,14 +60,14 @@ TEST_F(ReportingDeliveryAgentTest, SuccessfulUpload) {
base::DictionaryValue body;
body.SetString("key", "value");
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.AddReport(kUrl_, kGroup_, kType_, body.CreateDeepCopy(),
- clock_.NowTicks(), 0);
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->AddReport(kUrl_, kGroup_, kType_, body.CreateDeepCopy(),
+ tick_clock()->NowTicks(), 0);
- clock_.Advance(base::TimeDelta::FromMilliseconds(kAgeMillis));
+ tick_clock()->Advance(base::TimeDelta::FromMilliseconds(kAgeMillis));
- agent_.SendReports();
+ delivery_agent()->SendReports();
ASSERT_EQ(1u, pending_uploads().size());
EXPECT_EQ(kEndpoint_, pending_uploads()[0]->url());
@@ -158,52 +91,52 @@ TEST_F(ReportingDeliveryAgentTest, SuccessfulUpload) {
// Successful upload should remove delivered reports.
std::vector<const ReportingReport*> reports;
- cache_.GetReports(&reports);
+ cache()->GetReports(&reports);
EXPECT_TRUE(reports.empty());
// TODO(juliatuttle): Check that BackoffEntry was informed of success.
}
TEST_F(ReportingDeliveryAgentTest, FailedUpload) {
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
+ delivery_agent()->SendReports();
ASSERT_EQ(1u, pending_uploads().size());
pending_uploads()[0]->Complete(ReportingUploader::Outcome::FAILURE);
// Failed upload should increment reports' attempts.
std::vector<const ReportingReport*> reports;
- cache_.GetReports(&reports);
+ cache()->GetReports(&reports);
ASSERT_EQ(1u, reports.size());
EXPECT_EQ(1, reports[0]->attempts);
// Since endpoint is now failing, an upload won't be started despite a pending
// report.
ASSERT_TRUE(pending_uploads().empty());
- agent_.SendReports();
+ delivery_agent()->SendReports();
EXPECT_TRUE(pending_uploads().empty());
}
TEST_F(ReportingDeliveryAgentTest, RemoveEndpointUpload) {
static const url::Origin kDifferentOrigin(GURL("https://origin2/"));
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.SetClient(kDifferentOrigin, kEndpoint_,
- ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
- ASSERT_TRUE(FindClientInCache(&cache_, kOrigin_, kEndpoint_));
- ASSERT_TRUE(FindClientInCache(&cache_, kDifferentOrigin, kEndpoint_));
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->SetClient(kDifferentOrigin, kEndpoint_,
+ ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+ ASSERT_TRUE(FindClientInCache(cache(), kOrigin_, kEndpoint_));
+ ASSERT_TRUE(FindClientInCache(cache(), kDifferentOrigin, kEndpoint_));
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
+ delivery_agent()->SendReports();
ASSERT_EQ(1u, pending_uploads().size());
pending_uploads()[0]->Complete(ReportingUploader::Outcome::REMOVE_ENDPOINT);
@@ -211,50 +144,50 @@ TEST_F(ReportingDeliveryAgentTest, RemoveEndpointUpload) {
// "Remove endpoint" upload should remove endpoint from *all* origins and
// increment reports' attempts.
std::vector<const ReportingReport*> reports;
- cache_.GetReports(&reports);
+ cache()->GetReports(&reports);
ASSERT_EQ(1u, reports.size());
EXPECT_EQ(1, reports[0]->attempts);
- EXPECT_FALSE(FindClientInCache(&cache_, kOrigin_, kEndpoint_));
- EXPECT_FALSE(FindClientInCache(&cache_, kDifferentOrigin, kEndpoint_));
+ EXPECT_FALSE(FindClientInCache(cache(), kOrigin_, kEndpoint_));
+ EXPECT_FALSE(FindClientInCache(cache(), kDifferentOrigin, kEndpoint_));
// Since endpoint is now failing, an upload won't be started despite a pending
// report.
- agent_.SendReports();
+ delivery_agent()->SendReports();
EXPECT_TRUE(pending_uploads().empty());
}
TEST_F(ReportingDeliveryAgentTest, ConcurrentRemove) {
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
+ delivery_agent()->SendReports();
ASSERT_EQ(1u, pending_uploads().size());
// Remove the report while the upload is running.
std::vector<const ReportingReport*> reports;
- cache_.GetReports(&reports);
+ cache()->GetReports(&reports);
EXPECT_EQ(1u, reports.size());
const ReportingReport* report = reports[0];
- EXPECT_FALSE(cache_.IsReportDoomedForTesting(report));
+ EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
// Report should appear removed, even though the cache has doomed it.
- cache_.RemoveReports(reports);
- cache_.GetReports(&reports);
+ cache()->RemoveReports(reports);
+ cache()->GetReports(&reports);
EXPECT_TRUE(reports.empty());
- EXPECT_TRUE(cache_.IsReportDoomedForTesting(report));
+ EXPECT_TRUE(cache()->IsReportDoomedForTesting(report));
// Completing upload shouldn't crash, and report should still be gone.
pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
- cache_.GetReports(&reports);
+ cache()->GetReports(&reports);
EXPECT_TRUE(reports.empty());
// This is slightly sketchy since |report| has been freed, but it nonetheless
// should not be in the set of doomed reports.
- EXPECT_FALSE(cache_.IsReportDoomedForTesting(report));
+ EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
}
// Test that the agent will combine reports destined for the same endpoint, even
@@ -264,19 +197,19 @@ TEST_F(ReportingDeliveryAgentTest,
static const GURL kDifferentUrl("https://origin2/path");
static const url::Origin kDifferentOrigin(kDifferentUrl);
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.SetClient(kDifferentOrigin, kEndpoint_,
- ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->SetClient(kDifferentOrigin, kEndpoint_,
+ ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
- cache_.AddReport(kDifferentUrl, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
+ cache()->AddReport(kDifferentUrl, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
+ delivery_agent()->SendReports();
ASSERT_EQ(1u, pending_uploads().size());
pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
@@ -290,29 +223,29 @@ TEST_F(ReportingDeliveryAgentTest, SerializeUploadsToEndpoint) {
static const GURL kDifferentUrl("https://origin2/path");
static const url::Origin kDifferentOrigin(kDifferentUrl);
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.SetClient(kDifferentOrigin, kEndpoint_,
- ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->SetClient(kDifferentOrigin, kEndpoint_,
+ ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
+ delivery_agent()->SendReports();
EXPECT_EQ(1u, pending_uploads().size());
- cache_.AddReport(kDifferentUrl, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->AddReport(kDifferentUrl, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
+ delivery_agent()->SendReports();
ASSERT_EQ(1u, pending_uploads().size());
pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
EXPECT_EQ(0u, pending_uploads().size());
- agent_.SendReports();
+ delivery_agent()->SendReports();
ASSERT_EQ(1u, pending_uploads().size());
pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
@@ -325,30 +258,33 @@ TEST_F(ReportingDeliveryAgentTest, SerializeUploadsToEndpoint) {
TEST_F(ReportingDeliveryAgentTest, SerializeUploadsToGroup) {
static const GURL kDifferentEndpoint("https://endpoint2/");
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.SetClient(kOrigin_, kDifferentEndpoint,
- ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->SetClient(kOrigin_, kDifferentEndpoint,
+ ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
+ delivery_agent()->SendReports();
EXPECT_EQ(1u, pending_uploads().size());
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
- agent_.SendReports();
- EXPECT_EQ(1u, pending_uploads().size());
+ delivery_agent()->SendReports();
+ ASSERT_EQ(1u, pending_uploads().size());
pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
EXPECT_EQ(0u, pending_uploads().size());
- agent_.SendReports();
- EXPECT_EQ(1u, pending_uploads().size());
+ delivery_agent()->SendReports();
+ ASSERT_EQ(1u, pending_uploads().size());
+
+ pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+ EXPECT_EQ(0u, pending_uploads().size());
}
// Tests that the agent will start parallel uploads to different groups within
@@ -357,21 +293,21 @@ TEST_F(ReportingDeliveryAgentTest, ParallelizeUploadsAcrossGroups) {
static const GURL kDifferentEndpoint("https://endpoint2/");
static const std::string kDifferentGroup("group2");
- cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
- kGroup_, tomorrow());
- cache_.SetClient(kOrigin_, kDifferentEndpoint,
- ReportingClient::Subdomains::EXCLUDE, kDifferentGroup,
- tomorrow());
-
- cache_.AddReport(kUrl_, kGroup_, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
- cache_.AddReport(kUrl_, kDifferentGroup, kType_,
- base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
- 0);
-
- agent_.SendReports();
- EXPECT_EQ(2u, pending_uploads().size());
+ cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+ kGroup_, tomorrow());
+ cache()->SetClient(kOrigin_, kDifferentEndpoint,
+ ReportingClient::Subdomains::EXCLUDE, kDifferentGroup,
+ tomorrow());
+
+ cache()->AddReport(kUrl_, kGroup_, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
+ cache()->AddReport(kUrl_, kDifferentGroup, kType_,
+ base::MakeUnique<base::DictionaryValue>(),
+ tick_clock()->NowTicks(), 0);
+
+ delivery_agent()->SendReports();
+ ASSERT_EQ(2u, pending_uploads().size());
pending_uploads()[1]->Complete(ReportingUploader::Outcome::SUCCESS);
pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
« no previous file with comments | « net/reporting/reporting_delivery_agent.cc ('k') | net/reporting/reporting_endpoint_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698