OLD | NEW |
---|---|
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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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" |
67 #include "components/sync_driver/sync_driver_switches.h" | 68 #include "components/sync_driver/sync_driver_switches.h" |
69 #include "content/public/browser/navigation_entry.h" | |
68 #include "content/public/browser/notification_service.h" | 70 #include "content/public/browser/notification_service.h" |
69 #include "content/public/browser/web_contents.h" | 71 #include "content/public/browser/web_contents.h" |
70 #include "content/public/test/test_browser_thread.h" | 72 #include "content/public/test/test_browser_thread.h" |
71 #include "google_apis/gaia/gaia_urls.h" | 73 #include "google_apis/gaia/gaia_urls.h" |
72 #include "net/base/escape.h" | 74 #include "net/base/escape.h" |
73 #include "net/base/load_flags.h" | 75 #include "net/base/load_flags.h" |
74 #include "net/base/network_change_notifier.h" | 76 #include "net/base/network_change_notifier.h" |
75 #include "net/base/port_util.h" | 77 #include "net/base/port_util.h" |
76 #include "net/cookies/cookie_monster.h" | 78 #include "net/cookies/cookie_monster.h" |
77 #include "net/test/spawned_test_server/spawned_test_server.h" | 79 #include "net/test/spawned_test_server/spawned_test_server.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
201 case MULTIPLE_CLIENT: { | 203 case MULTIPLE_CLIENT: { |
202 num_clients_ = 3; | 204 num_clients_ = 3; |
203 break; | 205 break; |
204 } | 206 } |
205 } | 207 } |
206 } | 208 } |
207 | 209 |
208 SyncTest::~SyncTest() {} | 210 SyncTest::~SyncTest() {} |
209 | 211 |
210 void SyncTest::SetUp() { | 212 void SyncTest::SetUp() { |
213 // Sets |server_type_| if it wasn't specified by the test. | |
214 DecideServerType(); | |
215 | |
211 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); | 216 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); |
212 if (cl->HasSwitch(switches::kPasswordFileForTest)) { | 217 if (cl->HasSwitch(switches::kPasswordFileForTest)) { |
213 ReadPasswordFile(); | 218 ReadPasswordFile(); |
214 } else if (cl->HasSwitch(switches::kSyncUserForTest) && | |
215 cl->HasSwitch(switches::kSyncPasswordForTest)) { | |
216 username_ = cl->GetSwitchValueASCII(switches::kSyncUserForTest); | |
217 password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest); | |
218 } else { | 219 } else { |
219 username_ = "user@gmail.com"; | 220 // Decide on username to use or create one. |
220 password_ = "password"; | 221 if (cl->HasSwitch(switches::kSyncUserForTest)) { |
222 username_ = cl->GetSwitchValueASCII(switches::kSyncUserForTest); | |
223 } else if (UsingExternalServers()) { | |
224 // If --sync-user-for-test is not provided and we are using external | |
225 // servers then we assume the need to automatically create a Gaia account. | |
pval...(no longer on Chromium)
2015/09/04 16:48:32
I think you can remove everything up to "We assume
shadi
2015/09/04 21:43:45
Done.
| |
226 // Creating a Gaia account requires URL navigation and thus needs to be | |
227 // done outside the SetUp() function. | |
228 create_gaia_account_at_runtime_ = true; | |
229 username_ = base::GenerateGUID(); | |
230 } else { | |
231 username_ = "user@gmail.com"; | |
232 } | |
233 // Decide on password to use. | |
234 if (cl->HasSwitch(switches::kSyncPasswordForTest)) { | |
pval...(no longer on Chromium)
2015/09/04 16:48:32
Consider using the ternary (?) operator here?
shadi
2015/09/04 21:43:45
Done.
| |
235 password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest); | |
236 } else { | |
237 password_ = "password"; | |
238 } | |
221 } | 239 } |
222 | 240 |
223 if (username_.empty() || password_.empty()) | 241 if (username_.empty() || password_.empty()) |
224 LOG(FATAL) << "Cannot run sync tests without GAIA credentials."; | 242 LOG(FATAL) << "Cannot run sync tests without GAIA credentials."; |
225 | 243 |
226 // Sets |server_type_| if it wasn't specified by the test. | |
227 DecideServerType(); | |
228 | |
229 // Mock the Mac Keychain service. The real Keychain can block on user input. | 244 // Mock the Mac Keychain service. The real Keychain can block on user input. |
230 #if defined(OS_MACOSX) | 245 #if defined(OS_MACOSX) |
231 OSCrypt::UseMockKeychain(true); | 246 OSCrypt::UseMockKeychain(true); |
232 #endif | 247 #endif |
233 | 248 |
234 // Start up a sync test server if one is needed and setup mock gaia responses. | 249 // Start up a sync test server if one is needed and setup mock gaia responses. |
235 // Note: This must be done prior to the call to SetupClients() because we want | 250 // Note: This must be done prior to the call to SetupClients() because we want |
236 // the mock gaia responses to be available before GaiaUrls is initialized. | 251 // the mock gaia responses to be available before GaiaUrls is initialized. |
237 SetUpTestServerIfRequired(); | 252 SetUpTestServerIfRequired(); |
238 | 253 |
(...skipping 30 matching lines...) Expand all Loading... | |
269 // Disable non-essential access of external network resources. | 284 // Disable non-essential access of external network resources. |
270 if (!cl->HasSwitch(switches::kDisableBackgroundNetworking)) | 285 if (!cl->HasSwitch(switches::kDisableBackgroundNetworking)) |
271 cl->AppendSwitch(switches::kDisableBackgroundNetworking); | 286 cl->AppendSwitch(switches::kDisableBackgroundNetworking); |
272 | 287 |
273 if (!cl->HasSwitch(switches::kSyncShortInitialRetryOverride)) | 288 if (!cl->HasSwitch(switches::kSyncShortInitialRetryOverride)) |
274 cl->AppendSwitch(switches::kSyncShortInitialRetryOverride); | 289 cl->AppendSwitch(switches::kSyncShortInitialRetryOverride); |
275 } | 290 } |
276 | 291 |
277 void SyncTest::AddOptionalTypesToCommandLine(base::CommandLine* cl) {} | 292 void SyncTest::AddOptionalTypesToCommandLine(base::CommandLine* cl) {} |
278 | 293 |
294 bool SyncTest::CreateGaiaAccount(const std::string& username, | |
295 const std::string& password) { | |
296 std::string relative_url = base::StringPrintf("/CreateUsers?%s=%s", | |
297 username.c_str(), | |
298 password.c_str()); | |
299 GURL create_user_url = | |
300 GaiaUrls::GetInstance()->gaia_url().Resolve(relative_url); | |
301 // NavigateToURL blocks until the navigation finishes. | |
302 ui_test_utils::NavigateToURL(browser(), create_user_url); | |
303 content::WebContents* contents = | |
304 browser()->tab_strip_model()->GetActiveWebContents(); | |
305 content::NavigationEntry* entry = contents->GetController().GetVisibleEntry(); | |
306 CHECK(entry) << "Could not get a hold on NavigationEntry post URL navigate."; | |
307 DVLOG(1) << "Create Gaia account request return code = " | |
308 << entry->GetHttpStatusCode(); | |
309 return entry->GetHttpStatusCode() == 200; | |
310 } | |
311 | |
279 // Called when the ProfileManager has created a profile. | 312 // Called when the ProfileManager has created a profile. |
280 // static | 313 // static |
281 void SyncTest::CreateProfileCallback(const base::Closure& quit_closure, | 314 void SyncTest::CreateProfileCallback(const base::Closure& quit_closure, |
282 Profile* profile, | 315 Profile* profile, |
283 Profile::CreateStatus status) { | 316 Profile::CreateStatus status) { |
284 EXPECT_TRUE(profile); | 317 EXPECT_TRUE(profile); |
285 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status); | 318 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status); |
286 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status); | 319 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status); |
287 // This will be called multiple times. Wait until the profile is initialized | 320 // This will be called multiple times. Wait until the profile is initialized |
288 // fully to quit the loop. | 321 // fully to quit the loop. |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
526 GetInvalidationService()); | 559 GetInvalidationService()); |
527 p2p_invalidation_service->UpdateCredentials(username_, password_); | 560 p2p_invalidation_service->UpdateCredentials(username_, password_); |
528 // Start listening for and emitting notifications of commits. | 561 // Start listening for and emitting notifications of commits. |
529 invalidation_forwarders_[index] = | 562 invalidation_forwarders_[index] = |
530 new P2PInvalidationForwarder(clients_[index]->service(), | 563 new P2PInvalidationForwarder(clients_[index]->service(), |
531 p2p_invalidation_service); | 564 p2p_invalidation_service); |
532 } | 565 } |
533 } | 566 } |
534 | 567 |
535 bool SyncTest::SetupSync() { | 568 bool SyncTest::SetupSync() { |
569 if (create_gaia_account_at_runtime_) { | |
570 CHECK(UsingExternalServers()) << | |
571 "Cannot create Gaia accounts without external authentication servers"; | |
572 if (!CreateGaiaAccount(username_, password_)) | |
573 LOG(FATAL) << "Could not create Gaia account."; | |
574 } | |
536 // Create sync profiles and clients if they haven't already been created. | 575 // Create sync profiles and clients if they haven't already been created. |
537 if (profiles_.empty()) { | 576 if (profiles_.empty()) { |
538 if (!SetupClients()) | 577 if (!SetupClients()) |
539 LOG(FATAL) << "SetupClients() failed."; | 578 LOG(FATAL) << "SetupClients() failed."; |
540 } | 579 } |
541 | 580 |
542 // Sync each of the profiles. | 581 // Sync each of the profiles. |
543 for (int i = 0; i < num_clients_; ++i) { | 582 for (int i = 0; i < num_clients_; ++i) { |
544 if (!GetClient(i)->SetupSync()) | 583 if (!GetClient(i)->SetupSync()) |
545 LOG(FATAL) << "SetupSync() failed."; | 584 LOG(FATAL) << "SetupSync() failed."; |
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1062 content::NotificationService::current()->Notify( | 1101 content::NotificationService::current()->Notify( |
1063 chrome::NOTIFICATION_SYNC_REFRESH_LOCAL, | 1102 chrome::NOTIFICATION_SYNC_REFRESH_LOCAL, |
1064 content::Source<Profile>(GetProfile(index)), | 1103 content::Source<Profile>(GetProfile(index)), |
1065 content::Details<const syncer::ModelTypeSet>(&model_types)); | 1104 content::Details<const syncer::ModelTypeSet>(&model_types)); |
1066 } | 1105 } |
1067 | 1106 |
1068 void SyncTest::SetPreexistingPreferencesFileContents( | 1107 void SyncTest::SetPreexistingPreferencesFileContents( |
1069 const std::string& contents) { | 1108 const std::string& contents) { |
1070 preexisting_preferences_file_contents_ = contents; | 1109 preexisting_preferences_file_contents_ = contents; |
1071 } | 1110 } |
OLD | NEW |