Commit 8028fd8b authored by Matt Menke's avatar Matt Menke Committed by Commit Bot

Make remote_test_server use EmbeddedTestServer in HTTP mode.

SpawnedTestServer is being slowly (very slowly) phased out, since it
has been responsible for a large number of issues leading to flake on
the tree, and doesn't work on mobile platforms.

Bug: 492672
Change-Id: I106c01f5fb47a11655274f59da0ca622d36a0508
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2510794Reviewed-by: default avatarSteven Valdez <svaldez@chromium.org>
Commit-Queue: Matt Menke <mmenke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#823221}
parent 7ec0caac
......@@ -819,9 +819,7 @@ void EmbeddedTestServer::ServeFilesFromSourceDirectory(
void EmbeddedTestServer::ServeFilesFromSourceDirectory(
const base::FilePath& relative) {
base::FilePath test_data_dir;
CHECK(base::PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir));
ServeFilesFromDirectory(test_data_dir.Append(relative));
ServeFilesFromDirectory(GetFullPathFromSourceDirectory(relative));
}
void EmbeddedTestServer::AddDefaultHandlers(const base::FilePath& directory) {
......@@ -833,6 +831,13 @@ void EmbeddedTestServer::AddDefaultHandlers() {
RegisterDefaultHandlers(this);
}
base::FilePath EmbeddedTestServer::GetFullPathFromSourceDirectory(
const base::FilePath& relative) {
base::FilePath test_data_dir;
CHECK(base::PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir));
return test_data_dir.Append(relative);
}
void EmbeddedTestServer::RegisterRequestHandler(
const HandleRequestCallback& callback) {
DCHECK(!io_thread_)
......
......@@ -425,6 +425,11 @@ class EmbeddedTestServer {
// |directory| directory, relative to DIR_SOURCE_ROOT.
void AddDefaultHandlers(const base::FilePath& directory);
// Returns the directory that files will be served from if |relative| is
// passed to ServeFilesFromSourceDirectory().
static base::FilePath GetFullPathFromSourceDirectory(
const base::FilePath& relative);
// Adds all default handlers except, without serving additional files from any
// directory.
void AddDefaultHandlers();
......
......@@ -14,6 +14,7 @@
#include "base/strings/utf_string_conversions.h"
#include "base/task/single_thread_task_executor.h"
#include "base/test/test_timeouts.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/spawned_test_server/spawned_test_server.h"
static void PrintUsage() {
......@@ -47,9 +48,13 @@ int main(int argc, const char* argv[]) {
return -1;
}
// If populated, EmbeddedTestServer is used instead of the SpawnedTestServer.
base::Optional<net::test_server::EmbeddedTestServer::Type>
embedded_test_server_type;
net::SpawnedTestServer::Type server_type;
if (command_line->HasSwitch("http")) {
server_type = net::SpawnedTestServer::TYPE_HTTP;
embedded_test_server_type = net::test_server::EmbeddedTestServer::TYPE_HTTP;
} else if (command_line->HasSwitch("https")) {
server_type = net::SpawnedTestServer::TYPE_HTTPS;
} else if (command_line->HasSwitch("ws")) {
......@@ -61,15 +66,18 @@ int main(int argc, const char* argv[]) {
} else {
// If no scheme switch is specified, select http or https scheme.
// TODO(toyoshim): Remove this estimation.
if (command_line->HasSwitch("ssl-cert"))
if (command_line->HasSwitch("ssl-cert")) {
server_type = net::SpawnedTestServer::TYPE_HTTPS;
else
server_type = net::SpawnedTestServer::TYPE_HTTP;
} else {
embedded_test_server_type =
net::test_server::EmbeddedTestServer::TYPE_HTTP;
}
}
net::SpawnedTestServer::SSLOptions ssl_options;
if (command_line->HasSwitch("ssl-cert")) {
if (!net::SpawnedTestServer::UsingSSL(server_type)) {
if (!net::SpawnedTestServer::UsingSSL(server_type) ||
embedded_test_server_type.has_value()) {
printf("Error: --ssl-cert is specified on non-secure scheme\n");
PrintUsage();
return -1;
......@@ -98,6 +106,33 @@ int main(int argc, const char* argv[]) {
return -1;
}
base::FilePath full_path =
net::test_server::EmbeddedTestServer::GetFullPathFromSourceDirectory(
doc_root);
if (!base::DirectoryExists(full_path)) {
printf("Error: invalid doc root: \"%s\" does not exist!\n",
base::UTF16ToUTF8(full_path.LossyDisplayName()).c_str());
return -1;
}
// Use EmbeddedTestServer, if it supports the provided configuration.
if (embedded_test_server_type.has_value()) {
net::test_server::EmbeddedTestServer embedded_test_server(
*embedded_test_server_type);
embedded_test_server.AddDefaultHandlers(doc_root);
if (!embedded_test_server.Start()) {
printf("Error: failed to start embedded test server. Exiting.\n");
return -1;
}
printf("Embedded test server running at %s (type ctrl+c to exit)\n",
embedded_test_server.host_port_pair().ToString().c_str());
base::RunLoop().Run();
return 0;
}
// Otherwise, use the SpawnedTestServer.
std::unique_ptr<net::SpawnedTestServer> test_server;
if (net::SpawnedTestServer::UsingSSL(server_type)) {
test_server.reset(
......@@ -111,16 +146,8 @@ int main(int argc, const char* argv[]) {
return -1;
}
if (!base::DirectoryExists(test_server->document_root())) {
printf("Error: invalid doc root: \"%s\" does not exist!\n",
base::UTF16ToUTF8(
test_server->document_root().LossyDisplayName()).c_str());
return -1;
}
printf("testserver running at %s (type ctrl+c to exit)\n",
test_server->host_port_pair().ToString().c_str());
base::RunLoop().Run();
return 0;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment