| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/memory/weak_ptr.h" | 7 #include "base/memory/weak_ptr.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "chrome/browser/sync_file_system/sync_task_manager.h" | 9 #include "chrome/browser/sync_file_system/sync_task_manager.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 } | 58 } |
| 59 virtual void NotifyLastOperationStatus( | 59 virtual void NotifyLastOperationStatus( |
| 60 SyncStatusCode last_operation_status, | 60 SyncStatusCode last_operation_status, |
| 61 bool last_operation_used_network) OVERRIDE { | 61 bool last_operation_used_network) OVERRIDE { |
| 62 last_operation_status_ = last_operation_status; | 62 last_operation_status_ = last_operation_status; |
| 63 } | 63 } |
| 64 | 64 |
| 65 void ScheduleTask(SyncStatusCode status_to_return, | 65 void ScheduleTask(SyncStatusCode status_to_return, |
| 66 const SyncStatusCallback& callback) { | 66 const SyncStatusCallback& callback) { |
| 67 task_manager_->ScheduleTask( | 67 task_manager_->ScheduleTask( |
| 68 FROM_HERE, |
| 68 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), | 69 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), |
| 69 status_to_return, false /* idle */), | 70 status_to_return, false /* idle */), |
| 70 callback); | 71 callback); |
| 71 } | 72 } |
| 72 | 73 |
| 73 void ScheduleTaskIfIdle(SyncStatusCode status_to_return) { | 74 void ScheduleTaskIfIdle(SyncStatusCode status_to_return) { |
| 74 task_manager_->ScheduleTaskIfIdle( | 75 task_manager_->ScheduleTaskIfIdle( |
| 76 FROM_HERE, |
| 75 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), | 77 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), |
| 76 status_to_return, true /* idle */), | 78 status_to_return, true /* idle */), |
| 77 SyncStatusCallback()); | 79 SyncStatusCallback()); |
| 78 } | 80 } |
| 79 | 81 |
| 80 int maybe_schedule_next_task_count() const { | 82 int maybe_schedule_next_task_count() const { |
| 81 return maybe_schedule_next_task_count_; | 83 return maybe_schedule_next_task_count_; |
| 82 } | 84 } |
| 83 int task_scheduled_count() const { return task_scheduled_count_; } | 85 int task_scheduled_count() const { return task_scheduled_count_; } |
| 84 int idle_task_scheduled_count() const { return idle_task_scheduled_count_; } | 86 int idle_task_scheduled_count() const { return idle_task_scheduled_count_; } |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 int callback_count = 0; | 240 int callback_count = 0; |
| 239 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 241 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 240 | 242 |
| 241 bool task_started = false; | 243 bool task_started = false; |
| 242 bool task_completed = false; | 244 bool task_completed = false; |
| 243 | 245 |
| 244 { | 246 { |
| 245 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); | 247 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); |
| 246 task_manager.Initialize(SYNC_STATUS_OK); | 248 task_manager.Initialize(SYNC_STATUS_OK); |
| 247 task_manager.ScheduleSyncTask( | 249 task_manager.ScheduleSyncTask( |
| 250 FROM_HERE, |
| 248 scoped_ptr<SyncTask>(new MultihopSyncTask( | 251 scoped_ptr<SyncTask>(new MultihopSyncTask( |
| 249 &task_started, &task_completed)), | 252 &task_started, &task_completed)), |
| 250 base::Bind(&IncrementAndAssign, 0, &callback_count, &status)); | 253 base::Bind(&IncrementAndAssign, 0, &callback_count, &status)); |
| 251 } | 254 } |
| 252 | 255 |
| 253 message_loop.RunUntilIdle(); | 256 message_loop.RunUntilIdle(); |
| 254 EXPECT_EQ(0, callback_count); | 257 EXPECT_EQ(0, callback_count); |
| 255 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); | 258 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); |
| 256 EXPECT_TRUE(task_started); | 259 EXPECT_TRUE(task_started); |
| 257 EXPECT_FALSE(task_completed); | 260 EXPECT_FALSE(task_completed); |
| 258 } | 261 } |
| 259 | 262 |
| 260 TEST(SyncTaskManagerTest, ScheduleAndCancelTask) { | 263 TEST(SyncTaskManagerTest, ScheduleAndCancelTask) { |
| 261 base::MessageLoop message_loop; | 264 base::MessageLoop message_loop; |
| 262 | 265 |
| 263 int callback_count = 0; | 266 int callback_count = 0; |
| 264 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 267 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 265 | 268 |
| 266 bool task_started = false; | 269 bool task_started = false; |
| 267 bool task_completed = false; | 270 bool task_completed = false; |
| 268 | 271 |
| 269 { | 272 { |
| 270 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); | 273 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); |
| 271 task_manager.Initialize(SYNC_STATUS_OK); | 274 task_manager.Initialize(SYNC_STATUS_OK); |
| 272 MultihopSyncTask* task = new MultihopSyncTask( | 275 MultihopSyncTask* task = new MultihopSyncTask( |
| 273 &task_started, &task_completed); | 276 &task_started, &task_completed); |
| 274 task_manager.ScheduleTask( | 277 task_manager.ScheduleTask( |
| 278 FROM_HERE, |
| 275 base::Bind(&MultihopSyncTask::Run, base::Unretained(task)), | 279 base::Bind(&MultihopSyncTask::Run, base::Unretained(task)), |
| 276 base::Bind(&IncrementAndAssignWithOwnedPointer<MultihopSyncTask>, | 280 base::Bind(&IncrementAndAssignWithOwnedPointer<MultihopSyncTask>, |
| 277 base::Owned(task), &callback_count, &status)); | 281 base::Owned(task), &callback_count, &status)); |
| 278 } | 282 } |
| 279 | 283 |
| 280 message_loop.RunUntilIdle(); | 284 message_loop.RunUntilIdle(); |
| 281 EXPECT_EQ(0, callback_count); | 285 EXPECT_EQ(0, callback_count); |
| 282 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); | 286 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); |
| 283 EXPECT_TRUE(task_started); | 287 EXPECT_TRUE(task_started); |
| 284 EXPECT_FALSE(task_completed); | 288 EXPECT_FALSE(task_completed); |
| 285 } | 289 } |
| 286 | 290 |
| 287 TEST(SyncTaskManagerTest, ScheduleTaskAtPriority) { | 291 TEST(SyncTaskManagerTest, ScheduleTaskAtPriority) { |
| 288 base::MessageLoop message_loop; | 292 base::MessageLoop message_loop; |
| 289 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); | 293 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); |
| 290 task_manager.Initialize(SYNC_STATUS_OK); | 294 task_manager.Initialize(SYNC_STATUS_OK); |
| 291 | 295 |
| 292 int callback_count = 0; | 296 int callback_count = 0; |
| 293 SyncStatusCode callback_status1 = SYNC_STATUS_OK; | 297 SyncStatusCode callback_status1 = SYNC_STATUS_OK; |
| 294 SyncStatusCode callback_status2 = SYNC_STATUS_OK; | 298 SyncStatusCode callback_status2 = SYNC_STATUS_OK; |
| 295 SyncStatusCode callback_status3 = SYNC_STATUS_OK; | 299 SyncStatusCode callback_status3 = SYNC_STATUS_OK; |
| 296 SyncStatusCode callback_status4 = SYNC_STATUS_OK; | 300 SyncStatusCode callback_status4 = SYNC_STATUS_OK; |
| 297 SyncStatusCode callback_status5 = SYNC_STATUS_OK; | 301 SyncStatusCode callback_status5 = SYNC_STATUS_OK; |
| 298 | 302 |
| 299 // This will run first even if its priority is low, since there're no | 303 // This will run first even if its priority is low, since there're no |
| 300 // pending tasks. | 304 // pending tasks. |
| 301 task_manager.ScheduleTaskAtPriority( | 305 task_manager.ScheduleTaskAtPriority( |
| 306 FROM_HERE, |
| 302 base::Bind(&DumbTask, kStatus1), | 307 base::Bind(&DumbTask, kStatus1), |
| 303 SyncTaskManager::PRIORITY_LOW, | 308 SyncTaskManager::PRIORITY_LOW, |
| 304 base::Bind(&IncrementAndAssign, 0, &callback_count, &callback_status1)); | 309 base::Bind(&IncrementAndAssign, 0, &callback_count, &callback_status1)); |
| 305 | 310 |
| 306 // This runs last (expected counter == 4). | 311 // This runs last (expected counter == 4). |
| 307 task_manager.ScheduleTaskAtPriority( | 312 task_manager.ScheduleTaskAtPriority( |
| 313 FROM_HERE, |
| 308 base::Bind(&DumbTask, kStatus2), | 314 base::Bind(&DumbTask, kStatus2), |
| 309 SyncTaskManager::PRIORITY_LOW, | 315 SyncTaskManager::PRIORITY_LOW, |
| 310 base::Bind(&IncrementAndAssign, 4, &callback_count, &callback_status2)); | 316 base::Bind(&IncrementAndAssign, 4, &callback_count, &callback_status2)); |
| 311 | 317 |
| 312 // This runs second (expected counter == 1). | 318 // This runs second (expected counter == 1). |
| 313 task_manager.ScheduleTaskAtPriority( | 319 task_manager.ScheduleTaskAtPriority( |
| 320 FROM_HERE, |
| 314 base::Bind(&DumbTask, kStatus3), | 321 base::Bind(&DumbTask, kStatus3), |
| 315 SyncTaskManager::PRIORITY_HIGH, | 322 SyncTaskManager::PRIORITY_HIGH, |
| 316 base::Bind(&IncrementAndAssign, 1, &callback_count, &callback_status3)); | 323 base::Bind(&IncrementAndAssign, 1, &callback_count, &callback_status3)); |
| 317 | 324 |
| 318 // This runs fourth (expected counter == 3). | 325 // This runs fourth (expected counter == 3). |
| 319 task_manager.ScheduleTaskAtPriority( | 326 task_manager.ScheduleTaskAtPriority( |
| 327 FROM_HERE, |
| 320 base::Bind(&DumbTask, kStatus4), | 328 base::Bind(&DumbTask, kStatus4), |
| 321 SyncTaskManager::PRIORITY_MED, | 329 SyncTaskManager::PRIORITY_MED, |
| 322 base::Bind(&IncrementAndAssign, 3, &callback_count, &callback_status4)); | 330 base::Bind(&IncrementAndAssign, 3, &callback_count, &callback_status4)); |
| 323 | 331 |
| 324 // This runs third (expected counter == 2). | 332 // This runs third (expected counter == 2). |
| 325 task_manager.ScheduleTaskAtPriority( | 333 task_manager.ScheduleTaskAtPriority( |
| 334 FROM_HERE, |
| 326 base::Bind(&DumbTask, kStatus5), | 335 base::Bind(&DumbTask, kStatus5), |
| 327 SyncTaskManager::PRIORITY_HIGH, | 336 SyncTaskManager::PRIORITY_HIGH, |
| 328 base::Bind(&IncrementAndAssign, 2, &callback_count, &callback_status5)); | 337 base::Bind(&IncrementAndAssign, 2, &callback_count, &callback_status5)); |
| 329 | 338 |
| 330 message_loop.RunUntilIdle(); | 339 message_loop.RunUntilIdle(); |
| 331 | 340 |
| 332 EXPECT_EQ(kStatus1, callback_status1); | 341 EXPECT_EQ(kStatus1, callback_status1); |
| 333 EXPECT_EQ(kStatus2, callback_status2); | 342 EXPECT_EQ(kStatus2, callback_status2); |
| 334 EXPECT_EQ(kStatus3, callback_status3); | 343 EXPECT_EQ(kStatus3, callback_status3); |
| 335 EXPECT_EQ(kStatus4, callback_status4); | 344 EXPECT_EQ(kStatus4, callback_status4); |
| 336 EXPECT_EQ(kStatus5, callback_status5); | 345 EXPECT_EQ(kStatus5, callback_status5); |
| 337 EXPECT_EQ(5, callback_count); | 346 EXPECT_EQ(5, callback_count); |
| 338 } | 347 } |
| 339 | 348 |
| 340 } // namespace sync_file_system | 349 } // namespace sync_file_system |
| OLD | NEW |