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