Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7825)

Unified Diff: chrome/browser/google_apis/test_server/http_server_unittest.cc

Issue 11416030: google_apis: Add GetURL() to test_server::HttpServer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/google_apis/test_server/http_server_unittest.cc
diff --git a/chrome/browser/google_apis/test_server/http_server_unittest.cc b/chrome/browser/google_apis/test_server/http_server_unittest.cc
index 2fd1f51ff5ee6abe813b2b090166ec937f2f0cb3..9e5492ae416b3625999429d82ea765236a3b0ae8 100644
--- a/chrome/browser/google_apis/test_server/http_server_unittest.cc
+++ b/chrome/browser/google_apis/test_server/http_server_unittest.cc
@@ -4,9 +4,12 @@
#include "chrome/browser/google_apis/test_server/http_server.h"
+#include "base/stringprintf.h"
#include "base/threading/thread.h"
+#include "chrome/browser/google_apis/test_util.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_browser_thread.h"
+#include "net/http/http_response_headers.h"
#include "net/url_request/url_fetcher.h"
#include "net/url_request/url_fetcher_delegate.h"
#include "net/url_request/url_request_test_util.h"
@@ -17,23 +20,35 @@ namespace test_server {
namespace {
-// Helper function to receive content of a response returned after invoking
-// |fetcher|.
-std::string GetFetcherResponseContent(const net::URLFetcher* fetcher) {
+// Gets the content from the given URLFetcher.
+std::string GetContentFromFetcher(const net::URLFetcher& fetcher) {
std::string result;
- const bool success = fetcher->GetResponseAsString(&result);
+ const bool success = fetcher.GetResponseAsString(&result);
EXPECT_TRUE(success);
return result;
}
+// Gets the content type from the given URLFetcher.
+std::string GetContentTypeFromFetcher(const net::URLFetcher& fetcher) {
+ const net::HttpResponseHeaders* headers = fetcher.GetResponseHeaders();
+ if (headers) {
+ std::string content_type;
+ if (headers->GetMimeType(&content_type))
+ return content_type;
+ }
+ return "";
+}
+
} // namespace
class HttpServerTest : public testing::Test,
public net::URLFetcherDelegate {
public:
HttpServerTest()
- : ui_thread_(content::BrowserThread::UI, &message_loop_),
- io_thread_(content::BrowserThread::IO) {
+ : num_responses_received_(0),
+ num_responses_expected_(0),
+ ui_thread_(content::BrowserThread::UI, &message_loop_),
+ io_thread_(content::BrowserThread::IO) {
}
virtual void SetUp() OVERRIDE {
@@ -43,102 +58,179 @@ class HttpServerTest : public testing::Test,
content::BrowserThread::GetMessageLoopProxyForThread(
content::BrowserThread::IO));
- server_.reset(new HttpServer());
- ASSERT_TRUE(server_->InitializeAndWaitUntilReady());
+ ASSERT_TRUE(server_.InitializeAndWaitUntilReady());
}
virtual void TearDown() OVERRIDE {
- server_->ShutdownAndWaitUntilComplete();
+ server_.ShutdownAndWaitUntilComplete();
}
// net::URLFetcherDelegate override.
virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE {
- MessageLoop::current()->Quit();
+ ++num_responses_received_;
+ if (num_responses_received_ == num_responses_expected_)
+ message_loop_.Quit();
+ }
+
+ // Waits until the specified number of responses are received.
+ void WaitForResponses(int num_responses) {
+ num_responses_received_ = 0;
+ num_responses_expected_ = num_responses;
+ message_loop_.Run(); // Will be terminated in OnURLFetchComplete().
}
protected:
+ int num_responses_received_;
+ int num_responses_expected_;
MessageLoopForUI message_loop_;
content::TestBrowserThread ui_thread_;
content::TestBrowserThread io_thread_;
scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
- scoped_ptr<HttpServer> server_;
+ HttpServer server_;
};
-TEST_F(HttpServerTest, TextRequest) {
- // The simplest text response with an auto generated url.
- GURL url1 = server_->RegisterTextResponse("test1",
- "Raspberry chocolate",
- "text/html",
- SUCCESS);
- ASSERT_NE("", url1.spec());
-
- GURL url2 = server_->RegisterTextResponse("test2",
- "Vanilla chocolate",
- "text/html",
- SUCCESS);
- ASSERT_NE("", url2.spec());
-
- // Response with a specified url and response code.
- GURL url3 = server_->RegisterTextResponse(
- "chocolate/bar.html", // URL
- "No chocolates", // Dummy response text.
- "text/plain", // Content type.
- NOT_FOUND); // Response code (404 here).
- ASSERT_NE("", url3.spec());
-
- // Set up fetchers.
+TEST_F(HttpServerTest, GetBaseURL) {
+ EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/", server_.port()),
+ server_.GetBaseURL().spec());
+}
+
+TEST_F(HttpServerTest, GetURL) {
+ EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/path?query=foo",
+ server_.port()),
+ server_.GetURL("/path?query=foo").spec());
+}
+
+TEST_F(HttpServerTest, RegisterDefaultResponse) {
+ HttpResponse http_response;
+ http_response.set_code(MOVED);
hashimoto 2012/11/16 05:38:10 Please add a brief description about why you chose
satorux1 2012/11/16 05:56:44 Done.
+ http_response.set_content("<b>Moved!</b>");
hashimoto 2012/11/16 05:38:10 How about making this data a constant? The same go
satorux1 2012/11/16 05:56:44 It's rather repetitive, but I think just using str
+ http_response.set_content_type("text/html");
hashimoto 2012/11/16 05:38:10 ditto.
+ http_response.AddCustomHeader("Server", "test server");
hashimoto 2012/11/16 05:38:10 ditto.
+ server_.RegisterDefaultResponse("/test", http_response);
hashimoto 2012/11/16 05:38:10 ditto.
+
+ scoped_ptr<net::URLFetcher> fetcher(
+ net::URLFetcher::Create(server_.GetURL("/test"),
+ net::URLFetcher::GET,
+ this));
+ fetcher->SetRequestContext(request_context_getter_.get());
+ fetcher->Start();
+ WaitForResponses(1);
+
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
+ EXPECT_EQ(301, fetcher->GetResponseCode());
hashimoto 2012/11/16 05:38:10 Why are you using MOVED above and 301 here? The sa
satorux1 2012/11/16 05:56:44 Done.
+ EXPECT_EQ("<b>Moved!</b>", GetContentFromFetcher(*fetcher));
+ EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher));
+ const net::HttpResponseHeaders* headers = fetcher->GetResponseHeaders();
+ ASSERT_TRUE(headers);
+ ASSERT_TRUE(headers->HasHeaderValue("Server", "test server"));
+
hashimoto 2012/11/16 05:38:10 nit: No need have a blank line here.
satorux1 2012/11/16 05:56:44 Done.
+}
+
+TEST_F(HttpServerTest, RegisterTextResponse) {
+ server_.RegisterTextResponse("/test",
+ "Raspberry chocolate",
+ "text/plain",
+ SUCCESS);
+
+ scoped_ptr<net::URLFetcher> fetcher(
+ net::URLFetcher::Create(server_.GetURL("/test"),
+ net::URLFetcher::GET,
+ this));
+ fetcher->SetRequestContext(request_context_getter_.get());
+ fetcher->Start();
+ WaitForResponses(1);
+
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
+ EXPECT_EQ(200, fetcher->GetResponseCode());
+ EXPECT_EQ("Raspberry chocolate", GetContentFromFetcher(*fetcher));
+ EXPECT_EQ("text/plain", GetContentTypeFromFetcher(*fetcher));
+}
+
+TEST_F(HttpServerTest, RegisterFileResponse) {
+ server_.RegisterFileResponse(
+ "/test",
+ test_util::GetTestFilePath("gdata/testfile.txt"),
+ "text/plain",
+ SUCCESS);
+
+ scoped_ptr<net::URLFetcher> fetcher(
+ net::URLFetcher::Create(server_.GetURL("/test"),
+ net::URLFetcher::GET,
+ this));
+ fetcher->SetRequestContext(request_context_getter_.get());
+ fetcher->Start();
+ WaitForResponses(1);
+
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
+ EXPECT_EQ(200, fetcher->GetResponseCode());
+ EXPECT_EQ("test file\n", GetContentFromFetcher(*fetcher));
+ EXPECT_EQ("text/plain", GetContentTypeFromFetcher(*fetcher));
+}
+
+TEST_F(HttpServerTest, DefaultNotFoundResponse) {
+ scoped_ptr<net::URLFetcher> fetcher(
+ net::URLFetcher::Create(server_.GetBaseURL(),
hashimoto 2012/11/16 05:38:10 Instead of GetBaseURL, how about using something l
satorux1 2012/11/16 05:56:44 Done.
+ net::URLFetcher::GET,
+ this));
+ fetcher->SetRequestContext(request_context_getter_.get());
+
+ fetcher->Start();
+ WaitForResponses(1);
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
+ EXPECT_EQ(404, fetcher->GetResponseCode());
+}
+
+TEST_F(HttpServerTest, ConcurrentFetches) {
+ server_.RegisterTextResponse("/test1",
+ "Raspberry chocolate",
+ "text/html",
+ SUCCESS);
+ server_.RegisterTextResponse("/test2",
+ "Vanilla chocolate",
+ "text/html",
+ SUCCESS);
+ server_.RegisterTextResponse("/test3",
+ "No chocolates",
+ "text/plain",
+ NOT_FOUND);
+
scoped_ptr<net::URLFetcher> fetcher1 = scoped_ptr<net::URLFetcher>(
- net::URLFetcher::Create(url1,
+ net::URLFetcher::Create(server_.GetURL("/test1"),
net::URLFetcher::GET,
this));
fetcher1->SetRequestContext(request_context_getter_.get());
scoped_ptr<net::URLFetcher> fetcher2 = scoped_ptr<net::URLFetcher>(
- net::URLFetcher::Create(url2,
+ net::URLFetcher::Create(server_.GetURL("/test2"),
net::URLFetcher::GET,
this));
fetcher2->SetRequestContext(request_context_getter_.get());
scoped_ptr<net::URLFetcher> fetcher3 = scoped_ptr<net::URLFetcher>(
- net::URLFetcher::Create(url3,
+ net::URLFetcher::Create(server_.GetURL("/test3"),
net::URLFetcher::GET,
this));
fetcher3->SetRequestContext(request_context_getter_.get());
- // Test.
+ // Fetch the three URLs concurrently.
fetcher1->Start();
- MessageLoop::current()->Run();
+ fetcher2->Start();
+ fetcher3->Start();
+ WaitForResponses(3);
+
EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher1->GetStatus().status());
EXPECT_EQ(200, fetcher1->GetResponseCode());
- EXPECT_EQ("Raspberry chocolate", GetFetcherResponseContent(fetcher1.get()));
+ EXPECT_EQ("Raspberry chocolate", GetContentFromFetcher(*fetcher1));
+ EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher1));
- fetcher2->Start();
- MessageLoop::current()->Run();
EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher1->GetStatus().status());
hashimoto 2012/11/16 05:38:10 fetcher2?
satorux1 2012/11/16 05:56:44 Good catch! Done.
EXPECT_EQ(200, fetcher2->GetResponseCode());
- EXPECT_EQ("Vanilla chocolate", GetFetcherResponseContent(fetcher2.get()));
+ EXPECT_EQ("Vanilla chocolate", GetContentFromFetcher(*fetcher2));
+ EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher2));
- fetcher3->Start();
- MessageLoop::current()->Run();
EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher1->GetStatus().status());
hashimoto 2012/11/16 05:38:10 fetcher3?
satorux1 2012/11/16 05:56:44 Done.
EXPECT_EQ(404, fetcher3->GetResponseCode());
- EXPECT_EQ("No chocolates", GetFetcherResponseContent(fetcher3.get()));
-}
-
-TEST_F(HttpServerTest, DefaultNotFoundResponse) {
- ASSERT_NE("", server_->GetBaseURL().spec());
-
- scoped_ptr<net::URLFetcher> fetcher = scoped_ptr<net::URLFetcher>(
- net::URLFetcher::Create(server_->GetBaseURL(),
- net::URLFetcher::GET,
- this));
- fetcher->SetRequestContext(request_context_getter_.get());
-
- fetcher->Start();
- MessageLoop::current()->Run();
- EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
- EXPECT_EQ(404, fetcher->GetResponseCode());
+ EXPECT_EQ("No chocolates", GetContentFromFetcher(*fetcher3));
+ EXPECT_EQ("text/plain", GetContentTypeFromFetcher(*fetcher3));
}
-// TODO(mtomasz): Write a test for a file response.
-
} // namespace test_server
} // namespace google_apis

Powered by Google App Engine
This is Rietveld 408576698