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

Side by Side Diff: net/quic/core/quic_spdy_stream_test.cc

Issue 2603723002: Add a new QUIC platform API for text utilities. (Closed)
Patch Set: Tests Created 3 years, 11 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
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 "net/quic/core/quic_spdy_stream.h" 5 #include "net/quic/core/quic_spdy_stream.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/strings/string_number_conversions.h"
12 #include "net/quic/core/quic_connection.h" 11 #include "net/quic/core/quic_connection.h"
13 #include "net/quic/core/quic_utils.h" 12 #include "net/quic/core/quic_utils.h"
14 #include "net/quic/core/quic_write_blocked_list.h" 13 #include "net/quic/core/quic_write_blocked_list.h"
15 #include "net/quic/core/spdy_utils.h" 14 #include "net/quic/core/spdy_utils.h"
15 #include "net/quic/platform/api/quic_text_utils.h"
16 #include "net/quic/test_tools/quic_flow_controller_peer.h" 16 #include "net/quic/test_tools/quic_flow_controller_peer.h"
17 #include "net/quic/test_tools/quic_session_peer.h" 17 #include "net/quic/test_tools/quic_session_peer.h"
18 #include "net/quic/test_tools/quic_stream_peer.h" 18 #include "net/quic/test_tools/quic_stream_peer.h"
19 #include "net/quic/test_tools/quic_test_utils.h" 19 #include "net/quic/test_tools/quic_test_utils.h"
20 #include "net/test/gtest_util.h" 20 #include "net/test/gtest_util.h"
21 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
22 22
23 using base::StringPiece; 23 using base::StringPiece;
24 using std::string; 24 using std::string;
25 using testing::AnyNumber; 25 using testing::AnyNumber;
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 stream_->OnStreamFrame(frame1); 537 stream_->OnStreamFrame(frame1);
538 QuicStreamFrame frame2(kClientDataStreamId2, false, 0, StringPiece(body)); 538 QuicStreamFrame frame2(kClientDataStreamId2, false, 0, StringPiece(body));
539 stream2_->OnStreamFrame(frame2); 539 stream2_->OnStreamFrame(frame2);
540 540
541 // Now receive a further single byte on one stream - again this does not 541 // Now receive a further single byte on one stream - again this does not
542 // trigger a stream WINDOW_UPDATE, but now the connection flow control window 542 // trigger a stream WINDOW_UPDATE, but now the connection flow control window
543 // is over half full and thus a connection WINDOW_UPDATE is sent. 543 // is over half full and thus a connection WINDOW_UPDATE is sent.
544 EXPECT_CALL(*connection_, SendWindowUpdate(kClientDataStreamId1, _)).Times(0); 544 EXPECT_CALL(*connection_, SendWindowUpdate(kClientDataStreamId1, _)).Times(0);
545 EXPECT_CALL(*connection_, SendWindowUpdate(kClientDataStreamId2, _)).Times(0); 545 EXPECT_CALL(*connection_, SendWindowUpdate(kClientDataStreamId2, _)).Times(0);
546 EXPECT_CALL(*connection_, 546 EXPECT_CALL(*connection_,
547 SendWindowUpdate(0, QuicFlowControllerPeer::ReceiveWindowOffset( 547 SendWindowUpdate(0,
548 session_->flow_controller()) + 548 QuicFlowControllerPeer::ReceiveWindowOffset(
549 1 + kWindow / 2)); 549 session_->flow_controller()) +
550 1 + kWindow / 2));
550 QuicStreamFrame frame3(kClientDataStreamId1, false, (kWindow / 4), 551 QuicStreamFrame frame3(kClientDataStreamId1, false, (kWindow / 4),
551 StringPiece("a")); 552 StringPiece("a"));
552 stream_->OnStreamFrame(frame3); 553 stream_->OnStreamFrame(frame3);
553 } 554 }
554 555
555 TEST_P(QuicSpdyStreamTest, StreamFlowControlViolation) { 556 TEST_P(QuicSpdyStreamTest, StreamFlowControlViolation) {
556 // Tests that on if the peer sends too much data (i.e. violates the flow 557 // Tests that on if the peer sends too much data (i.e. violates the flow
557 // control protocol), then we terminate the connection. 558 // control protocol), then we terminate the connection.
558 559
559 // Stream should not process data, so that data gets buffered in the 560 // Stream should not process data, so that data gets buffered in the
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 // Receive initial headers. 770 // Receive initial headers.
770 QuicHeaderList headers = ProcessHeaders(false, headers_); 771 QuicHeaderList headers = ProcessHeaders(false, headers_);
771 stream_->ConsumeHeaderList(); 772 stream_->ConsumeHeaderList();
772 773
773 const string body = "this is the body"; 774 const string body = "this is the body";
774 // Receive trailing headers. 775 // Receive trailing headers.
775 SpdyHeaderBlock trailers_block; 776 SpdyHeaderBlock trailers_block;
776 trailers_block["key1"] = "value1"; 777 trailers_block["key1"] = "value1";
777 trailers_block["key2"] = "value2"; 778 trailers_block["key2"] = "value2";
778 trailers_block["key3"] = "value3"; 779 trailers_block["key3"] = "value3";
779 trailers_block[kFinalOffsetHeaderKey] = base::IntToString(body.size()); 780 trailers_block[kFinalOffsetHeaderKey] =
781 QuicTextUtils::Uint64ToString(body.size());
780 782
781 QuicHeaderList trailers = ProcessHeaders(true, trailers_block); 783 QuicHeaderList trailers = ProcessHeaders(true, trailers_block);
782 784
783 // The trailers should be decompressed, and readable from the stream. 785 // The trailers should be decompressed, and readable from the stream.
784 EXPECT_TRUE(stream_->trailers_decompressed()); 786 EXPECT_TRUE(stream_->trailers_decompressed());
785 787
786 // The final offset trailer will be consumed by QUIC. 788 // The final offset trailer will be consumed by QUIC.
787 trailers_block.erase(kFinalOffsetHeaderKey); 789 trailers_block.erase(kFinalOffsetHeaderKey);
788 EXPECT_EQ(trailers_block, stream_->received_trailers()); 790 EXPECT_EQ(trailers_block, stream_->received_trailers());
789 791
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 853
852 // Write non-zero body data to force a non-zero final offset. 854 // Write non-zero body data to force a non-zero final offset.
853 const int kBodySize = 1 * 1024; // 1 MB 855 const int kBodySize = 1 * 1024; // 1 MB
854 stream_->WriteOrBufferData(string(kBodySize, 'x'), false, nullptr); 856 stream_->WriteOrBufferData(string(kBodySize, 'x'), false, nullptr);
855 857
856 // The final offset field in the trailing headers is populated with the 858 // The final offset field in the trailing headers is populated with the
857 // number of body bytes written (including queued bytes). 859 // number of body bytes written (including queued bytes).
858 SpdyHeaderBlock trailers; 860 SpdyHeaderBlock trailers;
859 trailers["trailer key"] = "trailer value"; 861 trailers["trailer key"] = "trailer value";
860 SpdyHeaderBlock trailers_with_offset(trailers.Clone()); 862 SpdyHeaderBlock trailers_with_offset(trailers.Clone());
861 trailers_with_offset[kFinalOffsetHeaderKey] = base::Uint64ToString(kBodySize); 863 trailers_with_offset[kFinalOffsetHeaderKey] =
864 QuicTextUtils::Uint64ToString(kBodySize);
862 EXPECT_CALL(*session_, WriteHeadersMock(_, _, true, _, _)); 865 EXPECT_CALL(*session_, WriteHeadersMock(_, _, true, _, _));
863 stream_->WriteTrailers(std::move(trailers), nullptr); 866 stream_->WriteTrailers(std::move(trailers), nullptr);
864 EXPECT_EQ(trailers_with_offset, session_->GetWriteHeaders()); 867 EXPECT_EQ(trailers_with_offset, session_->GetWriteHeaders());
865 } 868 }
866 869
867 TEST_P(QuicSpdyStreamTest, WritingTrailersClosesWriteSide) { 870 TEST_P(QuicSpdyStreamTest, WritingTrailersClosesWriteSide) {
868 // Test that if trailers are written after all other data has been written 871 // Test that if trailers are written after all other data has been written
869 // (headers and body), that this closes the stream for writing. 872 // (headers and body), that this closes the stream for writing.
870 Initialize(kShouldProcessData); 873 Initialize(kShouldProcessData);
871 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) 874 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 942
940 // Writing Trailers should fail, as the FIN has already been sent. 943 // Writing Trailers should fail, as the FIN has already been sent.
941 // populated with the number of body bytes written. 944 // populated with the number of body bytes written.
942 EXPECT_QUIC_BUG(stream_->WriteTrailers(SpdyHeaderBlock(), nullptr), 945 EXPECT_QUIC_BUG(stream_->WriteTrailers(SpdyHeaderBlock(), nullptr),
943 "Trailers cannot be sent after a FIN"); 946 "Trailers cannot be sent after a FIN");
944 } 947 }
945 948
946 } // namespace 949 } // namespace
947 } // namespace test 950 } // namespace test
948 } // namespace net 951 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698