OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/compiler_specific.h" | 5 #include "base/compiler_specific.h" |
6 #include "base/memory/scoped_vector.h" | 6 #include "base/memory/scoped_vector.h" |
7 #include "base/prefs/scoped_user_pref_update.h" | 7 #include "base/prefs/scoped_user_pref_update.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/sync/backend_migrator.h" | 9 #include "chrome/browser/sync/backend_migrator.h" |
10 #include "chrome/browser/sync/profile_sync_service.h" | 10 #include "chrome/browser/sync/profile_sync_service.h" |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 // types. | 236 // types. |
237 void AwaitMigration(syncer::ModelTypeSet migrate_types) { | 237 void AwaitMigration(syncer::ModelTypeSet migrate_types) { |
238 for (int i = 0; i < num_clients(); ++i) { | 238 for (int i = 0; i < num_clients(); ++i) { |
239 MigrationChecker* checker = migration_checkers_[i]; | 239 MigrationChecker* checker = migration_checkers_[i]; |
240 checker->set_expected_types(migrate_types); | 240 checker->set_expected_types(migrate_types); |
241 checker->Wait(); | 241 checker->Wait(); |
242 ASSERT_FALSE(checker->TimedOut()); | 242 ASSERT_FALSE(checker->TimedOut()); |
243 } | 243 } |
244 } | 244 } |
245 | 245 |
246 bool ShouldRunMigrationTest() const { | |
247 if (!ServerSupportsNotificationControl() || | |
248 !ServerSupportsErrorTriggering()) { | |
249 LOG(WARNING) << "Test skipped in this server environment."; | |
250 return false; | |
251 } | |
252 return true; | |
253 } | |
254 | |
255 // Makes sure migration works with the given migration list and | 246 // Makes sure migration works with the given migration list and |
256 // trigger method. | 247 // trigger method. |
257 void RunMigrationTest(const MigrationList& migration_list, | 248 void RunMigrationTest(const MigrationList& migration_list, |
258 TriggerMethod trigger_method) { | 249 TriggerMethod trigger_method) { |
259 ASSERT_TRUE(ShouldRunMigrationTest()); | |
260 | |
261 // If we have only one client, turn off notifications to avoid the | 250 // If we have only one client, turn off notifications to avoid the |
262 // possibility of spurious sync cycles. | 251 // possibility of spurious sync cycles. |
263 bool do_test_without_notifications = | 252 bool do_test_without_notifications = |
264 (trigger_method != TRIGGER_NOTIFICATION && num_clients() == 1); | 253 (trigger_method != TRIGGER_NOTIFICATION && num_clients() == 1); |
265 | 254 |
266 if (do_test_without_notifications) { | 255 if (do_test_without_notifications) { |
267 DisableNotifications(); | 256 DisableNotifications(); |
268 } | 257 } |
269 | 258 |
270 // Make sure migration hasn't been triggered prematurely. | 259 // Make sure migration hasn't been triggered prematurely. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 | 295 |
307 private: | 296 private: |
308 // Used to keep track of the migration progress for each sync client. | 297 // Used to keep track of the migration progress for each sync client. |
309 ScopedVector<MigrationChecker> migration_checkers_; | 298 ScopedVector<MigrationChecker> migration_checkers_; |
310 | 299 |
311 DISALLOW_COPY_AND_ASSIGN(MigrationTest); | 300 DISALLOW_COPY_AND_ASSIGN(MigrationTest); |
312 }; | 301 }; |
313 | 302 |
314 class MigrationSingleClientTest : public MigrationTest { | 303 class MigrationSingleClientTest : public MigrationTest { |
315 public: | 304 public: |
316 MigrationSingleClientTest() : MigrationTest(SINGLE_CLIENT) {} | 305 MigrationSingleClientTest() : MigrationTest(SINGLE_CLIENT_LEGACY) {} |
317 virtual ~MigrationSingleClientTest() {} | 306 virtual ~MigrationSingleClientTest() {} |
318 | 307 |
319 void RunSingleClientMigrationTest(const MigrationList& migration_list, | 308 void RunSingleClientMigrationTest(const MigrationList& migration_list, |
320 TriggerMethod trigger_method) { | 309 TriggerMethod trigger_method) { |
321 if (!ShouldRunMigrationTest()) { | |
322 return; | |
323 } | |
324 ASSERT_TRUE(SetupSync()); | 310 ASSERT_TRUE(SetupSync()); |
325 RunMigrationTest(migration_list, trigger_method); | 311 RunMigrationTest(migration_list, trigger_method); |
326 } | 312 } |
327 | 313 |
328 private: | 314 private: |
329 DISALLOW_COPY_AND_ASSIGN(MigrationSingleClientTest); | 315 DISALLOW_COPY_AND_ASSIGN(MigrationSingleClientTest); |
330 }; | 316 }; |
331 | 317 |
332 // The simplest possible migration tests -- a single data type. | 318 // The simplest possible migration tests -- a single data type. |
333 | 319 |
(...skipping 14 matching lines...) Expand all Loading... |
348 | 334 |
349 // Nigori is handled specially, so we test that separately. | 335 // Nigori is handled specially, so we test that separately. |
350 | 336 |
351 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, NigoriOnly) { | 337 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, NigoriOnly) { |
352 RunSingleClientMigrationTest(MakeList(syncer::PREFERENCES), | 338 RunSingleClientMigrationTest(MakeList(syncer::PREFERENCES), |
353 TRIGGER_NOTIFICATION); | 339 TRIGGER_NOTIFICATION); |
354 } | 340 } |
355 | 341 |
356 // A little more complicated -- two data types. | 342 // A little more complicated -- two data types. |
357 | 343 |
| 344 // See crbug.com/392989. |
358 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, | 345 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, |
359 BookmarksPrefsIndividually) { | 346 DISABLED_BookmarksPrefsIndividually) { |
360 RunSingleClientMigrationTest( | 347 RunSingleClientMigrationTest( |
361 MakeList(syncer::BOOKMARKS, syncer::PREFERENCES), | 348 MakeList(syncer::BOOKMARKS, syncer::PREFERENCES), |
362 MODIFY_PREF); | 349 MODIFY_PREF); |
363 } | 350 } |
364 | 351 |
365 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, BookmarksPrefsBoth) { | 352 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, BookmarksPrefsBoth) { |
366 RunSingleClientMigrationTest( | 353 RunSingleClientMigrationTest( |
367 MakeList(MakeSet(syncer::BOOKMARKS, syncer::PREFERENCES)), | 354 MakeList(MakeSet(syncer::BOOKMARKS, syncer::PREFERENCES)), |
368 MODIFY_BOOKMARK); | 355 MODIFY_BOOKMARK); |
369 } | 356 } |
370 | 357 |
371 // Two data types with one being nigori. | 358 // Two data types with one being nigori. |
372 | 359 |
373 // See crbug.com/124480. | 360 // See crbug.com/124480. |
374 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, | 361 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, |
375 DISABLED_PrefsNigoriIndividiaully) { | 362 DISABLED_PrefsNigoriIndividiaully) { |
376 RunSingleClientMigrationTest( | 363 RunSingleClientMigrationTest( |
377 MakeList(syncer::PREFERENCES, syncer::NIGORI), | 364 MakeList(syncer::PREFERENCES, syncer::NIGORI), |
378 TRIGGER_NOTIFICATION); | 365 TRIGGER_NOTIFICATION); |
379 } | 366 } |
380 | 367 |
381 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, PrefsNigoriBoth) { | 368 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, PrefsNigoriBoth) { |
382 RunSingleClientMigrationTest( | 369 RunSingleClientMigrationTest( |
383 MakeList(MakeSet(syncer::PREFERENCES, syncer::NIGORI)), | 370 MakeList(MakeSet(syncer::PREFERENCES, syncer::NIGORI)), |
384 MODIFY_PREF); | 371 MODIFY_PREF); |
385 } | 372 } |
386 | 373 |
387 // The whole shebang -- all data types. | 374 // The whole shebang -- all data types. |
388 | 375 |
389 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, AllTypesIndividually) { | 376 // See crbug.com/392989. |
| 377 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, |
| 378 DISABLED_AllTypesIndividually) { |
390 ASSERT_TRUE(SetupClients()); | 379 ASSERT_TRUE(SetupClients()); |
391 RunSingleClientMigrationTest(GetPreferredDataTypesList(), MODIFY_BOOKMARK); | 380 RunSingleClientMigrationTest(GetPreferredDataTypesList(), MODIFY_BOOKMARK); |
392 } | 381 } |
393 | 382 |
| 383 // See crbug.com/392989. |
394 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, | 384 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, |
395 AllTypesIndividuallyTriggerNotification) { | 385 DISABLED_AllTypesIndividuallyTriggerNotification) { |
396 ASSERT_TRUE(SetupClients()); | 386 ASSERT_TRUE(SetupClients()); |
397 RunSingleClientMigrationTest(GetPreferredDataTypesList(), | 387 RunSingleClientMigrationTest(GetPreferredDataTypesList(), |
398 TRIGGER_NOTIFICATION); | 388 TRIGGER_NOTIFICATION); |
399 } | 389 } |
400 | 390 |
401 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, AllTypesAtOnce) { | 391 // See crbug.com/392989. |
| 392 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, DISABLED_AllTypesAtOnce) { |
402 ASSERT_TRUE(SetupClients()); | 393 ASSERT_TRUE(SetupClients()); |
403 RunSingleClientMigrationTest(MakeList(GetPreferredDataTypes()), | 394 RunSingleClientMigrationTest(MakeList(GetPreferredDataTypes()), |
404 MODIFY_PREF); | 395 MODIFY_PREF); |
405 } | 396 } |
406 | 397 |
| 398 // See crbug.com/392989. |
407 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, | 399 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, |
408 AllTypesAtOnceTriggerNotification) { | 400 DISABLED_AllTypesAtOnceTriggerNotification) { |
409 ASSERT_TRUE(SetupClients()); | 401 ASSERT_TRUE(SetupClients()); |
410 RunSingleClientMigrationTest(MakeList(GetPreferredDataTypes()), | 402 RunSingleClientMigrationTest(MakeList(GetPreferredDataTypes()), |
411 TRIGGER_NOTIFICATION); | 403 TRIGGER_NOTIFICATION); |
412 } | 404 } |
413 | 405 |
414 // All data types plus nigori. | 406 // All data types plus nigori. |
415 | 407 |
416 // See crbug.com/124480. | 408 // See crbug.com/124480. |
417 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, | 409 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, |
418 DISABLED_AllTypesWithNigoriIndividually) { | 410 DISABLED_AllTypesWithNigoriIndividually) { |
419 ASSERT_TRUE(SetupClients()); | 411 ASSERT_TRUE(SetupClients()); |
420 MigrationList migration_list = GetPreferredDataTypesList(); | 412 MigrationList migration_list = GetPreferredDataTypesList(); |
421 migration_list.push_front(MakeSet(syncer::NIGORI)); | 413 migration_list.push_front(MakeSet(syncer::NIGORI)); |
422 RunSingleClientMigrationTest(migration_list, MODIFY_BOOKMARK); | 414 RunSingleClientMigrationTest(migration_list, MODIFY_BOOKMARK); |
423 } | 415 } |
424 | 416 |
| 417 // See crbug.com/392989. |
425 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, | 418 IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, |
426 AllTypesWithNigoriAtOnce) { | 419 DISABLED_AllTypesWithNigoriAtOnce) { |
427 ASSERT_TRUE(SetupClients()); | 420 ASSERT_TRUE(SetupClients()); |
428 syncer::ModelTypeSet all_types = GetPreferredDataTypes(); | 421 syncer::ModelTypeSet all_types = GetPreferredDataTypes(); |
429 all_types.Put(syncer::NIGORI); | 422 all_types.Put(syncer::NIGORI); |
430 RunSingleClientMigrationTest(MakeList(all_types), MODIFY_PREF); | 423 RunSingleClientMigrationTest(MakeList(all_types), MODIFY_PREF); |
431 } | 424 } |
432 | 425 |
433 class MigrationTwoClientTest : public MigrationTest { | 426 class MigrationTwoClientTest : public MigrationTest { |
434 public: | 427 public: |
435 MigrationTwoClientTest() : MigrationTest(TWO_CLIENT) {} | 428 MigrationTwoClientTest() : MigrationTest(TWO_CLIENT_LEGACY) {} |
436 virtual ~MigrationTwoClientTest() {} | 429 virtual ~MigrationTwoClientTest() {} |
437 | 430 |
438 // Helper function that verifies that preferences sync still works. | 431 // Helper function that verifies that preferences sync still works. |
439 void VerifyPrefSync() { | 432 void VerifyPrefSync() { |
440 ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton)); | 433 ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton)); |
441 ChangeBooleanPref(0, prefs::kShowHomeButton); | 434 ChangeBooleanPref(0, prefs::kShowHomeButton); |
442 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); | 435 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
443 ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton)); | 436 ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton)); |
444 } | 437 } |
445 | 438 |
446 void RunTwoClientMigrationTest(const MigrationList& migration_list, | 439 void RunTwoClientMigrationTest(const MigrationList& migration_list, |
447 TriggerMethod trigger_method) { | 440 TriggerMethod trigger_method) { |
448 if (!ShouldRunMigrationTest()) { | |
449 return; | |
450 } | |
451 ASSERT_TRUE(SetupSync()); | 441 ASSERT_TRUE(SetupSync()); |
452 | 442 |
453 // Make sure pref sync works before running the migration test. | 443 // Make sure pref sync works before running the migration test. |
454 VerifyPrefSync(); | 444 VerifyPrefSync(); |
455 | 445 |
456 RunMigrationTest(migration_list, trigger_method); | 446 RunMigrationTest(migration_list, trigger_method); |
457 | 447 |
458 // Make sure pref sync still works after running the migration | 448 // Make sure pref sync still works after running the migration |
459 // test. | 449 // test. |
460 VerifyPrefSync(); | 450 VerifyPrefSync(); |
461 } | 451 } |
462 | 452 |
463 private: | 453 private: |
464 DISALLOW_COPY_AND_ASSIGN(MigrationTwoClientTest); | 454 DISALLOW_COPY_AND_ASSIGN(MigrationTwoClientTest); |
465 }; | 455 }; |
466 | 456 |
467 // Easiest possible test of migration errors: triggers a server | 457 // Easiest possible test of migration errors: triggers a server |
468 // migration on one datatype, then modifies some other datatype. | 458 // migration on one datatype, then modifies some other datatype. |
469 IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest, MigratePrefsThenModifyBookmark) { | 459 // See crbug.com/392989. |
| 460 IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest, |
| 461 DISABLED_MigratePrefsThenModifyBookmark) { |
470 RunTwoClientMigrationTest(MakeList(syncer::PREFERENCES), | 462 RunTwoClientMigrationTest(MakeList(syncer::PREFERENCES), |
471 MODIFY_BOOKMARK); | 463 MODIFY_BOOKMARK); |
472 } | 464 } |
473 | 465 |
474 // Triggers a server migration on two datatypes, then makes a local | 466 // Triggers a server migration on two datatypes, then makes a local |
475 // modification to one of them. | 467 // modification to one of them. |
| 468 // See crbug.com/392989. |
476 IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest, | 469 IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest, |
477 MigratePrefsAndBookmarksThenModifyBookmark) { | 470 DISABLED_MigratePrefsAndBookmarksThenModifyBookmark) { |
478 RunTwoClientMigrationTest( | 471 RunTwoClientMigrationTest( |
479 MakeList(syncer::PREFERENCES, syncer::BOOKMARKS), | 472 MakeList(syncer::PREFERENCES, syncer::BOOKMARKS), |
480 MODIFY_BOOKMARK); | 473 MODIFY_BOOKMARK); |
481 } | 474 } |
482 | 475 |
483 // Migrate every datatype in sequence; the catch being that the server | 476 // Migrate every datatype in sequence; the catch being that the server |
484 // will only tell the client about the migrations one at a time. | 477 // will only tell the client about the migrations one at a time. |
485 // TODO(rsimha): This test takes longer than 60 seconds, and will cause tree | 478 // TODO(rsimha): This test takes longer than 60 seconds, and will cause tree |
486 // redness due to sharding. | 479 // redness due to sharding. |
487 // Re-enable this test after syncer::kInitialBackoffShortRetrySeconds is reduced | 480 // Re-enable this test after syncer::kInitialBackoffShortRetrySeconds is reduced |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 // Do not add optional datatypes. | 514 // Do not add optional datatypes. |
522 } | 515 } |
523 | 516 |
524 virtual ~MigrationReconfigureTest() {} | 517 virtual ~MigrationReconfigureTest() {} |
525 | 518 |
526 private: | 519 private: |
527 DISALLOW_COPY_AND_ASSIGN(MigrationReconfigureTest); | 520 DISALLOW_COPY_AND_ASSIGN(MigrationReconfigureTest); |
528 }; | 521 }; |
529 | 522 |
530 } // namespace | 523 } // namespace |
OLD | NEW |