local_sync_test_server.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Copyright 2013 The Chromium Authors. All rights reserved.
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Use of this source code is governed by a BSD-style license that can be
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// found in the LICENSE file.
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant#include "sync/test/local_sync_test_server.h"
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "base/command_line.h"
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "base/path_service.h"
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "base/strings/string_number_conversions.h"
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "base/values.h"
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "net/test/python_utils.h"
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "net/test/spawned_test_server/spawned_test_server.h"
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantnamespace syncer {
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantLocalSyncTestServer::LocalSyncTestServer()
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : LocalTestServer(
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        net::SpawnedTestServer::TYPE_HTTP,  // Sync uses the HTTP scheme.
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        net::SpawnedTestServer::kLocalhost,
2083e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow        base::FilePath()),
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      xmpp_port_(0) {}
22b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow
23171771a9f5fd9e5dbbc6d6a2d9dfb0d8532b5155Howard HinnantLocalSyncTestServer::LocalSyncTestServer(uint16 port, uint16 xmpp_port)
24b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    : LocalTestServer(
25b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow        net::SpawnedTestServer::TYPE_HTTP,  // Sync uses the HTTP scheme.
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        net::SpawnedTestServer::kLocalhost,
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        base::FilePath()),
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      xmpp_port_(xmpp_port) {
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  SetPort(port);
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantLocalSyncTestServer::~LocalSyncTestServer() {}
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool LocalSyncTestServer::AddCommandLineArguments(
35b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    base::CommandLine* command_line) const {
36b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  if (!LocalTestServer::AddCommandLineArguments(command_line))
37b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    return false;
38b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  if (xmpp_port_ != 0) {
39b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    std::string xmpp_port_str = base::IntToString(xmpp_port_);
40b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    command_line->AppendArg("--xmpp-port=" + xmpp_port_str);
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  }
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  return true;
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
44b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow
45b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clowbool LocalSyncTestServer::GetTestServerPath(
46b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    base::FilePath* testserver_path) const {
47b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  base::FilePath testserver_dir;
48b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  if (!PathService::Get(base::DIR_SOURCE_ROOT, &testserver_dir)) {
49b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    LOG(ERROR) << "Failed to get DIR_SOURCE_ROOT";
50b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    return false;
51b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  }
52b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  testserver_dir = testserver_dir.Append(FILE_PATH_LITERAL("sync"))
53b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow                                 .Append(FILE_PATH_LITERAL("tools"))
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                                 .Append(FILE_PATH_LITERAL("testserver"));
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  *testserver_path =
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      testserver_dir.Append(FILE_PATH_LITERAL("sync_testserver.py"));
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  return true;
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool LocalSyncTestServer::GetTestScriptPath(
62b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    const base::FilePath::StringType& test_script_name,
63b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    base::FilePath* test_script_path) const {
64b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  base::FilePath testserver_path;
65b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  if (!GetTestServerPath(&testserver_path))
66b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    return false;
67b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  *test_script_path = testserver_path.DirName().Append(test_script_name);
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  return true;
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool LocalSyncTestServer::SetPythonPath() const {
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  if (!LocalTestServer::SetPythonPath())
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    return false;
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  // Add the net/tools/testserver directory to the path, so that testserver_base
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  // can be imported.
77b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  base::FilePath net_testserver_path;
78b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  if (!LocalTestServer::GetTestServerPath(&net_testserver_path)) {
79b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    LOG(ERROR) << "Failed to get net testserver path.";
80b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow    return false;
81b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  }
82b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  AppendToPythonPath(net_testserver_path.DirName());
83b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow
84b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  // Locate the Python code generated by the sync protocol buffers compiler.
85b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  base::FilePath pyproto_dir;
86b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow  if (!GetPyProtoPath(&pyproto_dir)) {
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    LOG(WARNING) << "Cannot find pyproto dir for generated code. "
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                 << "Testserver features that rely on it will not work";
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    return true;
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  }
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  AppendToPythonPath(pyproto_dir.AppendASCII("sync").AppendASCII("protocol"));
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  return true;
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
95b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow}  // namespace syncer
96b30abdd07a6c6374f4716b7e3a2e343f5db77961Marshall Clow