12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/test/local_sync_test_server.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/test/python_utils.h" 12b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace syncer { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LocalSyncTestServer::LocalSyncTestServer() 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : LocalTestServer( 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::TYPE_HTTP, // Sync uses the HTTP scheme. 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath()), 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) xmpp_port_(0) {} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LocalSyncTestServer::LocalSyncTestServer(uint16 port, uint16 xmpp_port) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : LocalTestServer( 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::TYPE_HTTP, // Sync uses the HTTP scheme. 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath()), 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) xmpp_port_(xmpp_port) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetPort(port); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LocalSyncTestServer::~LocalSyncTestServer() {} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LocalSyncTestServer::AddCommandLineArguments( 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::CommandLine* command_line) const { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!LocalTestServer::AddCommandLineArguments(command_line)) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (xmpp_port_ != 0) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string xmpp_port_str = base::IntToString(xmpp_port_); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendArg("--xmpp-port=" + xmpp_port_str); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LocalSyncTestServer::GetTestServerPath( 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath* testserver_path) const { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath testserver_dir; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!PathService::Get(base::DIR_SOURCE_ROOT, &testserver_dir)) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Failed to get DIR_SOURCE_ROOT"; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testserver_dir = testserver_dir.Append(FILE_PATH_LITERAL("sync")) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Append(FILE_PATH_LITERAL("tools")) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Append(FILE_PATH_LITERAL("testserver")); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *testserver_path = 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testserver_dir.Append(FILE_PATH_LITERAL("sync_testserver.py")); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LocalSyncTestServer::GetTestScriptPath( 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::StringType& test_script_name, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath* test_script_path) const { 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath testserver_path; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!GetTestServerPath(&testserver_path)) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *test_script_path = testserver_path.DirName().Append(test_script_name); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LocalSyncTestServer::SetPythonPath() const { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!LocalTestServer::SetPythonPath()) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the net/tools/testserver directory to the path, so that testserver_base 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // can be imported. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath net_testserver_path; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!LocalTestServer::GetTestServerPath(&net_testserver_path)) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Failed to get net testserver path."; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendToPythonPath(net_testserver_path.DirName()); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Locate the Python code generated by the sync protocol buffers compiler. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath pyproto_dir; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!GetPyProtoPath(&pyproto_dir)) { 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Cannot find pyproto dir for generated code. " 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << "Testserver features that rely on it will not work"; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendToPythonPath(pyproto_dir.AppendASCII("sync").AppendASCII("protocol")); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace syncer 96