| Index: net/spdy/spdy_stream_unittest.cc
|
| diff --git a/net/spdy/spdy_stream_unittest.cc b/net/spdy/spdy_stream_unittest.cc
|
| index ce3ec4668dd65295835c7b28f602a9378ec2a2eb..c413ef6507b2d00b72d3b159e666672d180efd84 100644
|
| --- a/net/spdy/spdy_stream_unittest.cc
|
| +++ b/net/spdy/spdy_stream_unittest.cc
|
| @@ -994,6 +994,107 @@ TEST_F(SpdyStreamTest, DataMustNotFollowTrailers) {
|
| EXPECT_TRUE(data.AllReadDataConsumed());
|
| }
|
|
|
| +TEST_F(SpdyStreamTest, InformationalHeaders) {
|
| + SpdySerializedFrame req(
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
|
| + AddWrite(req);
|
| +
|
| + SpdyHeaderBlock informational_headers;
|
| + informational_headers[":status"] = "100";
|
| + SpdySerializedFrame informational_response(
|
| + spdy_util_.ConstructSpdyResponseHeaders(
|
| + 1, std::move(informational_headers), false));
|
| + AddRead(informational_response);
|
| +
|
| + SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
|
| + AddRead(reply);
|
| +
|
| + SpdySerializedFrame body(
|
| + spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true));
|
| + AddRead(body);
|
| +
|
| + AddReadEOF();
|
| +
|
| + SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
|
| + GetNumWrites());
|
| + MockConnect connect_data(SYNCHRONOUS, OK);
|
| + data.set_connect_data(connect_data);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
| +
|
| + AddSSLSocketData();
|
| +
|
| + base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
|
| +
|
| + base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
|
| + SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource());
|
| + ASSERT_TRUE(stream);
|
| +
|
| + StreamDelegateDoNothing delegate(stream);
|
| + stream->SetDelegate(&delegate);
|
| +
|
| + EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty());
|
| +
|
| + SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
|
| + EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers),
|
| + NO_MORE_DATA_TO_SEND));
|
| + EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec());
|
| +
|
| + EXPECT_THAT(delegate.WaitForClose(), IsOk());
|
| + EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
|
| + EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
|
| + delegate.TakeReceivedData());
|
| +
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| +}
|
| +
|
| +TEST_F(SpdyStreamTest, StatusMustBeNumber) {
|
| + SpdySerializedFrame req(
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
|
| + AddWrite(req);
|
| +
|
| + SpdyHeaderBlock incorrect_headers;
|
| + incorrect_headers[":status"] = "nan";
|
| + SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders(
|
| + 1, std::move(incorrect_headers), false));
|
| + AddRead(reply);
|
| +
|
| + SpdySerializedFrame rst(
|
| + spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
|
| + AddWrite(rst);
|
| +
|
| + AddReadEOF();
|
| +
|
| + SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
|
| + GetNumWrites());
|
| + MockConnect connect_data(SYNCHRONOUS, OK);
|
| + data.set_connect_data(connect_data);
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data);
|
| +
|
| + AddSSLSocketData();
|
| +
|
| + base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
|
| +
|
| + base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
|
| + SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource());
|
| + ASSERT_TRUE(stream);
|
| +
|
| + StreamDelegateDoNothing delegate(stream);
|
| + stream->SetDelegate(&delegate);
|
| +
|
| + EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty());
|
| +
|
| + SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
|
| + EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers),
|
| + NO_MORE_DATA_TO_SEND));
|
| + EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec());
|
| +
|
| + EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR));
|
| +
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| +}
|
| +
|
| // Call IncreaseSendWindowSize on a stream with a large enough delta to overflow
|
| // an int32_t. The SpdyStream should handle that case gracefully.
|
| TEST_F(SpdyStreamTest, IncreaseSendWindowSizeOverflow) {
|
|
|