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

Side by Side Diff: chrome/browser/sync/backend_migrator_unittest.cc

Issue 8851006: [Sync] Replace all instances of ModelTypeSet with ModelEnumSet (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup pass #2 Created 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync/backend_migrator.cc ('k') | chrome/browser/sync/engine/all_status.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/sync/backend_migrator.h" 5 #include "chrome/browser/sync/backend_migrator.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/tracked_objects.h" 8 #include "base/tracked_objects.h"
9 #include "chrome/browser/sync/glue/data_type_manager_mock.h" 9 #include "chrome/browser/sync/glue/data_type_manager_mock.h"
10 #include "chrome/browser/sync/internal_api/write_transaction.h" 10 #include "chrome/browser/sync/internal_api/write_transaction.h"
11 #include "chrome/browser/sync/profile_sync_service_mock.h" 11 #include "chrome/browser/sync/profile_sync_service_mock.h"
12 #include "chrome/browser/sync/protocol/sync.pb.h" 12 #include "chrome/browser/sync/protocol/sync.pb.h"
13 #include "chrome/browser/sync/sessions/session_state.h" 13 #include "chrome/browser/sync/sessions/session_state.h"
14 #include "chrome/browser/sync/syncable/directory_manager.h" 14 #include "chrome/browser/sync/syncable/directory_manager.h"
15 #include "chrome/browser/sync/syncable/model_type_test_util.h"
15 #include "chrome/browser/sync/test/engine/test_user_share.h" 16 #include "chrome/browser/sync/test/engine/test_user_share.h"
16 #include "chrome/common/chrome_notification_types.h" 17 #include "chrome/common/chrome_notification_types.h"
17 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 20
20 using ::testing::_; 21 using ::testing::_;
21 using ::testing::Eq; 22 using ::testing::Eq;
22 using ::testing::Mock; 23 using ::testing::Mock;
23 using ::testing::NiceMock; 24 using ::testing::NiceMock;
24 using ::testing::Return; 25 using ::testing::Return;
25 using ::testing::SetArgumentPointee;
26 26
27 namespace browser_sync { 27 namespace browser_sync {
28 28
29 using sessions::ErrorCounters; 29 using sessions::ErrorCounters;
30 using sessions::SyncerStatus; 30 using sessions::SyncerStatus;
31 using sessions::SyncSessionSnapshot; 31 using sessions::SyncSessionSnapshot;
32 32
33 class BackendMigratorTest : public testing::Test { 33 class BackendMigratorTest : public testing::Test {
34 public: 34 public:
35 BackendMigratorTest() { } 35 BackendMigratorTest() { }
36 virtual ~BackendMigratorTest() { } 36 virtual ~BackendMigratorTest() { }
37 37
38 virtual void SetUp() { 38 virtual void SetUp() {
39 test_user_share_.SetUp(); 39 test_user_share_.SetUp();
40 Mock::VerifyAndClear(manager()); 40 Mock::VerifyAndClear(manager());
41 Mock::VerifyAndClear(&service_); 41 Mock::VerifyAndClear(&service_);
42 preferred_types_.insert(syncable::BOOKMARKS); 42 preferred_types_.Put(syncable::BOOKMARKS);
43 preferred_types_.insert(syncable::PREFERENCES); 43 preferred_types_.Put(syncable::PREFERENCES);
44 preferred_types_.insert(syncable::AUTOFILL); 44 preferred_types_.Put(syncable::AUTOFILL);
45 45
46 ON_CALL(service_, GetPreferredDataTypes(_)). 46 ON_CALL(service_, GetPreferredDataTypes()).
47 WillByDefault(SetArgumentPointee<0>(preferred_types_)); 47 WillByDefault(Return(preferred_types_));
48 48
49 migrator_.reset( 49 migrator_.reset(
50 new BackendMigrator( 50 new BackendMigrator(
51 "Profile0", test_user_share_.user_share(), service(), manager())); 51 "Profile0", test_user_share_.user_share(), service(), manager()));
52 SetUnsyncedTypes(syncable::ModelTypeSet()); 52 SetUnsyncedTypes(syncable::ModelEnumSet());
53 } 53 }
54 54
55 virtual void TearDown() { 55 virtual void TearDown() {
56 migrator_.reset(); 56 migrator_.reset();
57 test_user_share_.TearDown(); 57 test_user_share_.TearDown();
58 } 58 }
59 59
60 // Marks all types in |unsynced_types| as unsynced and all other 60 // Marks all types in |unsynced_types| as unsynced and all other
61 // types as synced. 61 // types as synced.
62 void SetUnsyncedTypes(const syncable::ModelTypeSet& unsynced_types) { 62 void SetUnsyncedTypes(syncable::ModelEnumSet unsynced_types) {
63 sync_api::WriteTransaction trans(FROM_HERE, 63 sync_api::WriteTransaction trans(FROM_HERE,
64 test_user_share_.user_share()); 64 test_user_share_.user_share());
65 for (int i = syncable::FIRST_REAL_MODEL_TYPE; 65 for (int i = syncable::FIRST_REAL_MODEL_TYPE;
66 i < syncable::MODEL_TYPE_COUNT; ++i) { 66 i < syncable::MODEL_TYPE_COUNT; ++i) {
67 syncable::ModelType type = syncable::ModelTypeFromInt(i); 67 syncable::ModelType type = syncable::ModelTypeFromInt(i);
68 sync_pb::DataTypeProgressMarker progress_marker; 68 sync_pb::DataTypeProgressMarker progress_marker;
69 if (unsynced_types.count(type) == 0) { 69 if (!unsynced_types.Has(type)) {
70 progress_marker.set_token("dummy"); 70 progress_marker.set_token("dummy");
71 } 71 }
72 trans.GetLookup()->SetDownloadProgress(type, progress_marker); 72 trans.GetLookup()->SetDownloadProgress(type, progress_marker);
73 } 73 }
74 } 74 }
75 75
76 void SendConfigureDone(DataTypeManager::ConfigureStatus status, 76 void SendConfigureDone(DataTypeManager::ConfigureStatus status,
77 const syncable::ModelTypeSet& requested_types) { 77 syncable::ModelEnumSet requested_types) {
78 if (status == DataTypeManager::OK) { 78 if (status == DataTypeManager::OK) {
79 DataTypeManager::ConfigureResult result(status, requested_types); 79 DataTypeManager::ConfigureResult result(status, requested_types);
80 content::NotificationService::current()->Notify( 80 content::NotificationService::current()->Notify(
81 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE, 81 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE,
82 content::Source<DataTypeManager>(&manager_), 82 content::Source<DataTypeManager>(&manager_),
83 content::Details<const DataTypeManager::ConfigureResult>(&result)); 83 content::Details<const DataTypeManager::ConfigureResult>(&result));
84 } else { 84 } else {
85 std::list<SyncError> errors; 85 std::list<SyncError> errors;
86 DataTypeManager::ConfigureResult result( 86 DataTypeManager::ConfigureResult result(
87 status, 87 status,
88 requested_types, 88 requested_types,
89 errors); 89 errors);
90 content::NotificationService::current()->Notify( 90 content::NotificationService::current()->Notify(
91 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE, 91 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE,
92 content::Source<DataTypeManager>(&manager_), 92 content::Source<DataTypeManager>(&manager_),
93 content::Details<const DataTypeManager::ConfigureResult>(&result)); 93 content::Details<const DataTypeManager::ConfigureResult>(&result));
94 } 94 }
95 message_loop_.RunAllPending(); 95 message_loop_.RunAllPending();
96 } 96 }
97 97
98 ProfileSyncService* service() { return &service_; } 98 ProfileSyncService* service() { return &service_; }
99 DataTypeManagerMock* manager() { return &manager_; } 99 DataTypeManagerMock* manager() { return &manager_; }
100 const syncable::ModelTypeSet& preferred_types() { return preferred_types_; } 100 syncable::ModelEnumSet preferred_types() { return preferred_types_; }
101 BackendMigrator* migrator() { return migrator_.get(); } 101 BackendMigrator* migrator() { return migrator_.get(); }
102 void RemovePreferredType(syncable::ModelType type) { 102 void RemovePreferredType(syncable::ModelType type) {
103 preferred_types_.erase(type); 103 preferred_types_.Remove(type);
104 Mock::VerifyAndClear(&service_); 104 Mock::VerifyAndClear(&service_);
105 ON_CALL(service_, GetPreferredDataTypes(_)). 105 ON_CALL(service_, GetPreferredDataTypes()).
106 WillByDefault(SetArgumentPointee<0>(preferred_types_)); 106 WillByDefault(Return(preferred_types_));
107 } 107 }
108 108
109 private: 109 private:
110 scoped_ptr<SyncSessionSnapshot> snap_; 110 scoped_ptr<SyncSessionSnapshot> snap_;
111 MessageLoop message_loop_; 111 MessageLoop message_loop_;
112 syncable::ModelTypeSet preferred_types_; 112 syncable::ModelEnumSet preferred_types_;
113 NiceMock<ProfileSyncServiceMock> service_; 113 NiceMock<ProfileSyncServiceMock> service_;
114 NiceMock<DataTypeManagerMock> manager_; 114 NiceMock<DataTypeManagerMock> manager_;
115 TestUserShare test_user_share_; 115 TestUserShare test_user_share_;
116 scoped_ptr<BackendMigrator> migrator_; 116 scoped_ptr<BackendMigrator> migrator_;
117 }; 117 };
118 118
119 class MockMigrationObserver : public MigrationObserver { 119 class MockMigrationObserver : public MigrationObserver {
120 public: 120 public:
121 virtual ~MockMigrationObserver() {} 121 virtual ~MockMigrationObserver() {}
122 122
123 MOCK_METHOD0(OnMigrationStateChange, void()); 123 MOCK_METHOD0(OnMigrationStateChange, void());
124 }; 124 };
125 125
126 // Test that in the normal case a migration does transition through each state 126 // Test that in the normal case a migration does transition through each state
127 // and wind up back in IDLE. 127 // and wind up back in IDLE.
128 TEST_F(BackendMigratorTest, Sanity) { 128 TEST_F(BackendMigratorTest, Sanity) {
129 MockMigrationObserver migration_observer; 129 MockMigrationObserver migration_observer;
130 migrator()->AddMigrationObserver(&migration_observer); 130 migrator()->AddMigrationObserver(&migration_observer);
131 EXPECT_CALL(migration_observer, OnMigrationStateChange()).Times(4); 131 EXPECT_CALL(migration_observer, OnMigrationStateChange()).Times(4);
132 132
133 syncable::ModelTypeSet to_migrate, difference; 133 syncable::ModelEnumSet to_migrate, difference;
134 to_migrate.insert(syncable::PREFERENCES); 134 to_migrate.Put(syncable::PREFERENCES);
135 difference.insert(syncable::AUTOFILL); 135 difference.Put(syncable::AUTOFILL);
136 difference.insert(syncable::BOOKMARKS); 136 difference.Put(syncable::BOOKMARKS);
137 137
138 EXPECT_CALL(*manager(), state()) 138 EXPECT_CALL(*manager(), state())
139 .WillOnce(Return(DataTypeManager::CONFIGURED)); 139 .WillOnce(Return(DataTypeManager::CONFIGURED));
140 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 140 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
141 .Times(2); 141 .Times(2);
142 142
143 migrator()->MigrateTypes(to_migrate); 143 migrator()->MigrateTypes(to_migrate);
144 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 144 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
145 145
146 SetUnsyncedTypes(to_migrate); 146 SetUnsyncedTypes(to_migrate);
147 SendConfigureDone(DataTypeManager::OK, difference); 147 SendConfigureDone(DataTypeManager::OK, difference);
148 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state()); 148 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
149 149
150 SetUnsyncedTypes(syncable::ModelTypeSet()); 150 SetUnsyncedTypes(syncable::ModelEnumSet());
151 SendConfigureDone(DataTypeManager::OK, preferred_types()); 151 SendConfigureDone(DataTypeManager::OK, preferred_types());
152 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state()); 152 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
153 153
154 migrator()->RemoveMigrationObserver(&migration_observer); 154 migrator()->RemoveMigrationObserver(&migration_observer);
155 } 155 }
156 156
157 // Test that in the normal case with Nigori a migration transitions through 157 // Test that in the normal case with Nigori a migration transitions through
158 // each state and wind up back in IDLE. 158 // each state and wind up back in IDLE.
159 TEST_F(BackendMigratorTest, MigrateNigori) { 159 TEST_F(BackendMigratorTest, MigrateNigori) {
160 syncable::ModelTypeSet to_migrate, difference; 160 syncable::ModelEnumSet to_migrate, difference;
161 to_migrate.insert(syncable::NIGORI); 161 to_migrate.Put(syncable::NIGORI);
162 difference.insert(syncable::AUTOFILL); 162 difference.Put(syncable::AUTOFILL);
163 difference.insert(syncable::BOOKMARKS); 163 difference.Put(syncable::BOOKMARKS);
164 164
165 EXPECT_CALL(*manager(), state()) 165 EXPECT_CALL(*manager(), state())
166 .WillOnce(Return(DataTypeManager::CONFIGURED)); 166 .WillOnce(Return(DataTypeManager::CONFIGURED));
167 167
168 EXPECT_CALL(*manager(), ConfigureWithoutNigori(_, 168 EXPECT_CALL(*manager(), ConfigureWithoutNigori(_,
169 sync_api::CONFIGURE_REASON_MIGRATION)); 169 sync_api::CONFIGURE_REASON_MIGRATION));
170 170
171 migrator()->MigrateTypes(to_migrate); 171 migrator()->MigrateTypes(to_migrate);
172 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 172 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
173 173
174 SetUnsyncedTypes(to_migrate); 174 SetUnsyncedTypes(to_migrate);
175 SendConfigureDone(DataTypeManager::OK, difference); 175 SendConfigureDone(DataTypeManager::OK, difference);
176 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state()); 176 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
177 177
178 SetUnsyncedTypes(syncable::ModelTypeSet()); 178 SetUnsyncedTypes(syncable::ModelEnumSet());
179 SendConfigureDone(DataTypeManager::OK, preferred_types()); 179 SendConfigureDone(DataTypeManager::OK, preferred_types());
180 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state()); 180 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
181 } 181 }
182 182
183 183
184 // Test that the migrator waits for the data type manager to be idle before 184 // Test that the migrator waits for the data type manager to be idle before
185 // starting a migration. 185 // starting a migration.
186 TEST_F(BackendMigratorTest, WaitToStart) { 186 TEST_F(BackendMigratorTest, WaitToStart) {
187 syncable::ModelTypeSet to_migrate; 187 syncable::ModelEnumSet to_migrate;
188 to_migrate.insert(syncable::PREFERENCES); 188 to_migrate.Put(syncable::PREFERENCES);
189 189
190 EXPECT_CALL(*manager(), state()) 190 EXPECT_CALL(*manager(), state())
191 .WillOnce(Return(DataTypeManager::CONFIGURING)); 191 .WillOnce(Return(DataTypeManager::CONFIGURING));
192 EXPECT_CALL(*manager(), Configure(_, _)).Times(0); 192 EXPECT_CALL(*manager(), Configure(_, _)).Times(0);
193 migrator()->MigrateTypes(to_migrate); 193 migrator()->MigrateTypes(to_migrate);
194 EXPECT_EQ(BackendMigrator::WAITING_TO_START, migrator()->state()); 194 EXPECT_EQ(BackendMigrator::WAITING_TO_START, migrator()->state());
195 195
196 Mock::VerifyAndClearExpectations(manager()); 196 Mock::VerifyAndClearExpectations(manager());
197 EXPECT_CALL(*manager(), state()) 197 EXPECT_CALL(*manager(), state())
198 .WillOnce(Return(DataTypeManager::CONFIGURED)); 198 .WillOnce(Return(DataTypeManager::CONFIGURED));
199 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)); 199 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION));
200 SetUnsyncedTypes(syncable::ModelTypeSet()); 200 SetUnsyncedTypes(syncable::ModelEnumSet());
201 SendConfigureDone(DataTypeManager::OK, syncable::ModelTypeSet()); 201 SendConfigureDone(DataTypeManager::OK, syncable::ModelEnumSet());
202 202
203 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 203 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
204 } 204 }
205 205
206 // Test that the migrator can cope with a migration request while a migration 206 // Test that the migrator can cope with a migration request while a migration
207 // is in progress. 207 // is in progress.
208 TEST_F(BackendMigratorTest, RestartMigration) { 208 TEST_F(BackendMigratorTest, RestartMigration) {
209 syncable::ModelTypeSet to_migrate1, to_migrate2, to_migrate_union, bookmarks; 209 syncable::ModelEnumSet to_migrate1, to_migrate2, to_migrate_union, bookmarks;
210 to_migrate1.insert(syncable::PREFERENCES); 210 to_migrate1.Put(syncable::PREFERENCES);
211 to_migrate2.insert(syncable::AUTOFILL); 211 to_migrate2.Put(syncable::AUTOFILL);
212 to_migrate_union.insert(syncable::PREFERENCES); 212 to_migrate_union.Put(syncable::PREFERENCES);
213 to_migrate_union.insert(syncable::AUTOFILL); 213 to_migrate_union.Put(syncable::AUTOFILL);
214 bookmarks.insert(syncable::BOOKMARKS); 214 bookmarks.Put(syncable::BOOKMARKS);
215 215
216 EXPECT_CALL(*manager(), state()) 216 EXPECT_CALL(*manager(), state())
217 .WillOnce(Return(DataTypeManager::CONFIGURED)); 217 .WillOnce(Return(DataTypeManager::CONFIGURED));
218 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 218 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
219 .Times(2); 219 .Times(2);
220 migrator()->MigrateTypes(to_migrate1); 220 migrator()->MigrateTypes(to_migrate1);
221 221
222 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 222 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
223 migrator()->MigrateTypes(to_migrate2); 223 migrator()->MigrateTypes(to_migrate2);
224 224
225 syncable::ModelTypeSet difference1; 225 const syncable::ModelEnumSet difference1 =
226 std::set_difference(preferred_types().begin(), preferred_types().end(), 226 Difference(preferred_types(), to_migrate1);
227 to_migrate1.begin(), to_migrate1.end(),
228 std::inserter(difference1, difference1.end()));
229 227
230 Mock::VerifyAndClearExpectations(manager()); 228 Mock::VerifyAndClearExpectations(manager());
231 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 229 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
232 .Times(2); 230 .Times(2);
233 SetUnsyncedTypes(to_migrate1); 231 SetUnsyncedTypes(to_migrate1);
234 SendConfigureDone(DataTypeManager::OK, difference1); 232 SendConfigureDone(DataTypeManager::OK, difference1);
235 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 233 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
236 234
237 SetUnsyncedTypes(to_migrate_union); 235 SetUnsyncedTypes(to_migrate_union);
238 SendConfigureDone(DataTypeManager::OK, bookmarks); 236 SendConfigureDone(DataTypeManager::OK, bookmarks);
239 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state()); 237 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
240 } 238 }
241 239
242 // Test that an external invocation of Configure(...) during a migration results 240 // Test that an external invocation of Configure(...) during a migration results
243 // in a migration reattempt. 241 // in a migration reattempt.
244 TEST_F(BackendMigratorTest, InterruptedWhileDisablingTypes) { 242 TEST_F(BackendMigratorTest, InterruptedWhileDisablingTypes) {
245 syncable::ModelTypeSet to_migrate; 243 syncable::ModelEnumSet to_migrate;
246 syncable::ModelTypeSet difference; 244 syncable::ModelEnumSet difference;
247 to_migrate.insert(syncable::PREFERENCES); 245 to_migrate.Put(syncable::PREFERENCES);
248 difference.insert(syncable::AUTOFILL); 246 difference.Put(syncable::AUTOFILL);
249 difference.insert(syncable::BOOKMARKS); 247 difference.Put(syncable::BOOKMARKS);
250 248
251 EXPECT_CALL(*manager(), state()) 249 EXPECT_CALL(*manager(), state())
252 .WillOnce(Return(DataTypeManager::CONFIGURED)); 250 .WillOnce(Return(DataTypeManager::CONFIGURED));
253 EXPECT_CALL(*manager(), Configure(difference, 251 EXPECT_CALL(*manager(), Configure(HasModelTypes(difference),
254 sync_api::CONFIGURE_REASON_MIGRATION)); 252 sync_api::CONFIGURE_REASON_MIGRATION));
255 migrator()->MigrateTypes(to_migrate); 253 migrator()->MigrateTypes(to_migrate);
256 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 254 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
257 255
258 Mock::VerifyAndClearExpectations(manager()); 256 Mock::VerifyAndClearExpectations(manager());
259 EXPECT_CALL(*manager(), Configure(difference, 257 EXPECT_CALL(*manager(), Configure(HasModelTypes(difference),
260 sync_api::CONFIGURE_REASON_MIGRATION)); 258 sync_api::CONFIGURE_REASON_MIGRATION));
261 SetUnsyncedTypes(syncable::ModelTypeSet()); 259 SetUnsyncedTypes(syncable::ModelEnumSet());
262 SendConfigureDone(DataTypeManager::OK, preferred_types()); 260 SendConfigureDone(DataTypeManager::OK, preferred_types());
263 261
264 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 262 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
265 } 263 }
266 264
267 // Test that spurious OnConfigureDone events don't confuse the 265 // Test that spurious OnConfigureDone events don't confuse the
268 // migrator while it's waiting for disabled types to have been purged 266 // migrator while it's waiting for disabled types to have been purged
269 // from the sync db. 267 // from the sync db.
270 TEST_F(BackendMigratorTest, WaitingForPurge) { 268 TEST_F(BackendMigratorTest, WaitingForPurge) {
271 syncable::ModelTypeSet to_migrate, difference; 269 syncable::ModelEnumSet to_migrate, difference;
272 to_migrate.insert(syncable::PREFERENCES); 270 to_migrate.Put(syncable::PREFERENCES);
273 to_migrate.insert(syncable::AUTOFILL); 271 to_migrate.Put(syncable::AUTOFILL);
274 difference.insert(syncable::BOOKMARKS); 272 difference.Put(syncable::BOOKMARKS);
275 273
276 EXPECT_CALL(*manager(), state()) 274 EXPECT_CALL(*manager(), state())
277 .WillOnce(Return(DataTypeManager::CONFIGURED)); 275 .WillOnce(Return(DataTypeManager::CONFIGURED));
278 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 276 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
279 .Times(2); 277 .Times(2);
280 278
281 migrator()->MigrateTypes(to_migrate); 279 migrator()->MigrateTypes(to_migrate);
282 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 280 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
283 281
284 SendConfigureDone(DataTypeManager::OK, difference); 282 SendConfigureDone(DataTypeManager::OK, difference);
285 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 283 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
286 284
287 syncable::ModelTypeSet prefs; 285 syncable::ModelEnumSet prefs;
288 prefs.insert(syncable::PREFERENCES); 286 prefs.Put(syncable::PREFERENCES);
289 SetUnsyncedTypes(prefs); 287 SetUnsyncedTypes(prefs);
290 SendConfigureDone(DataTypeManager::OK, difference); 288 SendConfigureDone(DataTypeManager::OK, difference);
291 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state()); 289 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
292 290
293 SetUnsyncedTypes(to_migrate); 291 SetUnsyncedTypes(to_migrate);
294 SendConfigureDone(DataTypeManager::OK, difference); 292 SendConfigureDone(DataTypeManager::OK, difference);
295 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state()); 293 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
296 } 294 }
297 295
298 TEST_F(BackendMigratorTest, MigratedTypeDisabledByUserDuringMigration) { 296 TEST_F(BackendMigratorTest, MigratedTypeDisabledByUserDuringMigration) {
299 syncable::ModelTypeSet to_migrate; 297 syncable::ModelEnumSet to_migrate;
300 to_migrate.insert(syncable::PREFERENCES); 298 to_migrate.Put(syncable::PREFERENCES);
301 299
302 EXPECT_CALL(*manager(), state()) 300 EXPECT_CALL(*manager(), state())
303 .WillOnce(Return(DataTypeManager::CONFIGURED)); 301 .WillOnce(Return(DataTypeManager::CONFIGURED));
304 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 302 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
305 .Times(2); 303 .Times(2);
306 migrator()->MigrateTypes(to_migrate); 304 migrator()->MigrateTypes(to_migrate);
307 305
308 RemovePreferredType(syncable::PREFERENCES); 306 RemovePreferredType(syncable::PREFERENCES);
309 SetUnsyncedTypes(to_migrate); 307 SetUnsyncedTypes(to_migrate);
310 SendConfigureDone(DataTypeManager::OK, preferred_types()); 308 SendConfigureDone(DataTypeManager::OK, preferred_types());
311 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state()); 309 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
312 SetUnsyncedTypes(syncable::ModelTypeSet()); 310 SetUnsyncedTypes(syncable::ModelEnumSet());
313 SendConfigureDone(DataTypeManager::OK, preferred_types()); 311 SendConfigureDone(DataTypeManager::OK, preferred_types());
314 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state()); 312 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
315 } 313 }
316 314
317 TEST_F(BackendMigratorTest, ConfigureFailure) { 315 TEST_F(BackendMigratorTest, ConfigureFailure) {
318 syncable::ModelTypeSet to_migrate; 316 syncable::ModelEnumSet to_migrate;
319 to_migrate.insert(syncable::PREFERENCES); 317 to_migrate.Put(syncable::PREFERENCES);
320 318
321 EXPECT_CALL(*manager(), state()) 319 EXPECT_CALL(*manager(), state())
322 .WillOnce(Return(DataTypeManager::CONFIGURED)); 320 .WillOnce(Return(DataTypeManager::CONFIGURED));
323 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 321 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
324 .Times(1); 322 .Times(1);
325 migrator()->MigrateTypes(to_migrate); 323 migrator()->MigrateTypes(to_migrate);
326 SetUnsyncedTypes(syncable::ModelTypeSet()); 324 SetUnsyncedTypes(syncable::ModelEnumSet());
327 SendConfigureDone(DataTypeManager::ABORTED, syncable::ModelTypeSet()); 325 SendConfigureDone(DataTypeManager::ABORTED, syncable::ModelEnumSet());
328 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state()); 326 EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
329 } 327 }
330 328
331 }; // namespace browser_sync 329 }; // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/backend_migrator.cc ('k') | chrome/browser/sync/engine/all_status.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698