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

Side by Side Diff: chrome/browser/google_apis/test_server/http_server_unittest.cc

Issue 14365019: Break dependencies preventing move of test_server down to net. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixes Created 7 years, 8 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/google_apis/test_server/http_server.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/google_apis/test_server/http_server.h" 5 #include "chrome/browser/google_apis/test_server/http_server.h"
6 6
7 #include "base/stringprintf.h" 7 #include "base/stringprintf.h"
8 #include "base/threading/thread.h" 8 #include "base/threading/thread.h"
9 #include "chrome/browser/google_apis/test_server/http_request.h" 9 #include "chrome/browser/google_apis/test_server/http_request.h"
10 #include "chrome/browser/google_apis/test_server/http_response.h" 10 #include "chrome/browser/google_apis/test_server/http_response.h"
11 #include "chrome/browser/google_apis/test_util.h"
12 #include "content/public/browser/browser_thread.h"
13 #include "content/public/test/test_browser_thread.h"
14 #include "net/http/http_response_headers.h" 11 #include "net/http/http_response_headers.h"
15 #include "net/url_request/url_fetcher.h" 12 #include "net/url_request/url_fetcher.h"
16 #include "net/url_request/url_fetcher_delegate.h" 13 #include "net/url_request/url_fetcher_delegate.h"
17 #include "net/url_request/url_request_test_util.h" 14 #include "net/url_request/url_request_test_util.h"
18 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
19 16
20 namespace google_apis { 17 namespace google_apis {
21 namespace test_server { 18 namespace test_server {
22 19
23 namespace { 20 namespace {
(...skipping 18 matching lines...) Expand all
42 } 39 }
43 40
44 } // namespace 41 } // namespace
45 42
46 class HttpServerTest : public testing::Test, 43 class HttpServerTest : public testing::Test,
47 public net::URLFetcherDelegate { 44 public net::URLFetcherDelegate {
48 public: 45 public:
49 HttpServerTest() 46 HttpServerTest()
50 : num_responses_received_(0), 47 : num_responses_received_(0),
51 num_responses_expected_(0), 48 num_responses_expected_(0),
52 ui_thread_(content::BrowserThread::UI, &message_loop_), 49 io_thread_("io_thread") {
53 io_thread_(content::BrowserThread::IO) {
54 } 50 }
55 51
56 virtual void SetUp() OVERRIDE { 52 virtual void SetUp() OVERRIDE {
57 io_thread_.StartIOThread(); 53 base::Thread::Options thread_options;
54 thread_options.message_loop_type = MessageLoop::TYPE_IO;
55 ASSERT_TRUE(io_thread_.StartWithOptions(thread_options));
58 56
59 request_context_getter_ = new net::TestURLRequestContextGetter( 57 request_context_getter_ = new net::TestURLRequestContextGetter(
60 content::BrowserThread::GetMessageLoopProxyForThread( 58 io_thread_.message_loop_proxy());
61 content::BrowserThread::IO));
62 59
63 ASSERT_TRUE(server_.InitializeAndWaitUntilReady()); 60 server_.reset(new HttpServer(io_thread_.message_loop_proxy()));
61 ASSERT_TRUE(server_->InitializeAndWaitUntilReady());
64 } 62 }
65 63
66 virtual void TearDown() OVERRIDE { 64 virtual void TearDown() OVERRIDE {
67 server_.ShutdownAndWaitUntilComplete(); 65 ASSERT_TRUE(server_->ShutdownAndWaitUntilComplete());
68 } 66 }
69 67
70 // net::URLFetcherDelegate override. 68 // net::URLFetcherDelegate override.
71 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE { 69 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE {
72 ++num_responses_received_; 70 ++num_responses_received_;
73 if (num_responses_received_ == num_responses_expected_) 71 if (num_responses_received_ == num_responses_expected_)
74 message_loop_.Quit(); 72 message_loop_.Quit();
75 } 73 }
76 74
77 // Waits until the specified number of responses are received. 75 // Waits until the specified number of responses are received.
78 void WaitForResponses(int num_responses) { 76 void WaitForResponses(int num_responses) {
79 num_responses_received_ = 0; 77 num_responses_received_ = 0;
80 num_responses_expected_ = num_responses; 78 num_responses_expected_ = num_responses;
81 message_loop_.Run(); // Will be terminated in OnURLFetchComplete(). 79 message_loop_.Run(); // Will be terminated in OnURLFetchComplete().
82 } 80 }
83 81
84 // Handles |request| sent to |path| and returns the response per |content|, 82 // Handles |request| sent to |path| and returns the response per |content|,
85 // |content type|, and |code|. Saves the request URL for verification. 83 // |content type|, and |code|. Saves the request URL for verification.
86 scoped_ptr<HttpResponse> HandleRequest(const std::string& path, 84 scoped_ptr<HttpResponse> HandleRequest(const std::string& path,
87 const std::string& content, 85 const std::string& content,
88 const std::string& content_type, 86 const std::string& content_type,
89 ResponseCode code, 87 ResponseCode code,
90 const HttpRequest& request) { 88 const HttpRequest& request) {
91 request_relative_url_ = request.relative_url; 89 request_relative_url_ = request.relative_url;
92 90
93 GURL absolute_url = server_.GetURL(request.relative_url); 91 GURL absolute_url = server_->GetURL(request.relative_url);
94 if (absolute_url.path() == path) { 92 if (absolute_url.path() == path) {
95 scoped_ptr<HttpResponse> http_response(new HttpResponse); 93 scoped_ptr<HttpResponse> http_response(new HttpResponse);
96 http_response->set_code(code); 94 http_response->set_code(code);
97 http_response->set_content(content); 95 http_response->set_content(content);
98 http_response->set_content_type(content_type); 96 http_response->set_content_type(content_type);
99 return http_response.Pass(); 97 return http_response.Pass();
100 } 98 }
101 99
102 return scoped_ptr<HttpResponse>(); 100 return scoped_ptr<HttpResponse>();
103 } 101 }
104 102
105 protected: 103 protected:
106 int num_responses_received_; 104 int num_responses_received_;
107 int num_responses_expected_; 105 int num_responses_expected_;
108 std::string request_relative_url_; 106 std::string request_relative_url_;
109 MessageLoopForUI message_loop_; 107 base::Thread io_thread_;
110 content::TestBrowserThread ui_thread_; 108 MessageLoop message_loop_;
111 content::TestBrowserThread io_thread_;
112 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; 109 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
113 HttpServer server_; 110 scoped_ptr<HttpServer> server_;
114 }; 111 };
115 112
116 TEST_F(HttpServerTest, GetBaseURL) { 113 TEST_F(HttpServerTest, GetBaseURL) {
117 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/", server_.port()), 114 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/", server_->port()),
118 server_.base_url().spec()); 115 server_->base_url().spec());
119 } 116 }
120 117
121 TEST_F(HttpServerTest, GetURL) { 118 TEST_F(HttpServerTest, GetURL) {
122 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/path?query=foo", 119 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/path?query=foo",
123 server_.port()), 120 server_->port()),
124 server_.GetURL("/path?query=foo").spec()); 121 server_->GetURL("/path?query=foo").spec());
125 } 122 }
126 123
127 TEST_F(HttpServerTest, RegisterRequestHandler) { 124 TEST_F(HttpServerTest, RegisterRequestHandler) {
128 server_.RegisterRequestHandler(base::Bind(&HttpServerTest::HandleRequest, 125 server_->RegisterRequestHandler(base::Bind(&HttpServerTest::HandleRequest,
129 base::Unretained(this), 126 base::Unretained(this),
130 "/test", 127 "/test",
131 "<b>Worked!</b>", 128 "<b>Worked!</b>",
132 "text/html", 129 "text/html",
133 SUCCESS)); 130 SUCCESS));
134 131
135 scoped_ptr<net::URLFetcher> fetcher( 132 scoped_ptr<net::URLFetcher> fetcher(
136 net::URLFetcher::Create(server_.GetURL("/test?q=foo"), 133 net::URLFetcher::Create(server_->GetURL("/test?q=foo"),
137 net::URLFetcher::GET, 134 net::URLFetcher::GET,
138 this)); 135 this));
139 fetcher->SetRequestContext(request_context_getter_.get()); 136 fetcher->SetRequestContext(request_context_getter_.get());
140 fetcher->Start(); 137 fetcher->Start();
141 WaitForResponses(1); 138 WaitForResponses(1);
142 139
143 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); 140 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
144 EXPECT_EQ(SUCCESS, fetcher->GetResponseCode()); 141 EXPECT_EQ(SUCCESS, fetcher->GetResponseCode());
145 EXPECT_EQ("<b>Worked!</b>", GetContentFromFetcher(*fetcher)); 142 EXPECT_EQ("<b>Worked!</b>", GetContentFromFetcher(*fetcher));
146 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher)); 143 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher));
147 144
148 EXPECT_EQ("/test?q=foo", request_relative_url_); 145 EXPECT_EQ("/test?q=foo", request_relative_url_);
149 } 146 }
150 147
151 TEST_F(HttpServerTest, DefaultNotFoundResponse) { 148 TEST_F(HttpServerTest, DefaultNotFoundResponse) {
152 scoped_ptr<net::URLFetcher> fetcher( 149 scoped_ptr<net::URLFetcher> fetcher(
153 net::URLFetcher::Create(server_.GetURL("/non-existent"), 150 net::URLFetcher::Create(server_->GetURL("/non-existent"),
154 net::URLFetcher::GET, 151 net::URLFetcher::GET,
155 this)); 152 this));
156 fetcher->SetRequestContext(request_context_getter_.get()); 153 fetcher->SetRequestContext(request_context_getter_.get());
157 154
158 fetcher->Start(); 155 fetcher->Start();
159 WaitForResponses(1); 156 WaitForResponses(1);
160 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); 157 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
161 EXPECT_EQ(NOT_FOUND, fetcher->GetResponseCode()); 158 EXPECT_EQ(NOT_FOUND, fetcher->GetResponseCode());
162 } 159 }
163 160
164 TEST_F(HttpServerTest, ConcurrentFetches) { 161 TEST_F(HttpServerTest, ConcurrentFetches) {
165 server_.RegisterRequestHandler( 162 server_->RegisterRequestHandler(
166 base::Bind(&HttpServerTest::HandleRequest, 163 base::Bind(&HttpServerTest::HandleRequest,
167 base::Unretained(this), 164 base::Unretained(this),
168 "/test1", 165 "/test1",
169 "Raspberry chocolate", 166 "Raspberry chocolate",
170 "text/html", 167 "text/html",
171 SUCCESS)); 168 SUCCESS));
172 server_.RegisterRequestHandler( 169 server_->RegisterRequestHandler(
173 base::Bind(&HttpServerTest::HandleRequest, 170 base::Bind(&HttpServerTest::HandleRequest,
174 base::Unretained(this), 171 base::Unretained(this),
175 "/test2", 172 "/test2",
176 "Vanilla chocolate", 173 "Vanilla chocolate",
177 "text/html", 174 "text/html",
178 SUCCESS)); 175 SUCCESS));
179 server_.RegisterRequestHandler( 176 server_->RegisterRequestHandler(
180 base::Bind(&HttpServerTest::HandleRequest, 177 base::Bind(&HttpServerTest::HandleRequest,
181 base::Unretained(this), 178 base::Unretained(this),
182 "/test3", 179 "/test3",
183 "No chocolates", 180 "No chocolates",
184 "text/plain", 181 "text/plain",
185 NOT_FOUND)); 182 NOT_FOUND));
186 183
187 scoped_ptr<net::URLFetcher> fetcher1 = scoped_ptr<net::URLFetcher>( 184 scoped_ptr<net::URLFetcher> fetcher1 = scoped_ptr<net::URLFetcher>(
188 net::URLFetcher::Create(server_.GetURL("/test1"), 185 net::URLFetcher::Create(server_->GetURL("/test1"),
189 net::URLFetcher::GET, 186 net::URLFetcher::GET,
190 this)); 187 this));
191 fetcher1->SetRequestContext(request_context_getter_.get()); 188 fetcher1->SetRequestContext(request_context_getter_.get());
192 scoped_ptr<net::URLFetcher> fetcher2 = scoped_ptr<net::URLFetcher>( 189 scoped_ptr<net::URLFetcher> fetcher2 = scoped_ptr<net::URLFetcher>(
193 net::URLFetcher::Create(server_.GetURL("/test2"), 190 net::URLFetcher::Create(server_->GetURL("/test2"),
194 net::URLFetcher::GET, 191 net::URLFetcher::GET,
195 this)); 192 this));
196 fetcher2->SetRequestContext(request_context_getter_.get()); 193 fetcher2->SetRequestContext(request_context_getter_.get());
197 scoped_ptr<net::URLFetcher> fetcher3 = scoped_ptr<net::URLFetcher>( 194 scoped_ptr<net::URLFetcher> fetcher3 = scoped_ptr<net::URLFetcher>(
198 net::URLFetcher::Create(server_.GetURL("/test3"), 195 net::URLFetcher::Create(server_->GetURL("/test3"),
199 net::URLFetcher::GET, 196 net::URLFetcher::GET,
200 this)); 197 this));
201 fetcher3->SetRequestContext(request_context_getter_.get()); 198 fetcher3->SetRequestContext(request_context_getter_.get());
202 199
203 // Fetch the three URLs concurrently. 200 // Fetch the three URLs concurrently.
204 fetcher1->Start(); 201 fetcher1->Start();
205 fetcher2->Start(); 202 fetcher2->Start();
206 fetcher3->Start(); 203 fetcher3->Start();
207 WaitForResponses(3); 204 WaitForResponses(3);
208 205
209 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher1->GetStatus().status()); 206 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher1->GetStatus().status());
210 EXPECT_EQ(SUCCESS, fetcher1->GetResponseCode()); 207 EXPECT_EQ(SUCCESS, fetcher1->GetResponseCode());
211 EXPECT_EQ("Raspberry chocolate", GetContentFromFetcher(*fetcher1)); 208 EXPECT_EQ("Raspberry chocolate", GetContentFromFetcher(*fetcher1));
212 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher1)); 209 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher1));
213 210
214 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher2->GetStatus().status()); 211 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher2->GetStatus().status());
215 EXPECT_EQ(SUCCESS, fetcher2->GetResponseCode()); 212 EXPECT_EQ(SUCCESS, fetcher2->GetResponseCode());
216 EXPECT_EQ("Vanilla chocolate", GetContentFromFetcher(*fetcher2)); 213 EXPECT_EQ("Vanilla chocolate", GetContentFromFetcher(*fetcher2));
217 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher2)); 214 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher2));
218 215
219 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher3->GetStatus().status()); 216 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher3->GetStatus().status());
220 EXPECT_EQ(NOT_FOUND, fetcher3->GetResponseCode()); 217 EXPECT_EQ(NOT_FOUND, fetcher3->GetResponseCode());
221 EXPECT_EQ("No chocolates", GetContentFromFetcher(*fetcher3)); 218 EXPECT_EQ("No chocolates", GetContentFromFetcher(*fetcher3));
222 EXPECT_EQ("text/plain", GetContentTypeFromFetcher(*fetcher3)); 219 EXPECT_EQ("text/plain", GetContentTypeFromFetcher(*fetcher3));
223 } 220 }
224 221
225 } // namespace test_server 222 } // namespace test_server
226 } // namespace google_apis 223 } // namespace google_apis
OLDNEW
« no previous file with comments | « chrome/browser/google_apis/test_server/http_server.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698