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

Unified Diff: base/task_scheduler/delayed_task_manager_unittest.cc

Issue 2810873008: Separate the create and start phases in DelayedTaskManager. (Closed)
Patch Set: self-review 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
Index: base/task_scheduler/delayed_task_manager_unittest.cc
diff --git a/base/task_scheduler/delayed_task_manager_unittest.cc b/base/task_scheduler/delayed_task_manager_unittest.cc
index 8e6061d9c6b61d83985af9085ca74ca68e23b061..ce8cc0ea1f7f566c1fabd9f2dd77a808fdc59c4c 100644
--- a/base/task_scheduler/delayed_task_manager_unittest.cc
+++ b/base/task_scheduler/delayed_task_manager_unittest.cc
@@ -42,8 +42,7 @@ class MockTaskTarget {
class TaskSchedulerDelayedTaskManagerTest : public testing::Test {
public:
TaskSchedulerDelayedTaskManagerTest()
- : service_thread_task_runner_(new TestMockTimeTaskRunner),
- delayed_task_manager_(service_thread_task_runner_) {}
+ : service_thread_task_runner_(new TestMockTimeTaskRunner) {}
~TaskSchedulerDelayedTaskManagerTest() override = default;
protected:
@@ -56,8 +55,52 @@ class TaskSchedulerDelayedTaskManagerTest : public testing::Test {
} // namespace
-// Verify that a delayed task isn't forwarded before it is ripe for execution.
+// Verify that a delayed task isn't forwarded before Start().
+TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunBeforeStart) {
+ auto task =
+ MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay);
+
+ testing::StrictMock<MockTaskTarget> task_target;
+
+ // Send |task| to the DelayedTaskManager.
+ delayed_task_manager_.AddDelayedTask(
+ std::move(task),
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target)));
gab 2017/04/12 19:15:51 BindOnce
fdoray 2017/04/19 15:37:55 Done.
+
+ // Fast-forward time. Don't expect any forwarding to |task_target|.
gab 2017/04/12 19:15:51 What ensures this? Shouldn't your task trigger a f
fdoray 2017/04/19 15:37:55 Done.
+ service_thread_task_runner_->FastForwardBy(kLongDelay);
+}
+
+// Verify that a delayed task added before Start() is forwarded when it is ripe
+// for execution and Start() is called.
+TEST_F(TaskSchedulerDelayedTaskManagerTest,
+ DelayedTaskPostedBeforeStartRunsAfterStart) {
+ auto task =
+ MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay);
+ const Task* task_raw = task.get();
+
+ testing::StrictMock<MockTaskTarget> task_target;
+
+ // Send |task| to the DelayedTaskManager.
+ delayed_task_manager_.AddDelayedTask(
+ std::move(task),
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target)));
+
+ delayed_task_manager_.Start(service_thread_task_runner_);
+
+ // Run tasks on the service thread. Don't expect any forwarding to
+ // |task_target| since the task isn't ripe for execution.
+ service_thread_task_runner_->RunUntilIdle();
+
+ // Fast-forward time. Expect the task to be forwarded to |task_target|.
+ EXPECT_CALL(task_target, DoPostTaskNowCallback(task_raw));
+ service_thread_task_runner_->FastForwardBy(kLongDelay);
+}
gab 2017/04/12 19:15:51 Also test that task that became ripe before start
fdoray 2017/04/19 15:37:55 Done.
+
+// Verify that a delayed task added after Start() isn't forwarded before it is
+// ripe for execution.
TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunTooEarly) {
+ delayed_task_manager_.Start(service_thread_task_runner_);
auto task =
MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay);
@@ -73,8 +116,10 @@ TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunTooEarly) {
service_thread_task_runner_->RunUntilIdle();
}
-// Verify that a delayed task is forwarded when it is ripe for execution.
+// Verify that a delayed task added after Start() is forwarded when it is ripe
+// for execution.
TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskRunsAfterDelay) {
+ delayed_task_manager_.Start(service_thread_task_runner_);
auto task =
MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay);
const Task* task_raw = task.get();
@@ -91,9 +136,10 @@ TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskRunsAfterDelay) {
service_thread_task_runner_->FastForwardBy(kLongDelay);
}
-// Verify that multiple delayed tasks are forwarded when they are ripe for
-// execution.
+// Verify that multiple delayed tasks added after Start() are forwarded when
+// they are ripe for execution.
TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTasksRunAfterDelay) {
+ delayed_task_manager_.Start(service_thread_task_runner_);
auto task_a = MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(),
TimeDelta::FromHours(1));
const Task* task_a_raw = task_a.get();

Powered by Google App Engine
This is Rietveld 408576698