Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
| 8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
| 9 #include "chrome/browser/sync/profile_sync_service.h" | 9 #include "chrome/browser/sync/profile_sync_service.h" |
| 10 #include "chrome/browser/sync/test/integration/bookmarks_helper.h" | 10 #include "chrome/browser/sync/test/integration/bookmarks_helper.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 using bookmarks_helper::ModelMatchesVerifier; | 22 using bookmarks_helper::ModelMatchesVerifier; |
| 23 using bookmarks_helper::Move; | 23 using bookmarks_helper::Move; |
| 24 using bookmarks_helper::Remove; | 24 using bookmarks_helper::Remove; |
| 25 using sync_integration_test_util::AwaitCommitActivityCompletion; | 25 using sync_integration_test_util::AwaitCommitActivityCompletion; |
| 26 | 26 |
| 27 class SingleClientBackupRollbackTest : public SyncTest { | 27 class SingleClientBackupRollbackTest : public SyncTest { |
| 28 public: | 28 public: |
| 29 SingleClientBackupRollbackTest() : SyncTest(SINGLE_CLIENT) {} | 29 SingleClientBackupRollbackTest() : SyncTest(SINGLE_CLIENT) {} |
| 30 virtual ~SingleClientBackupRollbackTest() {} | 30 virtual ~SingleClientBackupRollbackTest() {} |
| 31 | 31 |
| 32 virtual void SetUp() OVERRIDE { | 32 void DisableBackup() { |
| 33 CommandLine::ForCurrentProcess()->AppendSwitch( | |
| 34 switches::kSyncDisableBackup); | |
| 35 } | |
| 36 | |
| 37 void EnableRollback() { | |
| 33 CommandLine::ForCurrentProcess()->AppendSwitch( | 38 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 34 switches::kSyncEnableRollback); | 39 switches::kSyncEnableRollback); |
| 35 SyncTest::SetUp(); | |
| 36 } | 40 } |
| 37 | 41 |
| 38 private: | 42 private: |
| 39 DISALLOW_COPY_AND_ASSIGN(SingleClientBackupRollbackTest); | 43 DISALLOW_COPY_AND_ASSIGN(SingleClientBackupRollbackTest); |
| 40 }; | 44 }; |
| 41 | 45 |
| 42 class BackupModeChecker { | 46 class BackupModeChecker { |
| 43 public: | 47 public: |
| 44 explicit BackupModeChecker(ProfileSyncService* service, | 48 explicit BackupModeChecker(ProfileSyncService* service, |
| 45 base::TimeDelta timeout) | 49 base::TimeDelta timeout) |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 72 return pss_->backend_mode() == ProfileSyncService::BACKUP && | 76 return pss_->backend_mode() == ProfileSyncService::BACKUP && |
| 73 pss_->ShouldPushChanges(); | 77 pss_->ShouldPushChanges(); |
| 74 } | 78 } |
| 75 | 79 |
| 76 ProfileSyncService* pss_; | 80 ProfileSyncService* pss_; |
| 77 base::TimeDelta timeout_; | 81 base::TimeDelta timeout_; |
| 78 base::TimeTicks expiration_; | 82 base::TimeTicks expiration_; |
| 79 }; | 83 }; |
| 80 | 84 |
| 81 #if defined(ENABLE_PRE_SYNC_BACKUP) | 85 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 86 #define MAYBE_TestBackupDisabled TestBackupDisabled | |
| 87 #else | |
| 88 #define MAYBE_TestBackupDisabled DISABLED_TestBackupDisabled | |
| 89 #endif | |
| 90 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | |
| 91 MAYBE_TestBackupDisabled) { | |
| 92 DisableBackup(); | |
| 93 | |
| 94 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | |
| 95 | |
| 96 BackupModeChecker checker(GetSyncService(0), | |
| 97 base::TimeDelta::FromSeconds(15)); | |
| 98 ASSERT_FALSE(checker.Wait()); | |
|
pval...(no longer on Chromium)
2014/06/28 00:12:00
does Wait() have to wait the entire timeout to eve
haitaol1
2014/07/01 16:49:36
Unfortunately yes because backup controller won't
| |
| 99 | |
| 100 ASSERT_EQ(ProfileSyncService::IDLE, GetSyncService(0)->backend_mode()); | |
| 101 } | |
| 102 | |
| 103 #if defined(ENABLE_PRE_SYNC_BACKUP) | |
| 104 #define MAYBE_TestBackupOnly TestBackupOnly | |
| 105 #else | |
| 106 #define MAYBE_TestBackupOnly DISABLED_TestBackupOnly | |
| 107 #endif | |
| 108 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | |
| 109 MAYBE_TestBackupOnly) { | |
| 110 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | |
| 111 | |
| 112 // Starting state: | |
| 113 // other_node | |
| 114 // -> http://mail.google.com "url0" | |
| 115 // -> http://www.nhl.com "url1" | |
| 116 ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "url0", | |
| 117 GURL("http://mail.google.com"))); | |
| 118 ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url1", | |
| 119 GURL("http://www.nhl.com"))); | |
| 120 | |
| 121 BackupModeChecker checker(GetSyncService(0), | |
| 122 base::TimeDelta::FromSeconds(15)); | |
| 123 ASSERT_TRUE(checker.Wait()); | |
| 124 | |
| 125 // Setup sync, wait for its completion, and make sure changes were synced. | |
| 126 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | |
| 127 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); | |
| 128 ASSERT_TRUE(ModelMatchesVerifier(0)); | |
| 129 | |
| 130 // Made bookmark changes while sync is on. | |
| 131 Remove(0, GetOtherNode(0), 1); | |
| 132 ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url2", | |
| 133 GURL("http://www.yahoo.com"))); | |
| 134 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); | |
| 135 ASSERT_TRUE(ModelMatchesVerifier(0)); | |
| 136 | |
| 137 // Let server to return rollback command on next sync request. | |
| 138 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); | |
| 139 | |
| 140 // Make another change to trigger downloading of rollback command. | |
| 141 Remove(0, GetOtherNode(0), 0); | |
|
pval...(no longer on Chromium)
2014/06/28 00:12:00
Is there another way we can trigger a sync that wo
haitaol1
2014/07/01 16:49:36
Can you point me to a sample to trigger invalidati
pval...(no longer on Chromium)
2014/07/02 18:10:59
Let's save it for another CL. Add a TODO here (in
| |
| 142 | |
| 143 // Wait for sync to switch to backup mode after finishing rollback. | |
|
pval...(no longer on Chromium)
2014/06/28 00:12:00
Update comment to reflect that a rollback isn't ac
haitaol1
2014/07/01 16:49:36
Done.
| |
| 144 ASSERT_TRUE(checker.Wait()); | |
| 145 | |
| 146 // With rollback disabled, bookmarks in backup DB should not be restored. | |
| 147 // Only bookmark added during sync is present. | |
| 148 ASSERT_EQ(1, GetOtherNode(0)->child_count()); | |
| 149 ASSERT_EQ(GURL("http://www.yahoo.com"), | |
| 150 GetOtherNode(0)->GetChild(0)->url()); | |
| 151 } | |
| 152 | |
| 153 #if defined(ENABLE_PRE_SYNC_BACKUP) | |
| 82 #define MAYBE_TestBackupRollback TestBackupRollback | 154 #define MAYBE_TestBackupRollback TestBackupRollback |
| 83 #else | 155 #else |
| 84 #define MAYBE_TestBackupRollback DISABLED_TestBackupRollback | 156 #define MAYBE_TestBackupRollback DISABLED_TestBackupRollback |
| 85 #endif | 157 #endif |
| 86 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | 158 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, |
| 87 MAYBE_TestBackupRollback) { | 159 MAYBE_TestBackupRollback) { |
| 160 EnableRollback(); | |
| 161 | |
| 88 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | 162 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| 89 | 163 |
| 90 // Starting state: | 164 // Starting state: |
| 91 // other_node | 165 // other_node |
| 92 // -> top | 166 // -> top |
| 93 // -> tier1_a | 167 // -> tier1_a |
| 94 // -> http://mail.google.com "tier1_a_url0" | 168 // -> http://mail.google.com "tier1_a_url0" |
| 95 // -> tier1_b | 169 // -> tier1_b |
| 96 // -> http://www.nhl.com "tier1_b_url0" | 170 // -> http://www.nhl.com "tier1_b_url0" |
| 97 const BookmarkNode* top = AddFolder(0, GetOtherNode(0), 0, "top"); | 171 const BookmarkNode* top = AddFolder(0, GetOtherNode(0), 0, "top"); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 | 213 |
| 140 #if defined(ENABLE_PRE_SYNC_BACKUP) | 214 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 141 #define MAYBE_TestPrefBackupRollback TestPrefBackupRollback | 215 #define MAYBE_TestPrefBackupRollback TestPrefBackupRollback |
| 142 #else | 216 #else |
| 143 #define MAYBE_TestPrefBackupRollback DISABLED_TestPrefBackupRollback | 217 #define MAYBE_TestPrefBackupRollback DISABLED_TestPrefBackupRollback |
| 144 #endif | 218 #endif |
| 145 // Verify local preferences are not affected by preferences in backup DB under | 219 // Verify local preferences are not affected by preferences in backup DB under |
| 146 // backup mode. | 220 // backup mode. |
| 147 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | 221 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, |
| 148 MAYBE_TestPrefBackupRollback) { | 222 MAYBE_TestPrefBackupRollback) { |
| 223 EnableRollback(); | |
| 224 | |
| 149 const char kUrl1[] = "http://www.google.com"; | 225 const char kUrl1[] = "http://www.google.com"; |
| 150 const char kUrl2[] = "http://map.google.com"; | 226 const char kUrl2[] = "http://map.google.com"; |
| 151 const char kUrl3[] = "http://plus.google.com"; | 227 const char kUrl3[] = "http://plus.google.com"; |
| 152 | 228 |
| 153 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | 229 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| 154 | 230 |
| 155 preferences_helper::ChangeStringPref(0, prefs::kHomePage, kUrl1); | 231 preferences_helper::ChangeStringPref(0, prefs::kHomePage, kUrl1); |
| 156 | 232 |
| 157 BackupModeChecker checker(GetSyncService(0), | 233 BackupModeChecker checker(GetSyncService(0), |
| 158 base::TimeDelta::FromSeconds(15)); | 234 base::TimeDelta::FromSeconds(15)); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 180 // Make another change to trigger downloading of rollback command. | 256 // Make another change to trigger downloading of rollback command. |
| 181 preferences_helper::ChangeStringPref(0, prefs::kHomePage, ""); | 257 preferences_helper::ChangeStringPref(0, prefs::kHomePage, ""); |
| 182 | 258 |
| 183 // Wait for sync to switch to backup mode after finishing rollback. | 259 // Wait for sync to switch to backup mode after finishing rollback. |
| 184 ASSERT_TRUE(checker.Wait()); | 260 ASSERT_TRUE(checker.Wait()); |
| 185 | 261 |
| 186 // Verify preference is restored. | 262 // Verify preference is restored. |
| 187 ASSERT_EQ(kUrl2, | 263 ASSERT_EQ(kUrl2, |
| 188 preferences_helper::GetPrefs(0)->GetString(prefs::kHomePage)); | 264 preferences_helper::GetPrefs(0)->GetString(prefs::kHomePage)); |
| 189 } | 265 } |
| 266 | |
| 267 #if defined(ENABLE_PRE_SYNC_BACKUP) | |
| 268 #define MAYBE_RollbackNoBackup RollbackNoBackup | |
| 269 #else | |
| 270 #define MAYBE_RollbackNoBackup DISABLED_RollbackNoBackup | |
| 271 #endif | |
| 272 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | |
| 273 MAYBE_RollbackNoBackup) { | |
| 274 EnableRollback(); | |
| 275 | |
| 276 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | |
| 277 | |
| 278 // Setup sync, wait for its completion, and make sure changes were synced. | |
| 279 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | |
| 280 | |
| 281 // Starting state: | |
| 282 // other_node | |
| 283 // -> http://mail.google.com "url0" | |
| 284 // -> http://www.nhl.com "url1" | |
| 285 ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "url0", | |
| 286 GURL("http://mail.google.com"))); | |
| 287 ASSERT_TRUE(AddURL(0, GetOtherNode(0), 1, "url1", | |
| 288 GURL("http://www.nhl.com"))); | |
| 289 | |
| 290 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); | |
| 291 ASSERT_TRUE(ModelMatchesVerifier(0)); | |
| 292 | |
| 293 // Let server to return rollback command on next sync request. | |
| 294 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); | |
| 295 | |
| 296 // Make another change to trigger downloading of rollback command. | |
| 297 Remove(0, GetOtherNode(0), 0); | |
| 298 | |
| 299 // Wait for sync to switch to backup mode after finishing rollback. | |
| 300 BackupModeChecker checker(GetSyncService(0), | |
| 301 base::TimeDelta::FromSeconds(15)); | |
| 302 ASSERT_TRUE(checker.Wait()); | |
| 303 | |
| 304 // Without backup DB, bookmarks added during sync shouldn't be removed. | |
| 305 ASSERT_EQ(1, GetOtherNode(0)->child_count()); | |
| 306 ASSERT_EQ(GURL("http://www.nhl.com"), | |
| 307 GetOtherNode(0)->GetChild(0)->url()); | |
| 308 } | |
| OLD | NEW |