| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <utility> | 5 #include <utility> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 return connect_result_; | 84 return connect_result_; |
| 85 } | 85 } |
| 86 | 86 |
| 87 void Send(const std::string& data) { | 87 void Send(const std::string& data) { |
| 88 write_buffer_ = | 88 write_buffer_ = |
| 89 new DrainableIOBuffer(new StringIOBuffer(data), data.length()); | 89 new DrainableIOBuffer(new StringIOBuffer(data), data.length()); |
| 90 Write(); | 90 Write(); |
| 91 } | 91 } |
| 92 | 92 |
| 93 bool Read(std::string* message) { | 93 bool Read(std::string* message) { |
| 94 net::TestCompletionCallback callback; | 94 return Read(message, 1); |
| 95 ReadInternal(callback.callback()); | 95 } |
| 96 int bytes_received = callback.WaitForResult(); | 96 |
| 97 if (bytes_received <= 0) | 97 bool Read(std::string* message, int expected_bytes) { |
| 98 return false; | 98 int total_bytes_received = 0; |
| 99 *message = std::string(read_buffer_->data(), bytes_received); | 99 message->clear(); |
| 100 while (total_bytes_received < expected_bytes) { |
| 101 net::TestCompletionCallback callback; |
| 102 ReadInternal(callback.callback()); |
| 103 int bytes_received = callback.WaitForResult(); |
| 104 if (bytes_received <= 0) |
| 105 return false; |
| 106 |
| 107 total_bytes_received += bytes_received; |
| 108 message->append(read_buffer_->data(), bytes_received); |
| 109 } |
| 100 return true; | 110 return true; |
| 101 } | 111 } |
| 102 | 112 |
| 103 private: | 113 private: |
| 104 void OnConnect(const base::Closure& quit_loop, int result) { | 114 void OnConnect(const base::Closure& quit_loop, int result) { |
| 105 connect_result_ = result; | 115 connect_result_ = result; |
| 106 quit_loop.Run(); | 116 quit_loop.Run(); |
| 107 } | 117 } |
| 108 | 118 |
| 109 void Write() { | 119 void Write() { |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 client.Send("GET /test HTTP/1.1\r\n\r\n"); | 311 client.Send("GET /test HTTP/1.1\r\n\r\n"); |
| 302 ASSERT_TRUE(RunUntilRequestsReceived(1)); | 312 ASSERT_TRUE(RunUntilRequestsReceived(1)); |
| 303 server_->Send200(GetConnectionId(0), "Response!", "text/plain"); | 313 server_->Send200(GetConnectionId(0), "Response!", "text/plain"); |
| 304 | 314 |
| 305 std::string response; | 315 std::string response; |
| 306 ASSERT_TRUE(client.Read(&response)); | 316 ASSERT_TRUE(client.Read(&response)); |
| 307 ASSERT_TRUE(StartsWithASCII(response, "HTTP/1.1 200 OK", true)); | 317 ASSERT_TRUE(StartsWithASCII(response, "HTTP/1.1 200 OK", true)); |
| 308 ASSERT_TRUE(EndsWith(response, "Response!", true)); | 318 ASSERT_TRUE(EndsWith(response, "Response!", true)); |
| 309 } | 319 } |
| 310 | 320 |
| 311 // Flaky on at least OS X and Vista. http://crbug.com/365067. | 321 TEST_F(HttpServerTest, SendRaw) { |
| 312 TEST_F(HttpServerTest, DISABLED_SendRaw) { | |
| 313 TestHttpClient client; | 322 TestHttpClient client; |
| 314 ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); | 323 ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); |
| 315 client.Send("GET /test HTTP/1.1\r\n\r\n"); | 324 client.Send("GET /test HTTP/1.1\r\n\r\n"); |
| 316 ASSERT_TRUE(RunUntilRequestsReceived(1)); | 325 ASSERT_TRUE(RunUntilRequestsReceived(1)); |
| 317 server_->SendRaw(GetConnectionId(0), "Raw Data "); | 326 server_->SendRaw(GetConnectionId(0), "Raw Data "); |
| 318 server_->SendRaw(GetConnectionId(0), "More Data"); | 327 server_->SendRaw(GetConnectionId(0), "More Data"); |
| 319 server_->SendRaw(GetConnectionId(0), "Third Piece of Data"); | 328 server_->SendRaw(GetConnectionId(0), "Third Piece of Data"); |
| 320 | 329 |
| 330 const std::string expected_response("Raw Data More DataThird Piece of Data"); |
| 321 std::string response; | 331 std::string response; |
| 322 ASSERT_TRUE(client.Read(&response)); | 332 ASSERT_TRUE(client.Read(&response, expected_response.length())); |
| 323 ASSERT_EQ("Raw Data More DataThird Piece of Data", response); | 333 ASSERT_EQ(expected_response, response); |
| 324 } | 334 } |
| 325 | 335 |
| 326 namespace { | 336 namespace { |
| 327 | 337 |
| 328 class MockStreamListenSocket : public StreamListenSocket { | 338 class MockStreamListenSocket : public StreamListenSocket { |
| 329 public: | 339 public: |
| 330 MockStreamListenSocket(StreamListenSocket::Delegate* delegate) | 340 MockStreamListenSocket(StreamListenSocket::Delegate* delegate) |
| 331 : StreamListenSocket(kInvalidSocket, delegate) {} | 341 : StreamListenSocket(kInvalidSocket, delegate) {} |
| 332 | 342 |
| 333 virtual void Accept() OVERRIDE { NOTREACHED(); } | 343 virtual void Accept() OVERRIDE { NOTREACHED(); } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 | 403 |
| 394 ASSERT_EQ(client_connection_id, GetConnectionId(2)); | 404 ASSERT_EQ(client_connection_id, GetConnectionId(2)); |
| 395 server_->Send200(client_connection_id, "Content for /test3", "text/plain"); | 405 server_->Send200(client_connection_id, "Content for /test3", "text/plain"); |
| 396 std::string response3; | 406 std::string response3; |
| 397 ASSERT_TRUE(client.Read(&response3)); | 407 ASSERT_TRUE(client.Read(&response3)); |
| 398 ASSERT_TRUE(StartsWithASCII(response3, "HTTP/1.1 200 OK", true)); | 408 ASSERT_TRUE(StartsWithASCII(response3, "HTTP/1.1 200 OK", true)); |
| 399 ASSERT_TRUE(EndsWith(response3, "Content for /test3", true)); | 409 ASSERT_TRUE(EndsWith(response3, "Content for /test3", true)); |
| 400 } | 410 } |
| 401 | 411 |
| 402 } // namespace net | 412 } // namespace net |
| OLD | NEW |