diff options
Diffstat (limited to 'chrome')
10 files changed, 180 insertions, 4 deletions
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index d2f0ce7..39f632a 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -2132,6 +2132,10 @@ 'test/live_sync/live_preferences_sync_test.h', 'test/live_sync/live_sync_test.cc', 'test/live_sync/live_sync_test.h', + 'test/live_sync/many_client_live_bookmarks_sync_test.cc', + 'test/live_sync/many_client_live_preferences_sync_test.cc', + 'test/live_sync/multiple_client_live_bookmarks_sync_test.cc', + 'test/live_sync/multiple_client_live_preferences_sync_test.cc', 'test/live_sync/profile_sync_service_test_harness.cc', 'test/live_sync/profile_sync_service_test_harness.h', 'test/live_sync/single_client_live_bookmarks_sync_test.cc', diff --git a/chrome/test/live_sync/live_bookmarks_sync_test.h b/chrome/test/live_sync/live_bookmarks_sync_test.h index f8f0cc9..632d4f4 100644 --- a/chrome/test/live_sync/live_bookmarks_sync_test.h +++ b/chrome/test/live_sync/live_bookmarks_sync_test.h @@ -62,7 +62,6 @@ class LiveBookmarksSyncTest : public LiveSyncTest { return verifier_helper_.get(); } - // Helper to get a handle on a bookmark in |m| when the url is known to be // unique. static const BookmarkNode* GetByUniqueURL(BookmarkModel* m, const GURL& url) { @@ -102,4 +101,24 @@ class TwoClientLiveBookmarksSyncTest : public LiveBookmarksSyncTest { DISALLOW_COPY_AND_ASSIGN(TwoClientLiveBookmarksSyncTest); }; +class MultipleClientLiveBookmarksSyncTest : public LiveBookmarksSyncTest { + public: + MultipleClientLiveBookmarksSyncTest() + : LiveBookmarksSyncTest(MULTIPLE_CLIENT) {} + ~MultipleClientLiveBookmarksSyncTest() {} + + private: + DISALLOW_COPY_AND_ASSIGN(MultipleClientLiveBookmarksSyncTest); +}; + +class ManyClientLiveBookmarksSyncTest : public LiveBookmarksSyncTest { + public: + ManyClientLiveBookmarksSyncTest() + : LiveBookmarksSyncTest(MANY_CLIENT) {} + ~ManyClientLiveBookmarksSyncTest() {} + + private: + DISALLOW_COPY_AND_ASSIGN(ManyClientLiveBookmarksSyncTest); +}; + #endif // CHROME_TEST_LIVE_SYNC_LIVE_BOOKMARKS_SYNC_TEST_H_ diff --git a/chrome/test/live_sync/live_preferences_sync_test.h b/chrome/test/live_sync/live_preferences_sync_test.h index 5ff8cf0..1ffb808 100644 --- a/chrome/test/live_sync/live_preferences_sync_test.h +++ b/chrome/test/live_sync/live_preferences_sync_test.h @@ -49,4 +49,23 @@ class TwoClientLivePreferencesSyncTest : public LivePreferencesSyncTest { DISALLOW_COPY_AND_ASSIGN(TwoClientLivePreferencesSyncTest); }; +class MultipleClientLivePreferencesSyncTest : public LivePreferencesSyncTest { + public: + MultipleClientLivePreferencesSyncTest() + : LivePreferencesSyncTest(MULTIPLE_CLIENT) {} + virtual ~MultipleClientLivePreferencesSyncTest() {} + + private: + DISALLOW_COPY_AND_ASSIGN(MultipleClientLivePreferencesSyncTest); +}; + +class ManyClientLivePreferencesSyncTest : public LivePreferencesSyncTest { + public: + ManyClientLivePreferencesSyncTest() : LivePreferencesSyncTest(MANY_CLIENT) {} + virtual ~ManyClientLivePreferencesSyncTest() {} + + private: + DISALLOW_COPY_AND_ASSIGN(ManyClientLivePreferencesSyncTest); +}; + #endif // CHROME_TEST_LIVE_SYNC_LIVE_PREFERENCES_SYNC_TEST_H_ diff --git a/chrome/test/live_sync/live_sync_test.h b/chrome/test/live_sync/live_sync_test.h index 21a305e..e953170 100644 --- a/chrome/test/live_sync/live_sync_test.h +++ b/chrome/test/live_sync/live_sync_test.h @@ -16,6 +16,7 @@ #include "net/socket/ssl_test_util.h" #include <string> +#include <vector> class CommandLine; class Profile; @@ -102,6 +103,12 @@ class LiveSyncTest : public InProcessBrowserTest { // and manages its lifetime. ProfileSyncServiceTestHarness* GetClient(int index); + // Returns a reference to the collection of sync clients. Callee owns the + // object and manages its lifetime. + std::vector<ProfileSyncServiceTestHarness*>& clients() { + return clients_.get(); + } + // Returns a pointer to the sync profile that is used to verify changes to // individual sync profiles. Callee owns the object and manages its lifetime. Profile* verifier(); diff --git a/chrome/test/live_sync/many_client_live_bookmarks_sync_test.cc b/chrome/test/live_sync/many_client_live_bookmarks_sync_test.cc new file mode 100644 index 0000000..2736537 --- /dev/null +++ b/chrome/test/live_sync/many_client_live_bookmarks_sync_test.cc @@ -0,0 +1,18 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/bookmarks/bookmark_utils.h" +#include "chrome/test/live_sync/live_bookmarks_sync_test.h" + +IN_PROC_BROWSER_TEST_F(ManyClientLiveBookmarksSyncTest, Sanity) { + ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; + BookmarkModelVerifier* v = verifier_helper(); + v->AddURL(GetBookmarkModel(0), GetBookmarkBarNode(0), 0, L"Google URL", + GURL("http://www.google.com/")); + GetClient(0)->AwaitGroupSyncCycleCompletion(clients()); + + for (int i = 0; i < num_clients(); ++i) { + v->ExpectMatch(GetBookmarkModel(i)); + } +} diff --git a/chrome/test/live_sync/many_client_live_preferences_sync_test.cc b/chrome/test/live_sync/many_client_live_preferences_sync_test.cc new file mode 100644 index 0000000..1b28f39 --- /dev/null +++ b/chrome/test/live_sync/many_client_live_preferences_sync_test.cc @@ -0,0 +1,21 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/test/live_sync/live_preferences_sync_test.h" + +IN_PROC_BROWSER_TEST_F(ManyClientLivePreferencesSyncTest, Sanity) { + ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; + + bool new_value = !GetVerifierPrefs()->GetBoolean( + prefs::kHomePageIsNewTabPage); + GetVerifierPrefs()->SetBoolean(prefs::kHomePageIsNewTabPage, new_value); + GetPrefs(0)->SetBoolean(prefs::kHomePageIsNewTabPage, new_value); + + GetClient(0)->AwaitGroupSyncCycleCompletion(clients()); + + for (int i = 0; i < num_clients(); ++i) { + EXPECT_EQ(GetVerifierPrefs()->GetBoolean(prefs::kHomePageIsNewTabPage), + GetPrefs(i)->GetBoolean(prefs::kHomePageIsNewTabPage)); + } +} diff --git a/chrome/test/live_sync/multiple_client_live_bookmarks_sync_test.cc b/chrome/test/live_sync/multiple_client_live_bookmarks_sync_test.cc new file mode 100644 index 0000000..c0b56a1 --- /dev/null +++ b/chrome/test/live_sync/multiple_client_live_bookmarks_sync_test.cc @@ -0,0 +1,23 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/string_util.h" +#include "chrome/browser/bookmarks/bookmark_utils.h" +#include "chrome/test/live_sync/live_bookmarks_sync_test.h" + +IN_PROC_BROWSER_TEST_F(MultipleClientLiveBookmarksSyncTest, Sanity) { + ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; + BookmarkModelVerifier* v = verifier_helper(); + for (int i = 0; i < num_clients(); ++i) { + v->AddURL(GetBookmarkModel(i), GetBookmarkBarNode(i), 0, + StringPrintf(L"Google URL %d", i), + GURL(StringPrintf("http://www.google.com/%d", i))); + } + for (int i = 0; i < num_clients(); ++i) { + GetClient(i)->AwaitGroupSyncCycleCompletion(clients()); + } + for (int i = 0; i < num_clients(); ++i) { + v->ExpectMatch(GetBookmarkModel(i)); + } +} diff --git a/chrome/test/live_sync/multiple_client_live_preferences_sync_test.cc b/chrome/test/live_sync/multiple_client_live_preferences_sync_test.cc new file mode 100644 index 0000000..63fcb57 --- /dev/null +++ b/chrome/test/live_sync/multiple_client_live_preferences_sync_test.cc @@ -0,0 +1,28 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/scoped_ptr.h" +#include "chrome/test/live_sync/live_preferences_sync_test.h" +#include "chrome/browser/scoped_pref_update.h" + +IN_PROC_BROWSER_TEST_F(MultipleClientLivePreferencesSyncTest, Sanity) { + ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; + scoped_array<ListValue*> client_urls(new ListValue*[num_clients()]); + for (int i = 0; i < num_clients(); ++i) { + client_urls[i] = GetPrefs(i)->GetMutableList( + prefs::kURLsToRestoreOnStartup); + } + for (int i = 0; i < num_clients(); ++i) { + client_urls[i]->Append(Value::CreateStringValue(StringPrintf( + "http://www.google.com/%d", i))); + ScopedPrefUpdate update(GetPrefs(i), prefs::kURLsToRestoreOnStartup); + } + for (int i = 0; i < num_clients(); ++i) { + GetClient(i)->AwaitGroupSyncCycleCompletion(clients()); + } + for (int i = 1; i < num_clients(); ++i) { + EXPECT_TRUE(GetPrefs(0)->GetMutableList(prefs::kURLsToRestoreOnStartup)-> + Equals(GetPrefs(i)->GetMutableList(prefs::kURLsToRestoreOnStartup))); + } +} diff --git a/chrome/test/live_sync/profile_sync_service_test_harness.cc b/chrome/test/live_sync/profile_sync_service_test_harness.cc index de928fc..958ba4d 100644 --- a/chrome/test/live_sync/profile_sync_service_test_harness.cc +++ b/chrome/test/live_sync/profile_sync_service_test_harness.cc @@ -137,8 +137,13 @@ bool ProfileSyncServiceTestHarness::RunStateChangeMachine() { const SyncSessionSnapshot* snap = service_->backend()->GetLastSessionSnapshot(); DCHECK(snap) << "Should have been at least one sync session by now"; - if (snap->has_more_to_sync) + // TODO(rsimha): In an ideal world, snap->has_more_to_sync == false should + // be a sufficient condition for sync to have completed. However, the + // additional check of snap->unsynced_count is required due to + // http://crbug.com/48989. + if (snap->has_more_to_sync || snap->unsynced_count != 0) { break; + } EXPECT_LE(last_timestamp_, snap->max_local_timestamp); last_timestamp_ = snap->max_local_timestamp; @@ -185,11 +190,36 @@ bool ProfileSyncServiceTestHarness::AwaitMutualSyncCycleCompletion( "Sync cycle completion on passive client."); } +bool ProfileSyncServiceTestHarness::AwaitGroupSyncCycleCompletion( + std::vector<ProfileSyncServiceTestHarness*>& partners) { + bool success = AwaitSyncCycleCompletion( + "Sync cycle completion on active client."); + if (!success) + return false; + bool return_value = true; + for (std::vector<ProfileSyncServiceTestHarness*>::iterator it = + partners.begin(); it != partners.end(); ++it) { + if (this != *it) { + return_value = return_value && + (*it)->WaitUntilTimestampIsAtLeast(last_timestamp_, + "Sync cycle completion on partner client."); + } + } + return return_value; +} + bool ProfileSyncServiceTestHarness::WaitUntilTimestampIsAtLeast( int64 timestamp, const std::string& reason) { - wait_state_ = WAITING_FOR_UPDATES; min_timestamp_needed_ = timestamp; - return AwaitStatusChangeWithTimeout(60, reason); + const SyncSessionSnapshot* snap = + service_->backend()->GetLastSessionSnapshot(); + DCHECK(snap) << "Should have been at least one sync session by now"; + if (snap->max_local_timestamp < min_timestamp_needed_) { + wait_state_ = WAITING_FOR_UPDATES; + return AwaitStatusChangeWithTimeout(60, reason); + } else { + return true; + } } bool ProfileSyncServiceTestHarness::AwaitStatusChangeWithTimeout( diff --git a/chrome/test/live_sync/profile_sync_service_test_harness.h b/chrome/test/live_sync/profile_sync_service_test_harness.h index bcce77f..fc91cfa 100644 --- a/chrome/test/live_sync/profile_sync_service_test_harness.h +++ b/chrome/test/live_sync/profile_sync_service_test_harness.h @@ -6,6 +6,7 @@ #define CHROME_TEST_LIVE_SYNC_PROFILE_SYNC_SERVICE_TEST_HARNESS_H_ #include <string> +#include <vector> #include "base/time.h" #include "chrome/browser/sync/profile_sync_service.h" @@ -45,6 +46,12 @@ class ProfileSyncServiceTestHarness : public ProfileSyncServiceObserver { // from the message queue. Returns true if two sync cycles have completed. bool AwaitMutualSyncCycleCompletion(ProfileSyncServiceTestHarness* partner); + // Blocks the caller until |this| completes its ongoing sync cycle and every + // other client in |partners| has a timestamp that is greater than or equal to + // the timestamp of |this|. + bool AwaitGroupSyncCycleCompletion( + std::vector<ProfileSyncServiceTestHarness*>& partners); + ProfileSyncService* service() { return service_; } // See ProfileSyncService::ShouldPushChanges(). |