15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_vector.h"
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/sync/profile_sync_service.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/bookmarks_helper.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/test/integration/migration_waiter.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/test/integration/migration_watcher.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/preferences_helper.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_test.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/browser/translate_prefs.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::AddURL;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::IndexedURL;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::IndexedURLTitle;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using preferences_helper::BooleanPrefMatches;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using preferences_helper::ChangeBooleanPref;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Utility functions to make a model type set out of a small number of
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// model types.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelTypeSet MakeSet(syncer::ModelType type) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return syncer::ModelTypeSet(type);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelTypeSet MakeSet(syncer::ModelType type1,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             syncer::ModelType type2) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return syncer::ModelTypeSet(type1, type2);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An ordered list of model types sets to migrate.  Used by
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RunMigrationTest().
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::deque<syncer::ModelTypeSet> MigrationList;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Utility functions to make a MigrationList out of a small number of
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// model types / model type sets.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MigrationList MakeList(syncer::ModelTypeSet model_types) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return MigrationList(1, model_types);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MigrationList MakeList(syncer::ModelTypeSet model_types1,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       syncer::ModelTypeSet model_types2) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MigrationList migration_list;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  migration_list.push_back(model_types1);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  migration_list.push_back(model_types2);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return migration_list;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MigrationList MakeList(syncer::ModelType type) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return MakeList(MakeSet(type));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MigrationList MakeList(syncer::ModelType type1,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       syncer::ModelType type2) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return MakeList(MakeSet(type1), MakeSet(type2));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MigrationTest : public SyncTest  {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit MigrationTest(TestType test_type) : SyncTest(test_type) {}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MigrationTest() {}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum TriggerMethod { MODIFY_PREF, MODIFY_BOOKMARK, TRIGGER_NOTIFICATION };
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Set up sync for all profiles and initialize all MigrationWatchers. This
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // helps ensure that all migration events are captured, even if they were to
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // occur before a test calls AwaitMigration for a specific profile.
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool SetupSync() OVERRIDE {
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (!SyncTest::SetupSync())
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return false;
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    for (int i = 0; i < num_clients(); ++i) {
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      MigrationWatcher* watcher = new MigrationWatcher(GetClient(i));
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      migration_watchers_.push_back(watcher);
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return true;
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  syncer::ModelTypeSet GetPreferredDataTypes() {
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // ProfileSyncService must already have been created before we can call
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // GetPreferredDataTypes().
94e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    DCHECK(GetSyncService((0)));
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    syncer::ModelTypeSet preferred_data_types =
96e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        GetSyncService((0))->GetPreferredDataTypes();
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    preferred_data_types.RemoveAll(syncer::ProxyTypes());
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // The managed user settings will be "unready" during this test, so we
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // should not request that they be migrated.
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    preferred_data_types.Remove(syncer::SUPERVISED_USER_SETTINGS);
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make sure all clients have the same preferred data types.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int i = 1; i < num_clients(); ++i) {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const syncer::ModelTypeSet other_preferred_data_types =
106e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch          GetSyncService((i))->GetPreferredDataTypes();
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_TRUE(preferred_data_types.Equals(other_preferred_data_types));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return preferred_data_types;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a MigrationList with every enabled data type in its own
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // set.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MigrationList GetPreferredDataTypesList() {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MigrationList migration_list;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const syncer::ModelTypeSet preferred_data_types =
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetPreferredDataTypes();
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (syncer::ModelTypeSet::Iterator it =
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             preferred_data_types.First(); it.Good(); it.Inc()) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      migration_list.push_back(MakeSet(it.Get()));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return migration_list;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Trigger a migration for the given types with the given method.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void TriggerMigration(syncer::ModelTypeSet model_types,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        TriggerMethod trigger_method) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (trigger_method) {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case MODIFY_PREF:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Unlike MODIFY_BOOKMARK, MODIFY_PREF doesn't cause a
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // notification to happen (since model association on a
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // boolean pref clobbers the local value), so it doesn't work
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // for anything but single-client tests.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ASSERT_EQ(1, num_clients());
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ChangeBooleanPref(0, prefs::kShowHomeButton);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case MODIFY_BOOKMARK:
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case TRIGGER_NOTIFICATION:
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TriggerNotification(model_types);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default:
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ADD_FAILURE();
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Block until all clients have completed migration for the given
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // types.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AwaitMigration(syncer::ModelTypeSet migrate_types) {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int i = 0; i < num_clients(); ++i) {
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      MigrationWaiter waiter(migrate_types, migration_watchers_[i]);
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      waiter.Wait();
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ASSERT_FALSE(waiter.TimedOut());
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Makes sure migration works with the given migration list and
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // trigger method.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RunMigrationTest(const MigrationList& migration_list,
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        TriggerMethod trigger_method) {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If we have only one client, turn off notifications to avoid the
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // possibility of spurious sync cycles.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool do_test_without_notifications =
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (trigger_method != TRIGGER_NOTIFICATION && num_clients() == 1);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (do_test_without_notifications) {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DisableNotifications();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Make sure migration hasn't been triggered prematurely.
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    for (int i = 0; i < num_clients(); ++i) {
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ASSERT_TRUE(migration_watchers_[i]->GetMigratedTypes().Empty());
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Phase 1: Trigger the migrations on the server.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (MigrationList::const_iterator it = migration_list.begin();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         it != migration_list.end(); ++it) {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TriggerMigrationDoneError(*it);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Phase 2: Trigger each migration individually and wait for it to
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // complete.  (Multiple migrations may be handled by each
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // migration cycle, but there's no guarantee of that, so we have
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // to trigger each migration individually.)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (MigrationList::const_iterator it = migration_list.begin();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         it != migration_list.end(); ++it) {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TriggerMigration(*it, trigger_method);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AwaitMigration(*it);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Phase 3: Wait for all clients to catch up.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // AwaitQuiescence() will not succeed when notifications are disabled.  We
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // can safely avoid calling it because we know that, in the single client
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // case, there is no one else to wait for.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(rlarocque, 97780): Remove the if condition when the test harness
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // supports calling AwaitQuiescence() when notifications are disabled.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!do_test_without_notifications) {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AwaitQuiescence();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(rlarocque): It should be possible to re-enable notifications
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // here, but doing so makes some windows tests flaky.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Used to keep track of the migration progress for each sync client.
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScopedVector<MigrationWatcher> migration_watchers_;
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MigrationTest);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MigrationSingleClientTest : public MigrationTest {
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MigrationSingleClientTest() : MigrationTest(SINGLE_CLIENT_LEGACY) {}
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MigrationSingleClientTest() {}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RunSingleClientMigrationTest(const MigrationList& migration_list,
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    TriggerMethod trigger_method) {
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(SetupSync());
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RunMigrationTest(migration_list, trigger_method);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MigrationSingleClientTest);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The simplest possible migration tests -- a single data type.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, PrefsOnlyModifyPref) {
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(MakeList(syncer::PREFERENCES), MODIFY_PREF);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, PrefsOnlyModifyBookmark) {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(MakeList(syncer::PREFERENCES),
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               MODIFY_BOOKMARK);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest,
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       PrefsOnlyTriggerNotification) {
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(MakeList(syncer::PREFERENCES),
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               TRIGGER_NOTIFICATION);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Nigori is handled specially, so we test that separately.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, NigoriOnly) {
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(MakeList(syncer::PREFERENCES),
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               TRIGGER_NOTIFICATION);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A little more complicated -- two data types.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
257116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, BookmarksPrefsIndividually) {
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MakeList(syncer::BOOKMARKS, syncer::PREFERENCES),
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MODIFY_PREF);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, BookmarksPrefsBoth) {
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MakeList(MakeSet(syncer::BOOKMARKS, syncer::PREFERENCES)),
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MODIFY_BOOKMARK);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Two data types with one being nigori.
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See crbug.com/124480.
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest,
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       DISABLED_PrefsNigoriIndividiaully) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MakeList(syncer::PREFERENCES, syncer::NIGORI),
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TRIGGER_NOTIFICATION);
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, PrefsNigoriBoth) {
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MakeList(MakeSet(syncer::PREFERENCES, syncer::NIGORI)),
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MODIFY_PREF);
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The whole shebang -- all data types.
2866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_WIN)
2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// http://crbug.com/403778
2886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_AllTypesIndividually DISABLED_AllTypesIndividually
2896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else
2906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_AllTypesIndividually AllTypesIndividually
2916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif
2926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, MAYBE_AllTypesIndividually) {
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(GetPreferredDataTypesList(), MODIFY_BOOKMARK);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_WIN)
2986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// http://crbug.com/403778
2996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_AllTypesIndividuallyTriggerNotification DISABLED_AllTypesIndividuallyTriggerNotification
3006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else
3016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_AllTypesIndividuallyTriggerNotification AllTypesIndividuallyTriggerNotification
3026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest,
3046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                       MAYBE_AllTypesIndividuallyTriggerNotification) {
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(GetPreferredDataTypesList(),
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               TRIGGER_NOTIFICATION);
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, AllTypesAtOnce) {
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(MakeList(GetPreferredDataTypes()),
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               MODIFY_PREF);
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest,
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       AllTypesAtOnceTriggerNotification) {
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(MakeList(GetPreferredDataTypes()),
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               TRIGGER_NOTIFICATION);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All data types plus nigori.
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See crbug.com/124480.
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationSingleClientTest,
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       DISABLED_AllTypesWithNigoriIndividually) {
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MigrationList migration_list = GetPreferredDataTypesList();
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  migration_list.push_front(MakeSet(syncer::NIGORI));
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(migration_list, MODIFY_BOOKMARK);
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
334116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(MigrationSingleClientTest, AllTypesWithNigoriAtOnce) {
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  syncer::ModelTypeSet all_types = GetPreferredDataTypes();
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  all_types.Put(syncer::NIGORI);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunSingleClientMigrationTest(MakeList(all_types), MODIFY_PREF);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MigrationTwoClientTest : public MigrationTest {
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MigrationTwoClientTest() : MigrationTest(TWO_CLIENT_LEGACY) {}
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MigrationTwoClientTest() {}
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper function that verifies that preferences sync still works.
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void VerifyPrefSync() {
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton));
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ChangeBooleanPref(0, prefs::kShowHomeButton);
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton));
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RunTwoClientMigrationTest(const MigrationList& migration_list,
3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                 TriggerMethod trigger_method) {
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(SetupSync());
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make sure pref sync works before running the migration test.
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    VerifyPrefSync();
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RunMigrationTest(migration_list, trigger_method);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make sure pref sync still works after running the migration
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // test.
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    VerifyPrefSync();
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MigrationTwoClientTest);
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Easiest possible test of migration errors: triggers a server
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// migration on one datatype, then modifies some other datatype.
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest, MigratePrefsThenModifyBookmark) {
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunTwoClientMigrationTest(MakeList(syncer::PREFERENCES),
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            MODIFY_BOOKMARK);
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Triggers a server migration on two datatypes, then makes a local
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// modification to one of them.
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest,
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MigratePrefsAndBookmarksThenModifyBookmark) {
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunTwoClientMigrationTest(
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MakeList(syncer::PREFERENCES, syncer::BOOKMARKS),
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MODIFY_BOOKMARK);
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Migrate every datatype in sequence; the catch being that the server
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// will only tell the client about the migrations one at a time.
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(rsimha): This test takes longer than 60 seconds, and will cause tree
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redness due to sharding.
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Re-enable this test after syncer::kInitialBackoffShortRetrySeconds is reduced
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to zero.
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest,
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       DISABLED_MigrationHellWithoutNigori) {
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MigrationList migration_list = GetPreferredDataTypesList();
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Let the first nudge be a datatype that's neither prefs nor
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bookmarks.
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  migration_list.push_front(MakeSet(syncer::THEMES));
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunTwoClientMigrationTest(migration_list, MODIFY_BOOKMARK);
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See crbug.com/124480.
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MigrationTwoClientTest,
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       DISABLED_MigrationHellWithNigori) {
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MigrationList migration_list = GetPreferredDataTypesList();
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Let the first nudge be a datatype that's neither prefs nor
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bookmarks.
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  migration_list.push_front(MakeSet(syncer::THEMES));
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pop off one so that we don't migrate all data types; the syncer
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // freaks out if we do that (see http://crbug.com/94882).
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_GE(migration_list.size(), 2u);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(migration_list.back().Equals(MakeSet(syncer::NIGORI)));
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  migration_list.back() = MakeSet(syncer::NIGORI);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunTwoClientMigrationTest(migration_list, MODIFY_BOOKMARK);
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MigrationReconfigureTest : public MigrationTwoClientTest {
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MigrationReconfigureTest() {}
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void SetUpCommandLine(base::CommandLine* cl) OVERRIDE {
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddTestSwitches(cl);
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Do not add optional datatypes.
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MigrationReconfigureTest() {}
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MigrationReconfigureTest);
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
436