0

[Sync] Make sync integration tests use local xmpp servers.

Fixed signed/unsigned bug with the port number.

BUG=53934
TEST=sync integration tests

Review URL: http://codereview.chromium.org/5239001

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67491 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
akalin@chromium.org
2010-11-27 05:57:56 +00:00
parent c67895dc60
commit 47b3c39b87
5 changed files with 36 additions and 17 deletions

@ -6,6 +6,7 @@
#include <vector>
#include "base/basictypes.h"
#include "base/command_line.h"
#include "base/logging.h"
#include "base/message_loop.h"
@ -14,6 +15,7 @@
#include "base/string_util.h"
#include "base/task.h"
#include "base/test/test_timeouts.h"
#include "base/values.h"
#include "base/waitable_event.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/password_manager/encryptor.h"
@ -139,17 +141,6 @@ void LiveSyncTest::SetUp() {
if (!cl->HasSwitch(switches::kSyncNotificationMethod))
cl->AppendSwitchASCII(switches::kSyncNotificationMethod, "p2p");
// TODO(akalin): Delete this block of code once a local python notification
// server is implemented.
// The chrome sync builders are behind a firewall that blocks port 5222, the
// default port for XMPP notifications. This causes the tests to spend up to a
// minute waiting for a connection on port 5222 before they fail over to port
// 443, the default SSL/TCP port. This switch causes the tests to use port 443
// by default, without having to try port 5222.
if (!cl->HasSwitch(switches::kSyncTrySsltcpFirstForXmpp)) {
cl->AppendSwitch(switches::kSyncTrySsltcpFirstForXmpp);
}
// TODO(sync): Remove this once sessions sync is enabled by default.
if (!cl->HasSwitch(switches::kEnableSyncSessions)) {
cl->AppendSwitch(switches::kEnableSyncSessions);
@ -332,8 +323,25 @@ bool LiveSyncTest::SetUpLocalPythonTestServer() {
cl->AppendSwitchASCII(switches::kSyncServiceURL, sync_service_url);
VLOG(1) << "Started local python test server at " << sync_service_url;
// TODO(akalin): Set the kSyncNotificationHost switch here once a local python
// notification server is implemented.
int xmpp_port = 0;
if (!sync_server_.server_data().GetInteger("xmpp_port", &xmpp_port)) {
LOG(ERROR) << "Could not find valid xmpp_port value";
return false;
}
if ((xmpp_port <= 0) || (xmpp_port > kuint16max)) {
LOG(ERROR) << "Invalid xmpp port: " << xmpp_port;
return false;
}
net::HostPortPair xmpp_host_port_pair(sync_server_.host_port_pair());
xmpp_host_port_pair.set_port(xmpp_port);
if (!cl->HasSwitch(switches::kSyncNotificationHost)) {
cl->AppendSwitchASCII(switches::kSyncNotificationHost,
xmpp_host_port_pair.ToString());
// The local XMPP server only supports insecure connections.
cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection);
}
return true;
}

@ -40,7 +40,7 @@ ConnectionSettingsList::~ConnectionSettingsList() {}
void ConnectionSettingsList::AddPermutations(const std::string& hostname,
const std::vector<uint32>& iplist,
int16 port,
uint16 port,
bool special_port_magic,
bool try_ssltcp_first) {
// randomize the list. This ensures the iplist isn't always

@ -9,6 +9,7 @@
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "talk/xmpp/xmppclientsettings.h"
namespace notifier {
@ -47,7 +48,7 @@ class ConnectionSettingsList {
void AddPermutations(const std::string& hostname,
const std::vector<uint32>& iplist,
int16 port,
uint16 port,
bool special_port_magic,
bool try_ssltcp_first);
private:

@ -189,6 +189,11 @@ const HostPortPair& TestServer::host_port_pair() const {
return host_port_pair_;
}
const DictionaryValue& TestServer::server_data() const {
DCHECK(started_);
return *server_data_;
}
std::string TestServer::GetScheme() const {
switch (type_) {
case TYPE_FTP:
@ -391,9 +396,9 @@ bool TestServer::ParseServerData(const std::string& server_data) {
<< json_reader.GetErrorMessage();
return false;
}
DictionaryValue* dict = static_cast<DictionaryValue*>(value.get());
server_data_.reset(static_cast<DictionaryValue*>(value.release()));
int port = 0;
if (!dict->GetInteger("port", &port)) {
if (!server_data_->GetInteger("port", &port)) {
LOG(ERROR) << "Could not find port value";
return false;
}

@ -28,6 +28,7 @@
#endif
class CommandLine;
class DictionaryValue;
class GURL;
namespace net {
@ -116,6 +117,7 @@ class TestServer {
const FilePath& document_root() const { return document_root_; }
const HostPortPair& host_port_pair() const;
const DictionaryValue& server_data() const;
std::string GetScheme() const;
bool GetAddressList(AddressList* address_list) const WARN_UNUSED_RESULT;
@ -172,6 +174,9 @@ class TestServer {
// Address the test server listens on.
HostPortPair host_port_pair_;
// Holds the data sent from the server (e.g., port number).
scoped_ptr<DictionaryValue> server_data_;
// Handle of the Python process running the test server.
base::ProcessHandle process_handle_;