Chromium Code Reviews| 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 ac02492a35f0a259a8e2aac44e38a476da51d4f5..329d1c2063ecc2cb14ccfa13e2743bc7d2acec97 100644 |
| --- a/net/spdy/spdy_network_transaction_unittest.cc |
| +++ b/net/spdy/spdy_network_transaction_unittest.cc |
| @@ -1894,10 +1894,13 @@ TEST_F(SpdyNetworkTransactionTest, ResetPushWithTransferEncoding) { |
| // Construct the request. |
| SpdySerializedFrame req( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| SpdySerializedFrame rst( |
| spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); |
| MockWrite writes[] = { |
| - CreateMockWrite(req, 0), CreateMockWrite(rst, 4), |
| + CreateMockWrite(req, 0), CreateMockWrite(priority, 3), |
| + CreateMockWrite(rst, 5), |
| }; |
| SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
| @@ -1909,8 +1912,8 @@ TEST_F(SpdyNetworkTransactionTest, ResetPushWithTransferEncoding) { |
| GetDefaultUrlWithPath("/1").c_str())); |
| SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| MockRead reads[] = { |
| - CreateMockRead(resp, 1), CreateMockRead(push, 2), CreateMockRead(body, 3), |
| - MockRead(ASYNC, 0, 5) // EOF |
| + CreateMockRead(resp, 1), CreateMockRead(push, 2), CreateMockRead(body, 4), |
| + MockRead(ASYNC, 0, 6) // EOF |
| }; |
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| @@ -2171,8 +2174,10 @@ TEST_F(SpdyNetworkTransactionTest, |
| SpdySerializedFrame req( |
| spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true)); |
| + SpdySerializedFrame priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(req, 0), |
| + CreateMockWrite(req, 0), CreateMockWrite(priority, 2), |
| }; |
| SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| @@ -2193,7 +2198,7 @@ TEST_F(SpdyNetworkTransactionTest, |
| 2, "should not include either", 25, false)); |
| MockRead push_init_read(CreateMockRead(push_init_frame, 1)); |
| - MockRead response_headers(CreateMockRead(resp, 4)); |
| + MockRead response_headers(CreateMockRead(resp, 5)); |
| // raw_header_size() will contain the size of the push promise frame |
| // initialization. |
| int expected_response_headers_size = |
| @@ -2201,11 +2206,11 @@ TEST_F(SpdyNetworkTransactionTest, |
| MockRead reads[] = { |
| push_init_read, |
| - CreateMockRead(push_headers_frame, 2), |
| - CreateMockRead(push_body_frame, 3), |
| + CreateMockRead(push_headers_frame, 3), |
| + CreateMockRead(push_body_frame, 4), |
| response_headers, |
| - CreateMockRead(response_body_frame, 5), |
| - MockRead(ASYNC, 0, 6) // EOF |
| + CreateMockRead(response_body_frame, 6), |
| + MockRead(ASYNC, 0, 7) // EOF |
| }; |
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| @@ -2395,24 +2400,24 @@ TEST_F(SpdyNetworkTransactionTest, DISABLED_RedirectServerPush) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| - SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| }; |
| SpdySerializedFrame stream1_reply( |
| spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
| SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| + SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| const char kPushedData[] = "pushed"; |
| SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
| 2, kPushedData, strlen(kPushedData), true)); |
| MockRead reads[] = { |
| - CreateMockRead(stream1_reply, 1), |
| - CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream1_body, 3, SYNCHRONOUS), |
| - CreateMockRead(stream2_body, 4), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause |
| + CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
| + CreateMockRead(stream1_body, 4), CreateMockRead(stream2_body, 5), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
| }; |
| HttpResponseInfo response; |
| @@ -2436,8 +2441,10 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushBeforeHeaders) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 2), |
| }; |
| SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| @@ -2450,10 +2457,10 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushBeforeHeaders) { |
| 2, kPushedData, strlen(kPushedData), true)); |
| MockRead reads[] = { |
| CreateMockRead(stream2_syn, 1), |
| - CreateMockRead(stream1_reply, 2), |
| - CreateMockRead(stream1_body, 3, SYNCHRONOUS), |
| - CreateMockRead(stream2_body, 4), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause |
| + CreateMockRead(stream1_reply, 3), |
| + CreateMockRead(stream1_body, 4, SYNCHRONOUS), |
| + CreateMockRead(stream2_body, 5), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
| }; |
| HttpResponseInfo response; |
| @@ -2477,8 +2484,10 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushBeforeHeaders) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame2) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| }; |
| SpdySerializedFrame stream1_reply( |
| @@ -2492,9 +2501,9 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame2) { |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), |
| CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream2_body, 3), |
| - CreateMockRead(stream1_body, 4, SYNCHRONOUS), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause |
| + CreateMockRead(stream2_body, 4), |
| + CreateMockRead(stream1_body, 5, SYNCHRONOUS), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
| }; |
| HttpResponseInfo response; |
| @@ -2515,16 +2524,122 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame2) { |
| EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
| } |
| +TEST_F(SpdyNetworkTransactionTest, ServerPushUpdatesPriority) { |
| + SpdySerializedFrame stream1_syn( |
|
Bence
2017/01/05 17:14:45
Maybe use |req| instead of |syn|. SYN was a SPDY
Tom Bergan
2017/01/06 00:08:41
Switched to |headers|.
|
| + spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true)); |
| + SpdySerializedFrame stream3_syn( |
| + spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); |
| + SpdySerializedFrame stream5_syn( |
| + spdy_util_.ConstructSpdyGet(nullptr, 0, 5, MEDIUM, true)); |
| + |
| + // Stream 1 pushes two streams that are initially prioritized below stream 5. |
| + // Stream 2 is later prioritized below stream 1 after it matches a request. |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 5, IDLE, true)); |
| + SpdySerializedFrame stream4_priority( |
| + spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| + SpdySerializedFrame stream4_priority_update( |
| + spdy_util_.ConstructSpdyPriority(4, 5, IDLE, true)); |
| + SpdySerializedFrame stream2_priority_update( |
| + spdy_util_.ConstructSpdyPriority(2, 1, HIGHEST, true)); |
| + |
| + MockWrite writes[] = { |
| + CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream3_syn, 1), |
| + CreateMockWrite(stream5_syn, 2), |
| + CreateMockWrite(stream2_priority, 7), |
| + CreateMockWrite(stream4_priority, 9), |
| + CreateMockWrite(stream4_priority_update, 11), |
| + CreateMockWrite(stream2_priority_update, 12), |
| + }; |
| + |
| + SpdySerializedFrame stream1_reply( |
| + spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
|
Bence
2017/01/05 17:14:46
Please use nullptr instead of NULL in new code, se
Tom Bergan
2017/01/06 00:08:41
I did s/NULL/nullptr/ in this file.
|
| + SpdySerializedFrame stream3_reply( |
| + spdy_util_.ConstructSpdyGetReply(NULL, 0, 3)); |
| + SpdySerializedFrame stream5_reply( |
| + spdy_util_.ConstructSpdyGetReply(NULL, 0, 5)); |
| + SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
|
Bence
2017/01/05 17:14:46
Please instantiate mock read data in the order tha
Tom Bergan
2017/01/06 00:08:41
Done.
|
| + SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame(2, true)); |
| + SpdySerializedFrame stream3_body(spdy_util_.ConstructSpdyDataFrame(3, true)); |
| + SpdySerializedFrame stream5_body(spdy_util_.ConstructSpdyDataFrame(5, true)); |
| + |
| + SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
|
Bence
2017/01/05 17:14:45
Maybe use |push| instead of |syn|.
Tom Bergan
2017/01/06 00:08:41
Done.
|
| + NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| + SpdySerializedFrame stream4_syn(spdy_util_.ConstructSpdyPush( |
| + NULL, 0, 4, 1, GetDefaultUrlWithPath("/bar.dat").c_str())); |
| + |
| + MockRead reads[] = { |
| + CreateMockRead(stream1_reply, 3), |
| + CreateMockRead(stream3_reply, 4), |
| + CreateMockRead(stream5_reply, 5), |
| + CreateMockRead(stream2_syn, 6), |
| + CreateMockRead(stream4_syn, 8), |
| + MockRead(ASYNC, ERR_IO_PENDING, 10), |
| + CreateMockRead(stream1_body, 13), |
| + CreateMockRead(stream2_body, 14), |
| + CreateMockRead(stream3_body, 15), |
| + CreateMockRead(stream5_body, 16), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 17), // Force a pause |
| + }; |
| + |
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| + SequencedSocketData data_placeholder1(NULL, 0, NULL, 0); |
| + SequencedSocketData data_placeholder2(NULL, 0, NULL, 0); |
| + SequencedSocketData data_placeholder3(NULL, 0, NULL, 0); |
| + |
| + NormalSpdyTransactionHelper helper(CreateGetRequest(), LOWEST, |
| + NetLogWithSource(), NULL); |
| + helper.RunPreTestSetup(); |
| + helper.AddData(&data); |
| + helper.AddData(&data_placeholder1); // other requests reuse the same socket |
| + helper.AddData(&data_placeholder2); |
| + helper.AddData(&data_placeholder3); |
| + HttpNetworkTransaction trans1(HIGHEST, helper.session()); |
| + HttpNetworkTransaction trans2(HIGHEST, helper.session()); |
|
Bence
2017/01/05 17:14:46
Instantiate |trans2| further down, after "// Start
Tom Bergan
2017/01/06 00:08:41
Done.
|
| + HttpNetworkTransaction trans3(MEDIUM, helper.session()); |
| + HttpNetworkTransaction trans5(MEDIUM, helper.session()); |
| + |
| + TestCompletionCallback callback1; |
| + TestCompletionCallback callback2; |
|
Bence
2017/01/05 17:14:45
Instantiate |callback2| further down, after "// St
Tom Bergan
2017/01/06 00:08:41
Done.
|
| + TestCompletionCallback callback3; |
| + TestCompletionCallback callback5; |
| + |
| + // Start the ordinary requests. |
| + NetLogWithSource log; |
| + ASSERT_THAT(trans1.Start(&CreateGetRequest(), callback1.callback(), log), |
| + IsError(ERR_IO_PENDING)); |
| + ASSERT_THAT(trans3.Start(&CreateGetRequest(), callback3.callback(), log), |
| + IsError(ERR_IO_PENDING)); |
| + ASSERT_THAT(trans5.Start(&CreateGetRequest(), callback5.callback(), log), |
| + IsError(ERR_IO_PENDING)); |
| + data.RunUntilPaused(); |
| + |
| + // Start a request that matches the push. |
| + HttpRequestInfo push_req = CreateGetRequest(); |
|
Bence
2017/01/05 17:14:46
Would CreatePushRequest() work here?
Tom Bergan
2017/01/06 00:08:41
I don't think that method exists? Also, this is cr
|
| + push_req.url = GURL(GetDefaultUrlWithPath("/foo.dat")); |
| + ASSERT_THAT(trans2.Start(&push_req, callback2.callback(), log), |
| + IsError(ERR_IO_PENDING)); |
| + data.Resume(); |
| + |
| + ASSERT_THAT(callback1.WaitForResult(), IsOk()); |
| + ASSERT_THAT(callback2.WaitForResult(), IsOk()); |
| + ASSERT_THAT(callback3.WaitForResult(), IsOk()); |
| + ASSERT_THAT(callback5.WaitForResult(), IsOk()); |
| +} |
|
Bence
2017/01/05 17:14:46
Please call helper.VerifyDataConsumed() at the end
Tom Bergan
2017/01/06 00:08:41
Done. Thanks for reading this closely. I admit I d
|
| + |
| TEST_F(SpdyNetworkTransactionTest, ServerPushServerAborted) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| - SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| }; |
| SpdySerializedFrame stream1_reply( |
| spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
| + SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
|
Bence
2017/01/05 17:14:46
Please instantiate read frames in the order they a
Tom Bergan
2017/01/06 00:08:41
Done.
|
| SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| SpdySerializedFrame stream2_rst( |
| @@ -2532,9 +2647,9 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushServerAborted) { |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), |
| CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream2_rst, 3), |
| - CreateMockRead(stream1_body, 4, SYNCHRONOUS), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause |
| + CreateMockRead(stream2_rst, 4), |
| + CreateMockRead(stream1_body, 5, SYNCHRONOUS), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
| }; |
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| @@ -2569,15 +2684,18 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushServerAborted) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushDuplicate) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| - SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| SpdySerializedFrame stream3_rst( |
| spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_PROTOCOL_ERROR)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream3_rst, 4), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| + CreateMockWrite(stream3_rst, 5), |
| }; |
| SpdySerializedFrame stream1_reply( |
| spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
| + SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| const char kPushedData[] = "pushed"; |
| @@ -2588,10 +2706,10 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushDuplicate) { |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), |
| CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream3_syn, 3), |
| - CreateMockRead(stream1_body, 5), |
| - CreateMockRead(stream2_body, 6), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7), // Force a pause |
| + CreateMockRead(stream3_syn, 4), |
| + CreateMockRead(stream1_body, 6), |
| + CreateMockRead(stream2_body, 7), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8), // Force a pause |
| }; |
| HttpResponseInfo response; |
| @@ -2615,13 +2733,15 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushDuplicate) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrame) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| - SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| }; |
| SpdySerializedFrame stream1_reply( |
| spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
| + SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| static const char kPushedData[] = "pushed my darling hello my baby"; |
| @@ -2640,12 +2760,12 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrame) { |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), |
| CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream2_body1, 3), |
| - CreateMockRead(stream2_body2, 4), |
| - CreateMockRead(stream2_body3, 5), |
| - CreateMockRead(stream2_body4, 6), |
| - CreateMockRead(stream1_body, 7, SYNCHRONOUS), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8), // Force a pause |
| + CreateMockRead(stream2_body1, 4), |
| + CreateMockRead(stream2_body2, 5), |
| + CreateMockRead(stream2_body3, 6), |
| + CreateMockRead(stream2_body4, 7), |
| + CreateMockRead(stream1_body, 8, SYNCHRONOUS), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 9), // Force a pause |
| }; |
| HttpResponseInfo response; |
| @@ -2666,13 +2786,15 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrame) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrameInterrupted) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| - SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| }; |
| SpdySerializedFrame stream1_reply( |
| spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
| + SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| static const char kPushedData[] = "pushed my darling hello my baby"; |
| @@ -2691,12 +2813,12 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrameInterrupted) { |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), |
| CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream2_body1, 3), |
| - CreateMockRead(stream2_body2, 4), |
| - CreateMockRead(stream2_body3, 5), |
| - CreateMockRead(stream2_body4, 6), |
| - CreateMockRead(stream1_body, 7, SYNCHRONOUS), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8) // Force a pause. |
| + CreateMockRead(stream2_body1, 4), |
| + CreateMockRead(stream2_body2, 5), |
| + CreateMockRead(stream2_body3, 6), |
| + CreateMockRead(stream2_body4, 7), |
| + CreateMockRead(stream1_body, 8, SYNCHRONOUS), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 9) // Force a pause. |
| }; |
| HttpResponseInfo response; |
| @@ -2858,10 +2980,13 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushNoURL) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushOnPushedStream) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), CreateMockWrite(goaway, 4), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| + CreateMockWrite(goaway, 5), |
| }; |
| SpdySerializedFrame stream1_reply( |
| @@ -2872,7 +2997,7 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushOnPushedStream) { |
| nullptr, 0, 4, 2, GetDefaultUrlWithPath("/bar.dat").c_str())); |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream3_syn, 3), |
| + CreateMockRead(stream3_syn, 4), |
| }; |
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| @@ -2928,10 +3053,13 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedStream) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedPushedStream) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), CreateMockWrite(goaway, 7), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| + CreateMockWrite(goaway, 8), |
| }; |
| SpdySerializedFrame stream1_reply( |
| @@ -2947,8 +3075,8 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedPushedStream) { |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream1_body, 3), CreateMockRead(stream2_body, 4), |
| - MockRead(ASYNC, ERR_IO_PENDING, 5), CreateMockRead(stream3_syn, 6), |
| + CreateMockRead(stream1_body, 4), CreateMockRead(stream2_body, 5), |
| + MockRead(ASYNC, ERR_IO_PENDING, 6), CreateMockRead(stream3_syn, 7), |
| }; |
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| @@ -4424,8 +4552,10 @@ TEST_F(SpdyNetworkTransactionTest, SpdyBasicAuth) { |
| TEST_F(SpdyNetworkTransactionTest, ServerPushWithHeaders) { |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(stream1_syn, 0), |
| + CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| }; |
| SpdySerializedFrame stream1_reply( |
| @@ -4452,10 +4582,10 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushWithHeaders) { |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), |
| CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream2_headers, 3), |
| - CreateMockRead(stream1_body, 4, SYNCHRONOUS), |
| - CreateMockRead(stream2_body, 5), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
| + CreateMockRead(stream2_headers, 4), |
| + CreateMockRead(stream1_body, 5, SYNCHRONOUS), |
| + CreateMockRead(stream2_body, 6), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7), // Force a pause |
| }; |
| HttpResponseInfo response; |
| @@ -4480,8 +4610,11 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushClaimBeforeHeaders) { |
| // We push a stream and attempt to claim it before the headers come down. |
| SpdySerializedFrame stream1_syn( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame stream2_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| CreateMockWrite(stream1_syn, 0, SYNCHRONOUS), |
| + CreateMockWrite(stream2_priority, 3), |
| }; |
| SpdySerializedFrame stream1_reply( |
| @@ -4502,9 +4635,9 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushClaimBeforeHeaders) { |
| 2, kPushedData, strlen(kPushedData), true)); |
| MockRead reads[] = { |
| CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
| - CreateMockRead(stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), |
| - CreateMockRead(stream2_headers, 5), CreateMockRead(stream2_body, 6), |
| - MockRead(ASYNC, ERR_IO_PENDING, 7), MockRead(ASYNC, 0, 8), // EOF |
| + CreateMockRead(stream1_body, 4), MockRead(ASYNC, ERR_IO_PENDING, 5), |
| + CreateMockRead(stream2_headers, 6), CreateMockRead(stream2_body, 7), |
| + MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9), // EOF |
| }; |
| HttpResponseInfo response; |
| @@ -4757,8 +4890,10 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushValidCrossOrigin) { |
| SpdySerializedFrame headers( |
| spdy_util_.ConstructSpdyGet(url_to_fetch, 1, LOWEST)); |
| + SpdySerializedFrame push_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes[] = { |
| - CreateMockWrite(headers, 0), |
| + CreateMockWrite(headers, 0), CreateMockWrite(push_priority, 3), |
| }; |
| SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| @@ -4771,9 +4906,9 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushValidCrossOrigin) { |
| MockRead reads[] = { |
| CreateMockRead(reply, 1), |
| CreateMockRead(push, 2), |
| - CreateMockRead(body, 3), |
| - CreateMockRead(pushed_body, 4), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), |
| + CreateMockRead(body, 4), |
| + CreateMockRead(pushed_body, 5), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), |
| }; |
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| @@ -4867,8 +5002,10 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushValidCrossOriginWithOpenSession) { |
| SpdySerializedFrame headers1( |
| spdy_util_1.ConstructSpdyGet(url_to_fetch1, 1, LOWEST)); |
| + SpdySerializedFrame push_priority( |
| + spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| MockWrite writes1[] = { |
| - CreateMockWrite(headers1, 0), |
| + CreateMockWrite(headers1, 0), CreateMockWrite(push_priority, 3), |
| }; |
| SpdySerializedFrame reply1(spdy_util_1.ConstructSpdyGetReply(nullptr, 0, 1)); |
| @@ -4884,9 +5021,9 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushValidCrossOriginWithOpenSession) { |
| MockRead reads1[] = { |
| CreateMockRead(reply1, 1), |
| CreateMockRead(push, 2), |
| - CreateMockRead(body1, 3), |
| - CreateMockRead(pushed_body, 4), |
| - MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), |
| + CreateMockRead(body1, 4), |
| + CreateMockRead(pushed_body, 5), |
| + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), |
| }; |
| SequencedSocketData data1(reads1, arraysize(reads1), writes1, |
| @@ -6001,16 +6138,19 @@ TEST_F(SpdyNetworkTransactionTest, |
| SpdySerializedFrame push_b(spdy_util_.ConstructInitialSpdyPushFrame( |
| std::move(push_b_headers), 2, 1)); |
| MockRead reads[] = { |
| - CreateMockRead(push_a, 1), CreateMockRead(push_b, 2), |
| + CreateMockRead(push_a, 1), CreateMockRead(push_b, 3), |
| }; |
| SpdySerializedFrame req( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + SpdySerializedFrame priority_a( |
| + spdy_util_.ConstructSpdyPriority(4, 1, IDLE, true)); |
| SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 4, GOAWAY_PROTOCOL_ERROR, |
| "New push stream id must be greater than the last accepted.")); |
| MockWrite writes[] = { |
| - CreateMockWrite(req, 0), CreateMockWrite(goaway, 3), |
| + CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| + CreateMockWrite(goaway, 4), |
| }; |
| SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |