OLD | NEW |
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 "net/test/embedded_test_server/embedded_test_server.h" | 5 #include "net/test/embedded_test_server/embedded_test_server.h" |
6 | 6 |
7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "base/threading/thread.h" | 8 #include "base/threading/thread.h" |
9 #include "net/http/http_response_headers.h" | 9 #include "net/http/http_response_headers.h" |
10 #include "net/test/embedded_test_server/http_request.h" | 10 #include "net/test/embedded_test_server/http_request.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 if (headers) { | 33 if (headers) { |
34 std::string content_type; | 34 std::string content_type; |
35 if (headers->GetMimeType(&content_type)) | 35 if (headers->GetMimeType(&content_type)) |
36 return content_type; | 36 return content_type; |
37 } | 37 } |
38 return std::string(); | 38 return std::string(); |
39 } | 39 } |
40 | 40 |
41 } // namespace | 41 } // namespace |
42 | 42 |
43 class EmbeddedTestServerTest: public testing::Test, | 43 class EmbeddedTestServerTest : public testing::Test, public URLFetcherDelegate { |
44 public URLFetcherDelegate { | |
45 public: | 44 public: |
46 EmbeddedTestServerTest() | 45 EmbeddedTestServerTest() |
47 : num_responses_received_(0), | 46 : num_responses_received_(0), |
48 num_responses_expected_(0), | 47 num_responses_expected_(0), |
49 io_thread_("io_thread") { | 48 io_thread_("io_thread") {} |
50 } | |
51 | 49 |
52 virtual void SetUp() OVERRIDE { | 50 virtual void SetUp() OVERRIDE { |
53 base::Thread::Options thread_options; | 51 base::Thread::Options thread_options; |
54 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; | 52 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; |
55 ASSERT_TRUE(io_thread_.StartWithOptions(thread_options)); | 53 ASSERT_TRUE(io_thread_.StartWithOptions(thread_options)); |
56 | 54 |
57 request_context_getter_ = new TestURLRequestContextGetter( | 55 request_context_getter_ = |
58 io_thread_.message_loop_proxy()); | 56 new TestURLRequestContextGetter(io_thread_.message_loop_proxy()); |
59 | 57 |
60 server_.reset(new EmbeddedTestServer); | 58 server_.reset(new EmbeddedTestServer); |
61 ASSERT_TRUE(server_->InitializeAndWaitUntilReady()); | 59 ASSERT_TRUE(server_->InitializeAndWaitUntilReady()); |
62 } | 60 } |
63 | 61 |
64 virtual void TearDown() OVERRIDE { | 62 virtual void TearDown() OVERRIDE { |
65 ASSERT_TRUE(server_->ShutdownAndWaitUntilComplete()); | 63 ASSERT_TRUE(server_->ShutdownAndWaitUntilComplete()); |
66 } | 64 } |
67 | 65 |
68 // URLFetcherDelegate override. | 66 // URLFetcherDelegate override. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 int num_responses_received_; | 103 int num_responses_received_; |
106 int num_responses_expected_; | 104 int num_responses_expected_; |
107 std::string request_relative_url_; | 105 std::string request_relative_url_; |
108 base::Thread io_thread_; | 106 base::Thread io_thread_; |
109 scoped_refptr<TestURLRequestContextGetter> request_context_getter_; | 107 scoped_refptr<TestURLRequestContextGetter> request_context_getter_; |
110 scoped_ptr<EmbeddedTestServer> server_; | 108 scoped_ptr<EmbeddedTestServer> server_; |
111 }; | 109 }; |
112 | 110 |
113 TEST_F(EmbeddedTestServerTest, GetBaseURL) { | 111 TEST_F(EmbeddedTestServerTest, GetBaseURL) { |
114 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/", server_->port()), | 112 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/", server_->port()), |
115 server_->base_url().spec()); | 113 server_->base_url().spec()); |
116 } | 114 } |
117 | 115 |
118 TEST_F(EmbeddedTestServerTest, GetURL) { | 116 TEST_F(EmbeddedTestServerTest, GetURL) { |
119 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%d/path?query=foo", | 117 EXPECT_EQ( |
120 server_->port()), | 118 base::StringPrintf("http://127.0.0.1:%d/path?query=foo", server_->port()), |
121 server_->GetURL("/path?query=foo").spec()); | 119 server_->GetURL("/path?query=foo").spec()); |
122 } | 120 } |
123 | 121 |
124 TEST_F(EmbeddedTestServerTest, RegisterRequestHandler) { | 122 TEST_F(EmbeddedTestServerTest, RegisterRequestHandler) { |
125 server_->RegisterRequestHandler( | 123 server_->RegisterRequestHandler( |
126 base::Bind(&EmbeddedTestServerTest::HandleRequest, | 124 base::Bind(&EmbeddedTestServerTest::HandleRequest, |
127 base::Unretained(this), | 125 base::Unretained(this), |
128 "/test", | 126 "/test", |
129 "<b>Worked!</b>", | 127 "<b>Worked!</b>", |
130 "text/html", | 128 "text/html", |
131 HTTP_OK)); | 129 HTTP_OK)); |
132 | 130 |
133 scoped_ptr<URLFetcher> fetcher( | 131 scoped_ptr<URLFetcher> fetcher(URLFetcher::Create( |
134 URLFetcher::Create(server_->GetURL("/test?q=foo"), | 132 server_->GetURL("/test?q=foo"), URLFetcher::GET, this)); |
135 URLFetcher::GET, | |
136 this)); | |
137 fetcher->SetRequestContext(request_context_getter_.get()); | 133 fetcher->SetRequestContext(request_context_getter_.get()); |
138 fetcher->Start(); | 134 fetcher->Start(); |
139 WaitForResponses(1); | 135 WaitForResponses(1); |
140 | 136 |
141 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); | 137 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); |
142 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); | 138 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); |
143 EXPECT_EQ("<b>Worked!</b>", GetContentFromFetcher(*fetcher)); | 139 EXPECT_EQ("<b>Worked!</b>", GetContentFromFetcher(*fetcher)); |
144 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher)); | 140 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher)); |
145 | 141 |
146 EXPECT_EQ("/test?q=foo", request_relative_url_); | 142 EXPECT_EQ("/test?q=foo", request_relative_url_); |
147 } | 143 } |
148 | 144 |
149 TEST_F(EmbeddedTestServerTest, ServeFilesFromDirectory) { | 145 TEST_F(EmbeddedTestServerTest, ServeFilesFromDirectory) { |
150 base::FilePath src_dir; | 146 base::FilePath src_dir; |
151 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); | 147 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); |
152 server_->ServeFilesFromDirectory( | 148 server_->ServeFilesFromDirectory( |
153 src_dir.AppendASCII("net").AppendASCII("data")); | 149 src_dir.AppendASCII("net").AppendASCII("data")); |
154 | 150 |
155 scoped_ptr<URLFetcher> fetcher( | 151 scoped_ptr<URLFetcher> fetcher( |
156 URLFetcher::Create(server_->GetURL("/test.html"), | 152 URLFetcher::Create(server_->GetURL("/test.html"), URLFetcher::GET, this)); |
157 URLFetcher::GET, | |
158 this)); | |
159 fetcher->SetRequestContext(request_context_getter_.get()); | 153 fetcher->SetRequestContext(request_context_getter_.get()); |
160 fetcher->Start(); | 154 fetcher->Start(); |
161 WaitForResponses(1); | 155 WaitForResponses(1); |
162 | 156 |
163 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); | 157 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); |
164 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); | 158 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); |
165 EXPECT_EQ("<p>Hello World!</p>", GetContentFromFetcher(*fetcher)); | 159 EXPECT_EQ("<p>Hello World!</p>", GetContentFromFetcher(*fetcher)); |
166 EXPECT_EQ("", GetContentTypeFromFetcher(*fetcher)); | 160 EXPECT_EQ("", GetContentTypeFromFetcher(*fetcher)); |
167 } | 161 } |
168 | 162 |
169 TEST_F(EmbeddedTestServerTest, DefaultNotFoundResponse) { | 163 TEST_F(EmbeddedTestServerTest, DefaultNotFoundResponse) { |
170 scoped_ptr<URLFetcher> fetcher( | 164 scoped_ptr<URLFetcher> fetcher(URLFetcher::Create( |
171 URLFetcher::Create(server_->GetURL("/non-existent"), | 165 server_->GetURL("/non-existent"), URLFetcher::GET, this)); |
172 URLFetcher::GET, | |
173 this)); | |
174 fetcher->SetRequestContext(request_context_getter_.get()); | 166 fetcher->SetRequestContext(request_context_getter_.get()); |
175 | 167 |
176 fetcher->Start(); | 168 fetcher->Start(); |
177 WaitForResponses(1); | 169 WaitForResponses(1); |
178 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); | 170 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); |
179 EXPECT_EQ(HTTP_NOT_FOUND, fetcher->GetResponseCode()); | 171 EXPECT_EQ(HTTP_NOT_FOUND, fetcher->GetResponseCode()); |
180 } | 172 } |
181 | 173 |
182 TEST_F(EmbeddedTestServerTest, ConcurrentFetches) { | 174 TEST_F(EmbeddedTestServerTest, ConcurrentFetches) { |
183 server_->RegisterRequestHandler( | 175 server_->RegisterRequestHandler( |
(...skipping 12 matching lines...) Expand all Loading... |
196 HTTP_OK)); | 188 HTTP_OK)); |
197 server_->RegisterRequestHandler( | 189 server_->RegisterRequestHandler( |
198 base::Bind(&EmbeddedTestServerTest::HandleRequest, | 190 base::Bind(&EmbeddedTestServerTest::HandleRequest, |
199 base::Unretained(this), | 191 base::Unretained(this), |
200 "/test3", | 192 "/test3", |
201 "No chocolates", | 193 "No chocolates", |
202 "text/plain", | 194 "text/plain", |
203 HTTP_NOT_FOUND)); | 195 HTTP_NOT_FOUND)); |
204 | 196 |
205 scoped_ptr<URLFetcher> fetcher1 = scoped_ptr<URLFetcher>( | 197 scoped_ptr<URLFetcher> fetcher1 = scoped_ptr<URLFetcher>( |
206 URLFetcher::Create(server_->GetURL("/test1"), | 198 URLFetcher::Create(server_->GetURL("/test1"), URLFetcher::GET, this)); |
207 URLFetcher::GET, | |
208 this)); | |
209 fetcher1->SetRequestContext(request_context_getter_.get()); | 199 fetcher1->SetRequestContext(request_context_getter_.get()); |
210 scoped_ptr<URLFetcher> fetcher2 = scoped_ptr<URLFetcher>( | 200 scoped_ptr<URLFetcher> fetcher2 = scoped_ptr<URLFetcher>( |
211 URLFetcher::Create(server_->GetURL("/test2"), | 201 URLFetcher::Create(server_->GetURL("/test2"), URLFetcher::GET, this)); |
212 URLFetcher::GET, | |
213 this)); | |
214 fetcher2->SetRequestContext(request_context_getter_.get()); | 202 fetcher2->SetRequestContext(request_context_getter_.get()); |
215 scoped_ptr<URLFetcher> fetcher3 = scoped_ptr<URLFetcher>( | 203 scoped_ptr<URLFetcher> fetcher3 = scoped_ptr<URLFetcher>( |
216 URLFetcher::Create(server_->GetURL("/test3"), | 204 URLFetcher::Create(server_->GetURL("/test3"), URLFetcher::GET, this)); |
217 URLFetcher::GET, | |
218 this)); | |
219 fetcher3->SetRequestContext(request_context_getter_.get()); | 205 fetcher3->SetRequestContext(request_context_getter_.get()); |
220 | 206 |
221 // Fetch the three URLs concurrently. | 207 // Fetch the three URLs concurrently. |
222 fetcher1->Start(); | 208 fetcher1->Start(); |
223 fetcher2->Start(); | 209 fetcher2->Start(); |
224 fetcher3->Start(); | 210 fetcher3->Start(); |
225 WaitForResponses(3); | 211 WaitForResponses(3); |
226 | 212 |
227 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher1->GetStatus().status()); | 213 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher1->GetStatus().status()); |
228 EXPECT_EQ(HTTP_OK, fetcher1->GetResponseCode()); | 214 EXPECT_EQ(HTTP_OK, fetcher1->GetResponseCode()); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 | 294 |
309 DISALLOW_COPY_AND_ASSIGN(EmbeddedTestServerThreadingTestDelegate); | 295 DISALLOW_COPY_AND_ASSIGN(EmbeddedTestServerThreadingTestDelegate); |
310 }; | 296 }; |
311 | 297 |
312 TEST_P(EmbeddedTestServerThreadingTest, RunTest) { | 298 TEST_P(EmbeddedTestServerThreadingTest, RunTest) { |
313 // The actual test runs on a separate thread so it can screw with the presence | 299 // The actual test runs on a separate thread so it can screw with the presence |
314 // of a MessageLoop - the test suite already sets up a MessageLoop for the | 300 // of a MessageLoop - the test suite already sets up a MessageLoop for the |
315 // main test thread. | 301 // main test thread. |
316 base::PlatformThreadHandle thread_handle; | 302 base::PlatformThreadHandle thread_handle; |
317 EmbeddedTestServerThreadingTestDelegate delegate( | 303 EmbeddedTestServerThreadingTestDelegate delegate( |
318 std::tr1::get<0>(GetParam()), | 304 std::tr1::get<0>(GetParam()), std::tr1::get<1>(GetParam())); |
319 std::tr1::get<1>(GetParam())); | |
320 ASSERT_TRUE(base::PlatformThread::Create(0, &delegate, &thread_handle)); | 305 ASSERT_TRUE(base::PlatformThread::Create(0, &delegate, &thread_handle)); |
321 base::PlatformThread::Join(thread_handle); | 306 base::PlatformThread::Join(thread_handle); |
322 } | 307 } |
323 | 308 |
324 INSTANTIATE_TEST_CASE_P(EmbeddedTestServerThreadingTestInstantiation, | 309 INSTANTIATE_TEST_CASE_P(EmbeddedTestServerThreadingTestInstantiation, |
325 EmbeddedTestServerThreadingTest, | 310 EmbeddedTestServerThreadingTest, |
326 testing::Combine(testing::Bool(), testing::Bool())); | 311 testing::Combine(testing::Bool(), testing::Bool())); |
327 | 312 |
328 } // namespace test_server | 313 } // namespace test_server |
329 } // namespace net | 314 } // namespace net |
OLD | NEW |