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