Index: net/spdy/spdy_network_transaction_unittest.cc |
diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc |
index 5b2f4f1f063a5e86f09600b8f267b1db3d3048f3..a3eee45bcc8b7579e7f17dcb0c0f7c7316284171 100644 |
--- a/net/spdy/spdy_network_transaction_unittest.cc |
+++ b/net/spdy/spdy_network_transaction_unittest.cc |
@@ -6332,6 +6332,50 @@ TEST_F(SpdyNetworkTransactionTest, CRLFInHeaderValue) { |
EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
} |
+// Regression test for https://crbug.com/603182. |
+// No response headers received before RST_STREAM: error. |
+TEST_F(SpdyNetworkTransactionTest, RstStreamNoError) { |
+ SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); |
+ MockWrite writes[] = {CreateMockWrite(req, 0, ASYNC)}; |
+ |
+ SpdySerializedFrame rst( |
+ spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_NO_ERROR)); |
+ MockRead reads[] = {CreateMockRead(rst, 1), MockRead(ASYNC, 0, 2)}; |
+ |
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
+ NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), |
+ DEFAULT_PRIORITY, NetLogWithSource(), |
+ nullptr); |
+ helper.RunToCompletion(&data); |
+ TransactionHelperResult out = helper.output(); |
+ EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
+} |
+ |
+// Regression test for https://crbug.com/603182. |
+// Response headers and data, then RST_STREAM received, |
+// before request body is sent: success. |
+TEST_F(SpdyNetworkTransactionTest, RstStreamNoErrorAfterResponse) { |
+ SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); |
+ MockWrite writes[] = {CreateMockWrite(req, 0, ASYNC)}; |
+ |
+ SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); |
+ SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
+ SpdySerializedFrame rst( |
+ spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_NO_ERROR)); |
+ MockRead reads[] = {CreateMockRead(resp, 1), CreateMockRead(body, 2), |
+ CreateMockRead(rst, 3), MockRead(ASYNC, 0, 4)}; |
+ |
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
+ NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), |
+ DEFAULT_PRIORITY, NetLogWithSource(), |
+ nullptr); |
+ helper.RunToCompletion(&data); |
+ TransactionHelperResult out = helper.output(); |
+ EXPECT_THAT(out.rv, IsOk()); |
+ EXPECT_EQ("HTTP/1.1 200", out.status_line); |
+ EXPECT_EQ("hello!", out.response_data); |
+} |
+ |
class SpdyNetworkTransactionTLSUsageCheckTest |
: public SpdyNetworkTransactionTest { |
protected: |