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 "chrome/browser/chromeos/drive/sync/entry_update_performer.h" | 5 #include "chrome/browser/chromeos/drive/sync/entry_update_performer.h" |
6 | 6 |
7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/md5.h" | 9 #include "base/md5.h" |
10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 fake_service()->GetResourceEntry( | 228 fake_service()->GetResourceEntry( |
229 kResourceId, | 229 kResourceId, |
230 google_apis::test_util::CreateCopyResultCallback(&gdata_error, | 230 google_apis::test_util::CreateCopyResultCallback(&gdata_error, |
231 &server_entry)); | 231 &server_entry)); |
232 test_util::RunBlockingPoolTask(); | 232 test_util::RunBlockingPoolTask(); |
233 EXPECT_EQ(google_apis::HTTP_SUCCESS, gdata_error); | 233 EXPECT_EQ(google_apis::HTTP_SUCCESS, gdata_error); |
234 EXPECT_EQ(static_cast<int64>(kTestFileContent.size()), | 234 EXPECT_EQ(static_cast<int64>(kTestFileContent.size()), |
235 server_entry->file_size()); | 235 server_entry->file_size()); |
236 | 236 |
237 // Make sure that the cache is no longer dirty. | 237 // Make sure that the cache is no longer dirty. |
238 bool success = false; | |
239 FileCacheEntry cache_entry; | 238 FileCacheEntry cache_entry; |
240 base::PostTaskAndReplyWithResult( | 239 base::PostTaskAndReplyWithResult( |
241 blocking_task_runner(), | 240 blocking_task_runner(), |
242 FROM_HERE, | 241 FROM_HERE, |
243 base::Bind(&FileCache::GetCacheEntry, | 242 base::Bind(&FileCache::GetCacheEntry, |
244 base::Unretained(cache()), | 243 base::Unretained(cache()), |
245 local_id, | 244 local_id, |
246 &cache_entry), | 245 &cache_entry), |
247 google_apis::test_util::CreateCopyResultCallback(&success)); | 246 google_apis::test_util::CreateCopyResultCallback(&error)); |
248 test_util::RunBlockingPoolTask(); | 247 test_util::RunBlockingPoolTask(); |
249 ASSERT_TRUE(success); | 248 ASSERT_EQ(FILE_ERROR_OK, error); |
250 EXPECT_FALSE(cache_entry.is_dirty()); | 249 EXPECT_FALSE(cache_entry.is_dirty()); |
251 } | 250 } |
252 | 251 |
253 TEST_F(EntryUpdatePerformerTest, UpdateEntry_ContentUpdateMd5Check) { | 252 TEST_F(EntryUpdatePerformerTest, UpdateEntry_ContentUpdateMd5Check) { |
254 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 253 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
255 const std::string kResourceId("file:2_file_resource_id"); | 254 const std::string kResourceId("file:2_file_resource_id"); |
256 | 255 |
257 const std::string local_id = GetLocalId(kFilePath); | 256 const std::string local_id = GetLocalId(kFilePath); |
258 EXPECT_FALSE(local_id.empty()); | 257 EXPECT_FALSE(local_id.empty()); |
259 | 258 |
(...skipping 22 matching lines...) Expand all Loading... |
282 fake_service()->GetResourceEntry( | 281 fake_service()->GetResourceEntry( |
283 kResourceId, | 282 kResourceId, |
284 google_apis::test_util::CreateCopyResultCallback(&gdata_error, | 283 google_apis::test_util::CreateCopyResultCallback(&gdata_error, |
285 &server_entry)); | 284 &server_entry)); |
286 test_util::RunBlockingPoolTask(); | 285 test_util::RunBlockingPoolTask(); |
287 EXPECT_EQ(google_apis::HTTP_SUCCESS, gdata_error); | 286 EXPECT_EQ(google_apis::HTTP_SUCCESS, gdata_error); |
288 EXPECT_EQ(static_cast<int64>(kTestFileContent.size()), | 287 EXPECT_EQ(static_cast<int64>(kTestFileContent.size()), |
289 server_entry->file_size()); | 288 server_entry->file_size()); |
290 | 289 |
291 // Make sure that the cache is no longer dirty. | 290 // Make sure that the cache is no longer dirty. |
292 bool success = false; | |
293 FileCacheEntry cache_entry; | 291 FileCacheEntry cache_entry; |
294 base::PostTaskAndReplyWithResult( | 292 base::PostTaskAndReplyWithResult( |
295 blocking_task_runner(), | 293 blocking_task_runner(), |
296 FROM_HERE, | 294 FROM_HERE, |
297 base::Bind(&FileCache::GetCacheEntry, | 295 base::Bind(&FileCache::GetCacheEntry, |
298 base::Unretained(cache()), | 296 base::Unretained(cache()), |
299 local_id, | 297 local_id, |
300 &cache_entry), | 298 &cache_entry), |
301 google_apis::test_util::CreateCopyResultCallback(&success)); | 299 google_apis::test_util::CreateCopyResultCallback(&error)); |
302 test_util::RunBlockingPoolTask(); | 300 test_util::RunBlockingPoolTask(); |
303 ASSERT_TRUE(success); | 301 ASSERT_EQ(FILE_ERROR_OK, error); |
304 EXPECT_FALSE(cache_entry.is_dirty()); | 302 EXPECT_FALSE(cache_entry.is_dirty()); |
305 | 303 |
306 // Again mark the cache file dirty. | 304 // Again mark the cache file dirty. |
307 scoped_ptr<base::ScopedClosureRunner> file_closer; | 305 scoped_ptr<base::ScopedClosureRunner> file_closer; |
308 error = FILE_ERROR_FAILED; | 306 error = FILE_ERROR_FAILED; |
309 base::PostTaskAndReplyWithResult( | 307 base::PostTaskAndReplyWithResult( |
310 blocking_task_runner(), | 308 blocking_task_runner(), |
311 FROM_HERE, | 309 FROM_HERE, |
312 base::Bind(&FileCache::OpenForWrite, | 310 base::Bind(&FileCache::OpenForWrite, |
313 base::Unretained(cache()), | 311 base::Unretained(cache()), |
(...skipping 13 matching lines...) Expand all Loading... |
327 local_id, | 325 local_id, |
328 ClientContext(USER_INITIATED), | 326 ClientContext(USER_INITIATED), |
329 google_apis::test_util::CreateCopyResultCallback(&error)); | 327 google_apis::test_util::CreateCopyResultCallback(&error)); |
330 test_util::RunBlockingPoolTask(); | 328 test_util::RunBlockingPoolTask(); |
331 EXPECT_EQ(FILE_ERROR_OK, error); | 329 EXPECT_EQ(FILE_ERROR_OK, error); |
332 | 330 |
333 EXPECT_EQ(original_changestamp, | 331 EXPECT_EQ(original_changestamp, |
334 fake_service()->about_resource().largest_change_id()); | 332 fake_service()->about_resource().largest_change_id()); |
335 | 333 |
336 // Make sure that the cache is no longer dirty. | 334 // Make sure that the cache is no longer dirty. |
337 success = false; | |
338 base::PostTaskAndReplyWithResult( | 335 base::PostTaskAndReplyWithResult( |
339 blocking_task_runner(), | 336 blocking_task_runner(), |
340 FROM_HERE, | 337 FROM_HERE, |
341 base::Bind(&FileCache::GetCacheEntry, | 338 base::Bind(&FileCache::GetCacheEntry, |
342 base::Unretained(cache()), | 339 base::Unretained(cache()), |
343 local_id, | 340 local_id, |
344 &cache_entry), | 341 &cache_entry), |
345 google_apis::test_util::CreateCopyResultCallback(&success)); | 342 google_apis::test_util::CreateCopyResultCallback(&error)); |
346 test_util::RunBlockingPoolTask(); | 343 test_util::RunBlockingPoolTask(); |
347 ASSERT_TRUE(success); | 344 ASSERT_EQ(FILE_ERROR_OK, error); |
348 EXPECT_FALSE(cache_entry.is_dirty()); | 345 EXPECT_FALSE(cache_entry.is_dirty()); |
349 } | 346 } |
350 | 347 |
351 TEST_F(EntryUpdatePerformerTest, UpdateEntry_OpenedForWrite) { | 348 TEST_F(EntryUpdatePerformerTest, UpdateEntry_OpenedForWrite) { |
352 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 349 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
353 const std::string kResourceId("file:2_file_resource_id"); | 350 const std::string kResourceId("file:2_file_resource_id"); |
354 | 351 |
355 const std::string local_id = GetLocalId(kFilePath); | 352 const std::string local_id = GetLocalId(kFilePath); |
356 EXPECT_FALSE(local_id.empty()); | 353 EXPECT_FALSE(local_id.empty()); |
357 | 354 |
(...skipping 17 matching lines...) Expand all Loading... |
375 // Update. This should not clear the dirty bit. | 372 // Update. This should not clear the dirty bit. |
376 error = FILE_ERROR_FAILED; | 373 error = FILE_ERROR_FAILED; |
377 performer_->UpdateEntry( | 374 performer_->UpdateEntry( |
378 local_id, | 375 local_id, |
379 ClientContext(USER_INITIATED), | 376 ClientContext(USER_INITIATED), |
380 google_apis::test_util::CreateCopyResultCallback(&error)); | 377 google_apis::test_util::CreateCopyResultCallback(&error)); |
381 test_util::RunBlockingPoolTask(); | 378 test_util::RunBlockingPoolTask(); |
382 EXPECT_EQ(FILE_ERROR_OK, error); | 379 EXPECT_EQ(FILE_ERROR_OK, error); |
383 | 380 |
384 // Make sure that the cache is still dirty. | 381 // Make sure that the cache is still dirty. |
385 bool success = false; | |
386 FileCacheEntry cache_entry; | 382 FileCacheEntry cache_entry; |
387 base::PostTaskAndReplyWithResult( | 383 base::PostTaskAndReplyWithResult( |
388 blocking_task_runner(), | 384 blocking_task_runner(), |
389 FROM_HERE, | 385 FROM_HERE, |
390 base::Bind(&FileCache::GetCacheEntry, | 386 base::Bind(&FileCache::GetCacheEntry, |
391 base::Unretained(cache()), | 387 base::Unretained(cache()), |
392 local_id, | 388 local_id, |
393 &cache_entry), | 389 &cache_entry), |
394 google_apis::test_util::CreateCopyResultCallback(&success)); | 390 google_apis::test_util::CreateCopyResultCallback(&error)); |
395 test_util::RunBlockingPoolTask(); | 391 test_util::RunBlockingPoolTask(); |
396 EXPECT_TRUE(success); | 392 EXPECT_EQ(FILE_ERROR_OK, error); |
397 EXPECT_TRUE(cache_entry.is_dirty()); | 393 EXPECT_TRUE(cache_entry.is_dirty()); |
398 | 394 |
399 // Close the file. | 395 // Close the file. |
400 file_closer.reset(); | 396 file_closer.reset(); |
401 | 397 |
402 // Update. This should clear the dirty bit. | 398 // Update. This should clear the dirty bit. |
403 error = FILE_ERROR_FAILED; | 399 error = FILE_ERROR_FAILED; |
404 performer_->UpdateEntry( | 400 performer_->UpdateEntry( |
405 local_id, | 401 local_id, |
406 ClientContext(USER_INITIATED), | 402 ClientContext(USER_INITIATED), |
407 google_apis::test_util::CreateCopyResultCallback(&error)); | 403 google_apis::test_util::CreateCopyResultCallback(&error)); |
408 test_util::RunBlockingPoolTask(); | 404 test_util::RunBlockingPoolTask(); |
409 EXPECT_EQ(FILE_ERROR_OK, error); | 405 EXPECT_EQ(FILE_ERROR_OK, error); |
410 | 406 |
411 // Make sure that the cache is no longer dirty. | 407 // Make sure that the cache is no longer dirty. |
412 base::PostTaskAndReplyWithResult( | 408 base::PostTaskAndReplyWithResult( |
413 blocking_task_runner(), | 409 blocking_task_runner(), |
414 FROM_HERE, | 410 FROM_HERE, |
415 base::Bind(&FileCache::GetCacheEntry, | 411 base::Bind(&FileCache::GetCacheEntry, |
416 base::Unretained(cache()), | 412 base::Unretained(cache()), |
417 local_id, | 413 local_id, |
418 &cache_entry), | 414 &cache_entry), |
419 google_apis::test_util::CreateCopyResultCallback(&success)); | 415 google_apis::test_util::CreateCopyResultCallback(&error)); |
420 test_util::RunBlockingPoolTask(); | 416 test_util::RunBlockingPoolTask(); |
421 EXPECT_TRUE(success); | 417 EXPECT_EQ(FILE_ERROR_OK, error); |
422 EXPECT_FALSE(cache_entry.is_dirty()); | 418 EXPECT_FALSE(cache_entry.is_dirty()); |
423 } | 419 } |
424 | 420 |
425 TEST_F(EntryUpdatePerformerTest, UpdateEntry_UploadNewFile) { | 421 TEST_F(EntryUpdatePerformerTest, UpdateEntry_UploadNewFile) { |
426 // Create a new file locally. | 422 // Create a new file locally. |
427 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/New File.txt")); | 423 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/New File.txt")); |
428 | 424 |
429 ResourceEntry parent; | 425 ResourceEntry parent; |
430 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kFilePath.DirName(), &parent)); | 426 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kFilePath.DirName(), &parent)); |
431 | 427 |
(...skipping 24 matching lines...) Expand all Loading... |
456 google_apis::test_util::CreateCopyResultCallback(&error)); | 452 google_apis::test_util::CreateCopyResultCallback(&error)); |
457 test_util::RunBlockingPoolTask(); | 453 test_util::RunBlockingPoolTask(); |
458 EXPECT_EQ(FILE_ERROR_OK, error); | 454 EXPECT_EQ(FILE_ERROR_OK, error); |
459 | 455 |
460 // The entry got a resource ID. | 456 // The entry got a resource ID. |
461 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kFilePath, &entry)); | 457 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kFilePath, &entry)); |
462 EXPECT_FALSE(entry.resource_id().empty()); | 458 EXPECT_FALSE(entry.resource_id().empty()); |
463 EXPECT_EQ(ResourceEntry::CLEAN, entry.metadata_edit_state()); | 459 EXPECT_EQ(ResourceEntry::CLEAN, entry.metadata_edit_state()); |
464 | 460 |
465 // Make sure that the cache is no longer dirty. | 461 // Make sure that the cache is no longer dirty. |
466 bool success = false; | |
467 FileCacheEntry cache_entry; | 462 FileCacheEntry cache_entry; |
468 base::PostTaskAndReplyWithResult( | 463 base::PostTaskAndReplyWithResult( |
469 blocking_task_runner(), | 464 blocking_task_runner(), |
470 FROM_HERE, | 465 FROM_HERE, |
471 base::Bind(&FileCache::GetCacheEntry, | 466 base::Bind(&FileCache::GetCacheEntry, |
472 base::Unretained(cache()), | 467 base::Unretained(cache()), |
473 local_id, | 468 local_id, |
474 &cache_entry), | 469 &cache_entry), |
475 google_apis::test_util::CreateCopyResultCallback(&success)); | 470 google_apis::test_util::CreateCopyResultCallback(&error)); |
476 test_util::RunBlockingPoolTask(); | 471 test_util::RunBlockingPoolTask(); |
477 EXPECT_TRUE(success); | 472 EXPECT_EQ(FILE_ERROR_OK, error); |
478 EXPECT_FALSE(cache_entry.is_dirty()); | 473 EXPECT_FALSE(cache_entry.is_dirty()); |
479 | 474 |
480 // Make sure that we really created a file. | 475 // Make sure that we really created a file. |
481 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 476 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
482 scoped_ptr<google_apis::ResourceEntry> resource_entry; | 477 scoped_ptr<google_apis::ResourceEntry> resource_entry; |
483 fake_service()->GetResourceEntry( | 478 fake_service()->GetResourceEntry( |
484 entry.resource_id(), | 479 entry.resource_id(), |
485 google_apis::test_util::CreateCopyResultCallback(&status, | 480 google_apis::test_util::CreateCopyResultCallback(&status, |
486 &resource_entry)); | 481 &resource_entry)); |
487 test_util::RunBlockingPoolTask(); | 482 test_util::RunBlockingPoolTask(); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 google_apis::test_util::CreateCopyResultCallback(&status, | 607 google_apis::test_util::CreateCopyResultCallback(&status, |
613 &resource_entry)); | 608 &resource_entry)); |
614 test_util::RunBlockingPoolTask(); | 609 test_util::RunBlockingPoolTask(); |
615 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 610 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
616 ASSERT_TRUE(resource_entry); | 611 ASSERT_TRUE(resource_entry); |
617 EXPECT_TRUE(resource_entry->is_folder()); | 612 EXPECT_TRUE(resource_entry->is_folder()); |
618 } | 613 } |
619 | 614 |
620 } // namespace internal | 615 } // namespace internal |
621 } // namespace drive | 616 } // namespace drive |
OLD | NEW |