| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 <stdint.h> |
| 6 |
| 5 #include <string> | 7 #include <string> |
| 6 | 8 |
| 7 #include "base/basictypes.h" | |
| 8 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 9 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 10 #include "base/files/file_util.h" | 11 #include "base/files/file_util.h" |
| 11 #include "base/files/scoped_temp_dir.h" | 12 #include "base/files/scoped_temp_dir.h" |
| 12 #include "base/location.h" | 13 #include "base/location.h" |
| 13 #include "base/logging.h" | 14 #include "base/logging.h" |
| 14 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" |
| 16 #include "base/stl_util.h" | 17 #include "base/stl_util.h" |
| 17 #include "base/synchronization/condition_variable.h" | 18 #include "base/synchronization/condition_variable.h" |
| 18 #include "base/test/values_test_util.h" | 19 #include "base/test/values_test_util.h" |
| 19 #include "base/threading/platform_thread.h" | 20 #include "base/threading/platform_thread.h" |
| 20 #include "base/values.h" | 21 #include "base/values.h" |
| 22 #include "build/build_config.h" |
| 21 #include "sync/protocol/bookmark_specifics.pb.h" | 23 #include "sync/protocol/bookmark_specifics.pb.h" |
| 22 #include "sync/syncable/directory_backing_store.h" | 24 #include "sync/syncable/directory_backing_store.h" |
| 23 #include "sync/syncable/directory_change_delegate.h" | 25 #include "sync/syncable/directory_change_delegate.h" |
| 24 #include "sync/syncable/directory_unittest.h" | 26 #include "sync/syncable/directory_unittest.h" |
| 25 #include "sync/syncable/in_memory_directory_backing_store.h" | 27 #include "sync/syncable/in_memory_directory_backing_store.h" |
| 26 #include "sync/syncable/metahandle_set.h" | 28 #include "sync/syncable/metahandle_set.h" |
| 27 #include "sync/syncable/mutable_entry.h" | 29 #include "sync/syncable/mutable_entry.h" |
| 28 #include "sync/syncable/on_disk_directory_backing_store.h" | 30 #include "sync/syncable/on_disk_directory_backing_store.h" |
| 29 #include "sync/syncable/syncable_proto_util.h" | 31 #include "sync/syncable/syncable_proto_util.h" |
| 30 #include "sync/syncable/syncable_read_transaction.h" | 32 #include "sync/syncable/syncable_read_transaction.h" |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 { | 367 { |
| 366 ReadTransaction trans(FROM_HERE, dir().get()); | 368 ReadTransaction trans(FROM_HERE, dir().get()); |
| 367 Entry create(&trans, GET_BY_ID, create_id); | 369 Entry create(&trans, GET_BY_ID, create_id); |
| 368 EXPECT_EQ(1, CountEntriesWithName(&trans, trans.root_id(), create_name)); | 370 EXPECT_EQ(1, CountEntriesWithName(&trans, trans.root_id(), create_name)); |
| 369 Entry update(&trans, GET_BY_ID, update_id); | 371 Entry update(&trans, GET_BY_ID, update_id); |
| 370 create_post_save = create.GetKernelCopy(); | 372 create_post_save = create.GetKernelCopy(); |
| 371 update_post_save = update.GetKernelCopy(); | 373 update_post_save = update.GetKernelCopy(); |
| 372 } | 374 } |
| 373 int i = BEGIN_FIELDS; | 375 int i = BEGIN_FIELDS; |
| 374 for ( ; i < INT64_FIELDS_END ; ++i) { | 376 for ( ; i < INT64_FIELDS_END ; ++i) { |
| 375 EXPECT_EQ(create_pre_save.ref((Int64Field)i) + | 377 EXPECT_EQ( |
| 376 (i == TRANSACTION_VERSION ? 1 : 0), | 378 create_pre_save.ref((Int64Field)i) + (i == TRANSACTION_VERSION ? 1 : 0), |
| 377 create_post_save.ref((Int64Field)i)) | 379 create_post_save.ref((Int64Field)i)) |
| 378 << "int64 field #" << i << " changed during save/load"; | 380 << "int64_t field #" << i << " changed during save/load"; |
| 379 EXPECT_EQ(update_pre_save.ref((Int64Field)i), | 381 EXPECT_EQ(update_pre_save.ref((Int64Field)i), |
| 380 update_post_save.ref((Int64Field)i)) | 382 update_post_save.ref((Int64Field)i)) |
| 381 << "int64 field #" << i << " changed during save/load"; | 383 << "int64_t field #" << i << " changed during save/load"; |
| 382 } | 384 } |
| 383 for ( ; i < TIME_FIELDS_END ; ++i) { | 385 for ( ; i < TIME_FIELDS_END ; ++i) { |
| 384 EXPECT_EQ(create_pre_save.ref((TimeField)i), | 386 EXPECT_EQ(create_pre_save.ref((TimeField)i), |
| 385 create_post_save.ref((TimeField)i)) | 387 create_post_save.ref((TimeField)i)) |
| 386 << "time field #" << i << " changed during save/load"; | 388 << "time field #" << i << " changed during save/load"; |
| 387 EXPECT_EQ(update_pre_save.ref((TimeField)i), | 389 EXPECT_EQ(update_pre_save.ref((TimeField)i), |
| 388 update_post_save.ref((TimeField)i)) | 390 update_post_save.ref((TimeField)i)) |
| 389 << "time field #" << i << " changed during save/load"; | 391 << "time field #" << i << " changed during save/load"; |
| 390 } | 392 } |
| 391 for ( ; i < ID_FIELDS_END ; ++i) { | 393 for ( ; i < ID_FIELDS_END ; ++i) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 EXPECT_TRUE(create_pre_save.ref((UniquePositionField)i).Equals( | 426 EXPECT_TRUE(create_pre_save.ref((UniquePositionField)i).Equals( |
| 425 create_post_save.ref((UniquePositionField)i))) | 427 create_post_save.ref((UniquePositionField)i))) |
| 426 << "Position field #" << i << " changed during save/load"; | 428 << "Position field #" << i << " changed during save/load"; |
| 427 EXPECT_TRUE(update_pre_save.ref((UniquePositionField)i).Equals( | 429 EXPECT_TRUE(update_pre_save.ref((UniquePositionField)i).Equals( |
| 428 update_post_save.ref((UniquePositionField)i))) | 430 update_post_save.ref((UniquePositionField)i))) |
| 429 << "Position field #" << i << " changed during save/load"; | 431 << "Position field #" << i << " changed during save/load"; |
| 430 } | 432 } |
| 431 } | 433 } |
| 432 | 434 |
| 433 TEST_F(OnDiskSyncableDirectoryTest, TestSaveChangesFailure) { | 435 TEST_F(OnDiskSyncableDirectoryTest, TestSaveChangesFailure) { |
| 434 int64 handle1 = 0; | 436 int64_t handle1 = 0; |
| 435 // Set up an item using a regular, saveable directory. | 437 // Set up an item using a regular, saveable directory. |
| 436 { | 438 { |
| 437 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 439 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 438 | 440 |
| 439 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera"); | 441 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera"); |
| 440 ASSERT_TRUE(e1.good()); | 442 ASSERT_TRUE(e1.good()); |
| 441 EXPECT_TRUE(e1.GetKernelCopy().is_dirty()); | 443 EXPECT_TRUE(e1.GetKernelCopy().is_dirty()); |
| 442 handle1 = e1.GetMetahandle(); | 444 handle1 = e1.GetMetahandle(); |
| 443 e1.PutBaseVersion(1); | 445 e1.PutBaseVersion(1); |
| 444 e1.PutIsDir(true); | 446 e1.PutIsDir(true); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 460 aguilera.PutNonUniqueName("overwritten"); | 462 aguilera.PutNonUniqueName("overwritten"); |
| 461 EXPECT_TRUE(aguilera.GetKernelCopy().is_dirty()); | 463 EXPECT_TRUE(aguilera.GetKernelCopy().is_dirty()); |
| 462 EXPECT_TRUE(IsInDirtyMetahandles(handle1)); | 464 EXPECT_TRUE(IsInDirtyMetahandles(handle1)); |
| 463 } | 465 } |
| 464 ASSERT_TRUE(dir()->SaveChanges()); | 466 ASSERT_TRUE(dir()->SaveChanges()); |
| 465 | 467 |
| 466 // Now do some operations when SaveChanges() will fail. | 468 // Now do some operations when SaveChanges() will fail. |
| 467 StartFailingSaveChanges(); | 469 StartFailingSaveChanges(); |
| 468 ASSERT_TRUE(dir()->good()); | 470 ASSERT_TRUE(dir()->good()); |
| 469 | 471 |
| 470 int64 handle2 = 0; | 472 int64_t handle2 = 0; |
| 471 { | 473 { |
| 472 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 474 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 473 | 475 |
| 474 MutableEntry aguilera(&trans, GET_BY_HANDLE, handle1); | 476 MutableEntry aguilera(&trans, GET_BY_HANDLE, handle1); |
| 475 ASSERT_TRUE(aguilera.good()); | 477 ASSERT_TRUE(aguilera.good()); |
| 476 EXPECT_FALSE(aguilera.GetKernelCopy().is_dirty()); | 478 EXPECT_FALSE(aguilera.GetKernelCopy().is_dirty()); |
| 477 EXPECT_EQ(aguilera.GetNonUniqueName(), "overwritten"); | 479 EXPECT_EQ(aguilera.GetNonUniqueName(), "overwritten"); |
| 478 EXPECT_FALSE(aguilera.GetKernelCopy().is_dirty()); | 480 EXPECT_FALSE(aguilera.GetKernelCopy().is_dirty()); |
| 479 EXPECT_FALSE(IsInDirtyMetahandles(handle1)); | 481 EXPECT_FALSE(IsInDirtyMetahandles(handle1)); |
| 480 aguilera.PutNonUniqueName("christina"); | 482 aguilera.PutNonUniqueName("christina"); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 506 Entry kids(&trans, GET_BY_HANDLE, handle2); | 508 Entry kids(&trans, GET_BY_HANDLE, handle2); |
| 507 ASSERT_TRUE(kids.good()); | 509 ASSERT_TRUE(kids.good()); |
| 508 EXPECT_TRUE(kids.GetKernelCopy().is_dirty()); | 510 EXPECT_TRUE(kids.GetKernelCopy().is_dirty()); |
| 509 EXPECT_TRUE(IsInDirtyMetahandles(handle2)); | 511 EXPECT_TRUE(IsInDirtyMetahandles(handle2)); |
| 510 EXPECT_TRUE(aguilera.is_dirty()); | 512 EXPECT_TRUE(aguilera.is_dirty()); |
| 511 EXPECT_TRUE(IsInDirtyMetahandles(handle1)); | 513 EXPECT_TRUE(IsInDirtyMetahandles(handle1)); |
| 512 } | 514 } |
| 513 } | 515 } |
| 514 | 516 |
| 515 TEST_F(OnDiskSyncableDirectoryTest, TestSaveChangesFailureWithPurge) { | 517 TEST_F(OnDiskSyncableDirectoryTest, TestSaveChangesFailureWithPurge) { |
| 516 int64 handle1 = 0; | 518 int64_t handle1 = 0; |
| 517 // Set up an item and progress marker using a regular, saveable directory. | 519 // Set up an item and progress marker using a regular, saveable directory. |
| 518 dir()->SetDownloadProgress(BOOKMARKS, BuildProgress(BOOKMARKS)); | 520 dir()->SetDownloadProgress(BOOKMARKS, BuildProgress(BOOKMARKS)); |
| 519 { | 521 { |
| 520 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 522 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 521 | 523 |
| 522 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera"); | 524 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera"); |
| 523 ASSERT_TRUE(e1.good()); | 525 ASSERT_TRUE(e1.good()); |
| 524 EXPECT_TRUE(e1.GetKernelCopy().is_dirty()); | 526 EXPECT_TRUE(e1.GetKernelCopy().is_dirty()); |
| 525 handle1 = e1.GetMetahandle(); | 527 handle1 = e1.GetMetahandle(); |
| 526 e1.PutBaseVersion(1); | 528 e1.PutBaseVersion(1); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 TEST_F(SyncableClientTagTest, TestClientTagIndexDuplicateServer) { | 670 TEST_F(SyncableClientTagTest, TestClientTagIndexDuplicateServer) { |
| 669 EXPECT_TRUE(CreateWithDefaultTag(factory_.NewServerId(), true)); | 671 EXPECT_TRUE(CreateWithDefaultTag(factory_.NewServerId(), true)); |
| 670 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), true)); | 672 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), true)); |
| 671 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), false)); | 673 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), false)); |
| 672 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), false)); | 674 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), false)); |
| 673 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), true)); | 675 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), true)); |
| 674 } | 676 } |
| 675 | 677 |
| 676 } // namespace syncable | 678 } // namespace syncable |
| 677 } // namespace syncer | 679 } // namespace syncer |
| OLD | NEW |