OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <cmath> | 5 #include <cmath> |
6 #include <memory> | 6 #include <memory> |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 1876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1887 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 1887 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
1888 | 1888 |
1889 helper.session()->spdy_session_pool()->CloseAllSessions(); | 1889 helper.session()->spdy_session_pool()->CloseAllSessions(); |
1890 helper.VerifyDataConsumed(); | 1890 helper.VerifyDataConsumed(); |
1891 } | 1891 } |
1892 | 1892 |
1893 TEST_F(SpdyNetworkTransactionTest, ResetPushWithTransferEncoding) { | 1893 TEST_F(SpdyNetworkTransactionTest, ResetPushWithTransferEncoding) { |
1894 // Construct the request. | 1894 // Construct the request. |
1895 SpdySerializedFrame req( | 1895 SpdySerializedFrame req( |
1896 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 1896 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
1897 SpdySerializedFrame priority( | |
1898 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
1897 SpdySerializedFrame rst( | 1899 SpdySerializedFrame rst( |
1898 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); | 1900 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); |
1899 MockWrite writes[] = { | 1901 MockWrite writes[] = { |
1900 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), | 1902 CreateMockWrite(req, 0), CreateMockWrite(priority, 3), |
1903 CreateMockWrite(rst, 5), | |
1901 }; | 1904 }; |
1902 | 1905 |
1903 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 1906 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
1904 const char* const headers[] = { | 1907 const char* const headers[] = { |
1905 "transfer-encoding", "chunked" | 1908 "transfer-encoding", "chunked" |
1906 }; | 1909 }; |
1907 SpdySerializedFrame push( | 1910 SpdySerializedFrame push( |
1908 spdy_util_.ConstructSpdyPush(headers, arraysize(headers) / 2, 2, 1, | 1911 spdy_util_.ConstructSpdyPush(headers, arraysize(headers) / 2, 2, 1, |
1909 GetDefaultUrlWithPath("/1").c_str())); | 1912 GetDefaultUrlWithPath("/1").c_str())); |
1910 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 1913 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
1911 MockRead reads[] = { | 1914 MockRead reads[] = { |
1912 CreateMockRead(resp, 1), CreateMockRead(push, 2), CreateMockRead(body, 3), | 1915 CreateMockRead(resp, 1), CreateMockRead(push, 2), CreateMockRead(body, 4), |
1913 MockRead(ASYNC, 0, 5) // EOF | 1916 MockRead(ASYNC, 0, 6) // EOF |
1914 }; | 1917 }; |
1915 | 1918 |
1916 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1919 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1917 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 1920 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
1918 NetLogWithSource(), NULL); | 1921 NetLogWithSource(), NULL); |
1919 helper.RunToCompletion(&data); | 1922 helper.RunToCompletion(&data); |
1920 TransactionHelperResult out = helper.output(); | 1923 TransactionHelperResult out = helper.output(); |
1921 EXPECT_THAT(out.rv, IsOk()); | 1924 EXPECT_THAT(out.rv, IsOk()); |
1922 EXPECT_EQ("HTTP/1.1 200", out.status_line); | 1925 EXPECT_EQ("HTTP/1.1 200", out.status_line); |
1923 EXPECT_EQ("hello!", out.response_data); | 1926 EXPECT_EQ("hello!", out.response_data); |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2164 } | 2167 } |
2165 | 2168 |
2166 TEST_F(SpdyNetworkTransactionTest, | 2169 TEST_F(SpdyNetworkTransactionTest, |
2167 TestRawHeaderSizeSuccessfullPushHeadersFirst) { | 2170 TestRawHeaderSizeSuccessfullPushHeadersFirst) { |
2168 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 2171 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
2169 headers["user-agent"] = ""; | 2172 headers["user-agent"] = ""; |
2170 headers["accept-encoding"] = "gzip, deflate"; | 2173 headers["accept-encoding"] = "gzip, deflate"; |
2171 | 2174 |
2172 SpdySerializedFrame req( | 2175 SpdySerializedFrame req( |
2173 spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true)); | 2176 spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true)); |
2177 SpdySerializedFrame priority( | |
2178 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2174 MockWrite writes[] = { | 2179 MockWrite writes[] = { |
2175 CreateMockWrite(req, 0), | 2180 CreateMockWrite(req, 0), CreateMockWrite(priority, 2), |
2176 }; | 2181 }; |
2177 | 2182 |
2178 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2183 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
2179 SpdySerializedFrame response_body_frame( | 2184 SpdySerializedFrame response_body_frame( |
2180 spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true)); | 2185 spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true)); |
2181 | 2186 |
2182 SpdyHeaderBlock push_headers; | 2187 SpdyHeaderBlock push_headers; |
2183 spdy_util_.AddUrlToHeaderBlock(std::string(kDefaultUrl) + "b.dat", | 2188 spdy_util_.AddUrlToHeaderBlock(std::string(kDefaultUrl) + "b.dat", |
2184 &push_headers); | 2189 &push_headers); |
2185 | 2190 |
2186 SpdySerializedFrame push_init_frame( | 2191 SpdySerializedFrame push_init_frame( |
2187 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); | 2192 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); |
2188 | 2193 |
2189 SpdySerializedFrame push_headers_frame( | 2194 SpdySerializedFrame push_headers_frame( |
2190 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); | 2195 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); |
2191 | 2196 |
2192 SpdySerializedFrame push_body_frame(spdy_util_.ConstructSpdyDataFrame( | 2197 SpdySerializedFrame push_body_frame(spdy_util_.ConstructSpdyDataFrame( |
2193 2, "should not include either", 25, false)); | 2198 2, "should not include either", 25, false)); |
2194 | 2199 |
2195 MockRead push_init_read(CreateMockRead(push_init_frame, 1)); | 2200 MockRead push_init_read(CreateMockRead(push_init_frame, 1)); |
2196 MockRead response_headers(CreateMockRead(resp, 4)); | 2201 MockRead response_headers(CreateMockRead(resp, 5)); |
2197 // raw_header_size() will contain the size of the push promise frame | 2202 // raw_header_size() will contain the size of the push promise frame |
2198 // initialization. | 2203 // initialization. |
2199 int expected_response_headers_size = | 2204 int expected_response_headers_size = |
2200 response_headers.data_len + push_init_read.data_len; | 2205 response_headers.data_len + push_init_read.data_len; |
2201 | 2206 |
2202 MockRead reads[] = { | 2207 MockRead reads[] = { |
2203 push_init_read, | 2208 push_init_read, |
2204 CreateMockRead(push_headers_frame, 2), | 2209 CreateMockRead(push_headers_frame, 3), |
2205 CreateMockRead(push_body_frame, 3), | 2210 CreateMockRead(push_body_frame, 4), |
2206 response_headers, | 2211 response_headers, |
2207 CreateMockRead(response_body_frame, 5), | 2212 CreateMockRead(response_body_frame, 6), |
2208 MockRead(ASYNC, 0, 6) // EOF | 2213 MockRead(ASYNC, 0, 7) // EOF |
2209 }; | 2214 }; |
2210 | 2215 |
2211 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2216 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2212 | 2217 |
2213 TestDelegate delegate; | 2218 TestDelegate delegate; |
2214 SpdyURLRequestContext spdy_url_request_context; | 2219 SpdyURLRequestContext spdy_url_request_context; |
2215 TestNetworkDelegate network_delegate; | 2220 TestNetworkDelegate network_delegate; |
2216 spdy_url_request_context.set_network_delegate(&network_delegate); | 2221 spdy_url_request_context.set_network_delegate(&network_delegate); |
2217 SSLSocketDataProvider ssl_data(ASYNC, OK); | 2222 SSLSocketDataProvider ssl_data(ASYNC, OK); |
2218 ssl_data.next_proto = kProtoHTTP2; | 2223 ssl_data.next_proto = kProtoHTTP2; |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2388 } | 2393 } |
2389 EXPECT_TRUE(data.AllReadDataConsumed()); | 2394 EXPECT_TRUE(data.AllReadDataConsumed()); |
2390 EXPECT_TRUE(data.AllWriteDataConsumed()); | 2395 EXPECT_TRUE(data.AllWriteDataConsumed()); |
2391 EXPECT_TRUE(data2.AllReadDataConsumed()); | 2396 EXPECT_TRUE(data2.AllReadDataConsumed()); |
2392 EXPECT_TRUE(data2.AllWriteDataConsumed()); | 2397 EXPECT_TRUE(data2.AllWriteDataConsumed()); |
2393 } | 2398 } |
2394 | 2399 |
2395 TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame) { | 2400 TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame) { |
2396 SpdySerializedFrame stream1_syn( | 2401 SpdySerializedFrame stream1_syn( |
2397 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2402 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2398 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2403 SpdySerializedFrame stream2_priority( |
2404 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2399 MockWrite writes[] = { | 2405 MockWrite writes[] = { |
2400 CreateMockWrite(stream1_syn, 0), | 2406 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
2401 }; | 2407 }; |
2402 | 2408 |
2403 SpdySerializedFrame stream1_reply( | 2409 SpdySerializedFrame stream1_reply( |
2404 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2410 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2405 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2411 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2406 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2412 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2413 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | |
2407 const char kPushedData[] = "pushed"; | 2414 const char kPushedData[] = "pushed"; |
2408 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( | 2415 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
2409 2, kPushedData, strlen(kPushedData), true)); | 2416 2, kPushedData, strlen(kPushedData), true)); |
2410 MockRead reads[] = { | 2417 MockRead reads[] = { |
2411 CreateMockRead(stream1_reply, 1), | 2418 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
2412 CreateMockRead(stream2_syn, 2), | 2419 CreateMockRead(stream1_body, 4), CreateMockRead(stream2_body, 5), |
2413 CreateMockRead(stream1_body, 3, SYNCHRONOUS), | 2420 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
2414 CreateMockRead(stream2_body, 4), | |
2415 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause | |
2416 }; | 2421 }; |
2417 | 2422 |
2418 HttpResponseInfo response; | 2423 HttpResponseInfo response; |
2419 HttpResponseInfo response2; | 2424 HttpResponseInfo response2; |
2420 std::string expected_push_result("pushed"); | 2425 std::string expected_push_result("pushed"); |
2421 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2426 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2422 RunServerPushTest(&data, | 2427 RunServerPushTest(&data, |
2423 &response, | 2428 &response, |
2424 &response2, | 2429 &response2, |
2425 expected_push_result); | 2430 expected_push_result); |
2426 | 2431 |
2427 // Verify the response headers. | 2432 // Verify the response headers. |
2428 EXPECT_TRUE(response.headers); | 2433 EXPECT_TRUE(response.headers); |
2429 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2434 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
2430 | 2435 |
2431 // Verify the pushed stream. | 2436 // Verify the pushed stream. |
2432 EXPECT_TRUE(response2.headers); | 2437 EXPECT_TRUE(response2.headers); |
2433 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); | 2438 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
2434 } | 2439 } |
2435 | 2440 |
2436 TEST_F(SpdyNetworkTransactionTest, ServerPushBeforeHeaders) { | 2441 TEST_F(SpdyNetworkTransactionTest, ServerPushBeforeHeaders) { |
2437 SpdySerializedFrame stream1_syn( | 2442 SpdySerializedFrame stream1_syn( |
2438 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2443 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2444 SpdySerializedFrame stream2_priority( | |
2445 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2439 MockWrite writes[] = { | 2446 MockWrite writes[] = { |
2440 CreateMockWrite(stream1_syn, 0), | 2447 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 2), |
2441 }; | 2448 }; |
2442 | 2449 |
2443 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2450 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2444 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2451 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2445 SpdySerializedFrame stream1_reply( | 2452 SpdySerializedFrame stream1_reply( |
2446 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2453 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2447 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2454 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
2448 const char kPushedData[] = "pushed"; | 2455 const char kPushedData[] = "pushed"; |
2449 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( | 2456 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
2450 2, kPushedData, strlen(kPushedData), true)); | 2457 2, kPushedData, strlen(kPushedData), true)); |
2451 MockRead reads[] = { | 2458 MockRead reads[] = { |
2452 CreateMockRead(stream2_syn, 1), | 2459 CreateMockRead(stream2_syn, 1), |
2453 CreateMockRead(stream1_reply, 2), | 2460 CreateMockRead(stream1_reply, 3), |
2454 CreateMockRead(stream1_body, 3, SYNCHRONOUS), | 2461 CreateMockRead(stream1_body, 4, SYNCHRONOUS), |
2455 CreateMockRead(stream2_body, 4), | 2462 CreateMockRead(stream2_body, 5), |
2456 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause | 2463 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
2457 }; | 2464 }; |
2458 | 2465 |
2459 HttpResponseInfo response; | 2466 HttpResponseInfo response; |
2460 HttpResponseInfo response2; | 2467 HttpResponseInfo response2; |
2461 std::string expected_push_result("pushed"); | 2468 std::string expected_push_result("pushed"); |
2462 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2469 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2463 RunServerPushTest(&data, | 2470 RunServerPushTest(&data, |
2464 &response, | 2471 &response, |
2465 &response2, | 2472 &response2, |
2466 expected_push_result); | 2473 expected_push_result); |
2467 | 2474 |
2468 // Verify the response headers. | 2475 // Verify the response headers. |
2469 EXPECT_TRUE(response.headers); | 2476 EXPECT_TRUE(response.headers); |
2470 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2477 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
2471 | 2478 |
2472 // Verify the pushed stream. | 2479 // Verify the pushed stream. |
2473 EXPECT_TRUE(response2.headers); | 2480 EXPECT_TRUE(response2.headers); |
2474 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); | 2481 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
2475 } | 2482 } |
2476 | 2483 |
2477 TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame2) { | 2484 TEST_F(SpdyNetworkTransactionTest, ServerPushSingleDataFrame2) { |
2478 SpdySerializedFrame stream1_syn( | 2485 SpdySerializedFrame stream1_syn( |
2479 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2486 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2487 SpdySerializedFrame stream2_priority( | |
2488 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2480 MockWrite writes[] = { | 2489 MockWrite writes[] = { |
2481 CreateMockWrite(stream1_syn, 0), | 2490 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
2482 }; | 2491 }; |
2483 | 2492 |
2484 SpdySerializedFrame stream1_reply( | 2493 SpdySerializedFrame stream1_reply( |
2485 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2494 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2486 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2495 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2487 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2496 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2488 const char kPushedData[] = "pushed"; | 2497 const char kPushedData[] = "pushed"; |
2489 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( | 2498 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
2490 2, kPushedData, strlen(kPushedData), true)); | 2499 2, kPushedData, strlen(kPushedData), true)); |
2491 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2500 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
2492 MockRead reads[] = { | 2501 MockRead reads[] = { |
2493 CreateMockRead(stream1_reply, 1), | 2502 CreateMockRead(stream1_reply, 1), |
2494 CreateMockRead(stream2_syn, 2), | 2503 CreateMockRead(stream2_syn, 2), |
2495 CreateMockRead(stream2_body, 3), | 2504 CreateMockRead(stream2_body, 4), |
2496 CreateMockRead(stream1_body, 4, SYNCHRONOUS), | 2505 CreateMockRead(stream1_body, 5, SYNCHRONOUS), |
2497 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause | 2506 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
2498 }; | 2507 }; |
2499 | 2508 |
2500 HttpResponseInfo response; | 2509 HttpResponseInfo response; |
2501 HttpResponseInfo response2; | 2510 HttpResponseInfo response2; |
2502 std::string expected_push_result("pushed"); | 2511 std::string expected_push_result("pushed"); |
2503 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2512 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2504 RunServerPushTest(&data, | 2513 RunServerPushTest(&data, |
2505 &response, | 2514 &response, |
2506 &response2, | 2515 &response2, |
2507 expected_push_result); | 2516 expected_push_result); |
2508 | 2517 |
2509 // Verify the response headers. | 2518 // Verify the response headers. |
2510 EXPECT_TRUE(response.headers); | 2519 EXPECT_TRUE(response.headers); |
2511 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2520 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
2512 | 2521 |
2513 // Verify the pushed stream. | 2522 // Verify the pushed stream. |
2514 EXPECT_TRUE(response2.headers); | 2523 EXPECT_TRUE(response2.headers); |
2515 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); | 2524 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
2516 } | 2525 } |
2517 | 2526 |
2527 TEST_F(SpdyNetworkTransactionTest, ServerPushUpdatesPriority) { | |
2528 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|.
| |
2529 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true)); | |
2530 SpdySerializedFrame stream3_syn( | |
2531 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); | |
2532 SpdySerializedFrame stream5_syn( | |
2533 spdy_util_.ConstructSpdyGet(nullptr, 0, 5, MEDIUM, true)); | |
2534 | |
2535 // Stream 1 pushes two streams that are initially prioritized below stream 5. | |
2536 // Stream 2 is later prioritized below stream 1 after it matches a request. | |
2537 SpdySerializedFrame stream2_priority( | |
2538 spdy_util_.ConstructSpdyPriority(2, 5, IDLE, true)); | |
2539 SpdySerializedFrame stream4_priority( | |
2540 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); | |
2541 SpdySerializedFrame stream4_priority_update( | |
2542 spdy_util_.ConstructSpdyPriority(4, 5, IDLE, true)); | |
2543 SpdySerializedFrame stream2_priority_update( | |
2544 spdy_util_.ConstructSpdyPriority(2, 1, HIGHEST, true)); | |
2545 | |
2546 MockWrite writes[] = { | |
2547 CreateMockWrite(stream1_syn, 0), | |
2548 CreateMockWrite(stream3_syn, 1), | |
2549 CreateMockWrite(stream5_syn, 2), | |
2550 CreateMockWrite(stream2_priority, 7), | |
2551 CreateMockWrite(stream4_priority, 9), | |
2552 CreateMockWrite(stream4_priority_update, 11), | |
2553 CreateMockWrite(stream2_priority_update, 12), | |
2554 }; | |
2555 | |
2556 SpdySerializedFrame stream1_reply( | |
2557 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.
| |
2558 SpdySerializedFrame stream3_reply( | |
2559 spdy_util_.ConstructSpdyGetReply(NULL, 0, 3)); | |
2560 SpdySerializedFrame stream5_reply( | |
2561 spdy_util_.ConstructSpdyGetReply(NULL, 0, 5)); | |
2562 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.
| |
2563 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame(2, true)); | |
2564 SpdySerializedFrame stream3_body(spdy_util_.ConstructSpdyDataFrame(3, true)); | |
2565 SpdySerializedFrame stream5_body(spdy_util_.ConstructSpdyDataFrame(5, true)); | |
2566 | |
2567 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.
| |
2568 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | |
2569 SpdySerializedFrame stream4_syn(spdy_util_.ConstructSpdyPush( | |
2570 NULL, 0, 4, 1, GetDefaultUrlWithPath("/bar.dat").c_str())); | |
2571 | |
2572 MockRead reads[] = { | |
2573 CreateMockRead(stream1_reply, 3), | |
2574 CreateMockRead(stream3_reply, 4), | |
2575 CreateMockRead(stream5_reply, 5), | |
2576 CreateMockRead(stream2_syn, 6), | |
2577 CreateMockRead(stream4_syn, 8), | |
2578 MockRead(ASYNC, ERR_IO_PENDING, 10), | |
2579 CreateMockRead(stream1_body, 13), | |
2580 CreateMockRead(stream2_body, 14), | |
2581 CreateMockRead(stream3_body, 15), | |
2582 CreateMockRead(stream5_body, 16), | |
2583 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 17), // Force a pause | |
2584 }; | |
2585 | |
2586 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | |
2587 SequencedSocketData data_placeholder1(NULL, 0, NULL, 0); | |
2588 SequencedSocketData data_placeholder2(NULL, 0, NULL, 0); | |
2589 SequencedSocketData data_placeholder3(NULL, 0, NULL, 0); | |
2590 | |
2591 NormalSpdyTransactionHelper helper(CreateGetRequest(), LOWEST, | |
2592 NetLogWithSource(), NULL); | |
2593 helper.RunPreTestSetup(); | |
2594 helper.AddData(&data); | |
2595 helper.AddData(&data_placeholder1); // other requests reuse the same socket | |
2596 helper.AddData(&data_placeholder2); | |
2597 helper.AddData(&data_placeholder3); | |
2598 HttpNetworkTransaction trans1(HIGHEST, helper.session()); | |
2599 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.
| |
2600 HttpNetworkTransaction trans3(MEDIUM, helper.session()); | |
2601 HttpNetworkTransaction trans5(MEDIUM, helper.session()); | |
2602 | |
2603 TestCompletionCallback callback1; | |
2604 TestCompletionCallback callback2; | |
Bence
2017/01/05 17:14:45
Instantiate |callback2| further down, after "// St
Tom Bergan
2017/01/06 00:08:41
Done.
| |
2605 TestCompletionCallback callback3; | |
2606 TestCompletionCallback callback5; | |
2607 | |
2608 // Start the ordinary requests. | |
2609 NetLogWithSource log; | |
2610 ASSERT_THAT(trans1.Start(&CreateGetRequest(), callback1.callback(), log), | |
2611 IsError(ERR_IO_PENDING)); | |
2612 ASSERT_THAT(trans3.Start(&CreateGetRequest(), callback3.callback(), log), | |
2613 IsError(ERR_IO_PENDING)); | |
2614 ASSERT_THAT(trans5.Start(&CreateGetRequest(), callback5.callback(), log), | |
2615 IsError(ERR_IO_PENDING)); | |
2616 data.RunUntilPaused(); | |
2617 | |
2618 // Start a request that matches the push. | |
2619 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
| |
2620 push_req.url = GURL(GetDefaultUrlWithPath("/foo.dat")); | |
2621 ASSERT_THAT(trans2.Start(&push_req, callback2.callback(), log), | |
2622 IsError(ERR_IO_PENDING)); | |
2623 data.Resume(); | |
2624 | |
2625 ASSERT_THAT(callback1.WaitForResult(), IsOk()); | |
2626 ASSERT_THAT(callback2.WaitForResult(), IsOk()); | |
2627 ASSERT_THAT(callback3.WaitForResult(), IsOk()); | |
2628 ASSERT_THAT(callback5.WaitForResult(), IsOk()); | |
2629 } | |
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
| |
2630 | |
2518 TEST_F(SpdyNetworkTransactionTest, ServerPushServerAborted) { | 2631 TEST_F(SpdyNetworkTransactionTest, ServerPushServerAborted) { |
2519 SpdySerializedFrame stream1_syn( | 2632 SpdySerializedFrame stream1_syn( |
2520 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2633 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2521 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2634 SpdySerializedFrame stream2_priority( |
2635 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2522 MockWrite writes[] = { | 2636 MockWrite writes[] = { |
2523 CreateMockWrite(stream1_syn, 0), | 2637 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
2524 }; | 2638 }; |
2525 | 2639 |
2526 SpdySerializedFrame stream1_reply( | 2640 SpdySerializedFrame stream1_reply( |
2527 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2641 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2642 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.
| |
2528 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2643 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2529 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2644 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2530 SpdySerializedFrame stream2_rst( | 2645 SpdySerializedFrame stream2_rst( |
2531 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); | 2646 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); |
2532 MockRead reads[] = { | 2647 MockRead reads[] = { |
2533 CreateMockRead(stream1_reply, 1), | 2648 CreateMockRead(stream1_reply, 1), |
2534 CreateMockRead(stream2_syn, 2), | 2649 CreateMockRead(stream2_syn, 2), |
2535 CreateMockRead(stream2_rst, 3), | 2650 CreateMockRead(stream2_rst, 4), |
2536 CreateMockRead(stream1_body, 4, SYNCHRONOUS), | 2651 CreateMockRead(stream1_body, 5, SYNCHRONOUS), |
2537 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause | 2652 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
2538 }; | 2653 }; |
2539 | 2654 |
2540 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2655 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2541 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 2656 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
2542 NetLogWithSource(), NULL); | 2657 NetLogWithSource(), NULL); |
2543 | 2658 |
2544 helper.RunPreTestSetup(); | 2659 helper.RunPreTestSetup(); |
2545 helper.AddData(&data); | 2660 helper.AddData(&data); |
2546 | 2661 |
2547 HttpNetworkTransaction* trans = helper.trans(); | 2662 HttpNetworkTransaction* trans = helper.trans(); |
(...skipping 14 matching lines...) Expand all Loading... | |
2562 HttpResponseInfo response = *trans->GetResponseInfo(); | 2677 HttpResponseInfo response = *trans->GetResponseInfo(); |
2563 EXPECT_TRUE(response.headers); | 2678 EXPECT_TRUE(response.headers); |
2564 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2679 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
2565 } | 2680 } |
2566 | 2681 |
2567 // Verify that we don't leak streams and that we properly send a reset | 2682 // Verify that we don't leak streams and that we properly send a reset |
2568 // if the server pushes the same stream twice. | 2683 // if the server pushes the same stream twice. |
2569 TEST_F(SpdyNetworkTransactionTest, ServerPushDuplicate) { | 2684 TEST_F(SpdyNetworkTransactionTest, ServerPushDuplicate) { |
2570 SpdySerializedFrame stream1_syn( | 2685 SpdySerializedFrame stream1_syn( |
2571 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2686 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2572 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2687 SpdySerializedFrame stream2_priority( |
2688 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2573 SpdySerializedFrame stream3_rst( | 2689 SpdySerializedFrame stream3_rst( |
2574 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_PROTOCOL_ERROR)); | 2690 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_PROTOCOL_ERROR)); |
2575 MockWrite writes[] = { | 2691 MockWrite writes[] = { |
2576 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream3_rst, 4), | 2692 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
2693 CreateMockWrite(stream3_rst, 5), | |
2577 }; | 2694 }; |
2578 | 2695 |
2579 SpdySerializedFrame stream1_reply( | 2696 SpdySerializedFrame stream1_reply( |
2580 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2697 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2698 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | |
2581 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2699 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2582 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2700 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2583 const char kPushedData[] = "pushed"; | 2701 const char kPushedData[] = "pushed"; |
2584 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( | 2702 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
2585 2, kPushedData, strlen(kPushedData), true)); | 2703 2, kPushedData, strlen(kPushedData), true)); |
2586 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( | 2704 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( |
2587 NULL, 0, 4, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2705 NULL, 0, 4, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2588 MockRead reads[] = { | 2706 MockRead reads[] = { |
2589 CreateMockRead(stream1_reply, 1), | 2707 CreateMockRead(stream1_reply, 1), |
2590 CreateMockRead(stream2_syn, 2), | 2708 CreateMockRead(stream2_syn, 2), |
2591 CreateMockRead(stream3_syn, 3), | 2709 CreateMockRead(stream3_syn, 4), |
2592 CreateMockRead(stream1_body, 5), | 2710 CreateMockRead(stream1_body, 6), |
2593 CreateMockRead(stream2_body, 6), | 2711 CreateMockRead(stream2_body, 7), |
2594 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7), // Force a pause | 2712 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8), // Force a pause |
2595 }; | 2713 }; |
2596 | 2714 |
2597 HttpResponseInfo response; | 2715 HttpResponseInfo response; |
2598 HttpResponseInfo response2; | 2716 HttpResponseInfo response2; |
2599 std::string expected_push_result("pushed"); | 2717 std::string expected_push_result("pushed"); |
2600 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2718 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2601 RunServerPushTest(&data, | 2719 RunServerPushTest(&data, |
2602 &response, | 2720 &response, |
2603 &response2, | 2721 &response2, |
2604 expected_push_result); | 2722 expected_push_result); |
2605 | 2723 |
2606 // Verify the response headers. | 2724 // Verify the response headers. |
2607 EXPECT_TRUE(response.headers); | 2725 EXPECT_TRUE(response.headers); |
2608 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2726 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
2609 | 2727 |
2610 // Verify the pushed stream. | 2728 // Verify the pushed stream. |
2611 EXPECT_TRUE(response2.headers); | 2729 EXPECT_TRUE(response2.headers); |
2612 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); | 2730 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
2613 } | 2731 } |
2614 | 2732 |
2615 TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrame) { | 2733 TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrame) { |
2616 SpdySerializedFrame stream1_syn( | 2734 SpdySerializedFrame stream1_syn( |
2617 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2735 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2618 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2736 SpdySerializedFrame stream2_priority( |
2737 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2619 MockWrite writes[] = { | 2738 MockWrite writes[] = { |
2620 CreateMockWrite(stream1_syn, 0), | 2739 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
2621 }; | 2740 }; |
2622 | 2741 |
2623 SpdySerializedFrame stream1_reply( | 2742 SpdySerializedFrame stream1_reply( |
2624 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2743 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2744 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | |
2625 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2745 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2626 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2746 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2627 static const char kPushedData[] = "pushed my darling hello my baby"; | 2747 static const char kPushedData[] = "pushed my darling hello my baby"; |
2628 SpdySerializedFrame stream2_body_base(spdy_util_.ConstructSpdyDataFrame( | 2748 SpdySerializedFrame stream2_body_base(spdy_util_.ConstructSpdyDataFrame( |
2629 2, kPushedData, strlen(kPushedData), true)); | 2749 2, kPushedData, strlen(kPushedData), true)); |
2630 const size_t kChunkSize = strlen(kPushedData) / 4; | 2750 const size_t kChunkSize = strlen(kPushedData) / 4; |
2631 SpdySerializedFrame stream2_body1(stream2_body_base.data(), kChunkSize, | 2751 SpdySerializedFrame stream2_body1(stream2_body_base.data(), kChunkSize, |
2632 false); | 2752 false); |
2633 SpdySerializedFrame stream2_body2(stream2_body_base.data() + kChunkSize, | 2753 SpdySerializedFrame stream2_body2(stream2_body_base.data() + kChunkSize, |
2634 kChunkSize, false); | 2754 kChunkSize, false); |
2635 SpdySerializedFrame stream2_body3(stream2_body_base.data() + 2 * kChunkSize, | 2755 SpdySerializedFrame stream2_body3(stream2_body_base.data() + 2 * kChunkSize, |
2636 kChunkSize, false); | 2756 kChunkSize, false); |
2637 SpdySerializedFrame stream2_body4(stream2_body_base.data() + 3 * kChunkSize, | 2757 SpdySerializedFrame stream2_body4(stream2_body_base.data() + 3 * kChunkSize, |
2638 stream2_body_base.size() - 3 * kChunkSize, | 2758 stream2_body_base.size() - 3 * kChunkSize, |
2639 false); | 2759 false); |
2640 MockRead reads[] = { | 2760 MockRead reads[] = { |
2641 CreateMockRead(stream1_reply, 1), | 2761 CreateMockRead(stream1_reply, 1), |
2642 CreateMockRead(stream2_syn, 2), | 2762 CreateMockRead(stream2_syn, 2), |
2643 CreateMockRead(stream2_body1, 3), | 2763 CreateMockRead(stream2_body1, 4), |
2644 CreateMockRead(stream2_body2, 4), | 2764 CreateMockRead(stream2_body2, 5), |
2645 CreateMockRead(stream2_body3, 5), | 2765 CreateMockRead(stream2_body3, 6), |
2646 CreateMockRead(stream2_body4, 6), | 2766 CreateMockRead(stream2_body4, 7), |
2647 CreateMockRead(stream1_body, 7, SYNCHRONOUS), | 2767 CreateMockRead(stream1_body, 8, SYNCHRONOUS), |
2648 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8), // Force a pause | 2768 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 9), // Force a pause |
2649 }; | 2769 }; |
2650 | 2770 |
2651 HttpResponseInfo response; | 2771 HttpResponseInfo response; |
2652 HttpResponseInfo response2; | 2772 HttpResponseInfo response2; |
2653 std::string expected_push_result("pushed my darling hello my baby"); | 2773 std::string expected_push_result("pushed my darling hello my baby"); |
2654 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2774 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2655 RunServerPushTest(&data, &response, &response2, kPushedData); | 2775 RunServerPushTest(&data, &response, &response2, kPushedData); |
2656 | 2776 |
2657 // Verify the response headers. | 2777 // Verify the response headers. |
2658 EXPECT_TRUE(response.headers); | 2778 EXPECT_TRUE(response.headers); |
2659 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2779 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
2660 | 2780 |
2661 // Verify the pushed stream. | 2781 // Verify the pushed stream. |
2662 EXPECT_TRUE(response2.headers); | 2782 EXPECT_TRUE(response2.headers); |
2663 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); | 2783 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
2664 } | 2784 } |
2665 | 2785 |
2666 TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrameInterrupted) { | 2786 TEST_F(SpdyNetworkTransactionTest, ServerPushMultipleDataFrameInterrupted) { |
2667 SpdySerializedFrame stream1_syn( | 2787 SpdySerializedFrame stream1_syn( |
2668 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2788 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2669 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2789 SpdySerializedFrame stream2_priority( |
2790 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2670 MockWrite writes[] = { | 2791 MockWrite writes[] = { |
2671 CreateMockWrite(stream1_syn, 0), | 2792 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
2672 }; | 2793 }; |
2673 | 2794 |
2674 SpdySerializedFrame stream1_reply( | 2795 SpdySerializedFrame stream1_reply( |
2675 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2796 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2797 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | |
2676 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2798 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2677 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2799 NULL, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2678 static const char kPushedData[] = "pushed my darling hello my baby"; | 2800 static const char kPushedData[] = "pushed my darling hello my baby"; |
2679 SpdySerializedFrame stream2_body_base(spdy_util_.ConstructSpdyDataFrame( | 2801 SpdySerializedFrame stream2_body_base(spdy_util_.ConstructSpdyDataFrame( |
2680 2, kPushedData, strlen(kPushedData), true)); | 2802 2, kPushedData, strlen(kPushedData), true)); |
2681 const size_t kChunkSize = strlen(kPushedData) / 4; | 2803 const size_t kChunkSize = strlen(kPushedData) / 4; |
2682 SpdySerializedFrame stream2_body1(stream2_body_base.data(), kChunkSize, | 2804 SpdySerializedFrame stream2_body1(stream2_body_base.data(), kChunkSize, |
2683 false); | 2805 false); |
2684 SpdySerializedFrame stream2_body2(stream2_body_base.data() + kChunkSize, | 2806 SpdySerializedFrame stream2_body2(stream2_body_base.data() + kChunkSize, |
2685 kChunkSize, false); | 2807 kChunkSize, false); |
2686 SpdySerializedFrame stream2_body3(stream2_body_base.data() + 2 * kChunkSize, | 2808 SpdySerializedFrame stream2_body3(stream2_body_base.data() + 2 * kChunkSize, |
2687 kChunkSize, false); | 2809 kChunkSize, false); |
2688 SpdySerializedFrame stream2_body4(stream2_body_base.data() + 3 * kChunkSize, | 2810 SpdySerializedFrame stream2_body4(stream2_body_base.data() + 3 * kChunkSize, |
2689 stream2_body_base.size() - 3 * kChunkSize, | 2811 stream2_body_base.size() - 3 * kChunkSize, |
2690 false); | 2812 false); |
2691 MockRead reads[] = { | 2813 MockRead reads[] = { |
2692 CreateMockRead(stream1_reply, 1), | 2814 CreateMockRead(stream1_reply, 1), |
2693 CreateMockRead(stream2_syn, 2), | 2815 CreateMockRead(stream2_syn, 2), |
2694 CreateMockRead(stream2_body1, 3), | 2816 CreateMockRead(stream2_body1, 4), |
2695 CreateMockRead(stream2_body2, 4), | 2817 CreateMockRead(stream2_body2, 5), |
2696 CreateMockRead(stream2_body3, 5), | 2818 CreateMockRead(stream2_body3, 6), |
2697 CreateMockRead(stream2_body4, 6), | 2819 CreateMockRead(stream2_body4, 7), |
2698 CreateMockRead(stream1_body, 7, SYNCHRONOUS), | 2820 CreateMockRead(stream1_body, 8, SYNCHRONOUS), |
2699 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8) // Force a pause. | 2821 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 9) // Force a pause. |
2700 }; | 2822 }; |
2701 | 2823 |
2702 HttpResponseInfo response; | 2824 HttpResponseInfo response; |
2703 HttpResponseInfo response2; | 2825 HttpResponseInfo response2; |
2704 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2826 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2705 RunServerPushTest(&data, &response, &response2, kPushedData); | 2827 RunServerPushTest(&data, &response, &response2, kPushedData); |
2706 | 2828 |
2707 // Verify the response headers. | 2829 // Verify the response headers. |
2708 EXPECT_TRUE(response.headers); | 2830 EXPECT_TRUE(response.headers); |
2709 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2831 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2851 // Verify the response headers. | 2973 // Verify the response headers. |
2852 HttpResponseInfo response = *trans->GetResponseInfo(); | 2974 HttpResponseInfo response = *trans->GetResponseInfo(); |
2853 EXPECT_TRUE(response.headers); | 2975 EXPECT_TRUE(response.headers); |
2854 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2976 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
2855 } | 2977 } |
2856 | 2978 |
2857 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY. | 2979 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY. |
2858 TEST_F(SpdyNetworkTransactionTest, ServerPushOnPushedStream) { | 2980 TEST_F(SpdyNetworkTransactionTest, ServerPushOnPushedStream) { |
2859 SpdySerializedFrame stream1_syn( | 2981 SpdySerializedFrame stream1_syn( |
2860 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2982 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
2983 SpdySerializedFrame stream2_priority( | |
2984 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2861 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 2985 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
2862 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); | 2986 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); |
2863 MockWrite writes[] = { | 2987 MockWrite writes[] = { |
2864 CreateMockWrite(stream1_syn, 0), CreateMockWrite(goaway, 4), | 2988 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
2989 CreateMockWrite(goaway, 5), | |
2865 }; | 2990 }; |
2866 | 2991 |
2867 SpdySerializedFrame stream1_reply( | 2992 SpdySerializedFrame stream1_reply( |
2868 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); | 2993 spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); |
2869 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2994 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2870 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2995 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2871 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( | 2996 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( |
2872 nullptr, 0, 4, 2, GetDefaultUrlWithPath("/bar.dat").c_str())); | 2997 nullptr, 0, 4, 2, GetDefaultUrlWithPath("/bar.dat").c_str())); |
2873 MockRead reads[] = { | 2998 MockRead reads[] = { |
2874 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), | 2999 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
2875 CreateMockRead(stream3_syn, 3), | 3000 CreateMockRead(stream3_syn, 4), |
2876 }; | 3001 }; |
2877 | 3002 |
2878 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3003 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2879 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 3004 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
2880 NetLogWithSource(), nullptr); | 3005 NetLogWithSource(), nullptr); |
2881 helper.RunToCompletion(&data); | 3006 helper.RunToCompletion(&data); |
2882 } | 3007 } |
2883 | 3008 |
2884 // PUSH_PROMISE on a closed client-initiated stream should trigger RST_STREAM. | 3009 // PUSH_PROMISE on a closed client-initiated stream should trigger RST_STREAM. |
2885 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedStream) { | 3010 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedStream) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2921 EXPECT_TRUE(data.AllReadDataConsumed()); | 3046 EXPECT_TRUE(data.AllReadDataConsumed()); |
2922 EXPECT_TRUE(data.AllWriteDataConsumed()); | 3047 EXPECT_TRUE(data.AllWriteDataConsumed()); |
2923 VerifyStreamsClosed(helper); | 3048 VerifyStreamsClosed(helper); |
2924 } | 3049 } |
2925 | 3050 |
2926 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY even if | 3051 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY even if |
2927 // stream is closed. | 3052 // stream is closed. |
2928 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedPushedStream) { | 3053 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedPushedStream) { |
2929 SpdySerializedFrame stream1_syn( | 3054 SpdySerializedFrame stream1_syn( |
2930 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3055 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
3056 SpdySerializedFrame stream2_priority( | |
3057 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
2931 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3058 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
2932 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); | 3059 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); |
2933 MockWrite writes[] = { | 3060 MockWrite writes[] = { |
2934 CreateMockWrite(stream1_syn, 0), CreateMockWrite(goaway, 7), | 3061 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
3062 CreateMockWrite(goaway, 8), | |
2935 }; | 3063 }; |
2936 | 3064 |
2937 SpdySerializedFrame stream1_reply( | 3065 SpdySerializedFrame stream1_reply( |
2938 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3066 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
2939 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 3067 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
2940 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 3068 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
2941 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 3069 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
2942 const char kPushedData[] = "pushed"; | 3070 const char kPushedData[] = "pushed"; |
2943 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( | 3071 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
2944 2, kPushedData, strlen(kPushedData), true)); | 3072 2, kPushedData, strlen(kPushedData), true)); |
2945 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( | 3073 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( |
2946 nullptr, 0, 4, 2, GetDefaultUrlWithPath("/bar.dat").c_str())); | 3074 nullptr, 0, 4, 2, GetDefaultUrlWithPath("/bar.dat").c_str())); |
2947 | 3075 |
2948 MockRead reads[] = { | 3076 MockRead reads[] = { |
2949 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), | 3077 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
2950 CreateMockRead(stream1_body, 3), CreateMockRead(stream2_body, 4), | 3078 CreateMockRead(stream1_body, 4), CreateMockRead(stream2_body, 5), |
2951 MockRead(ASYNC, ERR_IO_PENDING, 5), CreateMockRead(stream3_syn, 6), | 3079 MockRead(ASYNC, ERR_IO_PENDING, 6), CreateMockRead(stream3_syn, 7), |
2952 }; | 3080 }; |
2953 | 3081 |
2954 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3082 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
2955 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 3083 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
2956 NetLogWithSource(), nullptr); | 3084 NetLogWithSource(), nullptr); |
2957 helper.RunPreTestSetup(); | 3085 helper.RunPreTestSetup(); |
2958 helper.AddData(&data); | 3086 helper.AddData(&data); |
2959 | 3087 |
2960 HttpNetworkTransaction* trans1 = helper.trans(); | 3088 HttpNetworkTransaction* trans1 = helper.trans(); |
2961 TestCompletionCallback callback1; | 3089 TestCompletionCallback callback1; |
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4417 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); | 4545 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); |
4418 ASSERT_TRUE(response_restart); | 4546 ASSERT_TRUE(response_restart); |
4419 ASSERT_TRUE(response_restart->headers); | 4547 ASSERT_TRUE(response_restart->headers); |
4420 EXPECT_EQ(200, response_restart->headers->response_code()); | 4548 EXPECT_EQ(200, response_restart->headers->response_code()); |
4421 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL); | 4549 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL); |
4422 } | 4550 } |
4423 | 4551 |
4424 TEST_F(SpdyNetworkTransactionTest, ServerPushWithHeaders) { | 4552 TEST_F(SpdyNetworkTransactionTest, ServerPushWithHeaders) { |
4425 SpdySerializedFrame stream1_syn( | 4553 SpdySerializedFrame stream1_syn( |
4426 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4554 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
4555 SpdySerializedFrame stream2_priority( | |
4556 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
4427 MockWrite writes[] = { | 4557 MockWrite writes[] = { |
4428 CreateMockWrite(stream1_syn, 0), | 4558 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
4429 }; | 4559 }; |
4430 | 4560 |
4431 SpdySerializedFrame stream1_reply( | 4561 SpdySerializedFrame stream1_reply( |
4432 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4562 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
4433 | 4563 |
4434 SpdyHeaderBlock initial_headers; | 4564 SpdyHeaderBlock initial_headers; |
4435 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), | 4565 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), |
4436 &initial_headers); | 4566 &initial_headers); |
4437 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( | 4567 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( |
4438 std::move(initial_headers), 2, 1)); | 4568 std::move(initial_headers), 2, 1)); |
4439 | 4569 |
4440 SpdyHeaderBlock late_headers; | 4570 SpdyHeaderBlock late_headers; |
4441 late_headers[spdy_util_.GetStatusKey()] = "200"; | 4571 late_headers[spdy_util_.GetStatusKey()] = "200"; |
4442 late_headers["hello"] = "bye"; | 4572 late_headers["hello"] = "bye"; |
4443 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( | 4573 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( |
4444 2, std::move(late_headers), false)); | 4574 2, std::move(late_headers), false)); |
4445 | 4575 |
4446 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 4576 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
4447 | 4577 |
4448 const char kPushedData[] = "pushed"; | 4578 const char kPushedData[] = "pushed"; |
4449 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( | 4579 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
4450 2, kPushedData, strlen(kPushedData), true)); | 4580 2, kPushedData, strlen(kPushedData), true)); |
4451 | 4581 |
4452 MockRead reads[] = { | 4582 MockRead reads[] = { |
4453 CreateMockRead(stream1_reply, 1), | 4583 CreateMockRead(stream1_reply, 1), |
4454 CreateMockRead(stream2_syn, 2), | 4584 CreateMockRead(stream2_syn, 2), |
4455 CreateMockRead(stream2_headers, 3), | 4585 CreateMockRead(stream2_headers, 4), |
4456 CreateMockRead(stream1_body, 4, SYNCHRONOUS), | 4586 CreateMockRead(stream1_body, 5, SYNCHRONOUS), |
4457 CreateMockRead(stream2_body, 5), | 4587 CreateMockRead(stream2_body, 6), |
4458 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause | 4588 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7), // Force a pause |
4459 }; | 4589 }; |
4460 | 4590 |
4461 HttpResponseInfo response; | 4591 HttpResponseInfo response; |
4462 HttpResponseInfo response2; | 4592 HttpResponseInfo response2; |
4463 std::string expected_push_result("pushed"); | 4593 std::string expected_push_result("pushed"); |
4464 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4594 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
4465 RunServerPushTest(&data, | 4595 RunServerPushTest(&data, |
4466 &response, | 4596 &response, |
4467 &response2, | 4597 &response2, |
4468 expected_push_result); | 4598 expected_push_result); |
4469 | 4599 |
4470 // Verify the response headers. | 4600 // Verify the response headers. |
4471 EXPECT_TRUE(response.headers); | 4601 EXPECT_TRUE(response.headers); |
4472 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 4602 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
4473 | 4603 |
4474 // Verify the pushed stream. | 4604 // Verify the pushed stream. |
4475 EXPECT_TRUE(response2.headers); | 4605 EXPECT_TRUE(response2.headers); |
4476 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); | 4606 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
4477 } | 4607 } |
4478 | 4608 |
4479 TEST_F(SpdyNetworkTransactionTest, ServerPushClaimBeforeHeaders) { | 4609 TEST_F(SpdyNetworkTransactionTest, ServerPushClaimBeforeHeaders) { |
4480 // We push a stream and attempt to claim it before the headers come down. | 4610 // We push a stream and attempt to claim it before the headers come down. |
4481 SpdySerializedFrame stream1_syn( | 4611 SpdySerializedFrame stream1_syn( |
4482 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4612 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
4613 SpdySerializedFrame stream2_priority( | |
4614 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
4483 MockWrite writes[] = { | 4615 MockWrite writes[] = { |
4484 CreateMockWrite(stream1_syn, 0, SYNCHRONOUS), | 4616 CreateMockWrite(stream1_syn, 0, SYNCHRONOUS), |
4617 CreateMockWrite(stream2_priority, 3), | |
4485 }; | 4618 }; |
4486 | 4619 |
4487 SpdySerializedFrame stream1_reply( | 4620 SpdySerializedFrame stream1_reply( |
4488 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4621 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
4489 SpdyHeaderBlock initial_headers; | 4622 SpdyHeaderBlock initial_headers; |
4490 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), | 4623 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), |
4491 &initial_headers); | 4624 &initial_headers); |
4492 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( | 4625 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( |
4493 std::move(initial_headers), 2, 1)); | 4626 std::move(initial_headers), 2, 1)); |
4494 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 4627 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
4495 SpdyHeaderBlock late_headers; | 4628 SpdyHeaderBlock late_headers; |
4496 late_headers[spdy_util_.GetStatusKey()] = "200"; | 4629 late_headers[spdy_util_.GetStatusKey()] = "200"; |
4497 late_headers["hello"] = "bye"; | 4630 late_headers["hello"] = "bye"; |
4498 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( | 4631 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( |
4499 2, std::move(late_headers), false)); | 4632 2, std::move(late_headers), false)); |
4500 const char kPushedData[] = "pushed"; | 4633 const char kPushedData[] = "pushed"; |
4501 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( | 4634 SpdySerializedFrame stream2_body(spdy_util_.ConstructSpdyDataFrame( |
4502 2, kPushedData, strlen(kPushedData), true)); | 4635 2, kPushedData, strlen(kPushedData), true)); |
4503 MockRead reads[] = { | 4636 MockRead reads[] = { |
4504 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), | 4637 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
4505 CreateMockRead(stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), | 4638 CreateMockRead(stream1_body, 4), MockRead(ASYNC, ERR_IO_PENDING, 5), |
4506 CreateMockRead(stream2_headers, 5), CreateMockRead(stream2_body, 6), | 4639 CreateMockRead(stream2_headers, 6), CreateMockRead(stream2_body, 7), |
4507 MockRead(ASYNC, ERR_IO_PENDING, 7), MockRead(ASYNC, 0, 8), // EOF | 4640 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9), // EOF |
4508 }; | 4641 }; |
4509 | 4642 |
4510 HttpResponseInfo response; | 4643 HttpResponseInfo response; |
4511 HttpResponseInfo response2; | 4644 HttpResponseInfo response2; |
4512 std::string expected_push_result("pushed"); | 4645 std::string expected_push_result("pushed"); |
4513 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4646 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
4514 | 4647 |
4515 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 4648 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
4516 NetLogWithSource(), NULL); | 4649 NetLogWithSource(), NULL); |
4517 helper.AddData(&data); | 4650 helper.AddData(&data); |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4750 | 4883 |
4751 // Verify that push works cross origin as long as the certificate is valid for | 4884 // Verify that push works cross origin as long as the certificate is valid for |
4752 // the pushed authority. | 4885 // the pushed authority. |
4753 TEST_F(SpdyNetworkTransactionTest, ServerPushValidCrossOrigin) { | 4886 TEST_F(SpdyNetworkTransactionTest, ServerPushValidCrossOrigin) { |
4754 // "spdy_pooling.pem" is valid for both www.example.org and mail.example.org. | 4887 // "spdy_pooling.pem" is valid for both www.example.org and mail.example.org. |
4755 const char* url_to_fetch = "https://www.example.org"; | 4888 const char* url_to_fetch = "https://www.example.org"; |
4756 const char* url_to_push = "https://mail.example.org"; | 4889 const char* url_to_push = "https://mail.example.org"; |
4757 | 4890 |
4758 SpdySerializedFrame headers( | 4891 SpdySerializedFrame headers( |
4759 spdy_util_.ConstructSpdyGet(url_to_fetch, 1, LOWEST)); | 4892 spdy_util_.ConstructSpdyGet(url_to_fetch, 1, LOWEST)); |
4893 SpdySerializedFrame push_priority( | |
4894 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
4760 MockWrite writes[] = { | 4895 MockWrite writes[] = { |
4761 CreateMockWrite(headers, 0), | 4896 CreateMockWrite(headers, 0), CreateMockWrite(push_priority, 3), |
4762 }; | 4897 }; |
4763 | 4898 |
4764 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4899 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
4765 SpdySerializedFrame push( | 4900 SpdySerializedFrame push( |
4766 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); | 4901 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); |
4767 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 4902 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
4768 const char kPushedData[] = "pushed"; | 4903 const char kPushedData[] = "pushed"; |
4769 SpdySerializedFrame pushed_body(spdy_util_.ConstructSpdyDataFrame( | 4904 SpdySerializedFrame pushed_body(spdy_util_.ConstructSpdyDataFrame( |
4770 2, kPushedData, strlen(kPushedData), true)); | 4905 2, kPushedData, strlen(kPushedData), true)); |
4771 MockRead reads[] = { | 4906 MockRead reads[] = { |
4772 CreateMockRead(reply, 1), | 4907 CreateMockRead(reply, 1), |
4773 CreateMockRead(push, 2), | 4908 CreateMockRead(push, 2), |
4774 CreateMockRead(body, 3), | 4909 CreateMockRead(body, 4), |
4775 CreateMockRead(pushed_body, 4), | 4910 CreateMockRead(pushed_body, 5), |
4776 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), | 4911 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), |
4777 }; | 4912 }; |
4778 | 4913 |
4779 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4914 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
4780 | 4915 |
4781 HttpRequestInfo request; | 4916 HttpRequestInfo request; |
4782 request.method = "GET"; | 4917 request.method = "GET"; |
4783 request.url = GURL(url_to_fetch); | 4918 request.url = GURL(url_to_fetch); |
4784 request.load_flags = 0; | 4919 request.load_flags = 0; |
4785 | 4920 |
4786 NetLogWithSource log; | 4921 NetLogWithSource log; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4860 MockRead reads0[] = {CreateMockRead(reply0, 1), CreateMockRead(body0, 2), | 4995 MockRead reads0[] = {CreateMockRead(reply0, 1), CreateMockRead(body0, 2), |
4861 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3)}; | 4996 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3)}; |
4862 | 4997 |
4863 SequencedSocketData data0(reads0, arraysize(reads0), writes0, | 4998 SequencedSocketData data0(reads0, arraysize(reads0), writes0, |
4864 arraysize(writes0)); | 4999 arraysize(writes0)); |
4865 | 5000 |
4866 SpdyTestUtil spdy_util_1; | 5001 SpdyTestUtil spdy_util_1; |
4867 | 5002 |
4868 SpdySerializedFrame headers1( | 5003 SpdySerializedFrame headers1( |
4869 spdy_util_1.ConstructSpdyGet(url_to_fetch1, 1, LOWEST)); | 5004 spdy_util_1.ConstructSpdyGet(url_to_fetch1, 1, LOWEST)); |
5005 SpdySerializedFrame push_priority( | |
5006 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | |
4870 MockWrite writes1[] = { | 5007 MockWrite writes1[] = { |
4871 CreateMockWrite(headers1, 0), | 5008 CreateMockWrite(headers1, 0), CreateMockWrite(push_priority, 3), |
4872 }; | 5009 }; |
4873 | 5010 |
4874 SpdySerializedFrame reply1(spdy_util_1.ConstructSpdyGetReply(nullptr, 0, 1)); | 5011 SpdySerializedFrame reply1(spdy_util_1.ConstructSpdyGetReply(nullptr, 0, 1)); |
4875 SpdySerializedFrame push( | 5012 SpdySerializedFrame push( |
4876 spdy_util_1.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); | 5013 spdy_util_1.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); |
4877 const char kData1[] = "second"; | 5014 const char kData1[] = "second"; |
4878 SpdySerializedFrame body1( | 5015 SpdySerializedFrame body1( |
4879 spdy_util_1.ConstructSpdyDataFrame(1, kData1, strlen(kData1), true)); | 5016 spdy_util_1.ConstructSpdyDataFrame(1, kData1, strlen(kData1), true)); |
4880 const char kPushedData[] = "pushed"; | 5017 const char kPushedData[] = "pushed"; |
4881 SpdySerializedFrame pushed_body(spdy_util_1.ConstructSpdyDataFrame( | 5018 SpdySerializedFrame pushed_body(spdy_util_1.ConstructSpdyDataFrame( |
4882 2, kPushedData, strlen(kPushedData), true)); | 5019 2, kPushedData, strlen(kPushedData), true)); |
4883 | 5020 |
4884 MockRead reads1[] = { | 5021 MockRead reads1[] = { |
4885 CreateMockRead(reply1, 1), | 5022 CreateMockRead(reply1, 1), |
4886 CreateMockRead(push, 2), | 5023 CreateMockRead(push, 2), |
4887 CreateMockRead(body1, 3), | 5024 CreateMockRead(body1, 4), |
4888 CreateMockRead(pushed_body, 4), | 5025 CreateMockRead(pushed_body, 5), |
4889 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), | 5026 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), |
4890 }; | 5027 }; |
4891 | 5028 |
4892 SequencedSocketData data1(reads1, arraysize(reads1), writes1, | 5029 SequencedSocketData data1(reads1, arraysize(reads1), writes1, |
4893 arraysize(writes1)); | 5030 arraysize(writes1)); |
4894 | 5031 |
4895 // Request |url_to_fetch0| to open connection to mail.example.org. | 5032 // Request |url_to_fetch0| to open connection to mail.example.org. |
4896 HttpRequestInfo request0; | 5033 HttpRequestInfo request0; |
4897 request0.method = "GET"; | 5034 request0.method = "GET"; |
4898 request0.url = GURL(url_to_fetch0); | 5035 request0.url = GURL(url_to_fetch0); |
4899 request0.load_flags = 0; | 5036 request0.load_flags = 0; |
(...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5994 TEST_F(SpdyNetworkTransactionTest, | 6131 TEST_F(SpdyNetworkTransactionTest, |
5995 GoAwayOnPushStreamIdLesserOrEqualThanLastAccepted) { | 6132 GoAwayOnPushStreamIdLesserOrEqualThanLastAccepted) { |
5996 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 6133 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
5997 NULL, 0, 4, 1, GetDefaultUrlWithPath("/a.dat").c_str())); | 6134 NULL, 0, 4, 1, GetDefaultUrlWithPath("/a.dat").c_str())); |
5998 SpdyHeaderBlock push_b_headers; | 6135 SpdyHeaderBlock push_b_headers; |
5999 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/b.dat"), | 6136 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/b.dat"), |
6000 &push_b_headers); | 6137 &push_b_headers); |
6001 SpdySerializedFrame push_b(spdy_util_.ConstructInitialSpdyPushFrame( | 6138 SpdySerializedFrame push_b(spdy_util_.ConstructInitialSpdyPushFrame( |
6002 std::move(push_b_headers), 2, 1)); | 6139 std::move(push_b_headers), 2, 1)); |
6003 MockRead reads[] = { | 6140 MockRead reads[] = { |
6004 CreateMockRead(push_a, 1), CreateMockRead(push_b, 2), | 6141 CreateMockRead(push_a, 1), CreateMockRead(push_b, 3), |
6005 }; | 6142 }; |
6006 | 6143 |
6007 SpdySerializedFrame req( | 6144 SpdySerializedFrame req( |
6008 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 6145 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
6146 SpdySerializedFrame priority_a( | |
6147 spdy_util_.ConstructSpdyPriority(4, 1, IDLE, true)); | |
6009 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 6148 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
6010 4, GOAWAY_PROTOCOL_ERROR, | 6149 4, GOAWAY_PROTOCOL_ERROR, |
6011 "New push stream id must be greater than the last accepted.")); | 6150 "New push stream id must be greater than the last accepted.")); |
6012 MockWrite writes[] = { | 6151 MockWrite writes[] = { |
6013 CreateMockWrite(req, 0), CreateMockWrite(goaway, 3), | 6152 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
6153 CreateMockWrite(goaway, 4), | |
6014 }; | 6154 }; |
6015 | 6155 |
6016 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 6156 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
6017 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 6157 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
6018 NetLogWithSource(), NULL); | 6158 NetLogWithSource(), NULL); |
6019 helper.RunToCompletion(&data); | 6159 helper.RunToCompletion(&data); |
6020 TransactionHelperResult out = helper.output(); | 6160 TransactionHelperResult out = helper.output(); |
6021 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 6161 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
6022 } | 6162 } |
6023 | 6163 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6224 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { | 6364 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { |
6225 std::unique_ptr<SSLSocketDataProvider> ssl_provider( | 6365 std::unique_ptr<SSLSocketDataProvider> ssl_provider( |
6226 new SSLSocketDataProvider(ASYNC, OK)); | 6366 new SSLSocketDataProvider(ASYNC, OK)); |
6227 // Set to TLS_RSA_WITH_NULL_MD5 | 6367 // Set to TLS_RSA_WITH_NULL_MD5 |
6228 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); | 6368 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); |
6229 | 6369 |
6230 RunTLSUsageCheckTest(std::move(ssl_provider)); | 6370 RunTLSUsageCheckTest(std::move(ssl_provider)); |
6231 } | 6371 } |
6232 | 6372 |
6233 } // namespace net | 6373 } // namespace net |
OLD | NEW |