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

Unified Diff: net/spdy/spdy_stream_unittest.cc

Issue 2779763005: Reset stream if HTTP/2 response status is invalid. (Closed)
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_stream.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_stream_unittest.cc
diff --git a/net/spdy/spdy_stream_unittest.cc b/net/spdy/spdy_stream_unittest.cc
index a44912ac2559f06b88cfbbb23e525931103d5d0a..f8400dda1c608173352c1c00b7694a1c61e557fc 100644
--- a/net/spdy/spdy_stream_unittest.cc
+++ b/net/spdy/spdy_stream_unittest.cc
@@ -1086,7 +1086,7 @@ TEST_F(SpdyStreamTest, InformationalHeaders) {
EXPECT_TRUE(data.AllReadDataConsumed());
}
-TEST_F(SpdyStreamTest, StatusMustStartWithNumber) {
+TEST_F(SpdyStreamTest, StatusMustBeNumber) {
SpdySerializedFrame req(
spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
AddWrite(req);
@@ -1136,7 +1136,7 @@ TEST_F(SpdyStreamTest, StatusMustStartWithNumber) {
EXPECT_TRUE(data.AllReadDataConsumed());
}
-TEST_F(SpdyStreamTest, StatusCanHaveExtraText) {
+TEST_F(SpdyStreamTest, StatusCannotHaveExtraText) {
SpdySerializedFrame req(
spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
AddWrite(req);
@@ -1152,6 +1152,10 @@ TEST_F(SpdyStreamTest, StatusCanHaveExtraText) {
spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true));
AddRead(body);
+ SpdySerializedFrame rst(
+ spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR));
+ AddWrite(rst);
+
AddReadEOF();
SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
@@ -1178,11 +1182,60 @@ TEST_F(SpdyStreamTest, StatusCanHaveExtraText) {
NO_MORE_DATA_TO_SEND));
EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec());
- EXPECT_THAT(delegate.WaitForClose(), IsOk());
- EXPECT_EQ("200 Some random extra text describing status",
- delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
- EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
- delegate.TakeReceivedData());
+ EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR));
+
+ // Finish async network reads and writes.
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_TRUE(data.AllWriteDataConsumed());
+ EXPECT_TRUE(data.AllReadDataConsumed());
+}
+
+TEST_F(SpdyStreamTest, StatusMustBePresent) {
+ SpdySerializedFrame req(
+ spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
+ AddWrite(req);
+
+ SpdyHeaderBlock headers_without_status;
+ SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders(
+ 1, std::move(headers_without_status), false));
+ AddRead(reply);
+
+ SpdySerializedFrame body(
+ spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true));
+ AddRead(body);
+
+ SpdySerializedFrame rst(
+ spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_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));
// Finish async network reads and writes.
base::RunLoop().RunUntilIdle();
« no previous file with comments | « net/spdy/spdy_stream.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698