| 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 f00777dca13381cb3bfbda380749dfc57cd33470..ad5f3561e2ce03f21a1465f409a5c3f4549db41d 100644
|
| --- a/net/spdy/spdy_network_transaction_unittest.cc
|
| +++ b/net/spdy/spdy_network_transaction_unittest.cc
|
| @@ -3995,12 +3995,16 @@ TEST_F(SpdyNetworkTransactionTest, BufferedCancelled) {
|
| helper.VerifyDataConsumed();
|
| }
|
|
|
| -TEST_F(SpdyNetworkTransactionTest, GoAwayWithActiveStream) {
|
| +// Request should fail upon receiving a GOAWAY frame
|
| +// with Last-Stream-ID lower than the stream id corresponding to the request
|
| +// and with error code other than NO_ERROR.
|
| +TEST_F(SpdyNetworkTransactionTest, FailOnGoAway) {
|
| SpdySerializedFrame req(
|
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
|
| MockWrite writes[] = {CreateMockWrite(req, 0)};
|
|
|
| - SpdySerializedFrame go_away(spdy_util_.ConstructSpdyGoAway());
|
| + SpdySerializedFrame go_away(
|
| + spdy_util_.ConstructSpdyGoAway(0, ERROR_CODE_INTERNAL_ERROR, ""));
|
| MockRead reads[] = {
|
| CreateMockRead(go_away, 1),
|
| };
|
| @@ -4008,12 +4012,48 @@ TEST_F(SpdyNetworkTransactionTest, GoAwayWithActiveStream) {
|
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
|
| NetLogWithSource(), nullptr);
|
| - helper.AddData(&data);
|
| helper.RunToCompletion(&data);
|
| TransactionHelperResult out = helper.output();
|
| EXPECT_THAT(out.rv, IsError(ERR_ABORTED));
|
| }
|
|
|
| +// Request should be retried on a new connection upon receiving a GOAWAY frame
|
| +// with Last-Stream-ID lower than the stream id corresponding to the request
|
| +// and with error code NO_ERROR.
|
| +TEST_F(SpdyNetworkTransactionTest, RetryOnGoAway) {
|
| + NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
|
| + NetLogWithSource(), nullptr);
|
| +
|
| + // First connection.
|
| + SpdySerializedFrame req(
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
|
| + MockWrite writes1[] = {CreateMockWrite(req, 0)};
|
| + SpdySerializedFrame go_away(
|
| + spdy_util_.ConstructSpdyGoAway(0, ERROR_CODE_NO_ERROR, ""));
|
| + MockRead reads1[] = {CreateMockRead(go_away, 1)};
|
| + SequencedSocketData data1(reads1, arraysize(reads1), writes1,
|
| + arraysize(writes1));
|
| + helper.AddData(&data1);
|
| +
|
| + // Second connection.
|
| + MockWrite writes2[] = {CreateMockWrite(req, 0)};
|
| + SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
|
| + SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
|
| + MockRead reads2[] = {CreateMockRead(resp, 1), CreateMockRead(body, 2),
|
| + MockRead(ASYNC, 0, 3)};
|
| + SequencedSocketData data2(reads2, arraysize(reads2), writes2,
|
| + arraysize(writes2));
|
| + helper.AddData(&data2);
|
| +
|
| + helper.RunPreTestSetup();
|
| + helper.RunDefaultTest();
|
| +
|
| + TransactionHelperResult out = helper.output();
|
| + EXPECT_THAT(out.rv, IsOk());
|
| +
|
| + helper.VerifyDataConsumed();
|
| +}
|
| +
|
| // A server can gracefully shut down by sending a GOAWAY frame
|
| // with maximum last-stream-id value.
|
| // Transactions started before receiving such a GOAWAY frame should succeed,
|
|
|