| Index: net/quic/quic_headers_stream_test.cc
|
| diff --git a/net/quic/quic_headers_stream_test.cc b/net/quic/quic_headers_stream_test.cc
|
| index 939b12e65142b0e990f024a02ff95555783cd64b..9a319c9d1cd0446f8d9f3256db96df3ba3d39609 100644
|
| --- a/net/quic/quic_headers_stream_test.cc
|
| +++ b/net/quic/quic_headers_stream_test.cc
|
| @@ -13,6 +13,7 @@
|
| #include "net/spdy/spdy_alt_svc_wire_format.h"
|
| #include "net/spdy/spdy_protocol.h"
|
| #include "net/spdy/spdy_test_utils.h"
|
| +#include "net/test/gtest_util.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using base::StringPiece;
|
| @@ -126,7 +127,8 @@ class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> {
|
| headers_stream_(QuicSpdySessionPeer::GetHeadersStream(&session_)),
|
| body_("hello world"),
|
| framer_(HTTP2),
|
| - stream_frame_(kHeadersStreamId, /*fin=*/false, /*offset=*/0, "") {
|
| + stream_frame_(kHeadersStreamId, /*fin=*/false, /*offset=*/0, ""),
|
| + next_promised_stream_id_(2) {
|
| headers_[":version"] = "HTTP/1.1";
|
| headers_[":status"] = "200 Ok";
|
| headers_["content-length"] = "11";
|
| @@ -224,6 +226,8 @@ class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> {
|
| QuicConnectionPeer::CloseConnection(connection_);
|
| }
|
|
|
| + QuicStreamId NextPromisedStreamId() { return next_promised_stream_id_++; }
|
| +
|
| static const bool kFrameComplete = true;
|
| static const bool kHasPriority = true;
|
|
|
| @@ -238,6 +242,7 @@ class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> {
|
| SpdyFramer framer_;
|
| StrictMock<MockVisitor> visitor_;
|
| QuicStreamFrame stream_frame_;
|
| + QuicStreamId next_promised_stream_id_;
|
| };
|
|
|
| INSTANTIATE_TEST_CASE_P(Tests,
|
| @@ -268,6 +273,38 @@ TEST_P(QuicHeadersStreamTest, WriteHeaders) {
|
| }
|
| }
|
|
|
| +TEST_P(QuicHeadersStreamTest, WritePushPromises) {
|
| + for (QuicStreamId stream_id = kClientDataStreamId1;
|
| + stream_id < kClientDataStreamId3; stream_id += 2) {
|
| + QuicStreamId promised_stream_id = NextPromisedStreamId();
|
| + if (perspective() == Perspective::IS_SERVER) {
|
| + // Write the headers and capture the outgoing data
|
| + EXPECT_CALL(session_,
|
| + WritevData(kHeadersStreamId, _, _, false, _, nullptr))
|
| + .WillOnce(WithArgs<1>(Invoke(this, &QuicHeadersStreamTest::SaveIov)));
|
| + headers_stream_->WritePushPromise(stream_id, promised_stream_id,
|
| + headers_, nullptr);
|
| +
|
| + // Parse the outgoing data and check that it matches was was written.
|
| + EXPECT_CALL(visitor_, OnPushPromise(stream_id,
|
| + promised_stream_id, kFrameComplete));
|
| + EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _))
|
| + .WillRepeatedly(WithArgs<1, 2>(
|
| + Invoke(this, &QuicHeadersStreamTest::SaveHeaderData)));
|
| + framer_.ProcessInput(saved_data_.data(), saved_data_.length());
|
| + EXPECT_FALSE(framer_.HasError())
|
| + << SpdyFramer::ErrorCodeToString(framer_.error_code());
|
| + CheckHeaders();
|
| + saved_data_.clear();
|
| + } else {
|
| + EXPECT_DFATAL(
|
| + headers_stream_->WritePushPromise(
|
| + stream_id, promised_stream_id, headers_, nullptr),
|
| + "Client shouldn't send PUSH_PROMISE");
|
| + }
|
| + }
|
| +}
|
| +
|
| TEST_P(QuicHeadersStreamTest, ProcessRawData) {
|
| for (QuicStreamId stream_id = kClientDataStreamId1;
|
| stream_id < kClientDataStreamId3; stream_id += 2) {
|
|
|