summaryrefslogtreecommitdiffstats
path: root/net/test
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-20 16:45:38 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-20 16:45:38 +0000
commit938347ece4d16876669c78acebd58d3053191ef5 (patch)
treedf79c381fe4da371e7787babef5e2cb19ff2c6aa /net/test
parent62166f3570128e609f7fd168c4a1e64ab1451093 (diff)
downloadchromium_src-938347ece4d16876669c78acebd58d3053191ef5.zip
chromium_src-938347ece4d16876669c78acebd58d3053191ef5.tar.gz
chromium_src-938347ece4d16876669c78acebd58d3053191ef5.tar.bz2
GTTF: Convert WebContentsImplBrowserTest to use EmbeddedTestServer.
This eliminates a whole class of problems with SpawnedTestServer failing to start. BUG=96594, 230200 R=avi@chromium.org, satorux@chromium.org Review URL: https://codereview.chromium.org/14914010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@201099 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/test')
-rw-r--r--net/test/embedded_test_server/embedded_test_server.cc34
-rw-r--r--net/test/embedded_test_server/embedded_test_server.h10
-rw-r--r--net/test/embedded_test_server/embedded_test_server_unittest.cc20
3 files changed, 64 insertions, 0 deletions
diff --git a/net/test/embedded_test_server/embedded_test_server.cc b/net/test/embedded_test_server/embedded_test_server.cc
index c42ff63..deeed7d 100644
--- a/net/test/embedded_test_server/embedded_test_server.cc
+++ b/net/test/embedded_test_server/embedded_test_server.cc
@@ -5,10 +5,14 @@
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "base/bind.h"
+#include "base/files/file_path.h"
+#include "base/file_util.h"
+#include "base/path_service.h"
#include "base/run_loop.h"
#include "base/stl_util.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
+#include "base/threading/thread_restrictions.h"
#include "net/test/embedded_test_server/http_connection.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
@@ -34,6 +38,27 @@ scoped_ptr<HttpResponse> HandleDefaultRequest(const GURL& url,
return scoped_ptr<HttpResponse>(new HttpResponse(response));
}
+// Handles |request| by serving a file from under |server_root|.
+scoped_ptr<HttpResponse> HandleFileRequest(const base::FilePath& server_root,
+ const HttpRequest& request) {
+ // This is a test-only server. Ignore I/O thread restrictions.
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
+
+ // Trim the first byte ('/').
+ std::string request_path(request.relative_url.substr(1));
+
+ std::string file_contents;
+ if (!file_util::ReadFileToString(
+ server_root.AppendASCII(request_path), &file_contents)) {
+ return scoped_ptr<HttpResponse>(NULL);
+ }
+
+ scoped_ptr<HttpResponse> http_response(new HttpResponse);
+ http_response->set_code(net::test_server::SUCCESS);
+ http_response->set_content(file_contents);
+ return http_response.Pass();
+}
+
} // namespace
HttpListenSocket::HttpListenSocket(const SocketDescriptor socket_descriptor,
@@ -62,6 +87,10 @@ EmbeddedTestServer::EmbeddedTestServer(
EmbeddedTestServer::~EmbeddedTestServer() {
DCHECK(thread_checker_.CalledOnValidThread());
+
+ if (Started() && !ShutdownAndWaitUntilComplete()) {
+ LOG(ERROR) << "EmbeddedTestServer failed to shut down.";
+ }
}
bool EmbeddedTestServer::InitializeAndWaitUntilReady() {
@@ -159,6 +188,11 @@ GURL EmbeddedTestServer::GetURL(const std::string& relative_url) const {
return base_url_.Resolve(relative_url);
}
+void EmbeddedTestServer::ServeFilesFromDirectory(
+ const base::FilePath& directory) {
+ RegisterRequestHandler(base::Bind(&HandleFileRequest, directory));
+}
+
void EmbeddedTestServer::RegisterRequestHandler(
const HandleRequestCallback& callback) {
request_handlers_.push_back(callback);
diff --git a/net/test/embedded_test_server/embedded_test_server.h b/net/test/embedded_test_server/embedded_test_server.h
index 7f85374..6966227 100644
--- a/net/test/embedded_test_server/embedded_test_server.h
+++ b/net/test/embedded_test_server/embedded_test_server.h
@@ -17,6 +17,10 @@
#include "googleurl/src/gurl.h"
#include "net/socket/tcp_listen_socket.h"
+namespace base {
+class FilePath;
+}
+
namespace net {
namespace test_server {
@@ -107,6 +111,12 @@ class EmbeddedTestServer : public StreamListenSocket::Delegate {
// Returns the port number used by the server.
int port() const { return port_; }
+ // Registers request handler which serves files from |directory|.
+ // For instance, a request to "/foo.html" is served by "foo.html" under
+ // |directory|. Files under sub directories are also handled in the same way
+ // (i.e. "/foo/bar.html" is served by "foo/bar.html" under |directory|).
+ void ServeFilesFromDirectory(const base::FilePath& directory);
+
// The most general purpose method. Any request processing can be added using
// this method. Takes ownership of the object. The |callback| is called
// on UI thread.
diff --git a/net/test/embedded_test_server/embedded_test_server_unittest.cc b/net/test/embedded_test_server/embedded_test_server_unittest.cc
index b0af14f..1993ef0 100644
--- a/net/test/embedded_test_server/embedded_test_server_unittest.cc
+++ b/net/test/embedded_test_server/embedded_test_server_unittest.cc
@@ -146,6 +146,26 @@ TEST_F(EmbeddedTestServerTest, RegisterRequestHandler) {
EXPECT_EQ("/test?q=foo", request_relative_url_);
}
+TEST_F(EmbeddedTestServerTest, ServeFilesFromDirectory) {
+ base::FilePath src_dir;
+ ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir));
+ server_->ServeFilesFromDirectory(
+ src_dir.AppendASCII("net").AppendASCII("data"));
+
+ scoped_ptr<URLFetcher> fetcher(
+ URLFetcher::Create(server_->GetURL("/test.html"),
+ URLFetcher::GET,
+ this));
+ fetcher->SetRequestContext(request_context_getter_.get());
+ fetcher->Start();
+ WaitForResponses(1);
+
+ EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
+ EXPECT_EQ(SUCCESS, fetcher->GetResponseCode());
+ EXPECT_EQ("<p>Hello World!</p>", GetContentFromFetcher(*fetcher));
+ EXPECT_EQ("", GetContentTypeFromFetcher(*fetcher));
+}
+
TEST_F(EmbeddedTestServerTest, DefaultNotFoundResponse) {
scoped_ptr<URLFetcher> fetcher(
URLFetcher::Create(server_->GetURL("/non-existent"),