Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Unified Diff: components/sync/driver/glue/sync_backend_host_impl_unittest.cc

Issue 2580033002: [Sync] Ensure that CONFIGURE_CLEAN types get unapplied before configuration (Closed)
Patch Set: Adjusted comment Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/sync/driver/glue/sync_backend_host_impl.cc ('k') | components/sync/engine/fake_sync_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync/driver/glue/sync_backend_host_impl_unittest.cc
diff --git a/components/sync/driver/glue/sync_backend_host_impl_unittest.cc b/components/sync/driver/glue/sync_backend_host_impl_unittest.cc
index f6c698a002e1117136c4a15ec49d13f26ebc8cca..87690485d0862e8a501f4193676d0defb83709c3 100644
--- a/components/sync/driver/glue/sync_backend_host_impl_unittest.cc
+++ b/components/sync/driver/glue/sync_backend_host_impl_unittest.cc
@@ -241,19 +241,22 @@ class SyncEngineTest : public testing::Test {
DCHECK(fake_manager_);
}
- // Synchronously configures the backend's datatypes.
- ModelTypeSet ConfigureDataTypes(ModelTypeSet types_to_add,
- ModelTypeSet types_to_remove,
- ModelTypeSet types_to_unapply) {
+ // Returns DataTypeConfigStateMap with all |enabled_types_| in
+ // CONFIGURE_ACTIVE state and all remaining types DISABLED.
+ ModelTypeConfigurer::DataTypeConfigStateMap ConfigStateMapForEnabledTypes() {
ModelTypeConfigurer::DataTypeConfigStateMap config_state_map;
ModelTypeConfigurer::SetDataTypesState(
- ModelTypeConfigurer::CONFIGURE_ACTIVE, types_to_add, &config_state_map);
- ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::DISABLED,
- types_to_remove, &config_state_map);
- ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::UNREADY,
- types_to_unapply, &config_state_map);
+ ModelTypeConfigurer::CONFIGURE_ACTIVE, enabled_types_,
+ &config_state_map);
+ ModelTypeConfigurer::SetDataTypesState(
+ ModelTypeConfigurer::DISABLED,
+ Difference(ModelTypeSet::All(), enabled_types_), &config_state_map);
+ return config_state_map;
+ }
- types_to_add.PutAll(ControlTypes());
+ // Synchronously configures the backend's datatypes.
+ ModelTypeSet ConfigureDataTypes(
+ const ModelTypeConfigurer::DataTypeConfigStateMap& config_state_map) {
ModelTypeSet ready_types = backend_->ConfigureDataTypes(
CONFIGURE_REASON_RECONFIGURATION, config_state_map,
base::Bind(&SyncEngineTest::DownloadReady, base::Unretained(this)),
@@ -310,9 +313,8 @@ TEST_F(SyncEngineTest, FirstTimeSync) {
fake_manager_->GetTypesWithEmptyProgressMarkerToken(ControlTypes())
.Empty());
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Nigori is always downloaded so won't be ready.
EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types);
EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll(
@@ -334,20 +336,19 @@ TEST_F(SyncEngineTest, Restart) {
InitializeBackend(true);
EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_TRUE(
fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)
.Empty());
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
EXPECT_EQ(enabled_types_, ready_types);
EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes());
@@ -371,7 +372,7 @@ TEST_F(SyncEngineTest, PartialTypes) {
// download the Nigori.
InitializeBackend(true);
EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes());
- EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types));
+ EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types));
EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)),
fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(
@@ -379,12 +380,11 @@ TEST_F(SyncEngineTest, PartialTypes) {
fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_));
// Now do the actual configuration, which should download and apply bookmarks.
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
EXPECT_EQ(full_types, ready_types);
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(partial_types, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
@@ -411,18 +411,17 @@ TEST_F(SyncEngineTest, LostDB) {
// The database was empty, so any cleaning is entirely optional. We want to
// reset this value before running the next part of the test, though.
- fake_manager_->GetAndResetCleanedTypes();
+ fake_manager_->GetAndResetPurgedTypes();
// The actual configuration should redownload and apply all the enabled types.
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Nigori is always downloaded so won't be ready.
EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types);
EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().HasAll(
Difference(enabled_types_, ControlTypes())));
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes());
@@ -434,15 +433,14 @@ TEST_F(SyncEngineTest, LostDB) {
TEST_F(SyncEngineTest, DisableTypes) {
// Simulate first time sync.
InitializeBackend(true);
- fake_manager_->GetAndResetCleanedTypes();
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ fake_manager_->GetAndResetPurgedTypes();
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Nigori is always downloaded so won't be ready.
EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types);
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_TRUE(
@@ -453,16 +451,14 @@ TEST_F(SyncEngineTest, DisableTypes) {
ModelTypeSet disabled_types(BOOKMARKS, SEARCH_ENGINES);
ModelTypeSet old_types = enabled_types_;
enabled_types_.RemoveAll(disabled_types);
- ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Only those datatypes disabled should be cleaned. Nothing should be
// downloaded.
EXPECT_EQ(enabled_types_, ready_types);
EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty());
EXPECT_EQ(disabled_types,
- Intersection(fake_manager_->GetAndResetCleanedTypes(), old_types));
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types));
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes());
EXPECT_TRUE(
@@ -473,15 +469,14 @@ TEST_F(SyncEngineTest, DisableTypes) {
TEST_F(SyncEngineTest, AddTypes) {
// Simulate first time sync.
InitializeBackend(true);
- fake_manager_->GetAndResetCleanedTypes();
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ fake_manager_->GetAndResetPurgedTypes();
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Nigori is always downloaded so won't be ready.
EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types);
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_TRUE(
@@ -491,9 +486,7 @@ TEST_F(SyncEngineTest, AddTypes) {
// Then add two datatypes.
ModelTypeSet new_types(EXTENSIONS, APPS);
enabled_types_.PutAll(new_types);
- ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Only those datatypes added should be downloaded (plus nigori). Nothing
// should be cleaned aside from the disabled types.
@@ -501,7 +494,7 @@ TEST_F(SyncEngineTest, AddTypes) {
EXPECT_EQ(Difference(enabled_types_, new_types), ready_types);
EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes());
@@ -514,15 +507,14 @@ TEST_F(SyncEngineTest, AddTypes) {
TEST_F(SyncEngineTest, AddDisableTypes) {
// Simulate first time sync.
InitializeBackend(true);
- fake_manager_->GetAndResetCleanedTypes();
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ fake_manager_->GetAndResetPurgedTypes();
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Nigori is always downloaded so won't be ready.
EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types);
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_TRUE(
@@ -535,9 +527,7 @@ TEST_F(SyncEngineTest, AddDisableTypes) {
ModelTypeSet new_types(EXTENSIONS, APPS);
enabled_types_.PutAll(new_types);
enabled_types_.RemoveAll(disabled_types);
- ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Only those datatypes added should be downloaded (plus nigori). Nothing
// should be cleaned aside from the disabled types.
@@ -545,7 +535,7 @@ TEST_F(SyncEngineTest, AddDisableTypes) {
EXPECT_EQ(Difference(enabled_types_, new_types), ready_types);
EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_EQ(disabled_types,
- Intersection(fake_manager_->GetAndResetCleanedTypes(), old_types));
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types));
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes());
EXPECT_EQ(disabled_types,
@@ -567,22 +557,21 @@ TEST_F(SyncEngineTest, NewlySupportedTypes) {
// Does nothing.
InitializeBackend(true);
EXPECT_TRUE(fake_manager_->GetAndResetDownloadedTypes().Empty());
- EXPECT_TRUE(Intersection(fake_manager_->GetAndResetCleanedTypes(), old_types)
- .Empty());
+ EXPECT_TRUE(
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), old_types).Empty());
EXPECT_EQ(old_types, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(new_types, fake_manager_->GetTypesWithEmptyProgressMarkerToken(
enabled_types_));
// Downloads and applies the new types (plus nigori).
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
new_types.Put(NIGORI);
EXPECT_EQ(Difference(old_types, ModelTypeSet(NIGORI)), ready_types);
EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes());
@@ -610,7 +599,7 @@ TEST_F(SyncEngineTest, NewlySupportedTypesWithPartialTypes) {
// the syncer will re-download it by the time the initialization is complete.
InitializeBackend(true);
EXPECT_EQ(ModelTypeSet(NIGORI), fake_manager_->GetAndResetDownloadedTypes());
- EXPECT_TRUE(fake_manager_->GetAndResetCleanedTypes().HasAll(partial_types));
+ EXPECT_TRUE(fake_manager_->GetAndResetPurgedTypes().HasAll(partial_types));
EXPECT_EQ(Union(full_types, ModelTypeSet(NIGORI)),
fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(
@@ -619,14 +608,13 @@ TEST_F(SyncEngineTest, NewlySupportedTypesWithPartialTypes) {
// Downloads and applies the new types and partial types (which includes
// nigori anyways).
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
EXPECT_EQ(full_types, ready_types);
EXPECT_EQ(Union(new_types, partial_types),
fake_manager_->GetAndResetDownloadedTypes());
EXPECT_TRUE(
- Intersection(fake_manager_->GetAndResetCleanedTypes(), enabled_types_)
+ Intersection(fake_manager_->GetAndResetPurgedTypes(), enabled_types_)
.Empty());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->GetAndResetEnabledTypes());
@@ -652,7 +640,7 @@ TEST_F(SyncEngineTest, DownloadControlTypes) {
InitializeBackend(true);
EXPECT_EQ(new_types, fake_manager_->GetAndResetDownloadedTypes());
EXPECT_EQ(Difference(ModelTypeSet::All(), enabled_types_),
- fake_manager_->GetAndResetCleanedTypes());
+ fake_manager_->GetAndResetPurgedTypes());
EXPECT_EQ(enabled_types_, fake_manager_->InitialSyncEndedTypes());
EXPECT_TRUE(
fake_manager_->GetTypesWithEmptyProgressMarkerToken(enabled_types_)
@@ -728,26 +716,25 @@ TEST_F(SyncEngineTest, DisableThenPurgeType) {
InitializeBackend(true);
// First enable the types.
- ModelTypeSet ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
// Nigori is always downloaded so won't be ready.
EXPECT_EQ(Difference(ControlTypes(), ModelTypeSet(NIGORI)), ready_types);
// Then mark the error types as unready (disables without purging).
- ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- error_types);
+ ModelTypeConfigurer::DataTypeConfigStateMap config_state_map =
+ ConfigStateMapForEnabledTypes();
+ ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::UNREADY,
+ error_types, &config_state_map);
+ ready_types = ConfigureDataTypes(config_state_map);
EXPECT_EQ(Difference(enabled_types_, error_types), ready_types);
EXPECT_TRUE(
fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty());
// Lastly explicitly disable the error types, which should result in a purge.
enabled_types_.RemoveAll(error_types);
- ready_types = ConfigureDataTypes(
- enabled_types_, Difference(ModelTypeSet::All(), enabled_types_),
- ModelTypeSet());
+ ready_types = ConfigureDataTypes(ConfigStateMapForEnabledTypes());
EXPECT_EQ(Difference(enabled_types_, error_types), ready_types);
EXPECT_FALSE(
fake_manager_->GetTypesWithEmptyProgressMarkerToken(error_types).Empty());
@@ -836,6 +823,36 @@ TEST_F(SyncEngineTest, ModelTypeConnectorValidDuringShutdown) {
backend_.reset();
}
+// Ensure that types in CONFIGURE_CLEAN state are unapplied.
+TEST_F(SyncEngineTest, ConfigureCelanTypesAreUnapplied) {
+ ModelTypeSet clean_types(AUTOFILL);
+
+ InitializeBackend(true);
+
+ // First enable the types.
+ ModelTypeSet ready_types =
+ ConfigureDataTypes(ConfigStateMapForEnabledTypes());
+ EXPECT_TRUE(
+ fake_manager_->GetTypesWithEmptyProgressMarkerToken(clean_types).Empty());
+
+ // Then unapply AUTOFILL.
+ ModelTypeConfigurer::DataTypeConfigStateMap config_state_map =
+ ConfigStateMapForEnabledTypes();
+ ModelTypeConfigurer::SetDataTypesState(ModelTypeConfigurer::CONFIGURE_CLEAN,
+ clean_types, &config_state_map);
+
+ ready_types = ConfigureDataTypes(config_state_map);
+
+ // Autofill should be unapplied as part of PurgeDisabledTypes, but should
+ // retain progress markers.
+ ModelTypeSet purged_types = fake_manager_->GetAndResetPurgedTypes();
+ ModelTypeSet unapplied_types = fake_manager_->GetAndResetUnappliedTypes();
+ EXPECT_EQ(unapplied_types, clean_types);
+ EXPECT_TRUE(purged_types.HasAll(clean_types));
+ EXPECT_TRUE(
+ fake_manager_->GetTypesWithEmptyProgressMarkerToken(clean_types).Empty());
+}
+
} // namespace
} // namespace syncer
« no previous file with comments | « components/sync/driver/glue/sync_backend_host_impl.cc ('k') | components/sync/engine/fake_sync_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698