summaryrefslogtreecommitdiffstats
path: root/chrome/test/live_sync
diff options
context:
space:
mode:
authornick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-15 21:56:14 +0000
committernick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-15 21:56:14 +0000
commit70fd64f374d6c72889f2904fe8cd6e6a71a3a3a1 (patch)
treece2158cbcd564deb41846e97d19fbf51004543c3 /chrome/test/live_sync
parent88abb083144cb84ed7ec81aa3c081f04773c64a9 (diff)
downloadchromium_src-70fd64f374d6c72889f2904fe8cd6e6a71a3a3a1.zip
chromium_src-70fd64f374d6c72889f2904fe8cd6e6a71a3a3a1.tar.gz
chromium_src-70fd64f374d6c72889f2904fe8cd6e6a71a3a3a1.tar.bz2
Python implementation of sync server, for testing.
Implement the server side of chromium sync inside of testserver.py. The implementation supports at most one account (and ignores authentication credentials), but is otherwise reasonably full featured. Make the sync_integration_tests run by default against the test server. An externally-provided --sync-url will give the old behavior. Protocol buffers stuff: The test sync server requires Python generated code for .proto files. I've put generated code, as well as the python protocol buffers runtime library, in the output directory + "/python" (e.g, on windows, src/chrome/Debug/python/google/protobuf). This might be a bad place, or a bad name -- open to suggestions. The main thing is that there will be run-time dependencies on it, so it didn't seem right to put it in obj/. Flakiness fix: In the InProcessBrowserTest framework, improve the mechanism for tests that want to manually set up a user data directory. The new way ensures that the user data directory is always wiped; tests can't accidentally forget to do this anymore. Flakiness fix: Make testserver try to /kill any old instance that might be hogging the port. Very useful if a test failure leaves a server running. Tested this against all combos of protocols, and it seems to work. Flakiness fix: Port sync_integration_tests to the out-of-process test runner. Flakiness fix: For IN_PROC_BROWSER_TESTS, don't run the test body if the setup triggered a fatal (ASSERT_) failure. BUG=20905,40980 Review URL: http://codereview.chromium.org/1622012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44708 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/live_sync')
-rw-r--r--chrome/test/live_sync/live_sync_test.h23
-rw-r--r--chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc42
2 files changed, 41 insertions, 24 deletions
diff --git a/chrome/test/live_sync/live_sync_test.h b/chrome/test/live_sync/live_sync_test.h
index 43975f6..ec8a5c6 100644
--- a/chrome/test/live_sync/live_sync_test.h
+++ b/chrome/test/live_sync/live_sync_test.h
@@ -12,6 +12,7 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/test/in_process_browser_test.h"
#include "googleurl/src/gurl.h"
+#include "net/socket/ssl_test_util.h"
class BookmarkModel;
class BookmarkNode;
@@ -45,10 +46,30 @@ class LiveSyncTest : public InProcessBrowserTest {
ASSERT_FALSE(password_.empty()) << "Can't run live server test "
<< "without specifying --" << switches::kSyncPasswordForTest;
+ // Unless a sync server was explicitly provided, run a test one locally.
+ // TODO(ncarter): It might be better to allow the user to specify a choice
+ // of sync server "providers" -- a script that could locate (or allocate)
+ // a sync server instance, possibly on some remote host. The provider
+ // would be invoked before each test.
+ if (!cl->HasSwitch(switches::kSyncServiceURL))
+ SetUpLocalTestServer();
+
// Yield control back to the InProcessBrowserTest framework.
InProcessBrowserTest::SetUp();
}
+ virtual void SetUpLocalTestServer() {
+ bool success = server_.Start(net::TestServerLauncher::ProtoHTTP,
+ server_.kHostName, server_.kOKHTTPSPort,
+ FilePath(), FilePath(), std::wstring());
+ ASSERT_TRUE(success);
+
+ CommandLine* cl = CommandLine::ForCurrentProcess();
+ cl->AppendSwitchWithValue(switches::kSyncServiceURL,
+ StringPrintf("http://%s:%d/chromiumsync", server_.kHostName,
+ server_.kOKHTTPSPort));
+ }
+
// Append command line flag to enable sync.
virtual void SetUpCommandLine(CommandLine* command_line) {
}
@@ -78,6 +99,8 @@ class LiveSyncTest : public InProcessBrowserTest {
// to override the default resolver while the test is active.
scoped_ptr<net::ScopedDefaultHostResolverProc> mock_host_resolver_override_;
+ net::TestServerLauncher server_;
+
DISALLOW_COPY_AND_ASSIGN(LiveSyncTest);
};
diff --git a/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc b/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc
index bfae3c7..9e7ff03 100644
--- a/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc
+++ b/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc
@@ -50,11 +50,6 @@ class TwoClientLiveBookmarksSyncTest : public LiveSyncTest {
}
}
- // Overwrites ShouldDeleteProfile, so profile doesn't get deleted.
- virtual bool ShouldDeleteProfile() {
- return false;
- }
-
// Overload this method in inherited class and return false to avoid
// race condition (two clients trying to sync/commit at the same time).
// Race condition may lead to duplicate bookmarks if there is existing
@@ -94,7 +89,8 @@ class TwoClientLiveBookmarksSyncTest : public LiveSyncTest {
FILE_PATH_LITERAL("live_sync_data"));
FilePath source_file = sync_data_source.Append(
bookmarks_file_name);
- ASSERT_TRUE(file_util::PathExists(source_file));
+ ASSERT_TRUE(file_util::PathExists(source_file))
+ << "Could not locate test data file: " << source_file.value();
// Now copy pre-generated bookmark file to default profile.
ASSERT_TRUE(file_util::CopyFile(source_file,
dest_user_data_dir_default.Append(FILE_PATH_LITERAL("bookmarks"))));
@@ -151,9 +147,10 @@ class LiveSyncTestPrePopulatedHistory1K
LiveSyncTestPrePopulatedHistory1K() {}
virtual ~LiveSyncTestPrePopulatedHistory1K() {}
- // This is used to pre-populate history data (1K URL Visit)to Client1
- // and Verifier Client.
- void PrePopulateHistory1K() {
+ // This is used to pre-populate history data (1K URL Visit) to Client1
+ // and Verifier Client. Invoked by InProcBrowserTest::SetUp before
+ // the browser is started.
+ virtual void SetUpUserDataDirectory() {
// Let's copy history files to default profile.
FilePath dest_user_data_dir;
PathService::Get(chrome::DIR_USER_DATA, &dest_user_data_dir);
@@ -182,11 +179,6 @@ class LiveSyncTestPrePopulatedHistory1K
}
}
- virtual void SetUp() {
- PrePopulateHistory1K();
- LiveSyncTest::SetUp();
- }
-
private:
DISALLOW_COPY_AND_ASSIGN(LiveSyncTestPrePopulatedHistory1K);
};
@@ -197,10 +189,10 @@ class LiveSyncTestBasicHierarchy50BM
LiveSyncTestBasicHierarchy50BM() {}
virtual ~LiveSyncTestBasicHierarchy50BM() {}
- virtual void SetUp() {
+ // Invoked by InProcBrowserTest::SetUp before the browser is started.
+ virtual void SetUpUserDataDirectory() {
FilePath file_name(FILE_PATH_LITERAL("bookmarks_50BM5F3L"));
PrePopulateBookmarksHierarchy(file_name);
- LiveSyncTest::SetUp();
}
private:
@@ -233,10 +225,11 @@ class LiveSyncTestComplexHierarchy800BM
public:
LiveSyncTestComplexHierarchy800BM() {}
virtual ~LiveSyncTestComplexHierarchy800BM() {}
- virtual void SetUp() {
+
+ // Invoked by InProcBrowserTest::SetUp before the browser is started.
+ virtual void SetUpUserDataDirectory() {
FilePath file_name(FILE_PATH_LITERAL("bookmarks_800BM32F8L"));
- TwoClientLiveBookmarksSyncTest::PrePopulateBookmarksHierarchy(file_name);
- LiveSyncTest::SetUp();
+ PrePopulateBookmarksHierarchy(file_name);
}
private:
@@ -248,10 +241,11 @@ class LiveSyncTestHugeHierarchy5500BM
public:
LiveSyncTestHugeHierarchy5500BM() {}
virtual ~LiveSyncTestHugeHierarchy5500BM() {}
- virtual void SetUp() {
+
+ // Invoked by InProcBrowserTest::SetUp before the browser is started.
+ virtual void SetUpUserDataDirectory() {
FilePath file_name(FILE_PATH_LITERAL("bookmarks_5500BM125F25L"));
- TwoClientLiveBookmarksSyncTest::PrePopulateBookmarksHierarchy(file_name);
- LiveSyncTest::SetUp();
+ PrePopulateBookmarksHierarchy(file_name);
}
virtual bool ShouldSetupSyncWithRace() {
return false;
@@ -267,11 +261,11 @@ class LiveSyncTestDefaultIEFavorites
LiveSyncTestDefaultIEFavorites() {}
virtual ~LiveSyncTestDefaultIEFavorites() {}
- virtual void SetUp() {
+ // Invoked by InProcBrowserTest::SetUp before the browser is started.
+ virtual void SetUpUserDataDirectory() {
const FilePath file_name(
FILE_PATH_LITERAL("bookmarks_default_IE_favorites"));
TwoClientLiveBookmarksSyncTest::PrePopulateBookmarksHierarchy(file_name);
- LiveSyncTest::SetUp();
}
private: