#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
+#include "base/thread_task_runner_handle.h"
+#include "chrome/browser/sync_file_system/drive_backend/sync_task.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_task_token.h"
#include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
+#include "storage/common/fileapi/file_system_util.h"
#include "testing/gtest/include/gtest/gtest.h"
-#include "webkit/common/fileapi/file_system_util.h"
#define MAKE_PATH(path) \
- base::FilePath(fileapi::VirtualPath::GetNormalizedFilePath( \
+ base::FilePath(storage::VirtualPath::GetNormalizedFilePath( \
base::FilePath(FILE_PATH_LITERAL(path))))
namespace sync_file_system {
idle_task_scheduled_count_(0),
last_operation_status_(SYNC_STATUS_OK) {
task_manager_.reset(new SyncTaskManager(
- AsWeakPtr(), maximum_background_task));
+ AsWeakPtr(), maximum_background_task,
+ base::ThreadTaskRunnerHandle::Get()));
task_manager_->Initialize(SYNC_STATUS_OK);
+ base::MessageLoop::current()->RunUntilIdle();
maybe_schedule_next_task_count_ = 0;
}
virtual ~TaskManagerClient() {}
last_operation_status_ = last_operation_status;
}
+ virtual void RecordTaskLog(scoped_ptr<TaskLogger::TaskLog>) OVERRIDE {}
+
void ScheduleTask(SyncStatusCode status_to_return,
const SyncStatusCallback& callback) {
task_manager_->ScheduleTask(
}
virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) OVERRIDE {
- scoped_ptr<BlockingFactor> blocking_factor(new BlockingFactor);
- blocking_factor->app_id = app_id_;
- blocking_factor->paths.push_back(path_);
+ scoped_ptr<TaskBlocker> task_blocker(new TaskBlocker);
+ task_blocker->app_id = app_id_;
+ task_blocker->paths.push_back(path_);
- SyncTaskManager::UpdateBlockingFactor(
- token.Pass(), blocking_factor.Pass(),
+ SyncTaskManager::UpdateTaskBlocker(
+ token.Pass(), task_blocker.Pass(),
base::Bind(&BackgroundTask::RunAsBackgroundTask,
weak_ptr_factory_.GetWeakPtr()));
}
log_->push_back(name_ + ": updating to " + updating_to);
- scoped_ptr<BlockingFactor> blocking_factor(new BlockingFactor);
- blocking_factor->app_id = app_id_;
- blocking_factor->paths.push_back(
- base::FilePath(fileapi::VirtualPath::GetNormalizedFilePath(
+ scoped_ptr<TaskBlocker> task_blocker(new TaskBlocker);
+ task_blocker->app_id = app_id_;
+ task_blocker->paths.push_back(
+ base::FilePath(storage::VirtualPath::GetNormalizedFilePath(
base::FilePath::FromUTF8Unsafe(updating_to))));
- SyncTaskManager::UpdateBlockingFactor(
- token.Pass(), blocking_factor.Pass(),
+ SyncTaskManager::UpdateTaskBlocker(
+ token.Pass(), task_blocker.Pass(),
base::Bind(&BlockerUpdateTestHelper::UpdateBlockerSoon,
weak_ptr_factory_.GetWeakPtr(),
updating_to));
{
SyncTaskManager task_manager(base::WeakPtr<SyncTaskManager::Client>(),
- 0 /* maximum_background_task */);
+ 0 /* maximum_background_task */,
+ base::ThreadTaskRunnerHandle::Get());
task_manager.Initialize(SYNC_STATUS_OK);
+ message_loop.RunUntilIdle();
task_manager.ScheduleSyncTask(
FROM_HERE,
scoped_ptr<SyncTask>(new MultihopSyncTask(
SyncTaskManager::PRIORITY_MED,
base::Bind(&IncrementAndAssign, 0, &callback_count, &status));
}
-
message_loop.RunUntilIdle();
+
EXPECT_EQ(0, callback_count);
EXPECT_EQ(SYNC_STATUS_UNKNOWN, status);
EXPECT_TRUE(task_started);
TEST(SyncTaskManagerTest, ScheduleTaskAtPriority) {
base::MessageLoop message_loop;
SyncTaskManager task_manager(base::WeakPtr<SyncTaskManager::Client>(),
- 0 /* maximum_background_task */);
+ 0 /* maximum_background_task */,
+ base::ThreadTaskRunnerHandle::Get());
task_manager.Initialize(SYNC_STATUS_OK);
+ message_loop.RunUntilIdle();
int callback_count = 0;
SyncStatusCode callback_status1 = SYNC_STATUS_OK;
TEST(SyncTaskManagerTest, BackgroundTask_Sequential) {
base::MessageLoop message_loop;
SyncTaskManager task_manager(base::WeakPtr<SyncTaskManager::Client>(),
- 10 /* maximum_background_task */);
+ 10 /* maximum_background_task */,
+ base::ThreadTaskRunnerHandle::Get());
task_manager.Initialize(SYNC_STATUS_OK);
SyncStatusCode status = SYNC_STATUS_FAILED;
TEST(SyncTaskManagerTest, BackgroundTask_Parallel) {
base::MessageLoop message_loop;
SyncTaskManager task_manager(base::WeakPtr<SyncTaskManager::Client>(),
- 10 /* maximum_background_task */);
+ 10 /* maximum_background_task */,
+ base::ThreadTaskRunnerHandle::Get());
task_manager.Initialize(SYNC_STATUS_OK);
SyncStatusCode status = SYNC_STATUS_FAILED;
TEST(SyncTaskManagerTest, BackgroundTask_Throttled) {
base::MessageLoop message_loop;
SyncTaskManager task_manager(base::WeakPtr<SyncTaskManager::Client>(),
- 2 /* maximum_background_task */);
+ 2 /* maximum_background_task */,
+ base::ThreadTaskRunnerHandle::Get());
task_manager.Initialize(SYNC_STATUS_OK);
SyncStatusCode status = SYNC_STATUS_FAILED;
EXPECT_EQ(2, stats.max_parallel_task);
}
-TEST(SyncTaskManagerTest, UpdateBlockingFactor) {
+TEST(SyncTaskManagerTest, UpdateTaskBlocker) {
base::MessageLoop message_loop;
SyncTaskManager task_manager(base::WeakPtr<SyncTaskManager::Client>(),
- 10 /* maximum_background_task */);
+ 10 /* maximum_background_task */,
+ base::ThreadTaskRunnerHandle::Get());
task_manager.Initialize(SYNC_STATUS_OK);
- SyncStatusCode status = SYNC_STATUS_FAILED;
+ SyncStatusCode status1 = SYNC_STATUS_FAILED;
+ SyncStatusCode status2 = SYNC_STATUS_FAILED;
BlockerUpdateTestHelper::Log log;
{
scoped_ptr<SyncTask>(new BlockerUpdateTestHelper(
"task1", "app_id", paths, &log)),
SyncTaskManager::PRIORITY_MED,
- CreateResultReceiver(&status));
+ CreateResultReceiver(&status1));
}
{
scoped_ptr<SyncTask>(new BlockerUpdateTestHelper(
"task2", "app_id", paths, &log)),
SyncTaskManager::PRIORITY_MED,
- CreateResultReceiver(&status));
+ CreateResultReceiver(&status2));
}
message_loop.RunUntilIdle();
- EXPECT_EQ(SYNC_STATUS_OK, status);
+ EXPECT_EQ(SYNC_STATUS_OK, status1);
+ EXPECT_EQ(SYNC_STATUS_OK, status2);
ASSERT_EQ(14u, log.size());
int i = 0;
// task1 takes "/foo/bar" first.
EXPECT_EQ("task1: updating to /foo/bar", log[i++]);
- EXPECT_EQ("task1: updated to /foo/bar", log[i++]);
- // task1 blocks task2. task2's update should be pending until task1 update.
+ // task1 blocks task2. task2's update should not complete until task1 update.
EXPECT_EQ("task2: updating to /foo", log[i++]);
+ EXPECT_EQ("task1: updated to /foo/bar", log[i++]);
// task1 releases "/foo/bar" and tries to take "/foo". Then, pending task2
// takes "/foo" and blocks task1.