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

Unified Diff: net/reporting/reporting_cache_unittest.cc

Issue 2851603002: Reporting: Cap number of clients in cache. (Closed)
Patch Set: Make requested change. Created 3 years, 7 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_cache.cc ('k') | net/reporting/reporting_delivery_agent.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/reporting/reporting_cache_unittest.cc
diff --git a/net/reporting/reporting_cache_unittest.cc b/net/reporting/reporting_cache_unittest.cc
index 19229db22e766c6f1edaceed8aca2c9c8238b4d9..eb2e158357edba79c6b837b4384eb7aabf17c800 100644
--- a/net/reporting/reporting_cache_unittest.cc
+++ b/net/reporting/reporting_cache_unittest.cc
@@ -7,6 +7,7 @@
#include <string>
#include "base/memory/ptr_util.h"
+#include "base/strings/stringprintf.h"
#include "base/test/simple_test_tick_clock.h"
#include "base/time/time.h"
#include "base/values.h"
@@ -36,6 +37,11 @@ class TestReportingObserver : public ReportingObserver {
class ReportingCacheTest : public ReportingTestBase {
protected:
ReportingCacheTest() : ReportingTestBase() {
+ ReportingPolicy policy;
+ policy.max_report_count = 5;
+ policy.max_client_count = 5;
+ UsePolicy(policy);
+
context()->AddObserver(&observer_);
}
@@ -49,6 +55,12 @@ class ReportingCacheTest : public ReportingTestBase {
return reports.size();
}
+ size_t client_count() {
+ std::vector<const ReportingClient*> clients;
+ cache()->GetClients(&clients);
+ return clients.size();
+ }
+
const GURL kUrl1_ = GURL("https://origin1/path");
const url::Origin kOrigin1_ = url::Origin(GURL("https://origin1/"));
const url::Origin kOrigin2_ = url::Origin(GURL("https://origin2/"));
@@ -407,20 +419,22 @@ TEST_F(ReportingCacheTest, IncludeSubdomainsPreferMoreSpecificSuperdomain) {
EXPECT_EQ(kSuperOrigin, clients[0]->origin);
}
-TEST_F(ReportingCacheTest, EvictOldest) {
- ASSERT_LT(0u, policy().max_report_count);
- ASSERT_GT(std::numeric_limits<size_t>::max(), policy().max_report_count);
+TEST_F(ReportingCacheTest, EvictOldestReport) {
+ size_t max_report_count = policy().max_report_count;
+
+ ASSERT_LT(0u, max_report_count);
+ ASSERT_GT(std::numeric_limits<size_t>::max(), max_report_count);
base::TimeTicks earliest_queued = tick_clock()->NowTicks();
// Enqueue the maximum number of reports, spaced apart in time.
- for (size_t i = 0; i < policy().max_report_count; ++i) {
+ for (size_t i = 0; i < max_report_count; ++i) {
cache()->AddReport(kUrl1_, kGroup1_, kType_,
base::MakeUnique<base::DictionaryValue>(),
tick_clock()->NowTicks(), 0);
tick_clock()->Advance(base::TimeDelta::FromMinutes(1));
}
- EXPECT_EQ(policy().max_report_count, report_count());
+ EXPECT_EQ(max_report_count, report_count());
// Add one more report to force the cache to evict one.
cache()->AddReport(kUrl1_, kGroup1_, kType_,
@@ -430,23 +444,25 @@ TEST_F(ReportingCacheTest, EvictOldest) {
// sure the report evicted was the earliest-queued one.
std::vector<const ReportingReport*> reports;
cache()->GetReports(&reports);
- EXPECT_EQ(policy().max_report_count, reports.size());
+ EXPECT_EQ(max_report_count, reports.size());
for (const ReportingReport* report : reports)
EXPECT_NE(earliest_queued, report->queued);
}
TEST_F(ReportingCacheTest, DontEvictPendingReports) {
- ASSERT_LT(0u, policy().max_report_count);
- ASSERT_GT(std::numeric_limits<size_t>::max(), policy().max_report_count);
+ size_t max_report_count = policy().max_report_count;
+
+ ASSERT_LT(0u, max_report_count);
+ ASSERT_GT(std::numeric_limits<size_t>::max(), max_report_count);
// Enqueue the maximum number of reports, spaced apart in time.
- for (size_t i = 0; i < policy().max_report_count; ++i) {
+ for (size_t i = 0; i < max_report_count; ++i) {
cache()->AddReport(kUrl1_, kGroup1_, kType_,
base::MakeUnique<base::DictionaryValue>(),
tick_clock()->NowTicks(), 0);
tick_clock()->Advance(base::TimeDelta::FromMinutes(1));
}
- EXPECT_EQ(policy().max_report_count, report_count());
+ EXPECT_EQ(max_report_count, report_count());
// Mark all of the queued reports pending.
std::vector<const ReportingReport*> queued_reports;
@@ -462,10 +478,65 @@ TEST_F(ReportingCacheTest, DontEvictPendingReports) {
// the new, non-pending one.
std::vector<const ReportingReport*> reports;
cache()->GetReports(&reports);
- EXPECT_EQ(policy().max_report_count, reports.size());
+ EXPECT_EQ(max_report_count, reports.size());
for (const ReportingReport* report : reports)
EXPECT_TRUE(cache()->IsReportPendingForTesting(report));
}
+GURL MakeEndpoint(size_t index) {
+ return GURL(base::StringPrintf("https://endpoint/%zd", index));
+}
+
+TEST_F(ReportingCacheTest, EvictLRUClient) {
+ size_t max_client_count = policy().max_client_count;
+
+ ASSERT_LT(0u, max_client_count);
+ ASSERT_GT(std::numeric_limits<size_t>::max(), max_client_count);
+
+ for (size_t i = 0; i < max_client_count; ++i) {
+ cache()->SetClient(kOrigin1_, MakeEndpoint(i),
+ ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+ tomorrow());
+ }
+ EXPECT_EQ(max_client_count, client_count());
+
+ // Use clients in reverse order, so client (max_client_count - 1) is LRU.
+ for (size_t i = 1; i <= max_client_count; ++i) {
+ cache()->MarkClientUsed(kOrigin1_, MakeEndpoint(max_client_count - i));
+ tick_clock()->Advance(base::TimeDelta::FromSeconds(1));
+ }
+
+ // Add one more client, forcing the cache to evict the LRU.
+ cache()->SetClient(kOrigin1_, MakeEndpoint(max_client_count),
+ ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+ tomorrow());
+ EXPECT_EQ(max_client_count, client_count());
+ EXPECT_FALSE(FindClientInCache(cache(), kOrigin1_,
+ MakeEndpoint(max_client_count - 1)));
+}
+
+TEST_F(ReportingCacheTest, EvictExpiredClient) {
+ size_t max_client_count = policy().max_client_count;
+
+ ASSERT_LT(0u, max_client_count);
+ ASSERT_GT(std::numeric_limits<size_t>::max(), max_client_count);
+
+ for (size_t i = 0; i < max_client_count; ++i) {
+ base::TimeTicks expires =
+ (i == max_client_count - 1) ? yesterday() : tomorrow();
+ cache()->SetClient(kOrigin1_, MakeEndpoint(i),
+ ReportingClient::Subdomains::EXCLUDE, kGroup1_, expires);
+ }
+ EXPECT_EQ(max_client_count, client_count());
+
+ // Add one more client, forcing the cache to evict the expired one.
+ cache()->SetClient(kOrigin1_, MakeEndpoint(max_client_count),
+ ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+ tomorrow());
+ EXPECT_EQ(max_client_count, client_count());
+ EXPECT_FALSE(FindClientInCache(cache(), kOrigin1_,
+ MakeEndpoint(max_client_count - 1)));
+}
+
} // namespace
} // namespace net
« no previous file with comments | « net/reporting/reporting_cache.cc ('k') | net/reporting/reporting_delivery_agent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698