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

Side by Side Diff: chrome/test/live_sync/live_sync_test.cc

Issue 7753023: [Sync] Add tests for migration triggered by notifications (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 4 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
« no previous file with comments | « chrome/test/live_sync/live_sync_test.h ('k') | chrome/test/live_sync/migration_errors_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/test/live_sync/live_sync_test.h" 5 #include "chrome/test/live_sync/live_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/profile_sync_service_harness.h" 25 #include "chrome/browser/sync/profile_sync_service_harness.h"
25 #include "chrome/browser/ui/browser.h" 26 #include "chrome/browser/ui/browser.h"
26 #include "chrome/browser/ui/browser_list.h" 27 #include "chrome/browser/ui/browser_list.h"
27 #include "chrome/common/chrome_paths.h" 28 #include "chrome/common/chrome_paths.h"
28 #include "chrome/common/chrome_switches.h" 29 #include "chrome/common/chrome_switches.h"
29 #include "chrome/test/base/testing_browser_process.h" 30 #include "chrome/test/base/testing_browser_process.h"
30 #include "chrome/test/base/ui_test_utils.h" 31 #include "chrome/test/base/ui_test_utils.h"
31 #include "chrome/test/live_sync/sync_datatype_helper.h" 32 #include "chrome/test/live_sync/sync_datatype_helper.h"
32 #include "content/browser/browser_thread.h" 33 #include "content/browser/browser_thread.h"
33 #include "content/browser/tab_contents/tab_contents.h" 34 #include "content/browser/tab_contents/tab_contents.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 net::URLRequestContextGetter* url_request_context_getter_; 107 net::URLRequestContextGetter* url_request_context_getter_;
107 net::ProxyConfig proxy_config_; 108 net::ProxyConfig proxy_config_;
108 }; 109 };
109 110
110 LiveSyncTest::LiveSyncTest(TestType test_type) 111 LiveSyncTest::LiveSyncTest(TestType test_type)
111 : sync_server_(net::TestServer::TYPE_SYNC, FilePath()), 112 : sync_server_(net::TestServer::TYPE_SYNC, FilePath()),
112 test_type_(test_type), 113 test_type_(test_type),
113 server_type_(SERVER_TYPE_UNDECIDED), 114 server_type_(SERVER_TYPE_UNDECIDED),
114 num_clients_(-1), 115 num_clients_(-1),
115 use_verifier_(true), 116 use_verifier_(true),
116 test_server_handle_(base::kNullProcessHandle), 117 test_server_handle_(base::kNullProcessHandle) {
117 enable_notifications_(true) {
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;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
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) {
282 profiles_.push_back(MakeProfile( 282 profiles_.push_back(MakeProfile(
283 base::StringPrintf(FILE_PATH_LITERAL("Profile%d"), i))); 283 base::StringPrintf(FILE_PATH_LITERAL("Profile%d"), i)));
284 EXPECT_FALSE(GetProfile(i) == NULL) << "GetProfile(" << i << ") failed."; 284 EXPECT_FALSE(GetProfile(i) == NULL) << "GetProfile(" << i << ") failed.";
285 285
286 browsers_.push_back(Browser::Create(GetProfile(i))); 286 browsers_.push_back(Browser::Create(GetProfile(i)));
287 EXPECT_FALSE(GetBrowser(i) == NULL) << "GetBrowser(" << i << ") failed."; 287 EXPECT_FALSE(GetBrowser(i) == NULL) << "GetBrowser(" << i << ") failed.";
288 288
289 clients_.push_back( 289 clients_.push_back(
290 new ProfileSyncServiceHarness(GetProfile(i), username_, password_, 290 new ProfileSyncServiceHarness(GetProfile(i), username_, password_));
291 enable_notifications_));
292 EXPECT_FALSE(GetClient(i) == NULL) << "GetClient(" << i << ") failed."; 291 EXPECT_FALSE(GetClient(i) == NULL) << "GetClient(" << i << ") failed.";
293 292
294 ui_test_utils::WaitForBookmarkModelToLoad( 293 ui_test_utils::WaitForBookmarkModelToLoad(
295 GetProfile(i)->GetBookmarkModel()); 294 GetProfile(i)->GetBookmarkModel());
296 } 295 }
297 296
298 // Create the verifier profile. 297 // Create the verifier profile.
299 verifier_.reset(MakeProfile(FILE_PATH_LITERAL("Verifier"))); 298 verifier_.reset(MakeProfile(FILE_PATH_LITERAL("Verifier")));
300 ui_test_utils::WaitForBookmarkModelToLoad(verifier()->GetBookmarkModel()); 299 ui_test_utils::WaitForBookmarkModelToLoad(verifier()->GetBookmarkModel());
301 return (verifier_.get() != NULL); 300 return (verifier_.get() != NULL);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 399
401 bool LiveSyncTest::SetUpLocalPythonTestServer() { 400 bool LiveSyncTest::SetUpLocalPythonTestServer() {
402 EXPECT_TRUE(sync_server_.Start()) 401 EXPECT_TRUE(sync_server_.Start())
403 << "Could not launch local python test server."; 402 << "Could not launch local python test server.";
404 403
405 CommandLine* cl = CommandLine::ForCurrentProcess(); 404 CommandLine* cl = CommandLine::ForCurrentProcess();
406 std::string sync_service_url = sync_server_.GetURL("chromiumsync").spec(); 405 std::string sync_service_url = sync_server_.GetURL("chromiumsync").spec();
407 cl->AppendSwitchASCII(switches::kSyncServiceURL, sync_service_url); 406 cl->AppendSwitchASCII(switches::kSyncServiceURL, sync_service_url);
408 VLOG(1) << "Started local python test server at " << sync_service_url; 407 VLOG(1) << "Started local python test server at " << sync_service_url;
409 408
410 if (enable_notifications_) { 409 int xmpp_port = 0;
411 int xmpp_port = 0; 410 if (!sync_server_.server_data().GetInteger("xmpp_port", &xmpp_port)) {
412 if (!sync_server_.server_data().GetInteger("xmpp_port", &xmpp_port)) { 411 LOG(ERROR) << "Could not find valid xmpp_port value";
413 LOG(ERROR) << "Could not find valid xmpp_port value"; 412 return false;
414 return false; 413 }
415 } 414 if ((xmpp_port <= 0) || (xmpp_port > kuint16max)) {
416 if ((xmpp_port <= 0) || (xmpp_port > kuint16max)) { 415 LOG(ERROR) << "Invalid xmpp port: " << xmpp_port;
417 LOG(ERROR) << "Invalid xmpp port: " << xmpp_port; 416 return false;
418 return false; 417 }
419 }
420 418
421 net::HostPortPair xmpp_host_port_pair(sync_server_.host_port_pair()); 419 net::HostPortPair xmpp_host_port_pair(sync_server_.host_port_pair());
422 xmpp_host_port_pair.set_port(xmpp_port); 420 xmpp_host_port_pair.set_port(xmpp_port);
423 xmpp_port_.reset(new net::ScopedPortException(xmpp_port)); 421 xmpp_port_.reset(new net::ScopedPortException(xmpp_port));
424 422
425 if (!cl->HasSwitch(switches::kSyncNotificationHost)) { 423 if (!cl->HasSwitch(switches::kSyncNotificationHost)) {
426 cl->AppendSwitchASCII(switches::kSyncNotificationHost, 424 cl->AppendSwitchASCII(switches::kSyncNotificationHost,
427 xmpp_host_port_pair.ToString()); 425 xmpp_host_port_pair.ToString());
428 // The local XMPP server only supports insecure connections. 426 // The local XMPP server only supports insecure connections.
429 cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection); 427 cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection);
430 }
431 } 428 }
432 429
433 return true; 430 return true;
434 } 431 }
435 432
436 bool LiveSyncTest::SetUpLocalTestServer() { 433 bool LiveSyncTest::SetUpLocalTestServer() {
437 CommandLine* cl = CommandLine::ForCurrentProcess(); 434 CommandLine* cl = CommandLine::ForCurrentProcess();
438 CommandLine::StringType server_cmdline_string = cl->GetSwitchValueNative( 435 CommandLine::StringType server_cmdline_string = cl->GetSwitchValueNative(
439 switches::kSyncServerCommandLine); 436 switches::kSyncServerCommandLine);
440 CommandLine::StringVector server_cmdline_vector; 437 CommandLine::StringVector server_cmdline_vector;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 } 516 }
520 517
521 bool LiveSyncTest::EnableEncryption(int index, syncable::ModelType type) { 518 bool LiveSyncTest::EnableEncryption(int index, syncable::ModelType type) {
522 return GetClient(index)->EnableEncryptionForType(type); 519 return GetClient(index)->EnableEncryptionForType(type);
523 } 520 }
524 521
525 bool LiveSyncTest::IsEncrypted(int index, syncable::ModelType type) { 522 bool LiveSyncTest::IsEncrypted(int index, syncable::ModelType type) {
526 return GetClient(index)->IsTypeEncrypted(type); 523 return GetClient(index)->IsTypeEncrypted(type);
527 } 524 }
528 525
529 void LiveSyncTest::DisableNotifications() {
530 // TODO(akalin): It would be better to assert that the test server
531 // hasn't been started yet. That would require adding an
532 // IsStarted() method to TestServer.
533 ASSERT_TRUE(profiles_.empty());
534 ASSERT_TRUE(clients_.empty());
535 enable_notifications_ = false;
536 }
537
538 bool LiveSyncTest::AwaitQuiescence() { 526 bool LiveSyncTest::AwaitQuiescence() {
539 return ProfileSyncServiceHarness::AwaitQuiescence(clients()); 527 return ProfileSyncServiceHarness::AwaitQuiescence(clients());
540 } 528 }
541 529
542 bool LiveSyncTest::ServerSupportsErrorTriggering() { 530 bool LiveSyncTest::ServerSupportsNotificationControl() {
543 EXPECT_TRUE(server_type_ != SERVER_TYPE_UNDECIDED); 531 EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_);
544 532
545 // Supported only if we're using the python testserver. 533 // Supported only if we're using the python testserver.
546 return server_type_ == LOCAL_PYTHON_SERVER; 534 return server_type_ == LOCAL_PYTHON_SERVER;
535 }
536
537 void LiveSyncTest::DisableNotifications() {
538 ASSERT_TRUE(ServerSupportsNotificationControl());
539 std::string path = "chromiumsync/disablenotifications";
540 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
541 ASSERT_EQ("Notifications disabled",
542 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
543 }
544
545 void LiveSyncTest::TriggerNotification(
546 const syncable::ModelTypeSet& changed_types) {
547 ASSERT_TRUE(ServerSupportsNotificationControl());
548 const std::string& data =
549 sync_notifier::P2PNotificationData("from_server",
550 sync_notifier::NOTIFY_ALL,
551 changed_types).ToString();
552 const std::string& path =
553 std::string("chromiumsync/sendnotification?channel=") +
554 sync_notifier::kSyncP2PNotificationChannel + "&data=" + data;
555 ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
556 ASSERT_EQ("Notification sent",
557 UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
558 }
559
560 bool LiveSyncTest::ServerSupportsErrorTriggering() {
561 EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_);
562
563 // Supported only if we're using the python testserver.
564 return server_type_ == LOCAL_PYTHON_SERVER;
547 } 565 }
548 566
549 void LiveSyncTest::TriggerMigrationDoneError( 567 void LiveSyncTest::TriggerMigrationDoneError(
550 const syncable::ModelTypeSet& model_types) { 568 const syncable::ModelTypeSet& model_types) {
551 ASSERT_TRUE(ServerSupportsErrorTriggering()); 569 ASSERT_TRUE(ServerSupportsErrorTriggering());
552 std::string path = "chromiumsync/migrate"; 570 std::string path = "chromiumsync/migrate";
553 char joiner = '?'; 571 char joiner = '?';
554 for (syncable::ModelTypeSet::const_iterator it = model_types.begin(); 572 for (syncable::ModelTypeSet::const_iterator it = model_types.begin();
555 it != model_types.end(); ++it) { 573 it != model_types.end(); ++it) {
556 path.append(base::StringPrintf("%ctype=%d", joiner, 574 path.append(base::StringPrintf("%ctype=%d", joiner,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 const net::ProxyConfig& proxy_config) { 608 const net::ProxyConfig& proxy_config) {
591 base::WaitableEvent done(false, false); 609 base::WaitableEvent done(false, false);
592 BrowserThread::PostTask( 610 BrowserThread::PostTask(
593 BrowserThread::IO, 611 BrowserThread::IO,
594 FROM_HERE, 612 FROM_HERE,
595 new SetProxyConfigTask(&done, 613 new SetProxyConfigTask(&done,
596 context_getter, 614 context_getter,
597 proxy_config)); 615 proxy_config));
598 done.Wait(); 616 done.Wait();
599 } 617 }
OLDNEW
« no previous file with comments | « chrome/test/live_sync/live_sync_test.h ('k') | chrome/test/live_sync/migration_errors_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698