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

Side by Side Diff: net/server/http_server_unittest.cc

Issue 667923003: Standardize usage of virtual/override/final in net/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « net/server/http_connection.h ('k') | net/server/web_socket.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 5 #include <algorithm>
6 #include <utility> 6 #include <utility>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 HttpServerTest() : quit_after_request_count_(0) {} 182 HttpServerTest() : quit_after_request_count_(0) {}
183 183
184 virtual void SetUp() override { 184 virtual void SetUp() override {
185 scoped_ptr<ServerSocket> server_socket( 185 scoped_ptr<ServerSocket> server_socket(
186 new TCPServerSocket(NULL, net::NetLog::Source())); 186 new TCPServerSocket(NULL, net::NetLog::Source()));
187 server_socket->ListenWithAddressAndPort("127.0.0.1", 0, 1); 187 server_socket->ListenWithAddressAndPort("127.0.0.1", 0, 1);
188 server_.reset(new HttpServer(server_socket.Pass(), this)); 188 server_.reset(new HttpServer(server_socket.Pass(), this));
189 ASSERT_EQ(OK, server_->GetLocalAddress(&server_address_)); 189 ASSERT_EQ(OK, server_->GetLocalAddress(&server_address_));
190 } 190 }
191 191
192 virtual void OnConnect(int connection_id) override {} 192 void OnConnect(int connection_id) override {}
193 193
194 virtual void OnHttpRequest(int connection_id, 194 void OnHttpRequest(int connection_id,
195 const HttpServerRequestInfo& info) override { 195 const HttpServerRequestInfo& info) override {
196 requests_.push_back(std::make_pair(info, connection_id)); 196 requests_.push_back(std::make_pair(info, connection_id));
197 if (requests_.size() == quit_after_request_count_) 197 if (requests_.size() == quit_after_request_count_)
198 run_loop_quit_func_.Run(); 198 run_loop_quit_func_.Run();
199 } 199 }
200 200
201 virtual void OnWebSocketRequest(int connection_id, 201 void OnWebSocketRequest(int connection_id,
202 const HttpServerRequestInfo& info) override { 202 const HttpServerRequestInfo& info) override {
203 NOTREACHED(); 203 NOTREACHED();
204 } 204 }
205 205
206 virtual void OnWebSocketMessage(int connection_id, 206 void OnWebSocketMessage(int connection_id, const std::string& data) override {
207 const std::string& data) override {
208 NOTREACHED(); 207 NOTREACHED();
209 } 208 }
210 209
211 virtual void OnClose(int connection_id) override {} 210 void OnClose(int connection_id) override {}
212 211
213 bool RunUntilRequestsReceived(size_t count) { 212 bool RunUntilRequestsReceived(size_t count) {
214 quit_after_request_count_ = count; 213 quit_after_request_count_ = count;
215 if (requests_.size() == count) 214 if (requests_.size() == count)
216 return true; 215 return true;
217 216
218 base::RunLoop run_loop; 217 base::RunLoop run_loop;
219 run_loop_quit_func_ = run_loop.QuitClosure(); 218 run_loop_quit_func_ = run_loop.QuitClosure();
220 bool success = RunLoopWithTimeout(&run_loop); 219 bool success = RunLoopWithTimeout(&run_loop);
221 run_loop_quit_func_.Reset(); 220 run_loop_quit_func_.Reset();
(...skipping 19 matching lines...) Expand all
241 base::Closure run_loop_quit_func_; 240 base::Closure run_loop_quit_func_;
242 std::vector<std::pair<HttpServerRequestInfo, int> > requests_; 241 std::vector<std::pair<HttpServerRequestInfo, int> > requests_;
243 242
244 private: 243 private:
245 size_t quit_after_request_count_; 244 size_t quit_after_request_count_;
246 }; 245 };
247 246
248 namespace { 247 namespace {
249 248
250 class WebSocketTest : public HttpServerTest { 249 class WebSocketTest : public HttpServerTest {
251 virtual void OnHttpRequest(int connection_id, 250 void OnHttpRequest(int connection_id,
252 const HttpServerRequestInfo& info) override { 251 const HttpServerRequestInfo& info) override {
253 NOTREACHED(); 252 NOTREACHED();
254 } 253 }
255 254
256 virtual void OnWebSocketRequest(int connection_id, 255 void OnWebSocketRequest(int connection_id,
257 const HttpServerRequestInfo& info) override { 256 const HttpServerRequestInfo& info) override {
258 HttpServerTest::OnHttpRequest(connection_id, info); 257 HttpServerTest::OnHttpRequest(connection_id, info);
259 } 258 }
260 259
261 virtual void OnWebSocketMessage(int connection_id, 260 void OnWebSocketMessage(int connection_id, const std::string& data) override {
262 const std::string& data) override {
263 } 261 }
264 }; 262 };
265 263
266 TEST_F(HttpServerTest, Request) { 264 TEST_F(HttpServerTest, Request) {
267 TestHttpClient client; 265 TestHttpClient client;
268 ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); 266 ASSERT_EQ(OK, client.ConnectAndWait(server_address_));
269 client.Send("GET /test HTTP/1.1\r\n\r\n"); 267 client.Send("GET /test HTTP/1.1\r\n\r\n");
270 ASSERT_TRUE(RunUntilRequestsReceived(1)); 268 ASSERT_TRUE(RunUntilRequestsReceived(1));
271 ASSERT_EQ("GET", GetRequest(0).method); 269 ASSERT_EQ("GET", GetRequest(0).method);
272 ASSERT_EQ("/test", GetRequest(0).path); 270 ASSERT_EQ("/test", GetRequest(0).path);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 "Sec-WebSocket-Key: key\r\n" 398 "Sec-WebSocket-Key: key\r\n"
401 "\r\n"); 399 "\r\n");
402 ASSERT_TRUE(RunUntilRequestsReceived(1)); 400 ASSERT_TRUE(RunUntilRequestsReceived(1));
403 } 401 }
404 402
405 TEST_F(HttpServerTest, RequestWithTooLargeBody) { 403 TEST_F(HttpServerTest, RequestWithTooLargeBody) {
406 class TestURLFetcherDelegate : public URLFetcherDelegate { 404 class TestURLFetcherDelegate : public URLFetcherDelegate {
407 public: 405 public:
408 TestURLFetcherDelegate(const base::Closure& quit_loop_func) 406 TestURLFetcherDelegate(const base::Closure& quit_loop_func)
409 : quit_loop_func_(quit_loop_func) {} 407 : quit_loop_func_(quit_loop_func) {}
410 virtual ~TestURLFetcherDelegate() {} 408 ~TestURLFetcherDelegate() override {}
411 409
412 virtual void OnURLFetchComplete(const URLFetcher* source) override { 410 void OnURLFetchComplete(const URLFetcher* source) override {
413 EXPECT_EQ(HTTP_INTERNAL_SERVER_ERROR, source->GetResponseCode()); 411 EXPECT_EQ(HTTP_INTERNAL_SERVER_ERROR, source->GetResponseCode());
414 quit_loop_func_.Run(); 412 quit_loop_func_.Run();
415 } 413 }
416 414
417 private: 415 private:
418 base::Closure quit_loop_func_; 416 base::Closure quit_loop_func_;
419 }; 417 };
420 418
421 base::RunLoop run_loop; 419 base::RunLoop run_loop;
422 TestURLFetcherDelegate delegate(run_loop.QuitClosure()); 420 TestURLFetcherDelegate delegate(run_loop.QuitClosure());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 } 464 }
467 465
468 class MockStreamSocket : public StreamSocket { 466 class MockStreamSocket : public StreamSocket {
469 public: 467 public:
470 MockStreamSocket() 468 MockStreamSocket()
471 : connected_(true), 469 : connected_(true),
472 read_buf_(NULL), 470 read_buf_(NULL),
473 read_buf_len_(0) {} 471 read_buf_len_(0) {}
474 472
475 // StreamSocket 473 // StreamSocket
476 virtual int Connect(const CompletionCallback& callback) override { 474 int Connect(const CompletionCallback& callback) override {
477 return ERR_NOT_IMPLEMENTED; 475 return ERR_NOT_IMPLEMENTED;
478 } 476 }
479 virtual void Disconnect() override { 477 void Disconnect() override {
480 connected_ = false; 478 connected_ = false;
481 if (!read_callback_.is_null()) { 479 if (!read_callback_.is_null()) {
482 read_buf_ = NULL; 480 read_buf_ = NULL;
483 read_buf_len_ = 0; 481 read_buf_len_ = 0;
484 base::ResetAndReturn(&read_callback_).Run(ERR_CONNECTION_CLOSED); 482 base::ResetAndReturn(&read_callback_).Run(ERR_CONNECTION_CLOSED);
485 } 483 }
486 } 484 }
487 virtual bool IsConnected() const override { return connected_; } 485 bool IsConnected() const override { return connected_; }
488 virtual bool IsConnectedAndIdle() const override { return IsConnected(); } 486 bool IsConnectedAndIdle() const override { return IsConnected(); }
489 virtual int GetPeerAddress(IPEndPoint* address) const override { 487 int GetPeerAddress(IPEndPoint* address) const override {
490 return ERR_NOT_IMPLEMENTED; 488 return ERR_NOT_IMPLEMENTED;
491 } 489 }
492 virtual int GetLocalAddress(IPEndPoint* address) const override { 490 int GetLocalAddress(IPEndPoint* address) const override {
493 return ERR_NOT_IMPLEMENTED; 491 return ERR_NOT_IMPLEMENTED;
494 } 492 }
495 virtual const BoundNetLog& NetLog() const override { return net_log_; } 493 const BoundNetLog& NetLog() const override { return net_log_; }
496 virtual void SetSubresourceSpeculation() override {} 494 void SetSubresourceSpeculation() override {}
497 virtual void SetOmniboxSpeculation() override {} 495 void SetOmniboxSpeculation() override {}
498 virtual bool WasEverUsed() const override { return true; } 496 bool WasEverUsed() const override { return true; }
499 virtual bool UsingTCPFastOpen() const override { return false; } 497 bool UsingTCPFastOpen() const override { return false; }
500 virtual bool WasNpnNegotiated() const override { return false; } 498 bool WasNpnNegotiated() const override { return false; }
501 virtual NextProto GetNegotiatedProtocol() const override { 499 NextProto GetNegotiatedProtocol() const override { return kProtoUnknown; }
502 return kProtoUnknown; 500 bool GetSSLInfo(SSLInfo* ssl_info) override { return false; }
503 }
504 virtual bool GetSSLInfo(SSLInfo* ssl_info) override { return false; }
505 501
506 // Socket 502 // Socket
507 virtual int Read(IOBuffer* buf, int buf_len, 503 int Read(IOBuffer* buf,
508 const CompletionCallback& callback) override { 504 int buf_len,
505 const CompletionCallback& callback) override {
509 if (!connected_) { 506 if (!connected_) {
510 return ERR_SOCKET_NOT_CONNECTED; 507 return ERR_SOCKET_NOT_CONNECTED;
511 } 508 }
512 if (pending_read_data_.empty()) { 509 if (pending_read_data_.empty()) {
513 read_buf_ = buf; 510 read_buf_ = buf;
514 read_buf_len_ = buf_len; 511 read_buf_len_ = buf_len;
515 read_callback_ = callback; 512 read_callback_ = callback;
516 return ERR_IO_PENDING; 513 return ERR_IO_PENDING;
517 } 514 }
518 DCHECK_GT(buf_len, 0); 515 DCHECK_GT(buf_len, 0);
519 int read_len = std::min(static_cast<int>(pending_read_data_.size()), 516 int read_len = std::min(static_cast<int>(pending_read_data_.size()),
520 buf_len); 517 buf_len);
521 memcpy(buf->data(), pending_read_data_.data(), read_len); 518 memcpy(buf->data(), pending_read_data_.data(), read_len);
522 pending_read_data_.erase(0, read_len); 519 pending_read_data_.erase(0, read_len);
523 return read_len; 520 return read_len;
524 } 521 }
525 virtual int Write(IOBuffer* buf, int buf_len, 522 int Write(IOBuffer* buf,
526 const CompletionCallback& callback) override { 523 int buf_len,
524 const CompletionCallback& callback) override {
527 return ERR_NOT_IMPLEMENTED; 525 return ERR_NOT_IMPLEMENTED;
528 } 526 }
529 virtual int SetReceiveBufferSize(int32 size) override { 527 int SetReceiveBufferSize(int32 size) override { return ERR_NOT_IMPLEMENTED; }
530 return ERR_NOT_IMPLEMENTED; 528 int SetSendBufferSize(int32 size) override { return ERR_NOT_IMPLEMENTED; }
531 }
532 virtual int SetSendBufferSize(int32 size) override {
533 return ERR_NOT_IMPLEMENTED;
534 }
535 529
536 void DidRead(const char* data, int data_len) { 530 void DidRead(const char* data, int data_len) {
537 if (!read_buf_.get()) { 531 if (!read_buf_.get()) {
538 pending_read_data_.append(data, data_len); 532 pending_read_data_.append(data, data_len);
539 return; 533 return;
540 } 534 }
541 int read_len = std::min(data_len, read_buf_len_); 535 int read_len = std::min(data_len, read_buf_len_);
542 memcpy(read_buf_->data(), data, read_len); 536 memcpy(read_buf_->data(), data, read_len);
543 pending_read_data_.assign(data + read_len, data_len - read_len); 537 pending_read_data_.assign(data + read_len, data_len - read_len);
544 read_buf_ = NULL; 538 read_buf_ = NULL;
545 read_buf_len_ = 0; 539 read_buf_len_ = 0;
546 base::ResetAndReturn(&read_callback_).Run(read_len); 540 base::ResetAndReturn(&read_callback_).Run(read_len);
547 } 541 }
548 542
549 private: 543 private:
550 virtual ~MockStreamSocket() {} 544 ~MockStreamSocket() override {}
551 545
552 bool connected_; 546 bool connected_;
553 scoped_refptr<IOBuffer> read_buf_; 547 scoped_refptr<IOBuffer> read_buf_;
554 int read_buf_len_; 548 int read_buf_len_;
555 CompletionCallback read_callback_; 549 CompletionCallback read_callback_;
556 std::string pending_read_data_; 550 std::string pending_read_data_;
557 BoundNetLog net_log_; 551 BoundNetLog net_log_;
558 552
559 DISALLOW_COPY_AND_ASSIGN(MockStreamSocket); 553 DISALLOW_COPY_AND_ASSIGN(MockStreamSocket);
560 }; 554 };
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 ASSERT_EQ(client_connection_id, GetConnectionId(2)); 608 ASSERT_EQ(client_connection_id, GetConnectionId(2));
615 server_->Send200(client_connection_id, "Content for /test3", "text/plain"); 609 server_->Send200(client_connection_id, "Content for /test3", "text/plain");
616 std::string response3; 610 std::string response3;
617 ASSERT_TRUE(client.ReadResponse(&response3)); 611 ASSERT_TRUE(client.ReadResponse(&response3));
618 ASSERT_TRUE(StartsWithASCII(response3, "HTTP/1.1 200 OK", true)); 612 ASSERT_TRUE(StartsWithASCII(response3, "HTTP/1.1 200 OK", true));
619 ASSERT_TRUE(EndsWith(response3, "Content for /test3", true)); 613 ASSERT_TRUE(EndsWith(response3, "Content for /test3", true));
620 } 614 }
621 615
622 class CloseOnConnectHttpServerTest : public HttpServerTest { 616 class CloseOnConnectHttpServerTest : public HttpServerTest {
623 public: 617 public:
624 virtual void OnConnect(int connection_id) override { 618 void OnConnect(int connection_id) override {
625 connection_ids_.push_back(connection_id); 619 connection_ids_.push_back(connection_id);
626 server_->Close(connection_id); 620 server_->Close(connection_id);
627 } 621 }
628 622
629 protected: 623 protected:
630 std::vector<int> connection_ids_; 624 std::vector<int> connection_ids_;
631 }; 625 };
632 626
633 TEST_F(CloseOnConnectHttpServerTest, ServerImmediatelyClosesConnection) { 627 TEST_F(CloseOnConnectHttpServerTest, ServerImmediatelyClosesConnection) {
634 TestHttpClient client; 628 TestHttpClient client;
635 ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); 629 ASSERT_EQ(OK, client.ConnectAndWait(server_address_));
636 client.Send("GET / HTTP/1.1\r\n\r\n"); 630 client.Send("GET / HTTP/1.1\r\n\r\n");
637 ASSERT_FALSE(RunUntilRequestsReceived(1)); 631 ASSERT_FALSE(RunUntilRequestsReceived(1));
638 ASSERT_EQ(1ul, connection_ids_.size()); 632 ASSERT_EQ(1ul, connection_ids_.size());
639 ASSERT_EQ(0ul, requests_.size()); 633 ASSERT_EQ(0ul, requests_.size());
640 } 634 }
641 635
642 } // namespace 636 } // namespace
643 637
644 } // namespace net 638 } // namespace net
OLDNEW
« no previous file with comments | « net/server/http_connection.h ('k') | net/server/web_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698