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

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

Issue 9958023: Properly handle spdy3 responses. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 8 months 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 | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_http_utils.cc ('k') | net/spdy/spdy_proxy_client_socket.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 0, // Associated stream ID 1471 0, // Associated stream ID
1472 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority 1472 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
1473 0, // Credential Slot 1473 0, // Credential Slot
1474 CONTROL_FLAG_NONE, // Control Flags 1474 CONTROL_FLAG_NONE, // Control Flags
1475 false, // Compressed 1475 false, // Compressed
1476 INVALID, // Status 1476 INVALID, // Status
1477 NULL, // Data 1477 NULL, // Data
1478 0, // Length 1478 0, // Length
1479 DATA_FLAG_NONE // Data Flags 1479 DATA_FLAG_NONE // Data Flags
1480 }; 1480 };
1481 static const char* const kStandardGetHeaders[] = { 1481 static const char* const kStandardRespHeaders[] = {
1482 "status", "200", 1482 ":status", "200",
1483 "version", "HTTP/1.1" 1483 ":version", "HTTP/1.1"
1484 "content-length", "1234" 1484 "content-length", "1234"
1485 }; 1485 };
1486 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader, 1486 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader,
1487 NULL, 0, kStandardGetHeaders, arraysize(kStandardGetHeaders) / 2)); 1487 NULL, 0, kStandardRespHeaders, arraysize(kStandardRespHeaders) / 2));
1488 MockRead reads[] = { 1488 MockRead reads[] = {
1489 CreateMockRead(*resp), 1489 CreateMockRead(*resp),
1490 CreateMockRead(*body), 1490 CreateMockRead(*body),
1491 MockRead(ASYNC, 0, 0) // EOF 1491 MockRead(ASYNC, 0, 0) // EOF
1492 }; 1492 };
1493 1493
1494 scoped_ptr<DelayedSocketData> data( 1494 scoped_ptr<DelayedSocketData> data(
1495 new DelayedSocketData(1, reads, arraysize(reads), 1495 new DelayedSocketData(1, reads, arraysize(reads),
1496 writes, arraysize(writes))); 1496 writes, arraysize(writes)));
1497 NormalSpdyTransactionHelper helper(request, 1497 NormalSpdyTransactionHelper helper(request,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1544 0, // Associated stream ID 1544 0, // Associated stream ID
1545 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority 1545 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
1546 0, // Credential Slot 1546 0, // Credential Slot
1547 CONTROL_FLAG_NONE, // Control Flags 1547 CONTROL_FLAG_NONE, // Control Flags
1548 false, // Compressed 1548 false, // Compressed
1549 INVALID, // Status 1549 INVALID, // Status
1550 NULL, // Data 1550 NULL, // Data
1551 0, // Length 1551 0, // Length
1552 DATA_FLAG_NONE // Data Flags 1552 DATA_FLAG_NONE // Data Flags
1553 }; 1553 };
1554 static const char* const kStandardGetHeaders[] = { 1554 static const char* const kStandardRespHeaders[] = {
1555 "status", "200", 1555 ":status", "200",
1556 "version", "HTTP/1.1" 1556 ":version", "HTTP/1.1"
1557 "content-length", "1234" 1557 "content-length", "1234"
1558 }; 1558 };
1559 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader, 1559 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader,
1560 NULL, 0, kStandardGetHeaders, arraysize(kStandardGetHeaders) / 2)); 1560 NULL, 0, kStandardRespHeaders, arraysize(kStandardRespHeaders) / 2));
1561 MockRead reads[] = { 1561 MockRead reads[] = {
1562 CreateMockRead(*resp), 1562 CreateMockRead(*resp),
1563 CreateMockRead(*body), 1563 CreateMockRead(*body),
1564 MockRead(ASYNC, 0, 0) // EOF 1564 MockRead(ASYNC, 0, 0) // EOF
1565 }; 1565 };
1566 1566
1567 scoped_ptr<DelayedSocketData> data( 1567 scoped_ptr<DelayedSocketData> data(
1568 new DelayedSocketData(1, reads, arraysize(reads), 1568 new DelayedSocketData(1, reads, arraysize(reads),
1569 writes, arraysize(writes))); 1569 writes, arraysize(writes)));
1570 NormalSpdyTransactionHelper helper(request, 1570 NormalSpdyTransactionHelper helper(request,
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after
2263 TEST_P(SpdyNetworkTransactionSpdy3Test, ResetPushWithTransferEncoding) { 2263 TEST_P(SpdyNetworkTransactionSpdy3Test, ResetPushWithTransferEncoding) {
2264 // Construct the request. 2264 // Construct the request.
2265 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2265 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2266 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR)); 2266 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR));
2267 MockWrite writes[] = { 2267 MockWrite writes[] = {
2268 CreateMockWrite(*req), 2268 CreateMockWrite(*req),
2269 CreateMockWrite(*rst), 2269 CreateMockWrite(*rst),
2270 }; 2270 };
2271 2271
2272 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 2272 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
2273 const char* const headers[] = {"url", "http://www.google.com/1", 2273 const char* const headers[] = {":scheme", "http",
2274 ":host", "www.google.com",
2275 ":path", "/1",
2274 "transfer-encoding", "chunked"}; 2276 "transfer-encoding", "chunked"};
2275 scoped_ptr<SpdyFrame> push(ConstructSpdyPush(headers, arraysize(headers) / 2, 2277 scoped_ptr<SpdyFrame> push(ConstructSpdyPush(headers, arraysize(headers) / 2,
2276 2, 1)); 2278 2, 1));
2277 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 2279 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
2278 MockRead reads[] = { 2280 MockRead reads[] = {
2279 CreateMockRead(*resp), 2281 CreateMockRead(*resp),
2280 CreateMockRead(*push), 2282 CreateMockRead(*push),
2281 CreateMockRead(*body), 2283 CreateMockRead(*body),
2282 MockRead(ASYNC, 0, 0) // EOF 2284 MockRead(ASYNC, 0, 0) // EOF
2283 }; 2285 };
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
2571 new SpdyURLRequestContext(); 2573 new SpdyURLRequestContext();
2572 r.set_context(spdy_url_request_context); 2574 r.set_context(spdy_url_request_context);
2573 spdy_url_request_context->socket_factory(). 2575 spdy_url_request_context->socket_factory().
2574 AddSocketDataProvider(data.get()); 2576 AddSocketDataProvider(data.get());
2575 spdy_url_request_context->socket_factory(). 2577 spdy_url_request_context->socket_factory().
2576 AddSocketDataProvider(data2.get()); 2578 AddSocketDataProvider(data2.get());
2577 2579
2578 d.set_quit_on_redirect(true); 2580 d.set_quit_on_redirect(true);
2579 r.Start(); 2581 r.Start();
2580 MessageLoop::current()->Run(); 2582 MessageLoop::current()->Run();
2581
2582 EXPECT_EQ(1, d.received_redirect_count()); 2583 EXPECT_EQ(1, d.received_redirect_count());
2583 2584
2584 r.FollowDeferredRedirect(); 2585 r.FollowDeferredRedirect();
2585 MessageLoop::current()->Run(); 2586 MessageLoop::current()->Run();
2586 EXPECT_EQ(1, d.response_started_count()); 2587 EXPECT_EQ(1, d.response_started_count());
2587 EXPECT_FALSE(d.received_data_before_response()); 2588 EXPECT_FALSE(d.received_data_before_response());
2588 EXPECT_EQ(net::URLRequestStatus::SUCCESS, r.status().status()); 2589 EXPECT_EQ(net::URLRequestStatus::SUCCESS, r.status().status());
2589 std::string contents("hello!"); 2590 std::string contents("hello!");
2590 EXPECT_EQ(contents, d.data_received()); 2591 EXPECT_EQ(contents, d.data_received());
2591 } 2592 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2634 scoped_ptr<SpdyFrame> 2635 scoped_ptr<SpdyFrame>
2635 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2636 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2636 scoped_ptr<SpdyFrame> 2637 scoped_ptr<SpdyFrame>
2637 rst(ConstructSpdyRstStream(1, PROTOCOL_ERROR)); 2638 rst(ConstructSpdyRstStream(1, PROTOCOL_ERROR));
2638 MockWrite writes[] = { 2639 MockWrite writes[] = {
2639 CreateMockWrite(*syn, 0), 2640 CreateMockWrite(*syn, 0),
2640 CreateMockWrite(*rst, 2), 2641 CreateMockWrite(*rst, 2),
2641 }; 2642 };
2642 2643
2643 static const char* const kInitialHeaders[] = { 2644 static const char* const kInitialHeaders[] = {
2644 "status", "200 OK", 2645 ":status", "200 OK",
2645 "version", "HTTP/1.1" 2646 ":version", "HTTP/1.1"
2646 }; 2647 };
2647 static const char* const kLateHeaders[] = { 2648 static const char* const kLateHeaders[] = {
2648 "X-UpperCase", "yes", 2649 "X-UpperCase", "yes",
2649 }; 2650 };
2650 scoped_ptr<SpdyFrame> 2651 scoped_ptr<SpdyFrame>
2651 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, 2652 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders,
2652 arraysize(kInitialHeaders) / 2, 2653 arraysize(kInitialHeaders) / 2,
2653 false, 2654 false,
2654 1, 2655 1,
2655 LOWEST, 2656 LOWEST,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2693 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2694 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2694 scoped_ptr<SpdyFrame> 2695 scoped_ptr<SpdyFrame>
2695 rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR)); 2696 rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR));
2696 MockWrite writes[] = { 2697 MockWrite writes[] = {
2697 CreateMockWrite(*syn, 0), 2698 CreateMockWrite(*syn, 0),
2698 CreateMockWrite(*rst, 2), 2699 CreateMockWrite(*rst, 2),
2699 }; 2700 };
2700 2701
2701 scoped_ptr<SpdyFrame> 2702 scoped_ptr<SpdyFrame>
2702 reply(ConstructSpdyGetSynReply(NULL, 0, 1)); 2703 reply(ConstructSpdyGetSynReply(NULL, 0, 1));
2703 const char* const extra_headers[] = {"X-UpperCase", "yes"}; 2704 const char* const extra_headers[] = {
2705 "X-UpperCase", "yes"
2706 };
2704 scoped_ptr<SpdyFrame> 2707 scoped_ptr<SpdyFrame>
2705 push(ConstructSpdyPush(extra_headers, 1, 2, 1)); 2708 push(ConstructSpdyPush(extra_headers, arraysize(extra_headers) / 2,
2709 2, 1));
2706 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 2710 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
2707 MockRead reads[] = { 2711 MockRead reads[] = {
2708 CreateMockRead(*reply, 1), 2712 CreateMockRead(*reply, 1),
2709 CreateMockRead(*push, 1), 2713 CreateMockRead(*push, 1),
2710 CreateMockRead(*body, 1), 2714 CreateMockRead(*body, 1),
2711 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause 2715 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause
2712 }; 2716 };
2713 2717
2714 HttpResponseInfo response; 2718 HttpResponseInfo response;
2715 HttpResponseInfo response2; 2719 HttpResponseInfo response2;
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
3466 int num_headers; 3470 int num_headers;
3467 const char* extra_headers[5]; 3471 const char* extra_headers[5];
3468 const char* expected_headers; 3472 const char* expected_headers;
3469 } test_cases[] = { 3473 } test_cases[] = {
3470 // This uses a multi-valued cookie header. 3474 // This uses a multi-valued cookie header.
3471 { 2, 3475 { 2,
3472 { "cookie", "val1", 3476 { "cookie", "val1",
3473 "cookie", "val2", // will get appended separated by NULL 3477 "cookie", "val2", // will get appended separated by NULL
3474 NULL 3478 NULL
3475 }, 3479 },
3480 "status: 200\n"
3481 "version: HTTP/1.1\n"
3476 "cookie: val1\n" 3482 "cookie: val1\n"
3477 "cookie: val2\n" 3483 "cookie: val2\n"
3478 "hello: bye\n" 3484 "hello: bye\n"
3479 "status: 200\n"
3480 "version: HTTP/1.1\n"
3481 }, 3485 },
3482 // This is the minimalist set of headers. 3486 // This is the minimalist set of headers.
3483 { 0, 3487 { 0,
3484 { NULL }, 3488 { NULL },
3485 "hello: bye\n"
3486 "status: 200\n" 3489 "status: 200\n"
3487 "version: HTTP/1.1\n" 3490 "version: HTTP/1.1\n"
3491 "hello: bye\n"
3488 }, 3492 },
3489 // Headers with a comma separated list. 3493 // Headers with a comma separated list.
3490 { 1, 3494 { 1,
3491 { "cookie", "val1,val2", 3495 { "cookie", "val1,val2",
3492 NULL 3496 NULL
3493 }, 3497 },
3498 "status: 200\n"
3499 "version: HTTP/1.1\n"
3494 "cookie: val1,val2\n" 3500 "cookie: val1,val2\n"
3495 "hello: bye\n" 3501 "hello: bye\n"
3496 "status: 200\n"
3497 "version: HTTP/1.1\n"
3498 } 3502 }
3499 }; 3503 };
3500 3504
3501 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 3505 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
3502 scoped_ptr<SpdyFrame> req( 3506 scoped_ptr<SpdyFrame> req(
3503 ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3507 ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3504 MockWrite writes[] = { CreateMockWrite(*req) }; 3508 MockWrite writes[] = { CreateMockWrite(*req) };
3505 3509
3506 scoped_ptr<SpdyFrame> resp( 3510 scoped_ptr<SpdyFrame> resp(
3507 ConstructSpdyGetSynReply(test_cases[i].extra_headers, 3511 ConstructSpdyGetSynReply(test_cases[i].extra_headers,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
3565 } test_cases[] = { 3569 } test_cases[] = {
3566 // Test the case of a multi-valued cookie. When the value is delimited 3570 // Test the case of a multi-valued cookie. When the value is delimited
3567 // with NUL characters, it needs to be unfolded into multiple headers. 3571 // with NUL characters, it needs to be unfolded into multiple headers.
3568 { 3572 {
3569 &syn_reply_info, 3573 &syn_reply_info,
3570 true, 3574 true,
3571 { 1, 4 }, 3575 { 1, 4 },
3572 { { "cookie", "val1,val2", 3576 { { "cookie", "val1,val2",
3573 NULL 3577 NULL
3574 }, 3578 },
3575 { "vary", "cookie", 3579 { ":status", "200",
3576 "status", "200", 3580 ":version", "HTTP/1.1",
3581 "vary", "cookie",
3577 "url", "/index.php", 3582 "url", "/index.php",
3578 "version", "HTTP/1.1",
3579 NULL 3583 NULL
3580 } 3584 }
3581 } 3585 }
3582 }, { // Multiple vary fields. 3586 }, { // Multiple vary fields.
3583 &syn_reply_info, 3587 &syn_reply_info,
3584 true, 3588 true,
3585 { 2, 5 }, 3589 { 2, 5 },
3586 { { "friend", "barney", 3590 { { "friend", "barney",
3587 "enemy", "snaggletooth", 3591 "enemy", "snaggletooth",
3588 NULL 3592 NULL
3589 }, 3593 },
3590 { "vary", "friend", 3594 { ":status", "200",
3595 ":version", "HTTP/1.1",
3596 "vary", "friend",
3591 "vary", "enemy", 3597 "vary", "enemy",
3592 "status", "200",
3593 "url", "/index.php", 3598 "url", "/index.php",
3594 "version", "HTTP/1.1",
3595 NULL 3599 NULL
3596 } 3600 }
3597 } 3601 }
3598 }, { // Test a '*' vary field. 3602 }, { // Test a '*' vary field.
3599 &syn_reply_info, 3603 &syn_reply_info,
3600 false, 3604 false,
3601 { 1, 4 }, 3605 { 1, 4 },
3602 { { "cookie", "val1,val2", 3606 { { "cookie", "val1,val2",
3603 NULL 3607 NULL
3604 }, 3608 },
3605 { "vary", "*", 3609 { ":status", "200",
3606 "status", "200", 3610 ":version", "HTTP/1.1",
3611 "vary", "*",
3607 "url", "/index.php", 3612 "url", "/index.php",
3608 "version", "HTTP/1.1",
3609 NULL 3613 NULL
3610 } 3614 }
3611 } 3615 }
3612 }, { // Multiple comma-separated vary fields. 3616 }, { // Multiple comma-separated vary fields.
3613 &syn_reply_info, 3617 &syn_reply_info,
3614 true, 3618 true,
3615 { 2, 4 }, 3619 { 2, 4 },
3616 { { "friend", "barney", 3620 { { "friend", "barney",
3617 "enemy", "snaggletooth", 3621 "enemy", "snaggletooth",
3618 NULL 3622 NULL
3619 }, 3623 },
3620 { "vary", "friend,enemy", 3624 { ":status", "200",
3621 "status", "200", 3625 ":version", "HTTP/1.1",
3626 "vary", "friend,enemy",
3622 "url", "/index.php", 3627 "url", "/index.php",
3623 "version", "HTTP/1.1",
3624 NULL 3628 NULL
3625 } 3629 }
3626 } 3630 }
3627 } 3631 }
3628 }; 3632 };
3629 3633
3630 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 3634 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
3631 // Construct the request. 3635 // Construct the request.
3632 scoped_ptr<SpdyFrame> frame_req( 3636 scoped_ptr<SpdyFrame> frame_req(
3633 ConstructSpdyGet(test_cases[i].extra_headers[0], 3637 ConstructSpdyGet(test_cases[i].extra_headers[0],
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
3734 { 4, 3738 { 4,
3735 { "cookie", "val1", 3739 { "cookie", "val1",
3736 "cookie", "val2", 3740 "cookie", "val2",
3737 "url", "/index.php", 3741 "url", "/index.php",
3738 "version", "HTTP/1.1", 3742 "version", "HTTP/1.1",
3739 NULL 3743 NULL
3740 }, 3744 },
3741 }, 3745 },
3742 // SYN_REPLY missing version header 3746 // SYN_REPLY missing version header
3743 { 2, 3747 { 2,
3744 { "status", "200", 3748 { ":status", "200",
3745 "url", "/index.php", 3749 "url", "/index.php",
3746 NULL 3750 NULL
3747 }, 3751 },
3748 }, 3752 },
3749 // SYN_REPLY with no headers 3753 // SYN_REPLY with no headers
3750 { 0, { NULL }, }, 3754 { 0, { NULL }, },
3751 }; 3755 };
3752 3756
3753 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 3757 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
3754 scoped_ptr<SpdyFrame> req( 3758 scoped_ptr<SpdyFrame> req(
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
4440 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority 4444 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
4441 0, // Credential Slot 4445 0, // Credential Slot
4442 CONTROL_FLAG_NONE, // Control Flags 4446 CONTROL_FLAG_NONE, // Control Flags
4443 false, // Compressed 4447 false, // Compressed
4444 INVALID, // Status 4448 INVALID, // Status
4445 NULL, // Data 4449 NULL, // Data
4446 0, // Data Length 4450 0, // Data Length
4447 DATA_FLAG_NONE // Data Flags 4451 DATA_FLAG_NONE // Data Flags
4448 }; 4452 };
4449 static const char* const kExtraHeaders[] = { 4453 static const char* const kExtraHeaders[] = {
4450 "status", "200", 4454 ":status", "200",
4451 "version", "HTTP/1.1" 4455 ":version", "HTTP/1.1"
4452 }; 4456 };
4453 4457
4454 BoundNetLog net_log; 4458 BoundNetLog net_log;
4455 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam()); 4459 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam());
4456 helper.RunPreTestSetup(); 4460 helper.RunPreTestSetup();
4457 4461
4458 // Verify that no settings exist initially. 4462 // Verify that no settings exist initially.
4459 HostPortPair host_port_pair("www.google.com", helper.port()); 4463 HostPortPair host_port_pair("www.google.com", helper.port());
4460 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool(); 4464 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
4461 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings( 4465 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings(
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
4547 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority 4551 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
4548 0, // Credential Slot 4552 0, // Credential Slot
4549 CONTROL_FLAG_NONE, // Control Flags 4553 CONTROL_FLAG_NONE, // Control Flags
4550 false, // Compressed 4554 false, // Compressed
4551 INVALID, // Status 4555 INVALID, // Status
4552 NULL, // Data 4556 NULL, // Data
4553 0, // Data Length 4557 0, // Data Length
4554 DATA_FLAG_NONE // Data Flags 4558 DATA_FLAG_NONE // Data Flags
4555 }; 4559 };
4556 static const char* kExtraHeaders[] = { 4560 static const char* kExtraHeaders[] = {
4557 "status", "200", 4561 ":status", "200",
4558 "version", "HTTP/1.1" 4562 ":version", "HTTP/1.1"
4559 }; 4563 };
4560 4564
4561 BoundNetLog net_log; 4565 BoundNetLog net_log;
4562 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam()); 4566 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam());
4563 helper.RunPreTestSetup(); 4567 helper.RunPreTestSetup();
4564 4568
4565 // Verify that no settings exist initially. 4569 // Verify that no settings exist initially.
4566 HostPortPair host_port_pair("www.google.com", helper.port()); 4570 HostPortPair host_port_pair("www.google.com", helper.port());
4567 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool(); 4571 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
4568 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings( 4572 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings(
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
5231 }; 5235 };
5232 scoped_ptr<SpdyFrame> 5236 scoped_ptr<SpdyFrame>
5233 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5237 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5234 scoped_ptr<SpdyFrame> 5238 scoped_ptr<SpdyFrame>
5235 stream1_body(ConstructSpdyBodyFrame(1, true)); 5239 stream1_body(ConstructSpdyBodyFrame(1, true));
5236 MockWrite writes[] = { 5240 MockWrite writes[] = {
5237 CreateMockWrite(*stream1_syn, 1), 5241 CreateMockWrite(*stream1_syn, 1),
5238 }; 5242 };
5239 5243
5240 static const char* const kInitialHeaders[] = { 5244 static const char* const kInitialHeaders[] = {
5241 "url", 5245 ":scheme", "http",
5242 "http://www.google.com/foo.dat", 5246 ":host", "www.google.com",
5247 ":path", "/foo.dat",
5243 }; 5248 };
5244 static const char* const kLateHeaders[] = { 5249 static const char* const kLateHeaders[] = {
5245 "hello", 5250 "hello",
5246 "bye", 5251 "bye",
5247 "status", 5252 ":status",
5248 "200", 5253 "200",
5249 "version", 5254 ":version",
5250 "HTTP/1.1" 5255 "HTTP/1.1"
5251 }; 5256 };
5252 scoped_ptr<SpdyFrame> 5257 scoped_ptr<SpdyFrame>
5253 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, 5258 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders,
5254 arraysize(kInitialHeaders) / 2, 5259 arraysize(kInitialHeaders) / 2,
5255 false, 5260 false,
5256 2, 5261 2,
5257 LOWEST, 5262 LOWEST,
5258 SYN_STREAM, 5263 SYN_STREAM,
5259 CONTROL_FLAG_NONE, 5264 CONTROL_FLAG_NONE,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
5315 }; 5320 };
5316 scoped_ptr<SpdyFrame> 5321 scoped_ptr<SpdyFrame>
5317 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5322 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5318 scoped_ptr<SpdyFrame> 5323 scoped_ptr<SpdyFrame>
5319 stream1_body(ConstructSpdyBodyFrame(1, true)); 5324 stream1_body(ConstructSpdyBodyFrame(1, true));
5320 MockWrite writes[] = { 5325 MockWrite writes[] = {
5321 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), 5326 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS),
5322 }; 5327 };
5323 5328
5324 static const char* const kInitialHeaders[] = { 5329 static const char* const kInitialHeaders[] = {
5325 "url", 5330 ":scheme", "http",
5326 "http://www.google.com/foo.dat", 5331 ":host", "www.google.com",
5332 ":path", "/foo.dat"
5327 }; 5333 };
5328 static const char* const kLateHeaders[] = { 5334 static const char* const kLateHeaders[] = {
5329 "hello", 5335 "hello",
5330 "bye", 5336 "bye",
5331 "status", 5337 ":status",
5332 "200", 5338 "200",
5333 "version", 5339 ":version",
5334 "HTTP/1.1" 5340 "HTTP/1.1"
5335 }; 5341 };
5336 scoped_ptr<SpdyFrame> 5342 scoped_ptr<SpdyFrame>
5337 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, 5343 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders,
5338 arraysize(kInitialHeaders) / 2, 5344 arraysize(kInitialHeaders) / 2,
5339 false, 5345 false,
5340 2, 5346 2,
5341 LOWEST, 5347 LOWEST,
5342 SYN_STREAM, 5348 SYN_STREAM,
5343 CONTROL_FLAG_NONE, 5349 CONTROL_FLAG_NONE,
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
5452 }; 5458 };
5453 scoped_ptr<SpdyFrame> 5459 scoped_ptr<SpdyFrame>
5454 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5460 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5455 scoped_ptr<SpdyFrame> 5461 scoped_ptr<SpdyFrame>
5456 stream1_body(ConstructSpdyBodyFrame(1, true)); 5462 stream1_body(ConstructSpdyBodyFrame(1, true));
5457 MockWrite writes[] = { 5463 MockWrite writes[] = {
5458 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), 5464 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS),
5459 }; 5465 };
5460 5466
5461 static const char* const kInitialHeaders[] = { 5467 static const char* const kInitialHeaders[] = {
5462 "url", 5468 ":scheme", "http",
5463 "http://www.google.com/foo.dat", 5469 ":host", "www.google.com",
5470 ":path", "/foo.dat"
5464 }; 5471 };
5465 static const char* const kMiddleHeaders[] = { 5472 static const char* const kMiddleHeaders[] = {
5466 "hello", 5473 "hello",
5467 "bye", 5474 "bye",
5468 }; 5475 };
5469 static const char* const kLateHeaders[] = { 5476 static const char* const kLateHeaders[] = {
5470 "status", 5477 ":status",
5471 "200", 5478 "200",
5472 "version", 5479 ":version",
5473 "HTTP/1.1" 5480 "HTTP/1.1"
5474 }; 5481 };
5475 scoped_ptr<SpdyFrame> 5482 scoped_ptr<SpdyFrame>
5476 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, 5483 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders,
5477 arraysize(kInitialHeaders) / 2, 5484 arraysize(kInitialHeaders) / 2,
5478 false, 5485 false,
5479 2, 5486 2,
5480 LOWEST, 5487 LOWEST,
5481 SYN_STREAM, 5488 SYN_STREAM,
5482 CONTROL_FLAG_NONE, 5489 CONTROL_FLAG_NONE,
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
5588 // Verify the SYN_REPLY. 5595 // Verify the SYN_REPLY.
5589 EXPECT_TRUE(response.headers != NULL); 5596 EXPECT_TRUE(response.headers != NULL);
5590 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5597 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5591 5598
5592 // Verify the pushed stream. 5599 // Verify the pushed stream.
5593 EXPECT_TRUE(response2.headers != NULL); 5600 EXPECT_TRUE(response2.headers != NULL);
5594 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 5601 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
5595 5602
5596 // Verify we got all the headers 5603 // Verify we got all the headers
5597 EXPECT_TRUE(response2.headers->HasHeaderValue( 5604 EXPECT_TRUE(response2.headers->HasHeaderValue(
5598 "url", 5605 "scheme", "http"));
5599 "http://www.google.com/foo.dat")); 5606 EXPECT_TRUE(response2.headers->HasHeaderValue(
5607 "host", "www.google.com"));
5608 EXPECT_TRUE(response2.headers->HasHeaderValue(
5609 "path", "/foo.dat"));
5600 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye")); 5610 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye"));
5601 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200")); 5611 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200"));
5602 EXPECT_TRUE(response2.headers->HasHeaderValue("version", "HTTP/1.1")); 5612 EXPECT_TRUE(response2.headers->HasHeaderValue("version", "HTTP/1.1"));
5603 } 5613 }
5604 5614
5605 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithHeaders) { 5615 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithHeaders) {
5606 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5616 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5607 MockWrite writes[] = { CreateMockWrite(*req) }; 5617 MockWrite writes[] = { CreateMockWrite(*req) };
5608 5618
5609 static const char* const kInitialHeaders[] = { 5619 static const char* const kInitialHeaders[] = {
5610 "status", 5620 ":status",
5611 "200 OK", 5621 "200 OK",
5612 "version", 5622 ":version",
5613 "HTTP/1.1" 5623 "HTTP/1.1"
5614 }; 5624 };
5615 static const char* const kLateHeaders[] = { 5625 static const char* const kLateHeaders[] = {
5616 "hello", 5626 "hello",
5617 "bye", 5627 "bye",
5618 }; 5628 };
5619 scoped_ptr<SpdyFrame> 5629 scoped_ptr<SpdyFrame>
5620 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, 5630 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders,
5621 arraysize(kInitialHeaders) / 2, 5631 arraysize(kInitialHeaders) / 2,
5622 false, 5632 false,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
5656 EXPECT_EQ(OK, out.rv); 5666 EXPECT_EQ(OK, out.rv);
5657 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 5667 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
5658 EXPECT_EQ("hello!", out.response_data); 5668 EXPECT_EQ("hello!", out.response_data);
5659 } 5669 }
5660 5670
5661 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithLateHeaders) { 5671 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithLateHeaders) {
5662 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5672 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5663 MockWrite writes[] = { CreateMockWrite(*req) }; 5673 MockWrite writes[] = { CreateMockWrite(*req) };
5664 5674
5665 static const char* const kInitialHeaders[] = { 5675 static const char* const kInitialHeaders[] = {
5666 "status", 5676 ":status",
5667 "200 OK", 5677 "200 OK",
5668 "version", 5678 ":version",
5669 "HTTP/1.1" 5679 "HTTP/1.1"
5670 }; 5680 };
5671 static const char* const kLateHeaders[] = { 5681 static const char* const kLateHeaders[] = {
5672 "hello", 5682 "hello",
5673 "bye", 5683 "bye",
5674 }; 5684 };
5675 scoped_ptr<SpdyFrame> 5685 scoped_ptr<SpdyFrame>
5676 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, 5686 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders,
5677 arraysize(kInitialHeaders) / 2, 5687 arraysize(kInitialHeaders) / 2,
5678 false, 5688 false,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5714 EXPECT_EQ(OK, out.rv); 5724 EXPECT_EQ(OK, out.rv);
5715 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 5725 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
5716 EXPECT_EQ("hello!hello!", out.response_data); 5726 EXPECT_EQ("hello!hello!", out.response_data);
5717 } 5727 }
5718 5728
5719 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithDuplicateLateHeaders) { 5729 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithDuplicateLateHeaders) {
5720 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5730 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5721 MockWrite writes[] = { CreateMockWrite(*req) }; 5731 MockWrite writes[] = { CreateMockWrite(*req) };
5722 5732
5723 static const char* const kInitialHeaders[] = { 5733 static const char* const kInitialHeaders[] = {
5724 "status", 5734 ":status",
5725 "200 OK", 5735 "200 OK",
5726 "version", 5736 ":version",
5727 "HTTP/1.1" 5737 "HTTP/1.1"
5728 }; 5738 };
5729 static const char* const kLateHeaders[] = { 5739 static const char* const kLateHeaders[] = {
5730 "status", 5740 ":status",
5731 "500 Server Error", 5741 "500 Server Error",
5732 }; 5742 };
5733 scoped_ptr<SpdyFrame> 5743 scoped_ptr<SpdyFrame>
5734 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, 5744 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders,
5735 arraysize(kInitialHeaders) / 2, 5745 arraysize(kInitialHeaders) / 2,
5736 false, 5746 false,
5737 1, 5747 1,
5738 LOWEST, 5748 LOWEST,
5739 SYN_REPLY, 5749 SYN_REPLY,
5740 CONTROL_FLAG_NONE, 5750 CONTROL_FLAG_NONE,
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
5938 << " Write index: " 5948 << " Write index: "
5939 << data->write_index(); 5949 << data->write_index();
5940 5950
5941 // Verify the SYN_REPLY. 5951 // Verify the SYN_REPLY.
5942 HttpResponseInfo response = *trans->GetResponseInfo(); 5952 HttpResponseInfo response = *trans->GetResponseInfo();
5943 EXPECT_TRUE(response.headers != NULL); 5953 EXPECT_TRUE(response.headers != NULL);
5944 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5954 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5945 } 5955 }
5946 5956
5947 } // namespace net 5957 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_http_utils.cc ('k') | net/spdy/spdy_proxy_client_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698