123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/variations/variations_request_scheduler_mobile.h"
- #include "base/bind.h"
- #include "base/test/task_environment.h"
- #include "components/prefs/pref_registry_simple.h"
- #include "components/prefs/testing_pref_service.h"
- #include "components/variations/pref_names.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace variations {
- namespace {
- // Simple method used to verify a Callback has been triggered.
- void Increment(int* n) {
- (*n)++;
- }
- } // namespace
- TEST(VariationsRequestSchedulerMobileTest, StartNoRun) {
- TestingPrefServiceSimple prefs;
- // Initialize to as if it was just fetched. This means it should not run.
- prefs.registry()->RegisterTimePref(prefs::kVariationsLastFetchTime,
- base::Time::Now());
- int executed = 0;
- const base::RepeatingClosure task =
- base::BindRepeating(&Increment, &executed);
- VariationsRequestSchedulerMobile scheduler(task, &prefs);
- scheduler.Start();
- // We expect it the task to not have triggered.
- EXPECT_EQ(0, executed);
- }
- TEST(VariationsRequestSchedulerMobileTest, StartRun) {
- TestingPrefServiceSimple prefs;
- // Verify it doesn't take more than a day.
- base::Time old = base::Time::Now() - base::Hours(24);
- prefs.registry()->RegisterTimePref(prefs::kVariationsLastFetchTime, old);
- int executed = 0;
- const base::RepeatingClosure task =
- base::BindRepeating(&Increment, &executed);
- VariationsRequestSchedulerMobile scheduler(task, &prefs);
- scheduler.Start();
- // We expect the task to have triggered.
- EXPECT_EQ(1, executed);
- }
- TEST(VariationsRequestSchedulerMobileTest, OnAppEnterForegroundNoRun) {
- base::test::SingleThreadTaskEnvironment task_environment;
- TestingPrefServiceSimple prefs;
- // Initialize to as if it was just fetched. This means it should not run.
- prefs.registry()->RegisterTimePref(prefs::kVariationsLastFetchTime,
- base::Time::Now());
- int executed = 0;
- const base::RepeatingClosure task =
- base::BindRepeating(&Increment, &executed);
- VariationsRequestSchedulerMobile scheduler(task, &prefs);
- // Verify timer not running.
- EXPECT_FALSE(scheduler.schedule_fetch_timer_.IsRunning());
- scheduler.OnAppEnterForeground();
- // Timer now running.
- EXPECT_TRUE(scheduler.schedule_fetch_timer_.IsRunning());
- // Force execution of the task on this timer to verify that the correct task
- // was added to the timer.
- scheduler.schedule_fetch_timer_.FireNow();
- // The task should not execute because the seed was fetched too recently.
- EXPECT_EQ(0, executed);
- }
- TEST(VariationsRequestSchedulerMobileTest, OnAppEnterForegroundRun) {
- base::test::SingleThreadTaskEnvironment task_environment;
- TestingPrefServiceSimple prefs;
- base::Time old = base::Time::Now() - base::Hours(24);
- prefs.registry()->RegisterTimePref(prefs::kVariationsLastFetchTime, old);
- int executed = 0;
- const base::RepeatingClosure task =
- base::BindRepeating(&Increment, &executed);
- VariationsRequestSchedulerMobile scheduler(task, &prefs);
- // Verify timer not running.
- EXPECT_FALSE(scheduler.schedule_fetch_timer_.IsRunning());
- scheduler.OnAppEnterForeground();
- // Timer now running.
- EXPECT_TRUE(scheduler.schedule_fetch_timer_.IsRunning());
- // Force execution of the task on this timer to verify that the correct task
- // was added to the timer - this will verify that the right task is running.
- scheduler.schedule_fetch_timer_.FireNow();
- // We expect the input task to have triggered.
- EXPECT_EQ(1, executed);
- }
- TEST(VariationsRequestSchedulerMobileTest, OnAppEnterForegroundOnStartup) {
- base::test::SingleThreadTaskEnvironment task_environment;
- TestingPrefServiceSimple prefs;
- base::Time old = base::Time::Now() - base::Hours(24);
- prefs.registry()->RegisterTimePref(prefs::kVariationsLastFetchTime, old);
- int executed = 0;
- const base::RepeatingClosure task =
- base::BindRepeating(&Increment, &executed);
- VariationsRequestSchedulerMobile scheduler(task, &prefs);
- scheduler.Start();
- // We expect the task to have triggered.
- EXPECT_EQ(1, executed);
- scheduler.OnAppEnterForeground();
- EXPECT_FALSE(scheduler.schedule_fetch_timer_.IsRunning());
- // We expect the input task to not have triggered again, so executed stays
- // at 1.
- EXPECT_EQ(1, executed);
- // Simulate letting time pass.
- const base::Time last_fetch_time =
- prefs.GetTime(prefs::kVariationsLastFetchTime);
- const base::Time one_day_earlier = last_fetch_time - base::Hours(24);
- prefs.SetTime(prefs::kVariationsLastFetchTime, one_day_earlier);
- scheduler.last_request_time_ -= base::Hours(24);
- scheduler.OnAppEnterForeground();
- EXPECT_TRUE(scheduler.schedule_fetch_timer_.IsRunning());
- scheduler.schedule_fetch_timer_.FireNow();
- // This time it should execute the task.
- EXPECT_EQ(2, executed);
- }
- } // namespace variations
|