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

Unified Diff: components/doodle/doodle_service_unittest.cc

Issue 2772313002: [Doodle] Don't refresh more than once per 15 mins (Closed)
Patch Set: override_min_refresh_interval Created 3 years, 9 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 | « components/doodle/doodle_service.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/doodle/doodle_service_unittest.cc
diff --git a/components/doodle/doodle_service_unittest.cc b/components/doodle/doodle_service_unittest.cc
index da7e25417961be3669dc6ac2a4333e8770498ed5..8f6fc7e1011d70d07632e7a9e00e68b94adf3ffc 100644
--- a/components/doodle/doodle_service_unittest.cc
+++ b/components/doodle/doodle_service_unittest.cc
@@ -75,12 +75,18 @@ class DoodleServiceTest : public testing::Test {
task_runner_->FastForwardBy(base::TimeDelta::FromHours(12345));
- RecreateService();
+ // Set the minimum refresh interval to 0 by default, so tests don't have to
+ // worry about it. The tests that care set it explicitly.
+ RecreateServiceWithZeroRefreshInterval();
}
void DestroyService() { service_ = nullptr; }
- void RecreateService() {
+ void RecreateServiceWithZeroRefreshInterval() {
+ RecreateService(/*min_refresh_interval=*/base::TimeDelta());
+ }
+
+ void RecreateService(base::Optional<base::TimeDelta> refresh_interval) {
auto expiry_timer = base::MakeUnique<base::OneShotTimer>(tick_clock_.get());
expiry_timer->SetTaskRunner(task_runner_);
expiry_timer_ = expiry_timer.get();
@@ -90,7 +96,8 @@ class DoodleServiceTest : public testing::Test {
service_ = base::MakeUnique<DoodleService>(
&pref_service_, std::move(fetcher), std::move(expiry_timer),
- task_runner_->GetMockClock(), task_runner_->GetMockTickClock());
+ task_runner_->GetMockClock(), task_runner_->GetMockTickClock(),
+ refresh_interval);
}
DoodleService* service() { return service_.get(); }
@@ -154,7 +161,7 @@ TEST_F(DoodleServiceTest, PersistsConfig) {
// Re-create the service. It should have persisted the config, and load it
// again automatically.
- RecreateService();
+ RecreateServiceWithZeroRefreshInterval();
EXPECT_THAT(service()->config(), Eq(config));
}
@@ -176,7 +183,7 @@ TEST_F(DoodleServiceTest, PersistsExpiryDate) {
task_runner()->ClearPendingTasks();
// Re-create the service. The persisted config should have been loaded again.
- RecreateService();
+ RecreateServiceWithZeroRefreshInterval();
EXPECT_THAT(service()->config(), Eq(config));
// Its time-to-live should have been updated.
@@ -200,10 +207,37 @@ TEST_F(DoodleServiceTest, PersistedConfigExpires) {
// Re-create the service. The persisted config should have been discarded
// because it is expired.
- RecreateService();
+ RecreateServiceWithZeroRefreshInterval();
EXPECT_THAT(service()->config(), Eq(base::nullopt));
}
+TEST_F(DoodleServiceTest, RespectsMinRefreshInterval) {
+ // Create a service with the default refresh interval.
+ RecreateService(/*min_refresh_interval=*/base::nullopt);
+
+ // Load some doodle config.
+ service()->Refresh();
+ DoodleConfig config = CreateConfig(DoodleType::SIMPLE);
+ config.large_image.url = GURL("https://doodle.com/doodle.jpg");
+ fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE,
+ base::TimeDelta::FromHours(1), config);
+ ASSERT_THAT(service()->config(), Eq(config));
+
+ // Let some time pass (less than the refresh interval).
+ task_runner()->FastForwardBy(base::TimeDelta::FromMinutes(10));
+
+ // Request a refresh. This should get ignored.
+ service()->Refresh();
+ EXPECT_THAT(fetcher()->num_pending_callbacks(), Eq(0u));
+
+ // Let more time pass, so we get past the refresh interval.
+ task_runner()->FastForwardBy(base::TimeDelta::FromMinutes(6));
+
+ // Now the refresh request should be honored again.
+ service()->Refresh();
+ EXPECT_THAT(fetcher()->num_pending_callbacks(), Eq(1u));
+}
+
TEST_F(DoodleServiceTest, CallsObserverOnConfigReceived) {
StrictMock<MockDoodleObserver> observer;
service()->AddObserver(&observer);
@@ -428,10 +462,38 @@ TEST_F(DoodleServiceTest, RecordsMetricsForFailedDownload) {
histograms.ExpectTotalCount("Doodle.ConfigDownloadTime", 0);
}
+TEST_F(DoodleServiceTest, RecordsMetricsForEarlyRefreshRequest) {
+ // Create a service with some refresh interval.
+ RecreateService(/*min_refresh_interval=*/base::TimeDelta::FromMinutes(10));
+
+ // Load a doodle config as usual.
+ service()->Refresh();
+ DoodleConfig config = CreateConfig(DoodleType::SIMPLE);
+ fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE,
+ base::TimeDelta::FromHours(1), config);
+ ASSERT_THAT(service()->config(), Eq(config));
+
+ base::HistogramTester histograms;
+
+ // Request a refresh before the min refresh interval has passed.
+ task_runner()->FastForwardBy(base::TimeDelta::FromMinutes(5));
+ service()->Refresh();
+
+ // This should not have resulted in a request.
+ ASSERT_THAT(fetcher()->num_pending_callbacks(), Eq(0u));
+
+ // The outcome should still have been recorded, but not the time - we only
+ // record that for successful downloads.
+ histograms.ExpectUniqueSample("Doodle.ConfigDownloadOutcome",
+ 7, // OUTCOME_REFRESH_INTERVAL_NOT_PASSED
+ 1);
+ histograms.ExpectTotalCount("Doodle.ConfigDownloadTime", 0);
+}
+
TEST_F(DoodleServiceTest, DoesNotRecordMetricsAtStartup) {
// Creating the service should not emit any histogram samples.
base::HistogramTester histograms;
- RecreateService();
+ RecreateServiceWithZeroRefreshInterval();
ASSERT_THAT(service()->config(), Eq(base::nullopt));
histograms.ExpectTotalCount("Doodle.ConfigDownloadOutcome", 0);
histograms.ExpectTotalCount("Doodle.ConfigDownloadTime", 0);
@@ -448,7 +510,7 @@ TEST_F(DoodleServiceTest, DoesNotRecordMetricsAtStartupWithConfig) {
// Recreating the service should not emit any histogram samples, even though
// a config gets loaded.
base::HistogramTester histograms;
- RecreateService();
+ RecreateServiceWithZeroRefreshInterval();
ASSERT_THAT(service()->config(), Eq(config));
histograms.ExpectTotalCount("Doodle.ConfigDownloadOutcome", 0);
histograms.ExpectTotalCount("Doodle.ConfigDownloadTime", 0);
« no previous file with comments | « components/doodle/doodle_service.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698