local_sync_test_server.cc revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Copyright 2013 The Chromium Authors. All rights reserved.
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Use of this source code is governed by a BSD-style license that can be
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// found in the LICENSE file.
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "sync/test/local_sync_test_server.h"
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/command_line.h"
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/path_service.h"
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/string_number_conversions.h"
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/values.h"
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "net/test/python_utils.h"
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "net/test/spawned_test_server/spawned_test_server.h"
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace syncer {
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
16324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverLocalSyncTestServer::LocalSyncTestServer()
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    : LocalTestServer(
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        net::SpawnedTestServer::TYPE_HTTP,  // Sync uses the HTTP scheme.
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        net::SpawnedTestServer::kLocalhost,
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        base::FilePath()),
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      xmpp_port_(0) {}
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverLocalSyncTestServer::LocalSyncTestServer(uint16 port, uint16 xmpp_port)
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    : LocalTestServer(
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        net::SpawnedTestServer::TYPE_HTTP,  // Sync uses the HTTP scheme.
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        net::SpawnedTestServer::kLocalhost,
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        base::FilePath()),
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      xmpp_port_(xmpp_port) {
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  SetPort(port);
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
32324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverLocalSyncTestServer::~LocalSyncTestServer() {}
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverbool LocalSyncTestServer::AddCommandLineArguments(
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    CommandLine* command_line) const {
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  if (!LocalTestServer::AddCommandLineArguments(command_line))
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return false;
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  if (xmpp_port_ != 0) {
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    std::string xmpp_port_str = base::IntToString(xmpp_port_);
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    command_line->AppendArg("--xmpp-port=" + xmpp_port_str);
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  }
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  return true;
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverbool LocalSyncTestServer::GetTestServerPath(
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    base::FilePath* testserver_path) const {
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  base::FilePath testserver_dir;
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  if (!PathService::Get(base::DIR_SOURCE_ROOT, &testserver_dir)) {
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    LOG(ERROR) << "Failed to get DIR_SOURCE_ROOT";
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return false;
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  }
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  testserver_dir = testserver_dir.Append(FILE_PATH_LITERAL("sync"))
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                                 .Append(FILE_PATH_LITERAL("tools"))
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                                 .Append(FILE_PATH_LITERAL("testserver"));
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  *testserver_path =
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      testserver_dir.Append(FILE_PATH_LITERAL("sync_testserver.py"));
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  return true;
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverbool LocalSyncTestServer::GetTestScriptPath(
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    const base::FilePath::StringType& test_script_name,
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    base::FilePath* test_script_path) const {
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  base::FilePath testserver_path;
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  if (!GetTestServerPath(&testserver_path))
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return false;
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  *test_script_path = testserver_path.DirName().Append(test_script_name);
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  return true;
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverbool LocalSyncTestServer::SetPythonPath() const {
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  if (!LocalTestServer::SetPythonPath())
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return false;
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  // Add the net/tools/testserver directory to the path, so that testserver_base
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  // can be imported.
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  base::FilePath net_testserver_path;
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  if (!LocalTestServer::GetTestServerPath(&net_testserver_path)) {
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    LOG(ERROR) << "Failed to get net testserver path.";
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return false;
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  }
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  AppendToPythonPath(net_testserver_path.DirName());
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  // Locate the Python code generated by the sync protocol buffers compiler.
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  base::FilePath pyproto_dir;
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  if (!GetPyProtoPath(&pyproto_dir)) {
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    LOG(WARNING) << "Cannot find pyproto dir for generated code. "
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                 << "Testserver features that rely on it will not work";
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return true;
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  }
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  AppendToPythonPath(pyproto_dir.AppendASCII("sync").AppendASCII("protocol"));
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  return true;
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}  // namespace syncer
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver