| Index: sync/internal_api/sync_manager_impl_unittest.cc
|
| diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc
|
| index e77eb71c433d2fbf0657c4c5cac8cb4eb3aed582..edacea07b916adff37729a148e21fe689d98878c 100644
|
| --- a/sync/internal_api/sync_manager_impl_unittest.cc
|
| +++ b/sync/internal_api/sync_manager_impl_unittest.cc
|
| @@ -32,6 +32,7 @@
|
| #include "sync/internal_api/public/http_post_provider_interface.h"
|
| #include "sync/internal_api/public/read_node.h"
|
| #include "sync/internal_api/public/read_transaction.h"
|
| +#include "sync/internal_api/public/test/test_entry_factory.h"
|
| #include "sync/internal_api/public/test/test_internal_components_factory.h"
|
| #include "sync/internal_api/public/test/test_user_share.h"
|
| #include "sync/internal_api/public/write_node.h"
|
| @@ -60,6 +61,7 @@
|
| #include "sync/syncable/entry.h"
|
| #include "sync/syncable/mutable_entry.h"
|
| #include "sync/syncable/nigori_util.h"
|
| +#include "sync/syncable/read_transaction.h"
|
| #include "sync/syncable/syncable_id.h"
|
| #include "sync/syncable/write_transaction.h"
|
| #include "sync/test/callback_counter.h"
|
| @@ -84,11 +86,12 @@ using testing::StrictMock;
|
| namespace syncer {
|
|
|
| using sessions::SyncSessionSnapshot;
|
| +using syncable::GET_BY_HANDLE;
|
| using syncable::IS_DEL;
|
| using syncable::IS_UNSYNCED;
|
| -using syncable::kEncryptedString;
|
| using syncable::NON_UNIQUE_NAME;
|
| using syncable::SPECIFICS;
|
| +using syncable::kEncryptedString;
|
|
|
| namespace {
|
|
|
| @@ -888,7 +891,6 @@ class SyncManagerTest : public testing::Test,
|
| bool SetUpEncryption(NigoriStatus nigori_status,
|
| EncryptionStatus encryption_status) {
|
| UserShare* share = sync_manager_.GetUserShare();
|
| - share->directory->set_initial_sync_ended_for_type(NIGORI, true);
|
|
|
| // We need to create the nigori node as if it were an applied server update.
|
| int64 nigori_id = GetIdForDataType(NIGORI);
|
| @@ -1012,10 +1014,6 @@ class SyncManagerTest : public testing::Test,
|
| }
|
| }
|
|
|
| - void SetInitialSyncEndedForType(ModelType type, bool value) {
|
| - sync_manager_.directory()->set_initial_sync_ended_for_type(type, value);
|
| - }
|
| -
|
| InternalComponentsFactory::Switches GetSwitches() const {
|
| return switches_;
|
| }
|
| @@ -2855,7 +2853,6 @@ TEST_F(SyncManagerTestWithMockScheduler, MAYBE_BasicConfiguration) {
|
| for (ModelTypeSet::Iterator iter = ModelTypeSet::All().First(); iter.Good();
|
| iter.Inc()) {
|
| SetProgressMarkerForType(iter.Get(), true);
|
| - SetInitialSyncEndedForType(iter.Get(), true);
|
| }
|
|
|
| CallbackCounter ready_task_counter, retry_task_counter;
|
| @@ -2906,10 +2903,8 @@ TEST_F(SyncManagerTestWithMockScheduler, ReConfiguration) {
|
| iter.Inc()) {
|
| if (!disabled_types.Has(iter.Get())) {
|
| SetProgressMarkerForType(iter.Get(), true);
|
| - SetInitialSyncEndedForType(iter.Get(), true);
|
| } else {
|
| SetProgressMarkerForType(iter.Get(), false);
|
| - SetInitialSyncEndedForType(iter.Get(), false);
|
| }
|
| }
|
|
|
| @@ -2933,8 +2928,6 @@ TEST_F(SyncManagerTestWithMockScheduler, ReConfiguration) {
|
| EXPECT_EQ(new_routing_info, params.routing_info);
|
|
|
| // Verify only the recently disabled types were purged.
|
| - EXPECT_TRUE(sync_manager_.InitialSyncEndedTypes().Equals(
|
| - Difference(ModelTypeSet::All(), disabled_types)));
|
| EXPECT_TRUE(sync_manager_.GetTypesWithEmptyProgressMarkerToken(
|
| ModelTypeSet::All()).Equals(disabled_types));
|
| }
|
| @@ -2968,51 +2961,81 @@ TEST_F(SyncManagerTestWithMockScheduler, ConfigurationRetry) {
|
| EXPECT_EQ(new_routing_info, params.routing_info);
|
| }
|
|
|
| -// Test that PurgePartiallySyncedTypes purges only those types that don't
|
| -// have empty progress marker and don't have initial sync ended set.
|
| +// Test that PurgePartiallySyncedTypes purges only those types that have not
|
| +// fully completed their initial download and apply.
|
| TEST_F(SyncManagerTest, PurgePartiallySyncedTypes) {
|
| + ModelSafeRoutingInfo routing_info;
|
| + GetModelSafeRoutingInfo(&routing_info);
|
| + ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info);
|
| +
|
| UserShare* share = sync_manager_.GetUserShare();
|
|
|
| - // Set Nigori and Bookmarks to be partial types.
|
| - sync_pb::DataTypeProgressMarker nigori_marker;
|
| - nigori_marker.set_data_type_id(
|
| - GetSpecificsFieldNumberFromModelType(NIGORI));
|
| - nigori_marker.set_token("token");
|
| - sync_pb::DataTypeProgressMarker bookmark_marker;
|
| - bookmark_marker.set_data_type_id(
|
| - GetSpecificsFieldNumberFromModelType(BOOKMARKS));
|
| - bookmark_marker.set_token("token");
|
| - share->directory->SetDownloadProgress(NIGORI, nigori_marker);
|
| - share->directory->SetDownloadProgress(BOOKMARKS, bookmark_marker);
|
| -
|
| - // Set Preferences to be a full type.
|
| - sync_pb::DataTypeProgressMarker pref_marker;
|
| - pref_marker.set_data_type_id(
|
| - GetSpecificsFieldNumberFromModelType(PREFERENCES));
|
| - pref_marker.set_token("token");
|
| - share->directory->SetDownloadProgress(PREFERENCES, pref_marker);
|
| - share->directory->set_initial_sync_ended_for_type(PREFERENCES, true);
|
| + // The test harness automatically initializes all types in the routing info.
|
| + // Check that autofill is not among them.
|
| + ASSERT_FALSE(enabled_types.Has(AUTOFILL));
|
|
|
| - ModelTypeSet partial_types =
|
| - sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All());
|
| - EXPECT_FALSE(partial_types.Has(NIGORI));
|
| - EXPECT_FALSE(partial_types.Has(BOOKMARKS));
|
| - EXPECT_FALSE(partial_types.Has(PREFERENCES));
|
| + // Further ensure that the test harness did not create its root node.
|
| + {
|
| + syncable::ReadTransaction trans(FROM_HERE, share->directory.get());
|
| + syncable::Entry autofill_root_node(&trans, syncable::GET_BY_SERVER_TAG,
|
| + ModelTypeToRootTag(AUTOFILL));
|
| + ASSERT_FALSE(autofill_root_node.good());
|
| + }
|
| +
|
| + // One more redundant check.
|
| + ASSERT_FALSE(sync_manager_.InitialSyncEndedTypes().Has(AUTOFILL));
|
| +
|
| + // Give autofill a progress marker.
|
| + sync_pb::DataTypeProgressMarker autofill_marker;
|
| + autofill_marker.set_data_type_id(
|
| + GetSpecificsFieldNumberFromModelType(AUTOFILL));
|
| + autofill_marker.set_token("token");
|
| + share->directory->SetDownloadProgress(AUTOFILL, autofill_marker);
|
| +
|
| + // Also add a pending autofill root node update from the server.
|
| + TestEntryFactory factory_(share->directory.get());
|
| + int autofill_meta = factory_.CreateUnappliedRootNode(AUTOFILL);
|
| +
|
| + // Preferences is an enabled type. Check that the harness initialized it.
|
| + ASSERT_TRUE(enabled_types.Has(PREFERENCES));
|
| + ASSERT_TRUE(sync_manager_.InitialSyncEndedTypes().Has(PREFERENCES));
|
|
|
| + // Give preferencse a progress marker.
|
| + sync_pb::DataTypeProgressMarker prefs_marker;
|
| + prefs_marker.set_data_type_id(
|
| + GetSpecificsFieldNumberFromModelType(PREFERENCES));
|
| + prefs_marker.set_token("token");
|
| + share->directory->SetDownloadProgress(PREFERENCES, prefs_marker);
|
| +
|
| + // Add a fully synced preferences node under the root.
|
| + std::string pref_client_tag = "prefABC";
|
| + std::string pref_hashed_tag = "hashXYZ";
|
| + sync_pb::EntitySpecifics pref_specifics;
|
| + AddDefaultFieldValue(PREFERENCES, &pref_specifics);
|
| + int pref_meta = MakeServerNode(
|
| + share, PREFERENCES, pref_client_tag, pref_hashed_tag, pref_specifics);
|
| +
|
| + // And now, the purge.
|
| EXPECT_TRUE(sync_manager_.PurgePartiallySyncedTypes());
|
|
|
| - // Ensure only bookmarks and nigori lost their progress marker. Preferences
|
| - // should still have it.
|
| - partial_types =
|
| + // Ensure that autofill lost its progress marker, but preferences did not.
|
| + ModelTypeSet empty_tokens =
|
| sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All());
|
| - EXPECT_TRUE(partial_types.Has(NIGORI));
|
| - EXPECT_TRUE(partial_types.Has(BOOKMARKS));
|
| - EXPECT_FALSE(partial_types.Has(PREFERENCES));
|
| + EXPECT_TRUE(empty_tokens.Has(AUTOFILL));
|
| + EXPECT_FALSE(empty_tokens.Has(PREFERENCES));
|
| +
|
| + // Ensure that autofill lots its node, but preferences did not.
|
| + {
|
| + syncable::ReadTransaction trans(FROM_HERE, share->directory.get());
|
| + syncable::Entry autofill_node(&trans, GET_BY_HANDLE, autofill_meta);
|
| + syncable::Entry pref_node(&trans, GET_BY_HANDLE, pref_meta);
|
| + EXPECT_FALSE(autofill_node.good());
|
| + EXPECT_TRUE(pref_node.good());
|
| + }
|
| }
|
|
|
| // Test CleanupDisabledTypes properly purges all disabled types as specified
|
| -// by the previous and current enabled params. Enabled partial types should not
|
| -// be purged.
|
| +// by the previous and current enabled params.
|
| // Fails on Windows: crbug.com/139726
|
| #if defined(OS_WIN)
|
| #define MAYBE_PurgeDisabledTypes DISABLED_PurgeDisabledTypes
|
| @@ -3024,21 +3047,20 @@ TEST_F(SyncManagerTest, MAYBE_PurgeDisabledTypes) {
|
| GetModelSafeRoutingInfo(&routing_info);
|
| ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info);
|
| ModelTypeSet disabled_types = Difference(ModelTypeSet::All(), enabled_types);
|
| - ModelTypeSet partial_enabled_types(PASSWORDS);
|
|
|
| - // Set data for all non-partial types.
|
| + // The harness should have initialized the enabled_types for us.
|
| + EXPECT_TRUE(enabled_types.Equals(sync_manager_.InitialSyncEndedTypes()));
|
| +
|
| + // Set progress markers for all types.
|
| for (ModelTypeSet::Iterator iter = ModelTypeSet::All().First(); iter.Good();
|
| iter.Inc()) {
|
| SetProgressMarkerForType(iter.Get(), true);
|
| - if (!partial_enabled_types.Has(iter.Get()))
|
| - SetInitialSyncEndedForType(iter.Get(), true);
|
| }
|
|
|
| // Verify all the enabled types remain after cleanup, and all the disabled
|
| // types were purged.
|
| sync_manager_.PurgeDisabledTypes(ModelTypeSet::All(), enabled_types);
|
| - EXPECT_TRUE(enabled_types.Equals(
|
| - Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types)));
|
| + EXPECT_TRUE(enabled_types.Equals(sync_manager_.InitialSyncEndedTypes()));
|
| EXPECT_TRUE(disabled_types.Equals(
|
| sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All())));
|
|
|
| @@ -3050,8 +3072,7 @@ TEST_F(SyncManagerTest, MAYBE_PurgeDisabledTypes) {
|
|
|
| // Verify only the non-disabled types remain after cleanup.
|
| sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types);
|
| - EXPECT_TRUE(new_enabled_types.Equals(
|
| - Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types)));
|
| + EXPECT_TRUE(new_enabled_types.Equals(sync_manager_.InitialSyncEndedTypes()));
|
| EXPECT_TRUE(disabled_types.Equals(
|
| sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All())));
|
| }
|
|
|