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

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

Issue 1306163003: Dynamically create Gaia accounts when running E2E sync integration tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/integration/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/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/guid.h"
12 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
14 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
15 #include "base/path_service.h" 16 #include "base/path_service.h"
16 #include "base/process/launch.h" 17 #include "base/process/launch.h"
17 #include "base/strings/string_split.h" 18 #include "base/strings/string_split.h"
18 #include "base/strings/string_util.h" 19 #include "base/strings/string_util.h"
19 #include "base/strings/stringprintf.h" 20 #include "base/strings/stringprintf.h"
20 #include "base/strings/utf_string_conversions.h" 21 #include "base/strings/utf_string_conversions.h"
21 #include "base/synchronization/waitable_event.h" 22 #include "base/synchronization/waitable_event.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 #include "components/invalidation/impl/p2p_invalidation_service.h" 58 #include "components/invalidation/impl/p2p_invalidation_service.h"
58 #include "components/invalidation/impl/p2p_invalidator.h" 59 #include "components/invalidation/impl/p2p_invalidator.h"
59 #include "components/invalidation/impl/profile_invalidation_provider.h" 60 #include "components/invalidation/impl/profile_invalidation_provider.h"
60 #include "components/invalidation/public/invalidation_service.h" 61 #include "components/invalidation/public/invalidation_service.h"
61 #include "components/keyed_service/core/keyed_service.h" 62 #include "components/keyed_service/core/keyed_service.h"
62 #include "components/os_crypt/os_crypt.h" 63 #include "components/os_crypt/os_crypt.h"
63 #include "components/search_engines/template_url_service.h" 64 #include "components/search_engines/template_url_service.h"
64 #include "components/signin/core/browser/profile_identity_provider.h" 65 #include "components/signin/core/browser/profile_identity_provider.h"
65 #include "components/signin/core/browser/signin_manager.h" 66 #include "components/signin/core/browser/signin_manager.h"
66 #include "components/sync_driver/invalidation_helper.h" 67 #include "components/sync_driver/invalidation_helper.h"
68 #include "content/public/browser/navigation_entry.h"
67 #include "content/public/browser/notification_service.h" 69 #include "content/public/browser/notification_service.h"
68 #include "content/public/browser/web_contents.h" 70 #include "content/public/browser/web_contents.h"
69 #include "content/public/test/test_browser_thread.h" 71 #include "content/public/test/test_browser_thread.h"
70 #include "google_apis/gaia/gaia_urls.h" 72 #include "google_apis/gaia/gaia_urls.h"
71 #include "net/base/escape.h" 73 #include "net/base/escape.h"
72 #include "net/base/load_flags.h" 74 #include "net/base/load_flags.h"
73 #include "net/base/network_change_notifier.h" 75 #include "net/base/network_change_notifier.h"
74 #include "net/base/port_util.h" 76 #include "net/base/port_util.h"
75 #include "net/cookies/cookie_monster.h" 77 #include "net/cookies/cookie_monster.h"
76 #include "net/test/spawned_test_server/spawned_test_server.h" 78 #include "net/test/spawned_test_server/spawned_test_server.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 case MULTIPLE_CLIENT: { 202 case MULTIPLE_CLIENT: {
201 num_clients_ = 3; 203 num_clients_ = 3;
202 break; 204 break;
203 } 205 }
204 } 206 }
205 } 207 }
206 208
207 SyncTest::~SyncTest() {} 209 SyncTest::~SyncTest() {}
208 210
209 void SyncTest::SetUp() { 211 void SyncTest::SetUp() {
212 // Sets |server_type_| if it wasn't specified by the test.
213 DecideServerType();
214
210 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); 215 base::CommandLine* cl = base::CommandLine::ForCurrentProcess();
211 if (cl->HasSwitch(switches::kPasswordFileForTest)) { 216 if (cl->HasSwitch(switches::kPasswordFileForTest)) {
212 ReadPasswordFile(); 217 ReadPasswordFile();
213 } else if (cl->HasSwitch(switches::kSyncUserForTest) && 218 } else if (cl->HasSwitch(switches::kSyncUserForTest) &&
214 cl->HasSwitch(switches::kSyncPasswordForTest)) { 219 cl->HasSwitch(switches::kSyncPasswordForTest)) {
215 username_ = cl->GetSwitchValueASCII(switches::kSyncUserForTest); 220 username_ = cl->GetSwitchValueASCII(switches::kSyncUserForTest);
216 password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest); 221 password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest);
217 } else { 222 } else if (UsingExternalServers()) {
223 // If --sync-user-for-test is not provided and we are using external servers
224 // then we assume the need to automatically create a Gaia account.
225 // Creating a Gaia account requires URL navigation and thus needs to be done
226 // outside the SetUp() function.
227 create_gaia_account_at_runtime_ = true;
228 username_ = base::GenerateGUID();
229 if (cl->HasSwitch(switches::kSyncPasswordForTest))
pval...(no longer on Chromium) 2015/08/26 19:26:33 can we simplify the logic in this method to only s
shadi 2015/09/03 22:17:08 PTAL at new logic.
230 password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest);
231 else
232 password_ = "password";
233 }else {
pval...(no longer on Chromium) 2015/08/26 19:26:33 space after }
shadi 2015/09/03 22:17:08 Done.
218 username_ = "user@gmail.com"; 234 username_ = "user@gmail.com";
219 password_ = "password"; 235 password_ = "password";
220 } 236 }
221 237
222 if (username_.empty() || password_.empty()) 238 if (username_.empty() || password_.empty())
223 LOG(FATAL) << "Cannot run sync tests without GAIA credentials."; 239 LOG(FATAL) << "Cannot run sync tests without GAIA credentials.";
224 240
225 // Sets |server_type_| if it wasn't specified by the test.
226 DecideServerType();
227
228 // Mock the Mac Keychain service. The real Keychain can block on user input. 241 // Mock the Mac Keychain service. The real Keychain can block on user input.
229 #if defined(OS_MACOSX) 242 #if defined(OS_MACOSX)
230 OSCrypt::UseMockKeychain(true); 243 OSCrypt::UseMockKeychain(true);
231 #endif 244 #endif
232 245
233 // Start up a sync test server if one is needed and setup mock gaia responses. 246 // Start up a sync test server if one is needed and setup mock gaia responses.
234 // Note: This must be done prior to the call to SetupClients() because we want 247 // Note: This must be done prior to the call to SetupClients() because we want
235 // the mock gaia responses to be available before GaiaUrls is initialized. 248 // the mock gaia responses to be available before GaiaUrls is initialized.
236 SetUpTestServerIfRequired(); 249 SetUpTestServerIfRequired();
237 250
(...skipping 30 matching lines...) Expand all
268 // Disable non-essential access of external network resources. 281 // Disable non-essential access of external network resources.
269 if (!cl->HasSwitch(switches::kDisableBackgroundNetworking)) 282 if (!cl->HasSwitch(switches::kDisableBackgroundNetworking))
270 cl->AppendSwitch(switches::kDisableBackgroundNetworking); 283 cl->AppendSwitch(switches::kDisableBackgroundNetworking);
271 284
272 if (!cl->HasSwitch(switches::kSyncShortInitialRetryOverride)) 285 if (!cl->HasSwitch(switches::kSyncShortInitialRetryOverride))
273 cl->AppendSwitch(switches::kSyncShortInitialRetryOverride); 286 cl->AppendSwitch(switches::kSyncShortInitialRetryOverride);
274 } 287 }
275 288
276 void SyncTest::AddOptionalTypesToCommandLine(base::CommandLine* cl) {} 289 void SyncTest::AddOptionalTypesToCommandLine(base::CommandLine* cl) {}
277 290
291 bool SyncTest::CreateGaiaAccount(const std::string& user_name,
292 const std::string& password) {
293 std::string relative_url = base::StringPrintf("/CreateUsers?%s=%s",
294 user_name.c_str(),
295 password.c_str());
296 GURL create_user_url =
297 GaiaUrls::GetInstance()->gaia_url().Resolve(relative_url);
298 // NavigateToURL blocks until the navigation finishes.
299 ui_test_utils::NavigateToURL(browser(), create_user_url);
300 content::WebContents* contents =
301 browser()->tab_strip_model()->GetActiveWebContents();
302 content::NavigationEntry* entry = contents->GetController().GetVisibleEntry();
303 CHECK(entry) << "Could not get a hold on NavigationEntry post URL navigate.";
304 DVLOG(1) << "Create Gaia account request return code = " <<
pval...(no longer on Chromium) 2015/08/26 19:26:33 i believe the trailing << here should be on the ne
shadi 2015/09/03 22:17:08 Done.
305 entry->GetHttpStatusCode();
306 return entry->GetHttpStatusCode() == 200;
307 }
308
278 // Called when the ProfileManager has created a profile. 309 // Called when the ProfileManager has created a profile.
279 // static 310 // static
280 void SyncTest::CreateProfileCallback(const base::Closure& quit_closure, 311 void SyncTest::CreateProfileCallback(const base::Closure& quit_closure,
281 Profile* profile, 312 Profile* profile,
282 Profile::CreateStatus status) { 313 Profile::CreateStatus status) {
283 EXPECT_TRUE(profile); 314 EXPECT_TRUE(profile);
284 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status); 315 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status);
285 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status); 316 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status);
286 // This will be called multiple times. Wait until the profile is initialized 317 // This will be called multiple times. Wait until the profile is initialized
287 // fully to quit the loop. 318 // fully to quit the loop.
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 GetInvalidationService()); 556 GetInvalidationService());
526 p2p_invalidation_service->UpdateCredentials(username_, password_); 557 p2p_invalidation_service->UpdateCredentials(username_, password_);
527 // Start listening for and emitting notifications of commits. 558 // Start listening for and emitting notifications of commits.
528 invalidation_forwarders_[index] = 559 invalidation_forwarders_[index] =
529 new P2PInvalidationForwarder(clients_[index]->service(), 560 new P2PInvalidationForwarder(clients_[index]->service(),
530 p2p_invalidation_service); 561 p2p_invalidation_service);
531 } 562 }
532 } 563 }
533 564
534 bool SyncTest::SetupSync() { 565 bool SyncTest::SetupSync() {
566 if (create_gaia_account_at_runtime_) {
567 CHECK(UsingExternalServers()) <<
568 "Cannot create Gaia accounts without external authentication servers";
569 if (!CreateGaiaAccount(username_, password_))
570 LOG(FATAL) << "Could not create Gaia account.";
571 }
535 // Create sync profiles and clients if they haven't already been created. 572 // Create sync profiles and clients if they haven't already been created.
536 if (profiles_.empty()) { 573 if (profiles_.empty()) {
537 if (!SetupClients()) 574 if (!SetupClients())
538 LOG(FATAL) << "SetupClients() failed."; 575 LOG(FATAL) << "SetupClients() failed.";
539 } 576 }
540 577
541 // Sync each of the profiles. 578 // Sync each of the profiles.
542 for (int i = 0; i < num_clients_; ++i) { 579 for (int i = 0; i < num_clients_; ++i) {
543 if (!GetClient(i)->SetupSync()) 580 if (!GetClient(i)->SetupSync())
544 LOG(FATAL) << "SetupSync() failed."; 581 LOG(FATAL) << "SetupSync() failed.";
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 content::NotificationService::current()->Notify( 1098 content::NotificationService::current()->Notify(
1062 chrome::NOTIFICATION_SYNC_REFRESH_LOCAL, 1099 chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
1063 content::Source<Profile>(GetProfile(index)), 1100 content::Source<Profile>(GetProfile(index)),
1064 content::Details<const syncer::ModelTypeSet>(&model_types)); 1101 content::Details<const syncer::ModelTypeSet>(&model_types));
1065 } 1102 }
1066 1103
1067 void SyncTest::SetPreexistingPreferencesFileContents( 1104 void SyncTest::SetPreexistingPreferencesFileContents(
1068 const std::string& contents) { 1105 const std::string& contents) {
1069 preexisting_preferences_file_contents_ = contents; 1106 preexisting_preferences_file_contents_ = contents;
1070 } 1107 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698