diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-20 16:45:38 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-20 16:45:38 +0000 |
commit | 938347ece4d16876669c78acebd58d3053191ef5 (patch) | |
tree | df79c381fe4da371e7787babef5e2cb19ff2c6aa /net/test | |
parent | 62166f3570128e609f7fd168c4a1e64ab1451093 (diff) | |
download | chromium_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')
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"), |