| Index: chrome/browser/chromeos/gdata/test_servers/http_test_server.h
|
| diff --git a/chrome/browser/chromeos/gdata/test_servers/http_test_server.h b/chrome/browser/chromeos/gdata/test_servers/http_test_server.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..73972427833bf8ede94e6b3fdbbebfa9a92f98f2
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/gdata/test_servers/http_test_server.h
|
| @@ -0,0 +1,147 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_CHROMEOS_GDATA_TEST_SERVERS_HTTP_TEST_SERVER_H_
|
| +#define CHROME_BROWSER_CHROMEOS_GDATA_TEST_SERVERS_HTTP_TEST_SERVER_H_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +#include "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| +#include "base/file_path.h"
|
| +#include "chrome/browser/chromeos/gdata/test_servers/http_connection.h"
|
| +#include "chrome/browser/chromeos/gdata/test_servers/http_response.h"
|
| +#include "chrome/browser/chromeos/gdata/test_servers/http_server.h"
|
| +
|
| +namespace gdata {
|
| +namespace test_servers {
|
| +
|
| +// Interface for general request handlers.
|
| +class ResponseProviderInterface {
|
| + public:
|
| + ResponseProviderInterface() {}
|
| + virtual ~ResponseProviderInterface() {}
|
| +
|
| + // If returns true, then ProcessRequest will be called. If false, then
|
| + // other request handlers will be tried (if available).
|
| + // Note, that if another registered response provider handler the request
|
| + // earlier, then this may not be called at all.
|
| + virtual bool CanHandleRequest(HttpRequest* request) = 0;
|
| +
|
| + // Should return a valid HTTP response. It will be passed back to client.
|
| + // This method is called only if previous CanHandleRequest returns true.
|
| + virtual scoped_ptr<HttpResponse> ProcessRequest(
|
| + HttpRequest* request) = 0;
|
| +};
|
| +
|
| +// This class is a default implementation of ResponseProviderInterface which
|
| +// always returns the same predefined response if the |relative_path|
|
| +// is matching the request.
|
| +class DefaultResponseProvider: public ResponseProviderInterface {
|
| + public:
|
| + DefaultResponseProvider(const GURL& request_url,
|
| + const HttpResponse& default_response);
|
| + virtual ~DefaultResponseProvider();
|
| +
|
| + virtual bool CanHandleRequest(HttpRequest* request) OVERRIDE;
|
| + virtual scoped_ptr<HttpResponse> ProcessRequest(
|
| + HttpRequest* request) OVERRIDE;
|
| +
|
| + private:
|
| + const GURL request_url_;
|
| + const HttpResponse default_response_;
|
| +};
|
| +
|
| +// Class providing a HTTP server for testing purpose. The common use case is
|
| +// below:
|
| +//
|
| +// scoped_ptr<HttpTestServer> test_server_;
|
| +// GURL hello_world_url_;
|
| +// GURL file_url_;
|
| +// (...)
|
| +// void SetUp() {
|
| +// test_server_.reset(new HttpTestServer());
|
| +// hello_world_url = test_server->RegisterTextResponse("<b>Hello world!</b>",
|
| +// "text/html");
|
| +// metadata_url = test_server->RegisterFileResponse(
|
| +// "metadata/file.doc")
|
| +// "testing/data/metadata.xml",
|
| +// "text/xml",
|
| +// 200);
|
| +// }
|
| +class HttpTestServer: private HttpConnectionDelegate {
|
| + public:
|
| + // If we want to start the server pass true. Otherwise, you have to call
|
| + // the Start() method.
|
| + explicit HttpTestServer(bool start_on_create);
|
| + virtual ~HttpTestServer();
|
| +
|
| + // Starts the HTTP server on 127.0.0.1 ip, random port. If the port is not
|
| + // available, another one is tried. If all the retries fails, then false
|
| + // is returned. On success - true.
|
| + bool Start();
|
| +
|
| + // Provides URL to the server which is useful when general purpose provider
|
| + // is registered.
|
| + virtual GURL GetBaseURL();
|
| +
|
| + // Provider URL to a resource causing a specified response code.
|
| + virtual GURL GetErrorURL(RESPONSE_CODE code);
|
| +
|
| + // The most general purpose method. Any request processing can be added using
|
| + // this method. Takes ownership of the object.
|
| + virtual void RegisterResponseProvider(ResponseProviderInterface& provider);
|
| +
|
| + // Used to provide the same predefined response for the requests matching
|
| + // the |relative_path|. Should be used if any custom data, such as additional
|
| + // headers should be send from the server.
|
| + virtual GURL RegisterDefaultResponse(
|
| + const std::string& relative_path,
|
| + const HttpResponse& default_response);
|
| +
|
| + // Registers a simple text response.
|
| + virtual GURL RegisterTextResponse(
|
| + const std::string& relative_path,
|
| + const std::string& content,
|
| + const std::string& content_type,
|
| + const RESPONSE_CODE response_code);
|
| + // Registers a simple text response with automatically generated unique url.
|
| + // The response code is always 200.
|
| + virtual GURL RegisterTextResponse(const std::string& content,
|
| + const std::string& content_type);
|
| +
|
| + // Registers a simple file response. The file is loaded into memory.
|
| + virtual GURL RegisterFileResponse(
|
| + const std::string& relative_path,
|
| + const FilePath& file_path,
|
| + const std::string& content_type,
|
| + const RESPONSE_CODE response_code);
|
| + // Registers a simple file response with automatically generated unique url.
|
| + // The response code is always 200.
|
| + virtual GURL RegisterFileResponse(
|
| + const FilePath& file_path,
|
| + const std::string& content_type);
|
| +
|
| + private:
|
| + // Implements HttpConnectionDelegate.
|
| + virtual bool HandleRequest(HttpConnection& connection,
|
| + scoped_ptr<HttpRequest> request) OVERRIDE;
|
| +
|
| + // Generates unique identifier to make unique urls.
|
| + virtual std::string GenerateUniqueIdentifier();
|
| +
|
| + int port_;
|
| + GURL base_url_;
|
| + int last_unique_id_;
|
| + scoped_refptr<HttpServer> server_;
|
| + // Owns the objects in the collection.
|
| + std::vector<ResponseProviderInterface*> response_providers_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(HttpTestServer);
|
| +};
|
| +
|
| +} // namespace test_servers
|
| +} // namespace gdata
|
| +
|
| +#endif // CHROME_BROWSER_CHROMEOS_GDATA_TEST_SERVERS_HTTP_TEST_SERVER_H_
|
|
|