| Index: net/quic/core/quic_spdy_stream_test.cc
|
| diff --git a/net/quic/core/quic_spdy_stream_test.cc b/net/quic/core/quic_spdy_stream_test.cc
|
| index e202b3c57f456d5db4f746a3515c5799d9491eab..63aaa89671cf5ce2f698d7291a3b5e27d008bfad 100644
|
| --- a/net/quic/core/quic_spdy_stream_test.cc
|
| +++ b/net/quic/core/quic_spdy_stream_test.cc
|
| @@ -16,7 +16,7 @@
|
| #include "net/quic/platform/api/quic_test.h"
|
| #include "net/quic/platform/api/quic_text_utils.h"
|
| #include "net/quic/test_tools/quic_flow_controller_peer.h"
|
| -#include "net/quic/test_tools/quic_session_peer.h"
|
| +#include "net/quic/test_tools/quic_spdy_session_peer.h"
|
| #include "net/quic/test_tools/quic_stream_peer.h"
|
| #include "net/quic/test_tools/quic_test_utils.h"
|
|
|
| @@ -100,10 +100,10 @@ class QuicSpdyStreamTest : public QuicTestWithParam<QuicVersion> {
|
| &helper_, &alarm_factory_, Perspective::IS_SERVER,
|
| SupportedVersions(GetParam()));
|
| session_.reset(new testing::StrictMock<MockQuicSpdySession>(connection_));
|
| - stream_ = new TestStream(kClientDataStreamId1, session_.get(),
|
| + stream_ = new TestStream(GetNthClientInitiatedId(0), session_.get(),
|
| stream_should_process_data);
|
| session_->ActivateStream(QuicWrapUnique(stream_));
|
| - stream2_ = new TestStream(kClientDataStreamId2, session_.get(),
|
| + stream2_ = new TestStream(GetNthClientInitiatedId(1), session_.get(),
|
| stream_should_process_data);
|
| session_->ActivateStream(QuicWrapUnique(stream2_));
|
| }
|
| @@ -114,6 +114,10 @@ class QuicSpdyStreamTest : public QuicTestWithParam<QuicVersion> {
|
| return h;
|
| }
|
|
|
| + QuicStreamId GetNthClientInitiatedId(int n) {
|
| + return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(*session_, n);
|
| + }
|
| +
|
| protected:
|
| MockQuicConnectionHelper helper_;
|
| MockAlarmFactory alarm_factory_;
|
| @@ -248,7 +252,8 @@ TEST_P(QuicSpdyStreamTest, ProcessHeadersAndBody) {
|
| QuicHeaderList headers = ProcessHeaders(false, headers_);
|
| EXPECT_EQ(headers, stream_->header_list());
|
| stream_->ConsumeHeaderList();
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame);
|
| EXPECT_EQ(QuicHeaderList(), stream_->header_list());
|
| EXPECT_EQ(body, stream_->data());
|
| @@ -266,7 +271,7 @@ TEST_P(QuicSpdyStreamTest, ProcessHeadersAndBodyFragments) {
|
| size_t remaining_data = body.size() - offset;
|
| QuicStringPiece fragment(body.data() + offset,
|
| std::min(fragment_size, remaining_data));
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, offset,
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, offset,
|
| QuicStringPiece(fragment));
|
| stream_->OnStreamFrame(frame);
|
| }
|
| @@ -284,13 +289,13 @@ TEST_P(QuicSpdyStreamTest, ProcessHeadersAndBodyFragmentsSplit) {
|
| stream_->ConsumeHeaderList();
|
|
|
| QuicStringPiece fragment1(body.data(), split_point);
|
| - QuicStreamFrame frame1(kClientDataStreamId1, false, 0,
|
| + QuicStreamFrame frame1(GetNthClientInitiatedId(0), false, 0,
|
| QuicStringPiece(fragment1));
|
| stream_->OnStreamFrame(frame1);
|
|
|
| QuicStringPiece fragment2(body.data() + split_point,
|
| body.size() - split_point);
|
| - QuicStreamFrame frame2(kClientDataStreamId1, false, split_point,
|
| + QuicStreamFrame frame2(GetNthClientInitiatedId(0), false, split_point,
|
| QuicStringPiece(fragment2));
|
| stream_->OnStreamFrame(frame2);
|
|
|
| @@ -304,7 +309,8 @@ TEST_P(QuicSpdyStreamTest, ProcessHeadersAndBodyReadv) {
|
| string body = "this is the body";
|
|
|
| ProcessHeaders(false, headers_);
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame);
|
| stream_->ConsumeHeaderList();
|
|
|
| @@ -325,7 +331,8 @@ TEST_P(QuicSpdyStreamTest, ProcessHeadersAndBodyMarkConsumed) {
|
| string body = "this is the body";
|
|
|
| ProcessHeaders(false, headers_);
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame);
|
| stream_->ConsumeHeaderList();
|
|
|
| @@ -344,7 +351,8 @@ TEST_P(QuicSpdyStreamTest, ProcessHeadersAndBodyIncrementalReadv) {
|
|
|
| string body = "this is the body";
|
| ProcessHeaders(false, headers_);
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame);
|
| stream_->ConsumeHeaderList();
|
|
|
| @@ -365,7 +373,8 @@ TEST_P(QuicSpdyStreamTest, ProcessHeadersUsingReadvWithMultipleIovecs) {
|
|
|
| string body = "this is the body";
|
| ProcessHeaders(false, headers_);
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame);
|
| stream_->ConsumeHeaderList();
|
|
|
| @@ -402,7 +411,7 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlBlocked) {
|
| const uint64_t kOverflow = 15;
|
| string body(kWindow + kOverflow, 'a');
|
|
|
| - EXPECT_CALL(*connection_, SendBlocked(kClientDataStreamId1));
|
| + EXPECT_CALL(*connection_, SendBlocked(GetNthClientInitiatedId(0)));
|
| EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| .WillOnce(Return(QuicConsumedData(kWindow, true)));
|
| stream_->WriteOrBufferData(body, false, nullptr);
|
| @@ -440,7 +449,8 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlNoWindowUpdateIfNotConsumed) {
|
| string body(kWindow / 3, 'a');
|
| ProcessHeaders(false, headers_);
|
|
|
| - QuicStreamFrame frame1(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame1(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame1);
|
| EXPECT_EQ(kWindow - (kWindow / 3), QuicFlowControllerPeer::ReceiveWindowSize(
|
| stream_->flow_controller()));
|
| @@ -448,7 +458,7 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlNoWindowUpdateIfNotConsumed) {
|
| // Now receive another frame which results in the receive window being over
|
| // half full. This should all be buffered, decreasing the receive window but
|
| // not sending WINDOW_UPDATE.
|
| - QuicStreamFrame frame2(kClientDataStreamId1, false, kWindow / 3,
|
| + QuicStreamFrame frame2(GetNthClientInitiatedId(0), false, kWindow / 3,
|
| QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame2);
|
| EXPECT_EQ(
|
| @@ -476,7 +486,8 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlWindowUpdate) {
|
| ProcessHeaders(false, headers_);
|
| stream_->ConsumeHeaderList();
|
|
|
| - QuicStreamFrame frame1(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame1(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame1);
|
| EXPECT_EQ(kWindow - (kWindow / 3), QuicFlowControllerPeer::ReceiveWindowSize(
|
| stream_->flow_controller()));
|
| @@ -485,10 +496,10 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlWindowUpdate) {
|
| // half full. This will trigger the stream to increase its receive window
|
| // offset and send a WINDOW_UPDATE. The result will be again an available
|
| // window of kWindow bytes.
|
| - QuicStreamFrame frame2(kClientDataStreamId1, false, kWindow / 3,
|
| + QuicStreamFrame frame2(GetNthClientInitiatedId(0), false, kWindow / 3,
|
| QuicStringPiece(body));
|
| EXPECT_CALL(*connection_,
|
| - SendWindowUpdate(kClientDataStreamId1,
|
| + SendWindowUpdate(GetNthClientInitiatedId(0),
|
| QuicFlowControllerPeer::ReceiveWindowOffset(
|
| stream_->flow_controller()) +
|
| 2 * kWindow / 3));
|
| @@ -530,22 +541,25 @@ TEST_P(QuicSpdyStreamTest, ConnectionFlowControlWindowUpdate) {
|
| // Each stream gets a quarter window of data. This should not trigger a
|
| // WINDOW_UPDATE for either stream, nor for the connection.
|
| string body(kWindow / 4, 'a');
|
| - QuicStreamFrame frame1(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame1(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| stream_->OnStreamFrame(frame1);
|
| - QuicStreamFrame frame2(kClientDataStreamId2, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame2(GetNthClientInitiatedId(1), false, 0,
|
| + QuicStringPiece(body));
|
| stream2_->OnStreamFrame(frame2);
|
|
|
| // Now receive a further single byte on one stream - again this does not
|
| // trigger a stream WINDOW_UPDATE, but now the connection flow control window
|
| // is over half full and thus a connection WINDOW_UPDATE is sent.
|
| - EXPECT_CALL(*connection_, SendWindowUpdate(kClientDataStreamId1, _)).Times(0);
|
| - EXPECT_CALL(*connection_, SendWindowUpdate(kClientDataStreamId2, _)).Times(0);
|
| + EXPECT_CALL(*connection_, SendWindowUpdate(GetNthClientInitiatedId(0), _))
|
| + .Times(0);
|
| + EXPECT_CALL(*connection_, SendWindowUpdate(GetNthClientInitiatedId(1), _))
|
| + .Times(0);
|
| EXPECT_CALL(*connection_,
|
| - SendWindowUpdate(0,
|
| - QuicFlowControllerPeer::ReceiveWindowOffset(
|
| - session_->flow_controller()) +
|
| - 1 + kWindow / 2));
|
| - QuicStreamFrame frame3(kClientDataStreamId1, false, (kWindow / 4),
|
| + SendWindowUpdate(0, QuicFlowControllerPeer::ReceiveWindowOffset(
|
| + session_->flow_controller()) +
|
| + 1 + kWindow / 2));
|
| + QuicStreamFrame frame3(GetNthClientInitiatedId(0), false, (kWindow / 4),
|
| QuicStringPiece("a"));
|
| stream_->OnStreamFrame(frame3);
|
| }
|
| @@ -567,7 +581,8 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlViolation) {
|
|
|
| // Receive data to overflow the window, violating flow control.
|
| string body(kWindow + 1, 'a');
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
| EXPECT_CALL(*connection_,
|
| CloseConnection(QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA, _, _));
|
| stream_->OnStreamFrame(frame);
|
| @@ -605,7 +620,8 @@ TEST_P(QuicSpdyStreamTest, ConnectionFlowControlViolation) {
|
| // Send enough data to overflow the connection level flow control window.
|
| string body(kConnectionWindow + 1, 'a');
|
| EXPECT_LT(body.size(), kStreamWindow);
|
| - QuicStreamFrame frame(kClientDataStreamId1, false, 0, QuicStringPiece(body));
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), false, 0,
|
| + QuicStringPiece(body));
|
|
|
| EXPECT_CALL(*connection_,
|
| CloseConnection(QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA, _, _));
|
| @@ -627,7 +643,7 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlFinNotBlocked) {
|
| string body = "";
|
| bool fin = true;
|
|
|
| - EXPECT_CALL(*connection_, SendBlocked(kClientDataStreamId1)).Times(0);
|
| + EXPECT_CALL(*connection_, SendBlocked(GetNthClientInitiatedId(0))).Times(0);
|
| EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| .WillOnce(Return(QuicConsumedData(0, fin)));
|
|
|
| @@ -709,7 +725,7 @@ TEST_P(QuicSpdyStreamTest, ReceivingTrailersWithOffset) {
|
|
|
| EXPECT_FALSE(stream_->IsDoneReading());
|
| // Receive and consume body.
|
| - QuicStreamFrame frame(kClientDataStreamId1, /*fin=*/false, 0, body);
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), /*fin=*/false, 0, body);
|
| stream_->OnStreamFrame(frame);
|
| EXPECT_EQ(body, stream_->data());
|
| EXPECT_TRUE(stream_->IsDoneReading());
|
| @@ -790,7 +806,7 @@ TEST_P(QuicSpdyStreamTest, ReceivingTrailersAfterBodyWithFin) {
|
| stream_->ConsumeHeaderList();
|
|
|
| // Receive body data, with FIN.
|
| - QuicStreamFrame frame(kClientDataStreamId1, /*fin=*/true, 0, "body");
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), /*fin=*/true, 0, "body");
|
| stream_->OnStreamFrame(frame);
|
|
|
| // Receive trailing headers after FIN already received.
|
| @@ -814,7 +830,7 @@ TEST_P(QuicSpdyStreamTest, ClosingStreamWithNoTrailers) {
|
|
|
| // Receive and consume body with FIN set, and no trailers.
|
| const string kBody = string(1024, 'x');
|
| - QuicStreamFrame frame(kClientDataStreamId1, /*fin=*/true, 0, kBody);
|
| + QuicStreamFrame frame(GetNthClientInitiatedId(0), /*fin=*/true, 0, kBody);
|
| stream_->OnStreamFrame(frame);
|
|
|
| EXPECT_TRUE(stream_->IsDoneReading());
|
|
|