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

Side by Side Diff: net/spdy/spdy_network_transaction_unittest.cc

Issue 2596703002: http2: Update priorities of pushed streams (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698