| 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 FROM_HERE, |
| 69 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), | 69 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), |
| 70 status_to_return, false /* idle */), | 70 status_to_return, false /* idle */), |
| 71 SyncTaskManager::PRIORITY_MED, |
| 71 callback); | 72 callback); |
| 72 } | 73 } |
| 73 | 74 |
| 74 void ScheduleTaskIfIdle(SyncStatusCode status_to_return) { | 75 void ScheduleTaskIfIdle(SyncStatusCode status_to_return) { |
| 75 task_manager_->ScheduleTaskIfIdle( | 76 task_manager_->ScheduleTaskIfIdle( |
| 76 FROM_HERE, | 77 FROM_HERE, |
| 77 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), | 78 base::Bind(&TaskManagerClient::DoTask, AsWeakPtr(), |
| 78 status_to_return, true /* idle */), | 79 status_to_return, true /* idle */), |
| 79 SyncStatusCallback()); | 80 SyncStatusCallback()); |
| 80 } | 81 } |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 bool task_started = false; | 244 bool task_started = false; |
| 244 bool task_completed = false; | 245 bool task_completed = false; |
| 245 | 246 |
| 246 { | 247 { |
| 247 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); | 248 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); |
| 248 task_manager.Initialize(SYNC_STATUS_OK); | 249 task_manager.Initialize(SYNC_STATUS_OK); |
| 249 task_manager.ScheduleSyncTask( | 250 task_manager.ScheduleSyncTask( |
| 250 FROM_HERE, | 251 FROM_HERE, |
| 251 scoped_ptr<SyncTask>(new MultihopSyncTask( | 252 scoped_ptr<SyncTask>(new MultihopSyncTask( |
| 252 &task_started, &task_completed)), | 253 &task_started, &task_completed)), |
| 254 SyncTaskManager::PRIORITY_MED, |
| 253 base::Bind(&IncrementAndAssign, 0, &callback_count, &status)); | 255 base::Bind(&IncrementAndAssign, 0, &callback_count, &status)); |
| 254 } | 256 } |
| 255 | 257 |
| 256 message_loop.RunUntilIdle(); | 258 message_loop.RunUntilIdle(); |
| 257 EXPECT_EQ(0, callback_count); | 259 EXPECT_EQ(0, callback_count); |
| 258 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); | 260 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); |
| 259 EXPECT_TRUE(task_started); | 261 EXPECT_TRUE(task_started); |
| 260 EXPECT_FALSE(task_completed); | 262 EXPECT_FALSE(task_completed); |
| 261 } | 263 } |
| 262 | 264 |
| 263 TEST(SyncTaskManagerTest, ScheduleAndCancelTask) { | 265 TEST(SyncTaskManagerTest, ScheduleAndCancelTask) { |
| 264 base::MessageLoop message_loop; | 266 base::MessageLoop message_loop; |
| 265 | 267 |
| 266 int callback_count = 0; | 268 int callback_count = 0; |
| 267 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 269 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 268 | 270 |
| 269 bool task_started = false; | 271 bool task_started = false; |
| 270 bool task_completed = false; | 272 bool task_completed = false; |
| 271 | 273 |
| 272 { | 274 { |
| 273 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); | 275 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); |
| 274 task_manager.Initialize(SYNC_STATUS_OK); | 276 task_manager.Initialize(SYNC_STATUS_OK); |
| 275 MultihopSyncTask* task = new MultihopSyncTask( | 277 MultihopSyncTask* task = new MultihopSyncTask( |
| 276 &task_started, &task_completed); | 278 &task_started, &task_completed); |
| 277 task_manager.ScheduleTask( | 279 task_manager.ScheduleTask( |
| 278 FROM_HERE, | 280 FROM_HERE, |
| 279 base::Bind(&MultihopSyncTask::Run, base::Unretained(task)), | 281 base::Bind(&MultihopSyncTask::Run, base::Unretained(task)), |
| 282 SyncTaskManager::PRIORITY_MED, |
| 280 base::Bind(&IncrementAndAssignWithOwnedPointer<MultihopSyncTask>, | 283 base::Bind(&IncrementAndAssignWithOwnedPointer<MultihopSyncTask>, |
| 281 base::Owned(task), &callback_count, &status)); | 284 base::Owned(task), &callback_count, &status)); |
| 282 } | 285 } |
| 283 | 286 |
| 284 message_loop.RunUntilIdle(); | 287 message_loop.RunUntilIdle(); |
| 285 EXPECT_EQ(0, callback_count); | 288 EXPECT_EQ(0, callback_count); |
| 286 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); | 289 EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); |
| 287 EXPECT_TRUE(task_started); | 290 EXPECT_TRUE(task_started); |
| 288 EXPECT_FALSE(task_completed); | 291 EXPECT_FALSE(task_completed); |
| 289 } | 292 } |
| 290 | 293 |
| 291 TEST(SyncTaskManagerTest, ScheduleTaskAtPriority) { | 294 TEST(SyncTaskManagerTest, ScheduleTaskAtPriority) { |
| 292 base::MessageLoop message_loop; | 295 base::MessageLoop message_loop; |
| 293 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); | 296 SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); |
| 294 task_manager.Initialize(SYNC_STATUS_OK); | 297 task_manager.Initialize(SYNC_STATUS_OK); |
| 295 | 298 |
| 296 int callback_count = 0; | 299 int callback_count = 0; |
| 297 SyncStatusCode callback_status1 = SYNC_STATUS_OK; | 300 SyncStatusCode callback_status1 = SYNC_STATUS_OK; |
| 298 SyncStatusCode callback_status2 = SYNC_STATUS_OK; | 301 SyncStatusCode callback_status2 = SYNC_STATUS_OK; |
| 299 SyncStatusCode callback_status3 = SYNC_STATUS_OK; | 302 SyncStatusCode callback_status3 = SYNC_STATUS_OK; |
| 300 SyncStatusCode callback_status4 = SYNC_STATUS_OK; | 303 SyncStatusCode callback_status4 = SYNC_STATUS_OK; |
| 301 SyncStatusCode callback_status5 = SYNC_STATUS_OK; | 304 SyncStatusCode callback_status5 = SYNC_STATUS_OK; |
| 302 | 305 |
| 303 // This will run first even if its priority is low, since there're no | 306 // This will run first even if its priority is low, since there're no |
| 304 // pending tasks. | 307 // pending tasks. |
| 305 task_manager.ScheduleTaskAtPriority( | 308 task_manager.ScheduleTask( |
| 306 FROM_HERE, | 309 FROM_HERE, |
| 307 base::Bind(&DumbTask, kStatus1), | 310 base::Bind(&DumbTask, kStatus1), |
| 308 SyncTaskManager::PRIORITY_LOW, | 311 SyncTaskManager::PRIORITY_LOW, |
| 309 base::Bind(&IncrementAndAssign, 0, &callback_count, &callback_status1)); | 312 base::Bind(&IncrementAndAssign, 0, &callback_count, &callback_status1)); |
| 310 | 313 |
| 311 // This runs last (expected counter == 4). | 314 // This runs last (expected counter == 4). |
| 312 task_manager.ScheduleTaskAtPriority( | 315 task_manager.ScheduleTask( |
| 313 FROM_HERE, | 316 FROM_HERE, |
| 314 base::Bind(&DumbTask, kStatus2), | 317 base::Bind(&DumbTask, kStatus2), |
| 315 SyncTaskManager::PRIORITY_LOW, | 318 SyncTaskManager::PRIORITY_LOW, |
| 316 base::Bind(&IncrementAndAssign, 4, &callback_count, &callback_status2)); | 319 base::Bind(&IncrementAndAssign, 4, &callback_count, &callback_status2)); |
| 317 | 320 |
| 318 // This runs second (expected counter == 1). | 321 // This runs second (expected counter == 1). |
| 319 task_manager.ScheduleTaskAtPriority( | 322 task_manager.ScheduleTask( |
| 320 FROM_HERE, | 323 FROM_HERE, |
| 321 base::Bind(&DumbTask, kStatus3), | 324 base::Bind(&DumbTask, kStatus3), |
| 322 SyncTaskManager::PRIORITY_HIGH, | 325 SyncTaskManager::PRIORITY_HIGH, |
| 323 base::Bind(&IncrementAndAssign, 1, &callback_count, &callback_status3)); | 326 base::Bind(&IncrementAndAssign, 1, &callback_count, &callback_status3)); |
| 324 | 327 |
| 325 // This runs fourth (expected counter == 3). | 328 // This runs fourth (expected counter == 3). |
| 326 task_manager.ScheduleTaskAtPriority( | 329 task_manager.ScheduleTask( |
| 327 FROM_HERE, | 330 FROM_HERE, |
| 328 base::Bind(&DumbTask, kStatus4), | 331 base::Bind(&DumbTask, kStatus4), |
| 329 SyncTaskManager::PRIORITY_MED, | 332 SyncTaskManager::PRIORITY_MED, |
| 330 base::Bind(&IncrementAndAssign, 3, &callback_count, &callback_status4)); | 333 base::Bind(&IncrementAndAssign, 3, &callback_count, &callback_status4)); |
| 331 | 334 |
| 332 // This runs third (expected counter == 2). | 335 // This runs third (expected counter == 2). |
| 333 task_manager.ScheduleTaskAtPriority( | 336 task_manager.ScheduleTask( |
| 334 FROM_HERE, | 337 FROM_HERE, |
| 335 base::Bind(&DumbTask, kStatus5), | 338 base::Bind(&DumbTask, kStatus5), |
| 336 SyncTaskManager::PRIORITY_HIGH, | 339 SyncTaskManager::PRIORITY_HIGH, |
| 337 base::Bind(&IncrementAndAssign, 2, &callback_count, &callback_status5)); | 340 base::Bind(&IncrementAndAssign, 2, &callback_count, &callback_status5)); |
| 338 | 341 |
| 339 message_loop.RunUntilIdle(); | 342 message_loop.RunUntilIdle(); |
| 340 | 343 |
| 341 EXPECT_EQ(kStatus1, callback_status1); | 344 EXPECT_EQ(kStatus1, callback_status1); |
| 342 EXPECT_EQ(kStatus2, callback_status2); | 345 EXPECT_EQ(kStatus2, callback_status2); |
| 343 EXPECT_EQ(kStatus3, callback_status3); | 346 EXPECT_EQ(kStatus3, callback_status3); |
| 344 EXPECT_EQ(kStatus4, callback_status4); | 347 EXPECT_EQ(kStatus4, callback_status4); |
| 345 EXPECT_EQ(kStatus5, callback_status5); | 348 EXPECT_EQ(kStatus5, callback_status5); |
| 346 EXPECT_EQ(5, callback_count); | 349 EXPECT_EQ(5, callback_count); |
| 347 } | 350 } |
| 348 | 351 |
| 349 } // namespace sync_file_system | 352 } // namespace sync_file_system |
| OLD | NEW |