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

Side by Side Diff: net/tools/quic/quic_simple_server_stream_test.cc

Issue 2487613002: Landing Recent QUIC changes until 12:43 PM, Nov 5, 2016 UTC+8 (Closed)
Patch Set: Created 4 years, 1 month 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/tools/quic/quic_simple_server_stream.h ('k') | net/tools/quic/quic_spdy_client_stream.h » ('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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "net/tools/quic/quic_simple_server_stream.h" 5 #include "net/tools/quic/quic_simple_server_stream.h"
6 6
7 #include <list> 7 #include <list>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_piece.h" 13 #include "base/strings/string_piece.h"
14 #include "net/quic/core/quic_connection.h" 14 #include "net/quic/core/quic_connection.h"
15 #include "net/quic/core/quic_flags.h" 15 #include "net/quic/core/quic_flags.h"
16 #include "net/quic/core/quic_protocol.h" 16 #include "net/quic/core/quic_protocol.h"
17 #include "net/quic/core/quic_utils.h" 17 #include "net/quic/core/quic_utils.h"
18 #include "net/quic/core/spdy_utils.h" 18 #include "net/quic/core/spdy_utils.h"
19 #include "net/quic/test_tools/crypto_test_utils.h" 19 #include "net/quic/test_tools/crypto_test_utils.h"
20 #include "net/quic/test_tools/quic_stream_peer.h"
20 #include "net/quic/test_tools/quic_test_utils.h" 21 #include "net/quic/test_tools/quic_test_utils.h"
21 #include "net/quic/test_tools/reliable_quic_stream_peer.h"
22 #include "net/test/gtest_util.h" 22 #include "net/test/gtest_util.h"
23 #include "net/tools/epoll_server/epoll_server.h" 23 #include "net/tools/epoll_server/epoll_server.h"
24 #include "net/tools/quic/quic_in_memory_cache.h" 24 #include "net/tools/quic/quic_in_memory_cache.h"
25 #include "net/tools/quic/quic_simple_server_session.h" 25 #include "net/tools/quic/quic_simple_server_session.h"
26 #include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h" 26 #include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h"
27 #include "testing/gmock/include/gmock/gmock.h" 27 #include "testing/gmock/include/gmock/gmock.h"
28 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
29 #include "url/gurl.h" 29 #include "url/gurl.h"
30 30
31 using base::StringPiece; 31 using base::StringPiece;
32 using net::test::MockQuicConnection; 32 using net::test::MockQuicConnection;
33 using net::test::MockQuicConnectionHelper; 33 using net::test::MockQuicConnectionHelper;
34 using net::test::MockQuicSpdySession; 34 using net::test::MockQuicSpdySession;
35 using net::test::ReliableQuicStreamPeer; 35 using net::test::QuicStreamPeer;
36 using net::test::SupportedVersions; 36 using net::test::SupportedVersions;
37 using net::test::kInitialSessionFlowControlWindowForTest; 37 using net::test::kInitialSessionFlowControlWindowForTest;
38 using net::test::kInitialStreamFlowControlWindowForTest; 38 using net::test::kInitialStreamFlowControlWindowForTest;
39 using std::string; 39 using std::string;
40 using testing::_; 40 using testing::_;
41 using testing::AnyNumber; 41 using testing::AnyNumber;
42 using testing::Invoke; 42 using testing::Invoke;
43 using testing::InvokeArgument; 43 using testing::InvokeArgument;
44 using testing::InSequence; 44 using testing::InSequence;
45 using testing::Return; 45 using testing::Return;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 } 107 }
108 108
109 ~MockQuicSimpleServerSession() override {} 109 ~MockQuicSimpleServerSession() override {}
110 110
111 MOCK_METHOD3(OnConnectionClosed, 111 MOCK_METHOD3(OnConnectionClosed,
112 void(QuicErrorCode error, 112 void(QuicErrorCode error,
113 const string& error_details, 113 const string& error_details,
114 ConnectionCloseSource source)); 114 ConnectionCloseSource source));
115 MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id)); 115 MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id));
116 MOCK_METHOD6(WritevData, 116 MOCK_METHOD6(WritevData,
117 QuicConsumedData(ReliableQuicStream* stream, 117 QuicConsumedData(QuicStream* stream,
118 QuicStreamId id, 118 QuicStreamId id,
119 QuicIOVector data, 119 QuicIOVector data,
120 QuicStreamOffset offset, 120 QuicStreamOffset offset,
121 bool fin, 121 bool fin,
122 QuicAckListenerInterface*)); 122 QuicAckListenerInterface*));
123 MOCK_METHOD4(OnStreamHeaderList, 123 MOCK_METHOD4(OnStreamHeaderList,
124 void(QuicStreamId stream_id, 124 void(QuicStreamId stream_id,
125 bool fin, 125 bool fin,
126 size_t frame_len, 126 size_t frame_len,
127 const QuicHeaderList& header_list)); 127 const QuicHeaderList& header_list));
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 stream_->set_fin_received(true); 330 stream_->set_fin_received(true);
331 331
332 InSequence s; 332 InSequence s;
333 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr)); 333 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
334 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 334 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
335 .Times(1) 335 .Times(1)
336 .WillOnce(Return(QuicConsumedData( 336 .WillOnce(Return(QuicConsumedData(
337 strlen(QuicSimpleServerStream::kErrorResponseBody), true))); 337 strlen(QuicSimpleServerStream::kErrorResponseBody), true)));
338 338
339 QuicSimpleServerStreamPeer::SendResponse(stream_); 339 QuicSimpleServerStreamPeer::SendResponse(stream_);
340 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 340 EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
341 EXPECT_TRUE(stream_->reading_stopped()); 341 EXPECT_TRUE(stream_->reading_stopped());
342 EXPECT_TRUE(stream_->write_side_closed()); 342 EXPECT_TRUE(stream_->write_side_closed());
343 } 343 }
344 344
345 TEST_P(QuicSimpleServerStreamTest, SendResponseWithIllegalResponseStatus2) { 345 TEST_P(QuicSimpleServerStreamTest, SendResponseWithIllegalResponseStatus2) {
346 // Send an illegal response with response status not supported by HTTP/2. 346 // Send an illegal response with response status not supported by HTTP/2.
347 SpdyHeaderBlock* request_headers = stream_->mutable_headers(); 347 SpdyHeaderBlock* request_headers = stream_->mutable_headers();
348 (*request_headers)[":path"] = "/bar"; 348 (*request_headers)[":path"] = "/bar";
349 (*request_headers)[":authority"] = "www.google.com"; 349 (*request_headers)[":authority"] = "www.google.com";
350 (*request_headers)[":version"] = "HTTP/1.1"; 350 (*request_headers)[":version"] = "HTTP/1.1";
(...skipping 10 matching lines...) Expand all
361 stream_->set_fin_received(true); 361 stream_->set_fin_received(true);
362 362
363 InSequence s; 363 InSequence s;
364 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr)); 364 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
365 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 365 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
366 .Times(1) 366 .Times(1)
367 .WillOnce(Return(QuicConsumedData( 367 .WillOnce(Return(QuicConsumedData(
368 strlen(QuicSimpleServerStream::kErrorResponseBody), true))); 368 strlen(QuicSimpleServerStream::kErrorResponseBody), true)));
369 369
370 QuicSimpleServerStreamPeer::SendResponse(stream_); 370 QuicSimpleServerStreamPeer::SendResponse(stream_);
371 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 371 EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
372 EXPECT_TRUE(stream_->reading_stopped()); 372 EXPECT_TRUE(stream_->reading_stopped());
373 EXPECT_TRUE(stream_->write_side_closed()); 373 EXPECT_TRUE(stream_->write_side_closed());
374 } 374 }
375 375
376 TEST_P(QuicSimpleServerStreamTest, SendPushResponseWith404Response) { 376 TEST_P(QuicSimpleServerStreamTest, SendPushResponseWith404Response) {
377 // Create a new promised stream with even id(). 377 // Create a new promised stream with even id().
378 QuicSimpleServerStreamPeer* promised_stream = 378 QuicSimpleServerStreamPeer* promised_stream =
379 new QuicSimpleServerStreamPeer(2, &session_); 379 new QuicSimpleServerStreamPeer(2, &session_);
380 session_.ActivateStream(base::WrapUnique(promised_stream)); 380 session_.ActivateStream(base::WrapUnique(promised_stream));
381 381
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 "www.google.com", "/bar", std::move(response_headers_), body); 417 "www.google.com", "/bar", std::move(response_headers_), body);
418 stream_->set_fin_received(true); 418 stream_->set_fin_received(true);
419 419
420 InSequence s; 420 InSequence s;
421 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr)); 421 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
422 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 422 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
423 .Times(1) 423 .Times(1)
424 .WillOnce(Return(QuicConsumedData(body.length(), true))); 424 .WillOnce(Return(QuicConsumedData(body.length(), true)));
425 425
426 QuicSimpleServerStreamPeer::SendResponse(stream_); 426 QuicSimpleServerStreamPeer::SendResponse(stream_);
427 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 427 EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
428 EXPECT_TRUE(stream_->reading_stopped()); 428 EXPECT_TRUE(stream_->reading_stopped());
429 EXPECT_TRUE(stream_->write_side_closed()); 429 EXPECT_TRUE(stream_->write_side_closed());
430 } 430 }
431 431
432 TEST_P(QuicSimpleServerStreamTest, SendReponseWithPushResources) { 432 TEST_P(QuicSimpleServerStreamTest, SendReponseWithPushResources) {
433 // Tests that if a reponse has push resources to be send, SendResponse() will 433 // Tests that if a reponse has push resources to be send, SendResponse() will
434 // call PromisePushResources() to handle these resources. 434 // call PromisePushResources() to handle these resources.
435 435
436 // Add a request and response with valid headers into cache. 436 // Add a request and response with valid headers into cache.
437 string host = "www.google.com"; 437 string host = "www.google.com";
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 520
521 stream_->set_fin_received(true); 521 stream_->set_fin_received(true);
522 522
523 InSequence s; 523 InSequence s;
524 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _)); 524 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
525 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 525 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
526 .Times(1) 526 .Times(1)
527 .WillOnce(Return(QuicConsumedData(3, true))); 527 .WillOnce(Return(QuicConsumedData(3, true)));
528 528
529 QuicSimpleServerStreamPeer::SendErrorResponse(stream_); 529 QuicSimpleServerStreamPeer::SendErrorResponse(stream_);
530 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 530 EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
531 EXPECT_TRUE(stream_->reading_stopped()); 531 EXPECT_TRUE(stream_->reading_stopped());
532 EXPECT_TRUE(stream_->write_side_closed()); 532 EXPECT_TRUE(stream_->write_side_closed());
533 } 533 }
534 534
535 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) { 535 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) {
536 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 536 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
537 537
538 SpdyHeaderBlock request_headers; 538 SpdyHeaderBlock request_headers;
539 // \000 is a way to write the null byte when followed by a literal digit. 539 // \000 is a way to write the null byte when followed by a literal digit.
540 header_list_.OnHeader("content-length", StringPiece("11\00012", 5)); 540 header_list_.OnHeader("content-length", StringPiece("11\00012", 5));
541 541
542 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 542 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
543 543
544 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _)); 544 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
545 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 545 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
546 .Times(AnyNumber()) 546 .Times(AnyNumber())
547 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 547 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
548 stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_); 548 stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_);
549 549
550 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 550 EXPECT_TRUE(QuicStreamPeer::read_side_closed(stream_));
551 EXPECT_TRUE(stream_->reading_stopped()); 551 EXPECT_TRUE(stream_->reading_stopped());
552 EXPECT_TRUE(stream_->write_side_closed()); 552 EXPECT_TRUE(stream_->write_side_closed());
553 } 553 }
554 554
555 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) { 555 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) {
556 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 556 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
557 557
558 SpdyHeaderBlock request_headers; 558 SpdyHeaderBlock request_headers;
559 // \000 is a way to write the null byte when followed by a literal digit. 559 // \000 is a way to write the null byte when followed by a literal digit.
560 header_list_.OnHeader("content-length", StringPiece("\00012", 3)); 560 header_list_.OnHeader("content-length", StringPiece("\00012", 3));
561 561
562 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 562 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
563 563
564 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _)); 564 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
565 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 565 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
566 .Times(AnyNumber()) 566 .Times(AnyNumber())
567 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 567 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
568 stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_); 568 stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_);
569 569
570 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 570 EXPECT_TRUE(QuicStreamPeer::read_side_closed(stream_));
571 EXPECT_TRUE(stream_->reading_stopped()); 571 EXPECT_TRUE(stream_->reading_stopped());
572 EXPECT_TRUE(stream_->write_side_closed()); 572 EXPECT_TRUE(stream_->write_side_closed());
573 } 573 }
574 574
575 TEST_P(QuicSimpleServerStreamTest, ValidMultipleContentLength) { 575 TEST_P(QuicSimpleServerStreamTest, ValidMultipleContentLength) {
576 SpdyHeaderBlock request_headers; 576 SpdyHeaderBlock request_headers;
577 // \000 is a way to write the null byte when followed by a literal digit. 577 // \000 is a way to write the null byte when followed by a literal digit.
578 header_list_.OnHeader("content-length", StringPiece("11\00011", 5)); 578 header_list_.OnHeader("content-length", StringPiece("11\00011", 5));
579 579
580 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 580 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
581 581
582 stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_); 582 stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
583 583
584 EXPECT_EQ(11, QuicSimpleServerStreamPeer::content_length(stream_)); 584 EXPECT_EQ(11, QuicSimpleServerStreamPeer::content_length(stream_));
585 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 585 EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
586 EXPECT_FALSE(stream_->reading_stopped()); 586 EXPECT_FALSE(stream_->reading_stopped());
587 EXPECT_FALSE(stream_->write_side_closed()); 587 EXPECT_FALSE(stream_->write_side_closed());
588 } 588 }
589 589
590 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) { 590 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) {
591 InSequence s; 591 InSequence s;
592 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr)); 592 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
593 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 593 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
594 .Times(1) 594 .Times(1)
595 .WillOnce(Return(QuicConsumedData(3, true))); 595 .WillOnce(Return(QuicConsumedData(3, true)));
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 }; 640 };
641 StringPiece data(arr, arraysize(arr)); 641 StringPiece data(arr, arraysize(arr));
642 QuicStreamFrame frame(stream_->id(), true, 0, data); 642 QuicStreamFrame frame(stream_->id(), true, 0, data);
643 // Verify that we don't crash when we get a invalid headers in stream frame. 643 // Verify that we don't crash when we get a invalid headers in stream frame.
644 stream_->OnStreamFrame(frame); 644 stream_->OnStreamFrame(frame);
645 } 645 }
646 646
647 } // namespace 647 } // namespace
648 } // namespace test 648 } // namespace test
649 } // namespace net 649 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_simple_server_stream.h ('k') | net/tools/quic/quic_spdy_client_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698