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

Unified Diff: base/task_scheduler/delayed_task_manager_unittest.cc

Issue 2690483002: Refactor DelayedTaskManager to be Agnostic to Task Sources (Closed)
Patch Set: Update Includes Created 3 years, 10 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 | « base/task_scheduler/delayed_task_manager.cc ('k') | base/task_scheduler/scheduler_worker_pool_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 f964cda5a67ab720ab8c8f475f575aa227f466e4..8e6061d9c6b61d83985af9085ca74ca68e23b061 100644
--- a/base/task_scheduler/delayed_task_manager_unittest.cc
+++ b/base/task_scheduler/delayed_task_manager_unittest.cc
@@ -8,12 +8,8 @@
#include <utility>
#include "base/bind.h"
+#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted.h"
-#include "base/sequenced_task_runner.h"
-#include "base/single_thread_task_runner.h"
-#include "base/task_runner.h"
-#include "base/task_scheduler/scheduler_worker_pool.h"
-#include "base/task_scheduler/sequence.h"
#include "base/task_scheduler/task.h"
#include "base/test/test_mock_time_task_runner.h"
#include "base/time/time.h"
@@ -26,140 +22,118 @@ namespace {
constexpr TimeDelta kLongDelay = TimeDelta::FromHours(1);
-class MockSchedulerWorkerPool : public SchedulerWorkerPool {
+class MockTaskTarget {
public:
- // SchedulerWorkerPool:
- scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits(
- const TaskTraits& traits) override {
- ADD_FAILURE() << "Call to unimplemented method.";
- return nullptr;
- }
+ MockTaskTarget() = default;
+ ~MockTaskTarget() = default;
- scoped_refptr<SequencedTaskRunner> CreateSequencedTaskRunnerWithTraits(
- const TaskTraits& traits) override {
- ADD_FAILURE() << "Call to unimplemented method.";
- return nullptr;
- }
+ // gMock currently doesn't support move-only types, so PostTaskNowCallback()
+ // handles the move-only type and forwards to the mocked method.
+ MOCK_METHOD1(DoPostTaskNowCallback, void(const Task*));
- scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits(
- const TaskTraits& traits) override {
- ADD_FAILURE() << "Call to unimplemented method.";
- return nullptr;
+ void PostTaskNowCallback(std::unique_ptr<Task> task) {
+ DoPostTaskNowCallback(task.get());
}
- void ReEnqueueSequence(scoped_refptr<Sequence> sequence,
- const SequenceSortKey& sequence_sort_key) override {
- ADD_FAILURE() << "Call to unimplemented method.";
- }
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockTaskTarget);
+};
- bool PostTaskWithSequence(std::unique_ptr<Task> task,
- scoped_refptr<Sequence> sequence,
- SchedulerWorker* worker) override {
- ADD_FAILURE() << "Call to unimplemented method.";
- return true;
- }
+class TaskSchedulerDelayedTaskManagerTest : public testing::Test {
+ public:
+ TaskSchedulerDelayedTaskManagerTest()
+ : service_thread_task_runner_(new TestMockTimeTaskRunner),
+ delayed_task_manager_(service_thread_task_runner_) {}
+ ~TaskSchedulerDelayedTaskManagerTest() override = default;
- void PostTaskWithSequenceNow(std::unique_ptr<Task> task,
- scoped_refptr<Sequence> sequence,
- SchedulerWorker* worker) override {
- PostTaskWithSequenceNowMock(task.get(), sequence.get(), worker);
- }
+ protected:
+ scoped_refptr<TestMockTimeTaskRunner> service_thread_task_runner_;
+ DelayedTaskManager delayed_task_manager_;
- MOCK_METHOD3(PostTaskWithSequenceNowMock,
- void(const Task*,
- const Sequence*,
- const SchedulerWorker* worker));
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TaskSchedulerDelayedTaskManagerTest);
};
} // namespace
-// Verify that a delayed task isn't forwarded to its SchedulerWorkerPool before
-// it is ripe for execution.
-TEST(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunTooEarly) {
- scoped_refptr<TestMockTimeTaskRunner> service_thread_task_runner(
- new TestMockTimeTaskRunner);
- DelayedTaskManager manager(service_thread_task_runner);
+// Verify that a delayed task isn't forwarded before it is ripe for execution.
+TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskDoesNotRunTooEarly) {
+ auto task =
+ MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay);
- std::unique_ptr<Task> task(
- new Task(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay));
- scoped_refptr<Sequence> sequence(new Sequence);
- testing::StrictMock<MockSchedulerWorkerPool> worker_pool;
+ testing::StrictMock<MockTaskTarget> task_target;
// Send |task| to the DelayedTaskManager.
- manager.AddDelayedTask(std::move(task), sequence, nullptr, &worker_pool);
+ delayed_task_manager_.AddDelayedTask(
+ std::move(task),
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target)));
- // Run tasks that are ripe for execution. Don't expect any call to the mock
- // method of |worker_pool|.
- service_thread_task_runner->RunUntilIdle();
+ // Run tasks that are ripe for execution. Don't expect any forwarding to
+ // |task_target|.
+ service_thread_task_runner_->RunUntilIdle();
}
-// Verify that a delayed task is forwarded to its SchedulerWorkerPool when it is
-// ripe for execution.
-TEST(TaskSchedulerDelayedTaskManagerTest, DelayedTaskRunsAfterDelay) {
- scoped_refptr<TestMockTimeTaskRunner> service_thread_task_runner(
- new TestMockTimeTaskRunner);
- DelayedTaskManager manager(service_thread_task_runner);
-
- std::unique_ptr<Task> task(
- new Task(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay));
+// Verify that a delayed task is forwarded when it is ripe for execution.
+TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTaskRunsAfterDelay) {
+ auto task =
+ MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(), kLongDelay);
const Task* task_raw = task.get();
- scoped_refptr<Sequence> sequence(new Sequence);
- testing::StrictMock<MockSchedulerWorkerPool> worker_pool;
+
+ testing::StrictMock<MockTaskTarget> task_target;
// Send |task| to the DelayedTaskManager.
- manager.AddDelayedTask(std::move(task), sequence, nullptr, &worker_pool);
+ delayed_task_manager_.AddDelayedTask(
+ std::move(task),
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target)));
- // Fast-forward time. Expect a call to the mock method of |worker_pool|.
- EXPECT_CALL(worker_pool,
- PostTaskWithSequenceNowMock(task_raw, sequence.get(), nullptr));
- service_thread_task_runner->FastForwardBy(kLongDelay);
+ // Fast-forward time. Expect the task is forwarded to |task_target|.
+ EXPECT_CALL(task_target, DoPostTaskNowCallback(task_raw));
+ service_thread_task_runner_->FastForwardBy(kLongDelay);
}
-// Verify that multiple delayed task are forwarded to their SchedulerWorkerPool
-// when they are ripe for execution.
-TEST(TaskSchedulerDelayedTaskManagerTest, DelayedTasksRunAfterDelay) {
- scoped_refptr<TestMockTimeTaskRunner> service_thread_task_runner(
- new TestMockTimeTaskRunner);
- DelayedTaskManager manager(service_thread_task_runner);
-
- scoped_refptr<Sequence> sequence(new Sequence);
- testing::StrictMock<MockSchedulerWorkerPool> worker_pool;
-
- std::unique_ptr<Task> task_a(new Task(FROM_HERE, Bind(&DoNothing),
- TaskTraits(), TimeDelta::FromHours(1)));
+// Verify that multiple delayed tasks are forwarded when they are ripe for
+// execution.
+TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTasksRunAfterDelay) {
+ auto task_a = MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(),
+ TimeDelta::FromHours(1));
const Task* task_a_raw = task_a.get();
- std::unique_ptr<Task> task_b(new Task(FROM_HERE, Bind(&DoNothing),
- TaskTraits(), TimeDelta::FromHours(2)));
+ auto task_b = MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(),
+ TimeDelta::FromHours(2));
const Task* task_b_raw = task_b.get();
- std::unique_ptr<Task> task_c(new Task(FROM_HERE, Bind(&DoNothing),
- TaskTraits(), TimeDelta::FromHours(1)));
+ auto task_c = MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), TaskTraits(),
+ TimeDelta::FromHours(1));
const Task* task_c_raw = task_c.get();
+ testing::StrictMock<MockTaskTarget> task_target;
+
// Send tasks to the DelayedTaskManager.
- manager.AddDelayedTask(std::move(task_a), sequence, nullptr, &worker_pool);
- manager.AddDelayedTask(std::move(task_b), sequence, nullptr, &worker_pool);
- manager.AddDelayedTask(std::move(task_c), sequence, nullptr, &worker_pool);
+ delayed_task_manager_.AddDelayedTask(
+ std::move(task_a),
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target)));
+ delayed_task_manager_.AddDelayedTask(
+ std::move(task_b),
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target)));
+ delayed_task_manager_.AddDelayedTask(
+ std::move(task_c),
+ Bind(&MockTaskTarget::PostTaskNowCallback, Unretained(&task_target)));
// Run tasks that are ripe for execution on the service thread. Don't expect
- // any call to the mock method of |worker_pool|.
- service_thread_task_runner->RunUntilIdle();
+ // any call to |task_target|.
+ service_thread_task_runner_->RunUntilIdle();
// Fast-forward time. Expect |task_a_raw| and |task_c_raw| to be forwarded to
- // the worker pool.
- EXPECT_CALL(worker_pool,
- PostTaskWithSequenceNowMock(task_a_raw, sequence.get(), nullptr));
- EXPECT_CALL(worker_pool,
- PostTaskWithSequenceNowMock(task_c_raw, sequence.get(), nullptr));
- service_thread_task_runner->FastForwardBy(TimeDelta::FromHours(1));
- testing::Mock::VerifyAndClear(&worker_pool);
-
- // Fast-forward time. Expect |task_b_raw| to be forwarded to the worker pool.
- EXPECT_CALL(worker_pool,
- PostTaskWithSequenceNowMock(task_b_raw, sequence.get(), nullptr));
- service_thread_task_runner->FastForwardBy(TimeDelta::FromHours(1));
- testing::Mock::VerifyAndClear(&worker_pool);
+ // |task_target|.
+ EXPECT_CALL(task_target, DoPostTaskNowCallback(task_a_raw));
+ EXPECT_CALL(task_target, DoPostTaskNowCallback(task_c_raw));
+ service_thread_task_runner_->FastForwardBy(TimeDelta::FromHours(1));
+ testing::Mock::VerifyAndClear(&task_target);
+
+ // Fast-forward time. Expect |task_b_raw| to be forwarded to |task_target|.
+ EXPECT_CALL(task_target, DoPostTaskNowCallback(task_b_raw));
+ service_thread_task_runner_->FastForwardBy(TimeDelta::FromHours(1));
+ testing::Mock::VerifyAndClear(&task_target);
}
} // namespace internal
« no previous file with comments | « base/task_scheduler/delayed_task_manager.cc ('k') | base/task_scheduler/scheduler_worker_pool_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698