Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(458)

Side by Side Diff: chrome/browser/sync/test/integration/sync_test.cc

Issue 7841007: Rename browser/sync/test/live_sync directory to browser/sync/test/integration (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: "" Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/sync/test/live_sync/live_sync_test.h" 5 #include "chrome/browser/sync/test/integration/sync_test.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/path_service.h" 12 #include "base/path_service.h"
13 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
14 #include "base/string_util.h" 14 #include "base/string_util.h"
15 #include "base/synchronization/waitable_event.h" 15 #include "base/synchronization/waitable_event.h"
16 #include "base/task.h" 16 #include "base/task.h"
17 #include "base/test/test_timeouts.h" 17 #include "base/test/test_timeouts.h"
18 #include "base/threading/platform_thread.h" 18 #include "base/threading/platform_thread.h"
19 #include "base/utf_string_conversions.h" 19 #include "base/utf_string_conversions.h"
20 #include "base/values.h" 20 #include "base/values.h"
21 #include "chrome/browser/password_manager/encryptor.h" 21 #include "chrome/browser/password_manager/encryptor.h"
22 #include "chrome/browser/profiles/profile.h" 22 #include "chrome/browser/profiles/profile.h"
23 #include "chrome/browser/profiles/profile_manager.h" 23 #include "chrome/browser/profiles/profile_manager.h"
24 #include "chrome/browser/sync/notifier/p2p_notifier.h" 24 #include "chrome/browser/sync/notifier/p2p_notifier.h"
25 #include "chrome/browser/sync/profile_sync_service_harness.h" 25 #include "chrome/browser/sync/profile_sync_service_harness.h"
26 #include "chrome/browser/sync/test/live_sync/sync_datatype_helper.h" 26 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
27 #include "chrome/browser/ui/browser.h" 27 #include "chrome/browser/ui/browser.h"
28 #include "chrome/browser/ui/browser_list.h" 28 #include "chrome/browser/ui/browser_list.h"
29 #include "chrome/common/chrome_paths.h" 29 #include "chrome/common/chrome_paths.h"
30 #include "chrome/common/chrome_switches.h" 30 #include "chrome/common/chrome_switches.h"
31 #include "chrome/test/base/testing_browser_process.h" 31 #include "chrome/test/base/testing_browser_process.h"
32 #include "chrome/test/base/ui_test_utils.h" 32 #include "chrome/test/base/ui_test_utils.h"
33 #include "content/browser/browser_thread.h" 33 #include "content/browser/browser_thread.h"
34 #include "content/browser/tab_contents/tab_contents.h" 34 #include "content/browser/tab_contents/tab_contents.h"
35 #include "content/common/url_fetcher.h" 35 #include "content/common/url_fetcher.h"
36 #include "content/test/test_url_fetcher_factory.h" 36 #include "content/test/test_url_fetcher_factory.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 new net::ProxyConfigServiceFixed(proxy_config_)); 101 new net::ProxyConfigServiceFixed(proxy_config_));
102 done_->Signal(); 102 done_->Signal();
103 } 103 }
104 104
105 private: 105 private:
106 base::WaitableEvent* done_; 106 base::WaitableEvent* done_;
107 net::URLRequestContextGetter* url_request_context_getter_; 107 net::URLRequestContextGetter* url_request_context_getter_;
108 net::ProxyConfig proxy_config_; 108 net::ProxyConfig proxy_config_;
109 }; 109 };
110 110
111 LiveSyncTest::LiveSyncTest(TestType test_type) 111 SyncTest::SyncTest(TestType test_type)
112 : sync_server_(net::TestServer::TYPE_SYNC, FilePath()), 112 : sync_server_(net::TestServer::TYPE_SYNC, FilePath()),
113 test_type_(test_type), 113 test_type_(test_type),
114 server_type_(SERVER_TYPE_UNDECIDED), 114 server_type_(SERVER_TYPE_UNDECIDED),
115 num_clients_(-1), 115 num_clients_(-1),
116 use_verifier_(true), 116 use_verifier_(true),
117 test_server_handle_(base::kNullProcessHandle) { 117 test_server_handle_(base::kNullProcessHandle) {
118 InProcessBrowserTest::set_show_window(true); 118 InProcessBrowserTest::set_show_window(true);
119 sync_datatype_helper::AssociateWithTest(this); 119 sync_datatype_helper::AssociateWithTest(this);
120 switch (test_type_) { 120 switch (test_type_) {
121 case SINGLE_CLIENT: { 121 case SINGLE_CLIENT: {
122 num_clients_ = 1; 122 num_clients_ = 1;
123 break; 123 break;
124 } 124 }
125 case TWO_CLIENT: { 125 case TWO_CLIENT: {
126 num_clients_ = 2; 126 num_clients_ = 2;
127 break; 127 break;
128 } 128 }
129 case MULTIPLE_CLIENT: { 129 case MULTIPLE_CLIENT: {
130 num_clients_ = 3; 130 num_clients_ = 3;
131 break; 131 break;
132 } 132 }
133 case MANY_CLIENT: { 133 case MANY_CLIENT: {
134 num_clients_ = 10; 134 num_clients_ = 10;
135 break; 135 break;
136 } 136 }
137 } 137 }
138 } 138 }
139 139
140 LiveSyncTest::~LiveSyncTest() {} 140 SyncTest::~SyncTest() {}
141 141
142 void LiveSyncTest::SetUp() { 142 void SyncTest::SetUp() {
143 CommandLine* cl = CommandLine::ForCurrentProcess(); 143 CommandLine* cl = CommandLine::ForCurrentProcess();
144 if (cl->HasSwitch(switches::kPasswordFileForTest)) { 144 if (cl->HasSwitch(switches::kPasswordFileForTest)) {
145 ReadPasswordFile(); 145 ReadPasswordFile();
146 } else if (cl->HasSwitch(switches::kSyncUserForTest) && 146 } else if (cl->HasSwitch(switches::kSyncUserForTest) &&
147 cl->HasSwitch(switches::kSyncPasswordForTest)) { 147 cl->HasSwitch(switches::kSyncPasswordForTest)) {
148 username_ = cl->GetSwitchValueASCII(switches::kSyncUserForTest); 148 username_ = cl->GetSwitchValueASCII(switches::kSyncUserForTest);
149 password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest); 149 password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest);
150 } else { 150 } else {
151 SetupMockGaiaResponses(); 151 SetupMockGaiaResponses();
152 } 152 }
153 153
154 if (!cl->HasSwitch(switches::kSyncServiceURL) && 154 if (!cl->HasSwitch(switches::kSyncServiceURL) &&
155 !cl->HasSwitch(switches::kSyncServerCommandLine)) { 155 !cl->HasSwitch(switches::kSyncServerCommandLine)) {
156 // If neither a sync server URL nor a sync server command line is 156 // If neither a sync server URL nor a sync server command line is
157 // provided, start up a local python sync test server and point Chrome 157 // provided, start up a local python sync test server and point Chrome
158 // to its URL. This is the most common configuration, and the only 158 // to its URL. This is the most common configuration, and the only
159 // one that makes sense for most developers. 159 // one that makes sense for most developers.
160 server_type_ = LOCAL_PYTHON_SERVER; 160 server_type_ = LOCAL_PYTHON_SERVER;
161 } else if (cl->HasSwitch(switches::kSyncServiceURL) && 161 } else if (cl->HasSwitch(switches::kSyncServiceURL) &&
162 cl->HasSwitch(switches::kSyncServerCommandLine)) { 162 cl->HasSwitch(switches::kSyncServerCommandLine)) {
163 // If a sync server URL and a sync server command line are provided, 163 // If a sync server URL and a sync server command line are provided,
164 // start up a local sync server by running the command line. Chrome 164 // start up a local sync server by running the command line. Chrome
165 // will connect to the server at the URL that was provided. 165 // will connect to the server at the URL that was provided.
166 server_type_ = LOCAL_LIVE_SERVER; 166 server_type_ = LOCAL_LIVE_SERVER;
167 } else if (cl->HasSwitch(switches::kSyncServiceURL) && 167 } else if (cl->HasSwitch(switches::kSyncServiceURL) &&
168 !cl->HasSwitch(switches::kSyncServerCommandLine)) { 168 !cl->HasSwitch(switches::kSyncServerCommandLine)) {
169 // If a sync server URL is provided, but not a server command line, 169 // If a sync server URL is provided, but not a server command line,
170 // it is assumed that the server is already running. Chrome will 170 // it is assumed that the server is already running. Chrome will
171 // automatically connect to it at the URL provided. There is nothing 171 // automatically connect to it at the URL provided. There is nothing
172 // to do here. 172 // to do here.
173 server_type_ = EXTERNAL_LIVE_SERVER; 173 server_type_ = EXTERNAL_LIVE_SERVER;
174 } else { 174 } else {
175 // If a sync server command line is provided, but not a server URL, 175 // If a sync server command line is provided, but not a server URL,
176 // we flag an error. 176 // we flag an error.
177 LOG(FATAL) << "Can't figure out how to run a server."; 177 LOG(FATAL) << "Can't figure out how to run a server.";
178 } 178 }
179 179
180 if (username_.empty() || password_.empty()) 180 if (username_.empty() || password_.empty())
181 LOG(FATAL) << "Cannot run sync tests without GAIA credentials."; 181 LOG(FATAL) << "Cannot run sync tests without GAIA credentials.";
182 182
183 // Mock the Mac Keychain service. The real Keychain can block on user input. 183 // Mock the Mac Keychain service. The real Keychain can block on user input.
184 #if defined(OS_MACOSX) 184 #if defined(OS_MACOSX)
185 Encryptor::UseMockKeychain(true); 185 Encryptor::UseMockKeychain(true);
186 #endif 186 #endif
187 187
188 // Yield control back to the InProcessBrowserTest framework. 188 // Yield control back to the InProcessBrowserTest framework.
189 InProcessBrowserTest::SetUp(); 189 InProcessBrowserTest::SetUp();
190 } 190 }
191 191
192 void LiveSyncTest::TearDown() { 192 void SyncTest::TearDown() {
193 // Allow the InProcessBrowserTest framework to perform its tear down. 193 // Allow the InProcessBrowserTest framework to perform its tear down.
194 InProcessBrowserTest::TearDown(); 194 InProcessBrowserTest::TearDown();
195 195
196 // Stop the local python test server. This is a no-op if one wasn't started. 196 // Stop the local python test server. This is a no-op if one wasn't started.
197 TearDownLocalPythonTestServer(); 197 TearDownLocalPythonTestServer();
198 198
199 // Stop the local sync test server. This is a no-op if one wasn't started. 199 // Stop the local sync test server. This is a no-op if one wasn't started.
200 TearDownLocalTestServer(); 200 TearDownLocalTestServer();
201 } 201 }
202 202
203 void LiveSyncTest::SetUpCommandLine(CommandLine* cl) { 203 void SyncTest::SetUpCommandLine(CommandLine* cl) {
204 AddTestSwitches(cl); 204 AddTestSwitches(cl);
205 AddOptionalTypesToCommandLine(cl); 205 AddOptionalTypesToCommandLine(cl);
206 } 206 }
207 207
208 void LiveSyncTest::AddTestSwitches(CommandLine* cl) { 208 void SyncTest::AddTestSwitches(CommandLine* cl) {
209 // TODO(rsimha): Until we implement a fake Tango server against which tests 209 // TODO(rsimha): Until we implement a fake Tango server against which tests
210 // can run, we need to set the --sync-notification-method to "p2p". 210 // can run, we need to set the --sync-notification-method to "p2p".
211 if (!cl->HasSwitch(switches::kSyncNotificationMethod)) 211 if (!cl->HasSwitch(switches::kSyncNotificationMethod))
212 cl->AppendSwitchASCII(switches::kSyncNotificationMethod, "p2p"); 212 cl->AppendSwitchASCII(switches::kSyncNotificationMethod, "p2p");
213 213
214 // Disable non-essential access of external network resources. 214 // Disable non-essential access of external network resources.
215 if (!cl->HasSwitch(switches::kDisableBackgroundNetworking)) 215 if (!cl->HasSwitch(switches::kDisableBackgroundNetworking))
216 cl->AppendSwitch(switches::kDisableBackgroundNetworking); 216 cl->AppendSwitch(switches::kDisableBackgroundNetworking);
217 } 217 }
218 218
219 void LiveSyncTest::AddOptionalTypesToCommandLine(CommandLine* cl) { 219 void SyncTest::AddOptionalTypesToCommandLine(CommandLine* cl) {
220 // TODO(sync): Remove this once sessions sync is enabled by default. 220 // TODO(sync): Remove this once sessions sync is enabled by default.
221 if (!cl->HasSwitch(switches::kEnableSyncSessions)) 221 if (!cl->HasSwitch(switches::kEnableSyncSessions))
222 cl->AppendSwitch(switches::kEnableSyncSessions); 222 cl->AppendSwitch(switches::kEnableSyncSessions);
223 } 223 }
224 224
225 // static 225 // static
226 Profile* LiveSyncTest::MakeProfile(const FilePath::StringType name) { 226 Profile* SyncTest::MakeProfile(const FilePath::StringType name) {
227 FilePath path; 227 FilePath path;
228 PathService::Get(chrome::DIR_USER_DATA, &path); 228 PathService::Get(chrome::DIR_USER_DATA, &path);
229 path = path.Append(name); 229 path = path.Append(name);
230 230
231 if (!file_util::PathExists(path)) 231 if (!file_util::PathExists(path))
232 CHECK(file_util::CreateDirectory(path)); 232 CHECK(file_util::CreateDirectory(path));
233 233
234 return Profile::CreateProfile(path); 234 return Profile::CreateProfile(path);
235 } 235 }
236 236
237 Profile* LiveSyncTest::GetProfile(int index) { 237 Profile* SyncTest::GetProfile(int index) {
238 if (profiles_.empty()) 238 if (profiles_.empty())
239 LOG(FATAL) << "SetupClients() has not yet been called."; 239 LOG(FATAL) << "SetupClients() has not yet been called.";
240 if (index < 0 || index >= static_cast<int>(profiles_.size())) 240 if (index < 0 || index >= static_cast<int>(profiles_.size()))
241 LOG(FATAL) << "GetProfile(): Index is out of bounds."; 241 LOG(FATAL) << "GetProfile(): Index is out of bounds.";
242 return profiles_[index]; 242 return profiles_[index];
243 } 243 }
244 244
245 Browser* LiveSyncTest::GetBrowser(int index) { 245 Browser* SyncTest::GetBrowser(int index) {
246 if (browsers_.empty()) 246 if (browsers_.empty())
247 LOG(FATAL) << "SetupClients() has not yet been called."; 247 LOG(FATAL) << "SetupClients() has not yet been called.";
248 if (index < 0 || index >= static_cast<int>(browsers_.size())) 248 if (index < 0 || index >= static_cast<int>(browsers_.size()))
249 LOG(FATAL) << "GetBrowser(): Index is out of bounds."; 249 LOG(FATAL) << "GetBrowser(): Index is out of bounds.";
250 return browsers_[index]; 250 return browsers_[index];
251 } 251 }
252 252
253 ProfileSyncServiceHarness* LiveSyncTest::GetClient(int index) { 253 ProfileSyncServiceHarness* SyncTest::GetClient(int index) {
254 if (clients_.empty()) 254 if (clients_.empty())
255 LOG(FATAL) << "SetupClients() has not yet been called."; 255 LOG(FATAL) << "SetupClients() has not yet been called.";
256 if (index < 0 || index >= static_cast<int>(clients_.size())) 256 if (index < 0 || index >= static_cast<int>(clients_.size()))
257 LOG(FATAL) << "GetClient(): Index is out of bounds."; 257 LOG(FATAL) << "GetClient(): Index is out of bounds.";
258 return clients_[index]; 258 return clients_[index];
259 } 259 }
260 260
261 Profile* LiveSyncTest::verifier() { 261 Profile* SyncTest::verifier() {
262 if (verifier_.get() == NULL) 262 if (verifier_.get() == NULL)
263 LOG(FATAL) << "SetupClients() has not yet been called."; 263 LOG(FATAL) << "SetupClients() has not yet been called.";
264 return verifier_.get(); 264 return verifier_.get();
265 } 265 }
266 266
267 void LiveSyncTest::DisableVerifier() { 267 void SyncTest::DisableVerifier() {
268 use_verifier_ = false; 268 use_verifier_ = false;
269 } 269 }
270 270
271 bool LiveSyncTest::SetupClients() { 271 bool SyncTest::SetupClients() {
272 if (num_clients_ <= 0) 272 if (num_clients_ <= 0)
273 LOG(FATAL) << "num_clients_ incorrectly initialized."; 273 LOG(FATAL) << "num_clients_ incorrectly initialized.";
274 if (!profiles_.empty() || !browsers_.empty() || !clients_.empty()) 274 if (!profiles_.empty() || !browsers_.empty() || !clients_.empty())
275 LOG(FATAL) << "SetupClients() has already been called."; 275 LOG(FATAL) << "SetupClients() has already been called.";
276 276
277 // Start up a sync test server if one is needed. 277 // Start up a sync test server if one is needed.
278 SetUpTestServerIfRequired(); 278 SetUpTestServerIfRequired();
279 279
280 // Create the required number of sync profiles, browsers and clients. 280 // Create the required number of sync profiles, browsers and clients.
281 for (int i = 0; i < num_clients_; ++i) { 281 for (int i = 0; i < num_clients_; ++i) {
(...skipping 11 matching lines...) Expand all
293 ui_test_utils::WaitForBookmarkModelToLoad( 293 ui_test_utils::WaitForBookmarkModelToLoad(
294 GetProfile(i)->GetBookmarkModel()); 294 GetProfile(i)->GetBookmarkModel());
295 } 295 }
296 296
297 // Create the verifier profile. 297 // Create the verifier profile.
298 verifier_.reset(MakeProfile(FILE_PATH_LITERAL("Verifier"))); 298 verifier_.reset(MakeProfile(FILE_PATH_LITERAL("Verifier")));
299 ui_test_utils::WaitForBookmarkModelToLoad(verifier()->GetBookmarkModel()); 299 ui_test_utils::WaitForBookmarkModelToLoad(verifier()->GetBookmarkModel());
300 return (verifier_.get() != NULL); 300 return (verifier_.get() != NULL);
301 } 301 }
302 302
303 bool LiveSyncTest::SetupSync() { 303 bool SyncTest::SetupSync() {
304 // Create sync profiles and clients if they haven't already been created. 304 // Create sync profiles and clients if they haven't already been created.
305 if (profiles_.empty()) { 305 if (profiles_.empty()) {
306 if (!SetupClients()) 306 if (!SetupClients())
307 LOG(FATAL) << "SetupClients() failed."; 307 LOG(FATAL) << "SetupClients() failed.";
308 } 308 }
309 309
310 // Sync each of the profiles. 310 // Sync each of the profiles.
311 for (int i = 0; i < num_clients_; ++i) { 311 for (int i = 0; i < num_clients_; ++i) {
312 if (!GetClient(i)->SetupSync()) 312 if (!GetClient(i)->SetupSync())
313 LOG(FATAL) << "SetupSync() failed."; 313 LOG(FATAL) << "SetupSync() failed.";
314 } 314 }
315 315
316 return true; 316 return true;
317 } 317 }
318 318
319 void LiveSyncTest::CleanUpOnMainThread() { 319 void SyncTest::CleanUpOnMainThread() {
320 // Close all browser windows. 320 // Close all browser windows.
321 BrowserList::CloseAllBrowsers(); 321 BrowserList::CloseAllBrowsers();
322 ui_test_utils::RunAllPendingInMessageLoop(); 322 ui_test_utils::RunAllPendingInMessageLoop();
323 323
324 // All browsers should be closed at this point, or else we could see memory 324 // All browsers should be closed at this point, or else we could see memory
325 // corruption in QuitBrowser(). 325 // corruption in QuitBrowser().
326 CHECK_EQ(0U, BrowserList::size()); 326 CHECK_EQ(0U, BrowserList::size());
327 327
328 profiles_.reset(); 328 profiles_.reset();
329 clients_.reset(); 329 clients_.reset();
330 verifier_.reset(NULL); 330 verifier_.reset(NULL);
331 } 331 }
332 332
333 void LiveSyncTest::SetUpInProcessBrowserTestFixture() { 333 void SyncTest::SetUpInProcessBrowserTestFixture() {
334 // We don't take a reference to |resolver|, but mock_host_resolver_override_ 334 // We don't take a reference to |resolver|, but mock_host_resolver_override_
335 // does, so effectively assumes ownership. 335 // does, so effectively assumes ownership.
336 net::RuleBasedHostResolverProc* resolver = 336 net::RuleBasedHostResolverProc* resolver =
337 new net::RuleBasedHostResolverProc(host_resolver()); 337 new net::RuleBasedHostResolverProc(host_resolver());
338 resolver->AllowDirectLookup("*.google.com"); 338 resolver->AllowDirectLookup("*.google.com");
339 // On Linux, we use Chromium's NSS implementation which uses the following 339 // On Linux, we use Chromium's NSS implementation which uses the following
340 // hosts for certificate verification. Without these overrides, running the 340 // hosts for certificate verification. Without these overrides, running the
341 // integration tests on Linux causes error as we make external DNS lookups. 341 // integration tests on Linux causes error as we make external DNS lookups.
342 resolver->AllowDirectLookup("*.thawte.com"); 342 resolver->AllowDirectLookup("*.thawte.com");
343 resolver->AllowDirectLookup("*.geotrust.com"); 343 resolver->AllowDirectLookup("*.geotrust.com");
344 resolver->AllowDirectLookup("*.gstatic.com"); 344 resolver->AllowDirectLookup("*.gstatic.com");
345 mock_host_resolver_override_.reset( 345 mock_host_resolver_override_.reset(
346 new net::ScopedDefaultHostResolverProc(resolver)); 346 new net::ScopedDefaultHostResolverProc(resolver));
347 } 347 }
348 348
349 void LiveSyncTest::TearDownInProcessBrowserTestFixture() { 349 void SyncTest::TearDownInProcessBrowserTestFixture() {
350 mock_host_resolver_override_.reset(); 350 mock_host_resolver_override_.reset();
351 } 351 }
352 352
353 void LiveSyncTest::ReadPasswordFile() { 353 void SyncTest::ReadPasswordFile() {
354 CommandLine* cl = CommandLine::ForCurrentProcess(); 354 CommandLine* cl = CommandLine::ForCurrentProcess();
355 password_file_ = cl->GetSwitchValuePath(switches::kPasswordFileForTest); 355 password_file_ = cl->GetSwitchValuePath(switches::kPasswordFileForTest);
356 if (password_file_.empty()) 356 if (password_file_.empty())
357 LOG(FATAL) << "Can't run live server test without specifying --" 357 LOG(FATAL) << "Can't run live server test without specifying --"
358 << switches::kPasswordFileForTest << "=<filename>"; 358 << switches::kPasswordFileForTest << "=<filename>";
359 std::string file_contents; 359 std::string file_contents;
360 file_util::ReadFileToString(password_file_, &file_contents); 360 file_util::ReadFileToString(password_file_, &file_contents);
361 ASSERT_NE(file_contents, "") << "Password file \"" 361 ASSERT_NE(file_contents, "") << "Password file \""
362 << password_file_.value() << "\" does not exist."; 362 << password_file_.value() << "\" does not exist.";
363 std::vector<std::string> tokens; 363 std::vector<std::string> tokens;
364 std::string delimiters = "\r\n"; 364 std::string delimiters = "\r\n";
365 Tokenize(file_contents, delimiters, &tokens); 365 Tokenize(file_contents, delimiters, &tokens);
366 ASSERT_EQ(2U, tokens.size()) << "Password file \"" 366 ASSERT_EQ(2U, tokens.size()) << "Password file \""
367 << password_file_.value() 367 << password_file_.value()
368 << "\" must contain exactly two lines of text."; 368 << "\" must contain exactly two lines of text.";
369 username_ = tokens[0]; 369 username_ = tokens[0];
370 password_ = tokens[1]; 370 password_ = tokens[1];
371 } 371 }
372 372
373 void LiveSyncTest::SetupMockGaiaResponses() { 373 void SyncTest::SetupMockGaiaResponses() {
374 username_ = "user@gmail.com"; 374 username_ = "user@gmail.com";
375 password_ = "password"; 375 password_ = "password";
376 factory_.reset(new URLFetcherFactory()); 376 factory_.reset(new URLFetcherFactory());
377 fake_factory_.reset(new FakeURLFetcherFactory(factory_.get())); 377 fake_factory_.reset(new FakeURLFetcherFactory(factory_.get()));
378 fake_factory_->SetFakeResponse(kClientLoginUrl, "SID=sid\nLSID=lsid", true); 378 fake_factory_->SetFakeResponse(kClientLoginUrl, "SID=sid\nLSID=lsid", true);
379 fake_factory_->SetFakeResponse(kGetUserInfoUrl, "email=user@gmail.com", true); 379 fake_factory_->SetFakeResponse(kGetUserInfoUrl, "email=user@gmail.com", true);
380 fake_factory_->SetFakeResponse(kIssueAuthTokenUrl, "auth", true); 380 fake_factory_->SetFakeResponse(kIssueAuthTokenUrl, "auth", true);
381 fake_factory_->SetFakeResponse(kSearchDomainCheckUrl, ".google.com", true); 381 fake_factory_->SetFakeResponse(kSearchDomainCheckUrl, ".google.com", true);
382 } 382 }
383 383
384 // Start up a local sync server based on the value of server_type_, which 384 // Start up a local sync server based on the value of server_type_, which
385 // was determined from the command line parameters. 385 // was determined from the command line parameters.
386 void LiveSyncTest::SetUpTestServerIfRequired() { 386 void SyncTest::SetUpTestServerIfRequired() {
387 if (server_type_ == LOCAL_PYTHON_SERVER) { 387 if (server_type_ == LOCAL_PYTHON_SERVER) {
388 if (!SetUpLocalPythonTestServer()) 388 if (!SetUpLocalPythonTestServer())
389 LOG(FATAL) << "Failed to set up local python sync and XMPP servers"; 389 LOG(FATAL) << "Failed to set up local python sync and XMPP servers";
390 } else if (server_type_ == LOCAL_LIVE_SERVER) { 390 } else if (server_type_ == LOCAL_LIVE_SERVER) {
391 // Using mock gaia credentials requires the use of a mock XMPP server. 391 // Using mock gaia credentials requires the use of a mock XMPP server.
392 if (username_ == "user@gmail.com" && !SetUpLocalPythonTestServer()) 392 if (username_ == "user@gmail.com" && !SetUpLocalPythonTestServer())
393 LOG(FATAL) << "Failed to set up local python XMPP server"; 393 LOG(FATAL) << "Failed to set up local python XMPP server";
394 if (!SetUpLocalTestServer()) 394 if (!SetUpLocalTestServer())
395 LOG(FATAL) << "Failed to set up local test server"; 395 LOG(FATAL) << "Failed to set up local test server";
396 } else if (server_type_ == EXTERNAL_LIVE_SERVER) { 396 } else if (server_type_ == EXTERNAL_LIVE_SERVER) {
397 // Nothing to do; we'll just talk to the URL we were given. 397 // Nothing to do; we'll just talk to the URL we were given.
398 } else { 398 } else {
399 LOG(FATAL) << "Don't know which server environment to run test in."; 399 LOG(FATAL) << "Don't know which server environment to run test in.";
400 } 400 }
401 } 401 }
402 402
403 bool LiveSyncTest::SetUpLocalPythonTestServer() { 403 bool SyncTest::SetUpLocalPythonTestServer() {
404 EXPECT_TRUE(sync_server_.Start()) 404 EXPECT_TRUE(sync_server_.Start())
405 << "Could not launch local python test server."; 405 << "Could not launch local python test server.";
406 406
407 CommandLine* cl = CommandLine::ForCurrentProcess(); 407 CommandLine* cl = CommandLine::ForCurrentProcess();
408 if (server_type_ == LOCAL_PYTHON_SERVER) { 408 if (server_type_ == LOCAL_PYTHON_SERVER) {
409 std::string sync_service_url = sync_server_.GetURL("chromiumsync").spec(); 409 std::string sync_service_url = sync_server_.GetURL("chromiumsync").spec();
410 cl->AppendSwitchASCII(switches::kSyncServiceURL, sync_service_url); 410 cl->AppendSwitchASCII(switches::kSyncServiceURL, sync_service_url);
411 VLOG(1) << "Started local python sync server at " << sync_service_url; 411 VLOG(1) << "Started local python sync server at " << sync_service_url;
412 } 412 }
413 413
(...skipping 16 matching lines...) Expand all
430 xmpp_host_port_pair.ToString()); 430 xmpp_host_port_pair.ToString());
431 // The local XMPP server only supports insecure connections. 431 // The local XMPP server only supports insecure connections.
432 cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection); 432 cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection);
433 } 433 }
434 VLOG(1) << "Started local python XMPP server at " 434 VLOG(1) << "Started local python XMPP server at "
435 << xmpp_host_port_pair.ToString(); 435 << xmpp_host_port_pair.ToString();
436 436
437 return true; 437 return true;
438 } 438 }
439 439
440 bool LiveSyncTest::SetUpLocalTestServer() { 440 bool SyncTest::SetUpLocalTestServer() {
441 CommandLine* cl = CommandLine::ForCurrentProcess(); 441 CommandLine* cl = CommandLine::ForCurrentProcess();
442 CommandLine::StringType server_cmdline_string = cl->GetSwitchValueNative( 442 CommandLine::StringType server_cmdline_string = cl->GetSwitchValueNative(
443 switches::kSyncServerCommandLine); 443 switches::kSyncServerCommandLine);
444 CommandLine::StringVector server_cmdline_vector; 444 CommandLine::StringVector server_cmdline_vector;
445 CommandLine::StringType delimiters(FILE_PATH_LITERAL(" ")); 445 CommandLine::StringType delimiters(FILE_PATH_LITERAL(" "));
446 Tokenize(server_cmdline_string, delimiters, &server_cmdline_vector); 446 Tokenize(server_cmdline_string, delimiters, &server_cmdline_vector);
447 CommandLine server_cmdline(server_cmdline_vector); 447 CommandLine server_cmdline(server_cmdline_vector);
448 base::LaunchOptions options; 448 base::LaunchOptions options;
449 #if defined(OS_WIN) 449 #if defined(OS_WIN)
450 options.start_hidden = true; 450 options.start_hidden = true;
451 #endif 451 #endif
452 if (!base::LaunchProcess(server_cmdline, options, &test_server_handle_)) 452 if (!base::LaunchProcess(server_cmdline, options, &test_server_handle_))
453 LOG(ERROR) << "Could not launch local test server."; 453 LOG(ERROR) << "Could not launch local test server.";
454 454
455 const int kMaxWaitTime = TestTimeouts::action_max_timeout_ms(); 455 const int kMaxWaitTime = TestTimeouts::action_max_timeout_ms();
456 const int kNumIntervals = 15; 456 const int kNumIntervals = 15;
457 if (WaitForTestServerToStart(kMaxWaitTime, kNumIntervals)) { 457 if (WaitForTestServerToStart(kMaxWaitTime, kNumIntervals)) {
458 VLOG(1) << "Started local test server at " 458 VLOG(1) << "Started local test server at "
459 << cl->GetSwitchValueASCII(switches::kSyncServiceURL) << "."; 459 << cl->GetSwitchValueASCII(switches::kSyncServiceURL) << ".";
460 return true; 460 return true;
461 } else { 461 } else {
462 LOG(ERROR) << "Could not start local test server at " 462 LOG(ERROR) << "Could not start local test server at "
463 << cl->GetSwitchValueASCII(switches::kSyncServiceURL) << "."; 463 << cl->GetSwitchValueASCII(switches::kSyncServiceURL) << ".";
464 return false; 464 return false;
465 } 465 }
466 } 466 }
467 467
468 bool LiveSyncTest::TearDownLocalPythonTestServer() { 468 bool SyncTest::TearDownLocalPythonTestServer() {
469 if (!sync_server_.Stop()) { 469 if (!sync_server_.Stop()) {
470 LOG(ERROR) << "Could not stop local python test server."; 470 LOG(ERROR) << "Could not stop local python test server.";
471 return false; 471 return false;
472 } 472 }
473 xmpp_port_.reset(); 473 xmpp_port_.reset();
474 return true; 474 return true;
475 } 475 }
476 476
477 bool LiveSyncTest::TearDownLocalTestServer() { 477 bool SyncTest::TearDownLocalTestServer() {
478 if (test_server_handle_ != base::kNullProcessHandle) { 478 if (test_server_handle_ != base::kNullProcessHandle) {
479 EXPECT_TRUE(base::KillProcess(test_server_handle_, 0, false)) 479 EXPECT_TRUE(base::KillProcess(test_server_handle_, 0, false))
480 << "Could not stop local test server."; 480 << "Could not stop local test server.";
481 base::CloseProcessHandle(test_server_handle_); 481 base::CloseProcessHandle(test_server_handle_);
482 test_server_handle_ = base::kNullProcessHandle; 482 test_server_handle_ = base::kNullProcessHandle;
483 } 483 }
484 return true; 484 return true;
485 } 485 }
486 486
487 bool LiveSyncTest::WaitForTestServerToStart(int time_ms, int intervals) { 487 bool SyncTest::WaitForTestServerToStart(int time_ms, int intervals) {
488 for (int i = 0; i < intervals; ++i) { 488 for (int i = 0; i < intervals; ++i) {
489 if (IsTestServerRunning()) 489 if (IsTestServerRunning())
490 return true; 490 return true;
491 base::PlatformThread::Sleep(time_ms / intervals); 491 base::PlatformThread::Sleep(time_ms / intervals);
492 } 492 }
493 return false; 493 return false;
494 } 494 }
495 495
496 bool LiveSyncTest::IsTestServerRunning() { 496 bool SyncTest::IsTestServerRunning() {
497 CommandLine* cl = CommandLine::ForCurrentProcess(); 497 CommandLine* cl = CommandLine::ForCurrentProcess();
498 std::string sync_url = cl->GetSwitchValueASCII(switches::kSyncServiceURL); 498 std::string sync_url = cl->GetSwitchValueASCII(switches::kSyncServiceURL);
499 GURL sync_url_status(sync_url.append("/healthz")); 499 GURL sync_url_status(sync_url.append("/healthz"));
500 SyncServerStatusChecker delegate; 500 SyncServerStatusChecker delegate;
501 URLFetcher fetcher(sync_url_status, URLFetcher::GET, &delegate); 501 URLFetcher fetcher(sync_url_status, URLFetcher::GET, &delegate);
502 fetcher.set_request_context(Profile::Deprecated::GetDefaultRequestContext()); 502 fetcher.set_request_context(Profile::Deprecated::GetDefaultRequestContext());
503 fetcher.Start(); 503 fetcher.Start();
504 ui_test_utils::RunMessageLoop(); 504 ui_test_utils::RunMessageLoop();
505 return delegate.running(); 505 return delegate.running();
506 } 506 }
507 507
508 void LiveSyncTest::EnableNetwork(Profile* profile) { 508 void SyncTest::EnableNetwork(Profile* profile) {
509 SetProxyConfig(profile->GetRequestContext(), 509 SetProxyConfig(profile->GetRequestContext(),
510 net::ProxyConfig::CreateDirect()); 510 net::ProxyConfig::CreateDirect());
511 // TODO(rsimha): Remove this line once http://crbug.com/53857 is fixed. 511 // TODO(rsimha): Remove this line once http://crbug.com/53857 is fixed.
512 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 512 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
513 } 513 }
514 514
515 void LiveSyncTest::DisableNetwork(Profile* profile) { 515 void SyncTest::DisableNetwork(Profile* profile) {
516 // Set the current proxy configuration to a nonexistent proxy to effectively 516 // Set the current proxy configuration to a nonexistent proxy to effectively
517 // disable networking. 517 // disable networking.
518 net::ProxyConfig config; 518 net::ProxyConfig config;
519 config.proxy_rules().ParseFromString("http=127.0.0.1:0"); 519 config.proxy_rules().ParseFromString("http=127.0.0.1:0");
520 SetProxyConfig(profile->GetRequestContext(), config); 520 SetProxyConfig(profile->GetRequestContext(), config);
521 // TODO(rsimha): Remove this line once http://crbug.com/53857 is fixed. 521 // TODO(rsimha): Remove this line once http://crbug.com/53857 is fixed.
522 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 522 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
523 } 523 }
524 524
525 bool LiveSyncTest::EnableEncryption(int index, syncable::ModelType type) { 525 bool SyncTest::EnableEncryption(int index, syncable::ModelType type) {
526 return GetClient(index)->EnableEncryptionForType(type); 526 return GetClient(index)->EnableEncryptionForType(type);
527 } 527 }
528 528
529 bool LiveSyncTest::IsEncrypted(int index, syncable::ModelType type) { 529 bool SyncTest::IsEncrypted(int index, syncable::ModelType type) {
530 return GetClient(index)->IsTypeEncrypted(type); 530 return GetClient(index)->IsTypeEncrypted(type);
531 } 531 }
532 532
533 bool LiveSyncTest::AwaitQuiescence() { 533 bool SyncTest::AwaitQuiescence() {
534 return ProfileSyncServiceHarness::AwaitQuiescence(clients()); 534 return ProfileSyncServiceHarness::AwaitQuiescence(clients());
535 } 535 }
536 536
537 bool LiveSyncTest::ServerSupportsNotificationControl() const { 537 bool SyncTest::ServerSupportsNotificationControl() const {
538 EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_); 538 EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_);
539 539
540 // Supported only if we're using the python testserver. 540 // Supported only if we're using the python testserver.
541 return server_type_ == LOCAL_PYTHON_SERVER; 541 return server_type_ == LOCAL_PYTHON_SERVER;
542 } 542 }
543 543
544 void LiveSyncTest::DisableNotifications() { 544 void SyncTest::DisableNotifications() {
545 ASSERT_TRUE(ServerSupportsNotificationControl()); 545 ASSERT_TRUE(ServerSupportsNotificationControl());
546 std::string path = "chromiumsync/disablenotifications"; 546 std::string path = "chromiumsync/disablenotifications";
547 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); 547 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
548 ASSERT_EQ("Notifications disabled", 548 ASSERT_EQ("Notifications disabled",
549 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); 549 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
550 } 550 }
551 551
552 void LiveSyncTest::EnableNotifications() { 552 void SyncTest::EnableNotifications() {
553 ASSERT_TRUE(ServerSupportsNotificationControl()); 553 ASSERT_TRUE(ServerSupportsNotificationControl());
554 std::string path = "chromiumsync/enablenotifications"; 554 std::string path = "chromiumsync/enablenotifications";
555 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); 555 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
556 ASSERT_EQ("Notifications enabled", 556 ASSERT_EQ("Notifications enabled",
557 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); 557 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
558 } 558 }
559 559
560 void LiveSyncTest::TriggerNotification( 560 void SyncTest::TriggerNotification(
561 const syncable::ModelTypeSet& changed_types) { 561 const syncable::ModelTypeSet& changed_types) {
562 ASSERT_TRUE(ServerSupportsNotificationControl()); 562 ASSERT_TRUE(ServerSupportsNotificationControl());
563 const std::string& data = 563 const std::string& data =
564 sync_notifier::P2PNotificationData("from_server", 564 sync_notifier::P2PNotificationData("from_server",
565 sync_notifier::NOTIFY_ALL, 565 sync_notifier::NOTIFY_ALL,
566 changed_types).ToString(); 566 changed_types).ToString();
567 const std::string& path = 567 const std::string& path =
568 std::string("chromiumsync/sendnotification?channel=") + 568 std::string("chromiumsync/sendnotification?channel=") +
569 sync_notifier::kSyncP2PNotificationChannel + "&data=" + data; 569 sync_notifier::kSyncP2PNotificationChannel + "&data=" + data;
570 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); 570 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
571 ASSERT_EQ("Notification sent", 571 ASSERT_EQ("Notification sent",
572 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); 572 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
573 } 573 }
574 574
575 bool LiveSyncTest::ServerSupportsErrorTriggering() const { 575 bool SyncTest::ServerSupportsErrorTriggering() const {
576 EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_); 576 EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_);
577 577
578 // Supported only if we're using the python testserver. 578 // Supported only if we're using the python testserver.
579 return server_type_ == LOCAL_PYTHON_SERVER; 579 return server_type_ == LOCAL_PYTHON_SERVER;
580 } 580 }
581 581
582 void LiveSyncTest::TriggerMigrationDoneError( 582 void SyncTest::TriggerMigrationDoneError(
583 const syncable::ModelTypeSet& model_types) { 583 const syncable::ModelTypeSet& model_types) {
584 ASSERT_TRUE(ServerSupportsErrorTriggering()); 584 ASSERT_TRUE(ServerSupportsErrorTriggering());
585 std::string path = "chromiumsync/migrate"; 585 std::string path = "chromiumsync/migrate";
586 char joiner = '?'; 586 char joiner = '?';
587 for (syncable::ModelTypeSet::const_iterator it = model_types.begin(); 587 for (syncable::ModelTypeSet::const_iterator it = model_types.begin();
588 it != model_types.end(); ++it) { 588 it != model_types.end(); ++it) {
589 path.append(base::StringPrintf("%ctype=%d", joiner, 589 path.append(base::StringPrintf("%ctype=%d", joiner,
590 syncable::GetExtensionFieldNumberFromModelType(*it))); 590 syncable::GetExtensionFieldNumberFromModelType(*it)));
591 joiner = '&'; 591 joiner = '&';
592 } 592 }
593 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); 593 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
594 ASSERT_EQ("Migration: 200", 594 ASSERT_EQ("Migration: 200",
595 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); 595 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
596 } 596 }
597 597
598 void LiveSyncTest::TriggerBirthdayError() { 598 void SyncTest::TriggerBirthdayError() {
599 ASSERT_TRUE(ServerSupportsErrorTriggering()); 599 ASSERT_TRUE(ServerSupportsErrorTriggering());
600 std::string path = "chromiumsync/birthdayerror"; 600 std::string path = "chromiumsync/birthdayerror";
601 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); 601 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
602 ASSERT_EQ("Birthday error", 602 ASSERT_EQ("Birthday error",
603 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); 603 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
604 } 604 }
605 605
606 void LiveSyncTest::TriggerTransientError() { 606 void SyncTest::TriggerTransientError() {
607 ASSERT_TRUE(ServerSupportsErrorTriggering()); 607 ASSERT_TRUE(ServerSupportsErrorTriggering());
608 std::string path = "chromiumsync/transienterror"; 608 std::string path = "chromiumsync/transienterror";
609 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); 609 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
610 ASSERT_EQ("Transient error", 610 ASSERT_EQ("Transient error",
611 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); 611 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
612 } 612 }
613 613
614 void LiveSyncTest::TriggerSetSyncTabs() { 614 void SyncTest::TriggerSetSyncTabs() {
615 ASSERT_TRUE(ServerSupportsErrorTriggering()); 615 ASSERT_TRUE(ServerSupportsErrorTriggering());
616 std::string path = "chromiumsync/synctabs"; 616 std::string path = "chromiumsync/synctabs";
617 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); 617 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
618 ASSERT_EQ("Sync Tabs", 618 ASSERT_EQ("Sync Tabs",
619 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); 619 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
620 } 620 }
621 621
622 void LiveSyncTest::SetProxyConfig(net::URLRequestContextGetter* context_getter, 622 void SyncTest::SetProxyConfig(net::URLRequestContextGetter* context_getter,
623 const net::ProxyConfig& proxy_config) { 623 const net::ProxyConfig& proxy_config) {
624 base::WaitableEvent done(false, false); 624 base::WaitableEvent done(false, false);
625 BrowserThread::PostTask( 625 BrowserThread::PostTask(
626 BrowserThread::IO, 626 BrowserThread::IO,
627 FROM_HERE, 627 FROM_HERE,
628 new SetProxyConfigTask(&done, 628 new SetProxyConfigTask(&done,
629 context_getter, 629 context_getter,
630 proxy_config)); 630 proxy_config));
631 done.Wait(); 631 done.Wait();
632 } 632 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/test/integration/sync_test.h ('k') | chrome/browser/sync/test/integration/themes_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698