| 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);
|
|
|