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 |