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

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

Issue 7655055: [Sync] Make BackendMigrator not wait for full sync cycles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix mac test Created 9 years, 3 months 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
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 "chrome/browser/sync/glue/data_type_manager_mock.h" 8 #include "chrome/browser/sync/glue/data_type_manager_mock.h"
8 #include "chrome/browser/sync/profile_sync_service_mock.h" 9 #include "chrome/browser/sync/profile_sync_service_mock.h"
9 #include "chrome/browser/sync/sessions/session_state.h" 10 #include "chrome/browser/sync/sessions/session_state.h"
10 #include "chrome/common/chrome_notification_types.h" 11 #include "chrome/common/chrome_notification_types.h"
11 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 using ::testing::_; 15 using ::testing::_;
15 using ::testing::Eq; 16 using ::testing::Eq;
16 using ::testing::Mock; 17 using ::testing::Mock;
(...skipping 16 matching lines...) Expand all
33 Mock::VerifyAndClear(manager()); 34 Mock::VerifyAndClear(manager());
34 Mock::VerifyAndClear(&service_); 35 Mock::VerifyAndClear(&service_);
35 preferred_types_.insert(syncable::BOOKMARKS); 36 preferred_types_.insert(syncable::BOOKMARKS);
36 preferred_types_.insert(syncable::PREFERENCES); 37 preferred_types_.insert(syncable::PREFERENCES);
37 preferred_types_.insert(syncable::AUTOFILL); 38 preferred_types_.insert(syncable::AUTOFILL);
38 39
39 ON_CALL(service_, GetPreferredDataTypes(_)). 40 ON_CALL(service_, GetPreferredDataTypes(_)).
40 WillByDefault(SetArgumentPointee<0>(preferred_types_)); 41 WillByDefault(SetArgumentPointee<0>(preferred_types_));
41 } 42 }
42 43
43 void ReturnEmptyProgressMarkersInSnapshot() {
44 ReturnNonEmptyProgressMarkersInSnapshot(syncable::ModelTypeSet());
45 }
46
47 void ReturnNonEmptyProgressMarkersInSnapshot(
48 const syncable::ModelTypeSet& for_types) {
49 std::string download_progress_markers[syncable::MODEL_TYPE_COUNT];
50 for (syncable::ModelTypeSet::const_iterator it = for_types.begin();
51 it != for_types.end(); ++it) {
52 download_progress_markers[*it] = "foobar";
53 }
54
55 snap_.reset(new SyncSessionSnapshot(SyncerStatus(), ErrorCounters(),
56 0, false, syncable::ModelTypeBitSet(), download_progress_markers,
57 false, false, 0, 0, 0, false, sessions::SyncSourceInfo(), 0,
58 base::Time::Now()));
59 EXPECT_CALL(service_, GetLastSessionSnapshot())
60 .WillOnce(Return(snap_.get()));
61 }
62
63 void SendConfigureDone(DataTypeManager::ConfigureStatus status, 44 void SendConfigureDone(DataTypeManager::ConfigureStatus status,
64 const syncable::ModelTypeSet& types) { 45 const syncable::ModelTypeSet& requested_types,
46 const syncable::ModelTypeSet& purged_types) {
65 if (status == DataTypeManager::OK) { 47 if (status == DataTypeManager::OK) {
66 DataTypeManager::ConfigureResult result(status, types); 48 DataTypeManager::ConfigureResult result(
49 status, requested_types, purged_types);
67 NotificationService::current()->Notify( 50 NotificationService::current()->Notify(
68 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE, 51 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE,
69 Source<DataTypeManager>(&manager_), 52 Source<DataTypeManager>(&manager_),
70 Details<const DataTypeManager::ConfigureResult>(&result)); 53 Details<const DataTypeManager::ConfigureResult>(&result));
71 } else { 54 } else {
72 DataTypeManager::ConfigureResult result( 55 DataTypeManager::ConfigureResult result(
73 status, 56 status,
74 types, 57 requested_types,
58 purged_types,
75 syncable::ModelTypeSet(), 59 syncable::ModelTypeSet(),
76 FROM_HERE); 60 FROM_HERE);
77 NotificationService::current()->Notify( 61 NotificationService::current()->Notify(
78 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE, 62 chrome::NOTIFICATION_SYNC_CONFIGURE_DONE,
79 Source<DataTypeManager>(&manager_), 63 Source<DataTypeManager>(&manager_),
80 Details<const DataTypeManager::ConfigureResult>(&result)); 64 Details<const DataTypeManager::ConfigureResult>(&result));
81 } 65 }
66 message_loop_.RunAllPending();
82 } 67 }
83 68
84 ProfileSyncService* service() { return &service_; } 69 ProfileSyncService* service() { return &service_; }
85 DataTypeManagerMock* manager() { return &manager_; } 70 DataTypeManagerMock* manager() { return &manager_; }
86 const syncable::ModelTypeSet& preferred_types() { return preferred_types_; } 71 const syncable::ModelTypeSet& preferred_types() { return preferred_types_; }
87 void RemovePreferredType(syncable::ModelType type) { 72 void RemovePreferredType(syncable::ModelType type) {
88 preferred_types_.erase(type); 73 preferred_types_.erase(type);
89 Mock::VerifyAndClear(&service_); 74 Mock::VerifyAndClear(&service_);
90 ON_CALL(service_, GetPreferredDataTypes(_)). 75 ON_CALL(service_, GetPreferredDataTypes(_)).
91 WillByDefault(SetArgumentPointee<0>(preferred_types_)); 76 WillByDefault(SetArgumentPointee<0>(preferred_types_));
92 } 77 }
93 private: 78 private:
94 scoped_ptr<SyncSessionSnapshot> snap_; 79 scoped_ptr<SyncSessionSnapshot> snap_;
80 MessageLoop message_loop_;
95 syncable::ModelTypeSet preferred_types_; 81 syncable::ModelTypeSet preferred_types_;
96 NiceMock<ProfileSyncServiceMock> service_; 82 NiceMock<ProfileSyncServiceMock> service_;
97 NiceMock<DataTypeManagerMock> manager_; 83 NiceMock<DataTypeManagerMock> manager_;
98 }; 84 };
99 85
86 class MockMigrationObserver : public MigrationObserver {
87 public:
88 virtual ~MockMigrationObserver() {}
89
90 MOCK_METHOD0(OnMigrationStateChange, void());
91 };
92
100 // Test that in the normal case a migration does transition through each state 93 // Test that in the normal case a migration does transition through each state
101 // and wind up back in IDLE. 94 // and wind up back in IDLE.
102 TEST_F(BackendMigratorTest, Sanity) { 95 TEST_F(BackendMigratorTest, Sanity) {
103 BackendMigrator migrator(service(), manager()); 96 BackendMigrator migrator("Profile0", service(), manager());
97 MockMigrationObserver migration_observer;
98 migrator.AddMigrationObserver(&migration_observer);
99 EXPECT_CALL(migration_observer, OnMigrationStateChange()).Times(4);
100
104 syncable::ModelTypeSet to_migrate, difference; 101 syncable::ModelTypeSet to_migrate, difference;
105 to_migrate.insert(syncable::PREFERENCES); 102 to_migrate.insert(syncable::PREFERENCES);
106 difference.insert(syncable::AUTOFILL); 103 difference.insert(syncable::AUTOFILL);
107 difference.insert(syncable::BOOKMARKS); 104 difference.insert(syncable::BOOKMARKS);
108 105
109 EXPECT_CALL(*manager(), state()) 106 EXPECT_CALL(*manager(), state())
110 .WillOnce(Return(DataTypeManager::CONFIGURED)); 107 .WillOnce(Return(DataTypeManager::CONFIGURED));
111 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)); 108 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
109 .Times(2);
112 110
113 migrator.MigrateTypes(to_migrate); 111 migrator.MigrateTypes(to_migrate);
114 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state()); 112 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
115 113
116 SendConfigureDone(DataTypeManager::OK, difference); 114 SendConfigureDone(DataTypeManager::OK, difference, to_migrate);
117 EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
118
119 ReturnEmptyProgressMarkersInSnapshot();
120 EXPECT_CALL(*manager(), Configure(preferred_types(),
121 sync_api::CONFIGURE_REASON_MIGRATION));
122 migrator.OnStateChanged();
123 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state()); 115 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
124 116
125 SendConfigureDone(DataTypeManager::OK, preferred_types()); 117 SendConfigureDone(DataTypeManager::OK, preferred_types(),
118 syncable::ModelTypeSet());
126 EXPECT_EQ(BackendMigrator::IDLE, migrator.state()); 119 EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
120
121 migrator.RemoveMigrationObserver(&migration_observer);
127 } 122 }
128 123
129 // Test that in the normal case with Nigori a migration transitions through 124 // Test that in the normal case with Nigori a migration transitions through
130 // each state and wind up back in IDLE. 125 // each state and wind up back in IDLE.
131 TEST_F(BackendMigratorTest, MigrateNigori) { 126 TEST_F(BackendMigratorTest, MigrateNigori) {
132 BackendMigrator migrator(service(), manager()); 127 BackendMigrator migrator("Profile0", service(), manager());
133 syncable::ModelTypeSet to_migrate, difference; 128 syncable::ModelTypeSet to_migrate, difference;
134 to_migrate.insert(syncable::NIGORI); 129 to_migrate.insert(syncable::NIGORI);
135 difference.insert(syncable::AUTOFILL); 130 difference.insert(syncable::AUTOFILL);
136 difference.insert(syncable::BOOKMARKS); 131 difference.insert(syncable::BOOKMARKS);
137 132
138 EXPECT_CALL(*manager(), state()) 133 EXPECT_CALL(*manager(), state())
139 .WillOnce(Return(DataTypeManager::CONFIGURED)); 134 .WillOnce(Return(DataTypeManager::CONFIGURED));
140 135
141 EXPECT_CALL(*manager(), ConfigureWithoutNigori(_, 136 EXPECT_CALL(*manager(), ConfigureWithoutNigori(_,
142 sync_api::CONFIGURE_REASON_MIGRATION)); 137 sync_api::CONFIGURE_REASON_MIGRATION));
143 138
144 migrator.MigrateTypes(to_migrate); 139 migrator.MigrateTypes(to_migrate);
145 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state()); 140 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
146 141
147 SendConfigureDone(DataTypeManager::OK, difference); 142 SendConfigureDone(DataTypeManager::OK, difference, to_migrate);
148 EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
149
150 ReturnEmptyProgressMarkersInSnapshot();
151 EXPECT_CALL(*manager(), Configure(preferred_types(),
152 sync_api::CONFIGURE_REASON_MIGRATION));
153 migrator.OnStateChanged();
154 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state()); 143 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
155 144
156 SendConfigureDone(DataTypeManager::OK, preferred_types()); 145 SendConfigureDone(DataTypeManager::OK, preferred_types(),
146 syncable::ModelTypeSet());
157 EXPECT_EQ(BackendMigrator::IDLE, migrator.state()); 147 EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
158 } 148 }
159 149
160 150
161 // Test that the migrator waits for the data type manager to be idle before 151 // Test that the migrator waits for the data type manager to be idle before
162 // starting a migration. 152 // starting a migration.
163 TEST_F(BackendMigratorTest, WaitToStart) { 153 TEST_F(BackendMigratorTest, WaitToStart) {
164 BackendMigrator migrator(service(), manager()); 154 BackendMigrator migrator("Profile0", service(), manager());
165 syncable::ModelTypeSet to_migrate; 155 syncable::ModelTypeSet to_migrate;
166 to_migrate.insert(syncable::PREFERENCES); 156 to_migrate.insert(syncable::PREFERENCES);
167 157
168 EXPECT_CALL(*manager(), state()) 158 EXPECT_CALL(*manager(), state())
169 .WillOnce(Return(DataTypeManager::CONFIGURING)); 159 .WillOnce(Return(DataTypeManager::CONFIGURING));
170 EXPECT_CALL(*manager(), Configure(_, _)).Times(0); 160 EXPECT_CALL(*manager(), Configure(_, _)).Times(0);
171 migrator.MigrateTypes(to_migrate); 161 migrator.MigrateTypes(to_migrate);
172 EXPECT_EQ(BackendMigrator::WAITING_TO_START, migrator.state()); 162 EXPECT_EQ(BackendMigrator::WAITING_TO_START, migrator.state());
173 163
174 Mock::VerifyAndClearExpectations(manager()); 164 Mock::VerifyAndClearExpectations(manager());
175 EXPECT_CALL(*manager(), state()) 165 EXPECT_CALL(*manager(), state())
176 .WillOnce(Return(DataTypeManager::CONFIGURED)); 166 .WillOnce(Return(DataTypeManager::CONFIGURED));
177 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)); 167 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION));
178 SendConfigureDone(DataTypeManager::OK, syncable::ModelTypeSet()); 168 SendConfigureDone(DataTypeManager::OK, syncable::ModelTypeSet(),
169 syncable::ModelTypeSet());
179 170
180 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state()); 171 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
181 } 172 }
182 173
183 // Test that the migrator can cope with a migration request while a migration 174 // Test that the migrator can cope with a migration request while a migration
184 // is in progress. 175 // is in progress.
185 TEST_F(BackendMigratorTest, RestartMigration) { 176 TEST_F(BackendMigratorTest, RestartMigration) {
186 BackendMigrator migrator(service(), manager()); 177 BackendMigrator migrator("Profile0", service(), manager());
187 syncable::ModelTypeSet to_migrate1, to_migrate2, bookmarks; 178 syncable::ModelTypeSet to_migrate1, to_migrate2, to_migrate_union, bookmarks;
188 to_migrate1.insert(syncable::PREFERENCES); 179 to_migrate1.insert(syncable::PREFERENCES);
189 to_migrate2.insert(syncable::AUTOFILL); 180 to_migrate2.insert(syncable::AUTOFILL);
181 to_migrate_union.insert(syncable::PREFERENCES);
182 to_migrate_union.insert(syncable::AUTOFILL);
190 bookmarks.insert(syncable::BOOKMARKS); 183 bookmarks.insert(syncable::BOOKMARKS);
191 184
192 EXPECT_CALL(*manager(), state()) 185 EXPECT_CALL(*manager(), state())
193 .WillOnce(Return(DataTypeManager::CONFIGURED)); 186 .WillOnce(Return(DataTypeManager::CONFIGURED));
194 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 187 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
195 .Times(1); 188 .Times(2);
196 migrator.MigrateTypes(to_migrate1); 189 migrator.MigrateTypes(to_migrate1);
197 190
198 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state()); 191 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
199 migrator.MigrateTypes(to_migrate2); 192 migrator.MigrateTypes(to_migrate2);
200 193
201 syncable::ModelTypeSet difference1; 194 syncable::ModelTypeSet difference1;
202 std::set_difference(preferred_types().begin(), preferred_types().end(), 195 std::set_difference(preferred_types().begin(), preferred_types().end(),
203 to_migrate1.begin(), to_migrate1.end(), 196 to_migrate1.begin(), to_migrate1.end(),
204 std::inserter(difference1, difference1.end())); 197 std::inserter(difference1, difference1.end()));
205 198
206 Mock::VerifyAndClearExpectations(manager()); 199 Mock::VerifyAndClearExpectations(manager());
207 EXPECT_CALL(*manager(), state()) 200 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
208 .WillOnce(Return(DataTypeManager::CONFIGURED)); 201 .Times(2);
209 EXPECT_CALL(*manager(), Configure(bookmarks, 202 SendConfigureDone(DataTypeManager::OK, difference1, to_migrate1);
210 sync_api::CONFIGURE_REASON_MIGRATION));
211 SendConfigureDone(DataTypeManager::OK, difference1);
212 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state()); 203 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
213 204
214 SendConfigureDone(DataTypeManager::OK, bookmarks); 205 SendConfigureDone(DataTypeManager::OK, bookmarks, to_migrate_union);
215 EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state()); 206 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
216 } 207 }
217 208
218 // Test that an external invocation of Configure(...) during a migration results 209 // Test that an external invocation of Configure(...) during a migration results
219 // in a migration reattempt. 210 // in a migration reattempt.
220 TEST_F(BackendMigratorTest, InterruptedWhileDisablingTypes) { 211 TEST_F(BackendMigratorTest, InterruptedWhileDisablingTypes) {
221 BackendMigrator migrator(service(), manager()); 212 BackendMigrator migrator("Profile0", service(), manager());
222 syncable::ModelTypeSet to_migrate; 213 syncable::ModelTypeSet to_migrate;
223 syncable::ModelTypeSet difference; 214 syncable::ModelTypeSet difference;
224 to_migrate.insert(syncable::PREFERENCES); 215 to_migrate.insert(syncable::PREFERENCES);
225 difference.insert(syncable::AUTOFILL); 216 difference.insert(syncable::AUTOFILL);
226 difference.insert(syncable::BOOKMARKS); 217 difference.insert(syncable::BOOKMARKS);
227 218
228 EXPECT_CALL(*manager(), state()) 219 EXPECT_CALL(*manager(), state())
229 .WillOnce(Return(DataTypeManager::CONFIGURED)); 220 .WillOnce(Return(DataTypeManager::CONFIGURED));
230 EXPECT_CALL(*manager(), Configure(difference, 221 EXPECT_CALL(*manager(), Configure(difference,
231 sync_api::CONFIGURE_REASON_MIGRATION)); 222 sync_api::CONFIGURE_REASON_MIGRATION));
232 migrator.MigrateTypes(to_migrate); 223 migrator.MigrateTypes(to_migrate);
233 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state()); 224 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
234 225
235 Mock::VerifyAndClearExpectations(manager()); 226 Mock::VerifyAndClearExpectations(manager());
236 EXPECT_CALL(*manager(), state())
237 .WillOnce(Return(DataTypeManager::CONFIGURED));
238 EXPECT_CALL(*manager(), Configure(difference, 227 EXPECT_CALL(*manager(), Configure(difference,
239 sync_api::CONFIGURE_REASON_MIGRATION)); 228 sync_api::CONFIGURE_REASON_MIGRATION));
240 SendConfigureDone(DataTypeManager::OK, preferred_types()); 229 SendConfigureDone(DataTypeManager::OK, preferred_types(),
230 syncable::ModelTypeSet());
241 231
242 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state()); 232 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
243 } 233 }
244 234
245 // Test that spurious OnStateChanged events don't confuse the migrator while 235 // Test that spurious OnConfigureDone events don't confuse the
246 // it's waiting for disabled types to have been purged from the sync db. 236 // migrator while it's waiting for disabled types to have been purged
237 // from the sync db.
247 TEST_F(BackendMigratorTest, WaitingForPurge) { 238 TEST_F(BackendMigratorTest, WaitingForPurge) {
248 BackendMigrator migrator(service(), manager()); 239 BackendMigrator migrator("Profile0", service(), manager());
249 syncable::ModelTypeSet to_migrate, difference; 240 syncable::ModelTypeSet to_migrate, difference;
250 to_migrate.insert(syncable::PREFERENCES); 241 to_migrate.insert(syncable::PREFERENCES);
251 to_migrate.insert(syncable::AUTOFILL); 242 to_migrate.insert(syncable::AUTOFILL);
252 difference.insert(syncable::BOOKMARKS); 243 difference.insert(syncable::BOOKMARKS);
253 244
254 EXPECT_CALL(*manager(), state()) 245 EXPECT_CALL(*manager(), state())
255 .WillOnce(Return(DataTypeManager::CONFIGURED)); 246 .WillOnce(Return(DataTypeManager::CONFIGURED));
256 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)); 247 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
248 .Times(2);
249
257 migrator.MigrateTypes(to_migrate); 250 migrator.MigrateTypes(to_migrate);
258 SendConfigureDone(DataTypeManager::OK, difference); 251 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
259 EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
260 252
261 ReturnNonEmptyProgressMarkersInSnapshot(to_migrate); 253 SendConfigureDone(DataTypeManager::OK, difference, syncable::ModelTypeSet());
262 migrator.OnStateChanged(); 254 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
263 EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
264 255
265 syncable::ModelTypeSet prefs; 256 syncable::ModelTypeSet prefs;
266 prefs.insert(syncable::PREFERENCES); 257 prefs.insert(syncable::PREFERENCES);
267 ReturnNonEmptyProgressMarkersInSnapshot(prefs); 258 SendConfigureDone(DataTypeManager::OK, difference, prefs);
268 migrator.OnStateChanged(); 259 EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
269 EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
270 260
271 syncable::ModelTypeSet bookmarks; 261 SendConfigureDone(DataTypeManager::OK, difference, to_migrate);
272 bookmarks.insert(syncable::BOOKMARKS);
273 ReturnNonEmptyProgressMarkersInSnapshot(bookmarks);
274 EXPECT_CALL(*manager(), Configure(preferred_types(),
275 sync_api::CONFIGURE_REASON_MIGRATION));
276 migrator.OnStateChanged();
277 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state()); 262 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
278 } 263 }
279 264
280 TEST_F(BackendMigratorTest, MigratedTypeDisabledByUserDuringMigration) { 265 TEST_F(BackendMigratorTest, MigratedTypeDisabledByUserDuringMigration) {
281 BackendMigrator migrator(service(), manager()); 266 BackendMigrator migrator("Profile0", service(), manager());
282 syncable::ModelTypeSet to_migrate; 267 syncable::ModelTypeSet to_migrate;
283 to_migrate.insert(syncable::PREFERENCES); 268 to_migrate.insert(syncable::PREFERENCES);
284 269
285 EXPECT_CALL(*manager(), state()) 270 EXPECT_CALL(*manager(), state())
286 .WillOnce(Return(DataTypeManager::CONFIGURED)); 271 .WillOnce(Return(DataTypeManager::CONFIGURED));
287 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)); 272 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
273 .Times(2);
288 migrator.MigrateTypes(to_migrate); 274 migrator.MigrateTypes(to_migrate);
289 275
290 RemovePreferredType(syncable::PREFERENCES); 276 RemovePreferredType(syncable::PREFERENCES);
291 SendConfigureDone(DataTypeManager::OK, preferred_types()); 277 SendConfigureDone(DataTypeManager::OK, preferred_types(), to_migrate);
292 EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
293
294 Mock::VerifyAndClearExpectations(manager());
295 ReturnEmptyProgressMarkersInSnapshot();
296 EXPECT_CALL(*manager(), Configure(preferred_types(),
297 sync_api::CONFIGURE_REASON_MIGRATION));
298 migrator.OnStateChanged();
299
300 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state()); 278 EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
301 SendConfigureDone(DataTypeManager::OK, preferred_types()); 279 SendConfigureDone(DataTypeManager::OK, preferred_types(),
280 syncable::ModelTypeSet());
302 EXPECT_EQ(BackendMigrator::IDLE, migrator.state()); 281 EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
303 } 282 }
304 283
305 TEST_F(BackendMigratorTest, ConfigureFailure) { 284 TEST_F(BackendMigratorTest, ConfigureFailure) {
306 BackendMigrator migrator(service(), manager()); 285 BackendMigrator migrator("Profile0", service(), manager());
307 syncable::ModelTypeSet to_migrate; 286 syncable::ModelTypeSet to_migrate;
308 to_migrate.insert(syncable::PREFERENCES); 287 to_migrate.insert(syncable::PREFERENCES);
309 288
310 EXPECT_CALL(*manager(), state()) 289 EXPECT_CALL(*manager(), state())
311 .WillOnce(Return(DataTypeManager::CONFIGURED)); 290 .WillOnce(Return(DataTypeManager::CONFIGURED));
312 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION)) 291 EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
313 .Times(1); 292 .Times(1);
314 migrator.MigrateTypes(to_migrate); 293 migrator.MigrateTypes(to_migrate);
315 SendConfigureDone(DataTypeManager::ABORTED, syncable::ModelTypeSet()); 294 SendConfigureDone(DataTypeManager::ABORTED, syncable::ModelTypeSet(),
295 syncable::ModelTypeSet());
316 EXPECT_EQ(BackendMigrator::IDLE, migrator.state()); 296 EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
317 } 297 }
318 298
319 }; // namespace browser_sync 299 }; // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698