Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "sync/syncable/directory_unittest.h" | 5 #include "sync/syncable/directory_unittest.h" |
| 6 | 6 |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "base/test/values_test_util.h" | 8 #include "base/test/values_test_util.h" |
| 9 #include "sync/internal_api/public/base/attachment_id_proto.h" | 9 #include "sync/internal_api/public/base/attachment_id_proto.h" |
| 10 #include "sync/syncable/syncable_proto_util.h" | 10 #include "sync/syncable/syncable_proto_util.h" |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 545 } | 545 } |
| 546 | 546 |
| 547 { | 547 { |
| 548 // Verify undeleted entry is gone from database. | 548 // Verify undeleted entry is gone from database. |
| 549 ReadTransaction trans(FROM_HERE, dir().get()); | 549 ReadTransaction trans(FROM_HERE, dir().get()); |
| 550 DeleteJournal* delete_journal = dir()->delete_journal(); | 550 DeleteJournal* delete_journal = dir()->delete_journal(); |
| 551 ASSERT_EQ(0u, delete_journal->GetDeleteJournalSize(&trans)); | 551 ASSERT_EQ(0u, delete_journal->GetDeleteJournalSize(&trans)); |
| 552 } | 552 } |
| 553 } | 553 } |
| 554 | 554 |
| 555 TEST_F(SyncableDirectoryTest, TestPurgeDeletedEntriesOnReload) { | |
| 556 sync_pb::EntitySpecifics specifics; | |
| 557 AddDefaultFieldValue(PREFERENCES, &specifics); | |
| 558 | |
| 559 const int CLIENT_COUNT = 2; | |
|
Nicolas Zea
2015/03/17 01:05:17
nit: const variables should be of the form kCamelC
| |
| 560 const int SERVER_COUNT = 5; | |
| 561 const int TEST_COUNT = CLIENT_COUNT + SERVER_COUNT; | |
| 562 int64 handles[TEST_COUNT]; | |
| 563 | |
| 564 // The idea is to recreate various combinations of IDs, IS_DEL, | |
| 565 // IS_UNSYNCED, and IS_UNAPPLIED_UPDATE flags to test all combinations | |
| 566 // for DirectoryBackingStore::SafeToPurgeOnLoading. | |
| 567 // 0: client ID, IS_DEL, IS_UNSYNCED | |
| 568 // 1: client ID, IS_UNSYNCED | |
| 569 // 2: server ID, IS_DEL, IS_UNSYNCED, IS_UNAPPLIED_UPDATE | |
| 570 // 3: server ID, IS_DEL, IS_UNSYNCED | |
| 571 // 4: server ID, IS_DEL, IS_UNAPPLIED_UPDATE | |
| 572 // 5: server ID, IS_DEL | |
| 573 // 6: server ID | |
| 574 { | |
| 575 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | |
| 576 | |
| 577 for (int i = 0; i < TEST_COUNT; i++) { | |
| 578 std::string name = base::StringPrintf("item%d", i); | |
| 579 MutableEntry item(&trans, CREATE, PREFERENCES, trans.root_id(), name); | |
| 580 ASSERT_TRUE(item.good()); | |
| 581 | |
| 582 handles[i] = item.GetMetahandle(); | |
| 583 | |
| 584 if (i < CLIENT_COUNT) { | |
| 585 item.PutId(TestIdFactory::FromNumber(i - CLIENT_COUNT)); | |
| 586 } else { | |
| 587 item.PutId(TestIdFactory::FromNumber(i)); | |
| 588 } | |
| 589 | |
| 590 item.PutUniqueClientTag(name); | |
| 591 item.PutIsUnsynced(true); | |
| 592 item.PutSpecifics(specifics); | |
| 593 item.PutServerSpecifics(specifics); | |
| 594 | |
| 595 if (i >= CLIENT_COUNT) { | |
| 596 item.PutBaseVersion(10); | |
| 597 item.PutServerVersion(10); | |
| 598 } | |
| 599 | |
| 600 // Set flags | |
| 601 if (i != 1 && i != 6) | |
| 602 item.PutIsDel(true); | |
| 603 | |
| 604 if (i >= 4) | |
| 605 item.PutIsUnsynced(false); | |
| 606 | |
| 607 if (i == 2 || i == 4) | |
| 608 item.PutIsUnappliedUpdate(true); | |
| 609 } | |
| 610 } | |
| 611 ASSERT_EQ(OPENED, SimulateSaveAndReloadDir()); | |
| 612 | |
| 613 // Expect items 0 and 5 to be purged | |
|
Nicolas Zea
2015/03/17 01:05:17
nit: explain why?
| |
| 614 std::vector<int64> expected_purged; | |
| 615 expected_purged.push_back(0); | |
| 616 expected_purged.push_back(5); | |
| 617 | |
| 618 std::vector<int64> actually_purged; | |
| 619 { | |
| 620 ReadTransaction trans(FROM_HERE, dir().get()); | |
| 621 for (int i = 0; i < TEST_COUNT; i++) { | |
| 622 Entry item(&trans, GET_BY_HANDLE, handles[i]); | |
| 623 if (!item.good()) { | |
| 624 actually_purged.push_back(i); | |
| 625 } | |
| 626 } | |
| 627 } | |
| 628 | |
| 629 EXPECT_EQ(expected_purged, actually_purged); | |
| 630 } | |
| 631 | |
| 555 TEST_F(SyncableDirectoryTest, TestBasicLookupNonExistantID) { | 632 TEST_F(SyncableDirectoryTest, TestBasicLookupNonExistantID) { |
| 556 ReadTransaction rtrans(FROM_HERE, dir().get()); | 633 ReadTransaction rtrans(FROM_HERE, dir().get()); |
| 557 Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99)); | 634 Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99)); |
| 558 ASSERT_FALSE(e.good()); | 635 ASSERT_FALSE(e.good()); |
| 559 } | 636 } |
| 560 | 637 |
| 561 TEST_F(SyncableDirectoryTest, TestBasicLookupValidID) { | 638 TEST_F(SyncableDirectoryTest, TestBasicLookupValidID) { |
| 562 CreateEntry(BOOKMARKS, "rtc"); | 639 CreateEntry(BOOKMARKS, "rtc"); |
| 563 ReadTransaction rtrans(FROM_HERE, dir().get()); | 640 ReadTransaction rtrans(FROM_HERE, dir().get()); |
| 564 Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99)); | 641 Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99)); |
| (...skipping 1311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1876 ASSERT_EQ(1, p_root.GetTotalNodeCount() - 1); | 1953 ASSERT_EQ(1, p_root.GetTotalNodeCount() - 1); |
| 1877 Entry a_root(&trans, GET_BY_ID, a_root_id); | 1954 Entry a_root(&trans, GET_BY_ID, a_root_id); |
| 1878 ASSERT_EQ(item2_id, a_root.GetFirstChildId()); | 1955 ASSERT_EQ(item2_id, a_root.GetFirstChildId()); |
| 1879 ASSERT_EQ(1, a_root.GetTotalNodeCount() - 1); | 1956 ASSERT_EQ(1, a_root.GetTotalNodeCount() - 1); |
| 1880 } | 1957 } |
| 1881 } | 1958 } |
| 1882 | 1959 |
| 1883 } // namespace syncable | 1960 } // namespace syncable |
| 1884 | 1961 |
| 1885 } // namespace syncer | 1962 } // namespace syncer |
| OLD | NEW |