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 |