| 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 |