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

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

Issue 9582034: Fork SPDY/2 and SPDY/3 versions of our SPDY tests, in preparation for landing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fix merge bug Created 8 years, 9 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
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"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "net/base/auth.h" 12 #include "net/base/auth.h"
13 #include "net/base/net_log_unittest.h" 13 #include "net/base/net_log_unittest.h"
14 #include "net/http/http_network_session_peer.h" 14 #include "net/http/http_network_session_peer.h"
15 #include "net/http/http_transaction_unittest.h" 15 #include "net/http/http_transaction_unittest.h"
16 #include "net/socket/client_socket_pool_base.h" 16 #include "net/socket/client_socket_pool_base.h"
17 #include "net/spdy/spdy_http_stream.h" 17 #include "net/spdy/spdy_http_stream.h"
18 #include "net/spdy/spdy_http_utils.h" 18 #include "net/spdy/spdy_http_utils.h"
19 #include "net/spdy/spdy_session.h" 19 #include "net/spdy/spdy_session.h"
20 #include "net/spdy/spdy_session_pool.h" 20 #include "net/spdy/spdy_session_pool.h"
21 #include "net/spdy/spdy_test_util.h" 21 #include "net/spdy/spdy_test_util_spdy3.h"
22 #include "net/url_request/url_request_test_util.h" 22 #include "net/url_request/url_request_test_util.h"
23 #include "testing/platform_test.h" 23 #include "testing/platform_test.h"
24 24
25 using namespace net::test_spdy3;
26
25 //----------------------------------------------------------------------------- 27 //-----------------------------------------------------------------------------
26 28
27 namespace net { 29 namespace net {
28 30
29 enum SpdyNetworkTransactionTestTypes { 31 enum SpdyNetworkTransactionSpdy3TestTypes {
30 SPDYNPN, 32 SPDYNPN,
31 SPDYNOSSL, 33 SPDYNOSSL,
32 SPDYSSL, 34 SPDYSSL,
33 }; 35 };
34 class SpdyNetworkTransactionTest 36 class SpdyNetworkTransactionSpdy3Test
35 : public ::testing::TestWithParam<SpdyNetworkTransactionTestTypes> { 37 : public ::testing::TestWithParam<SpdyNetworkTransactionSpdy3TestTypes> {
36 protected: 38 protected:
37 39
38 virtual void SetUp() { 40 virtual void SetUp() {
39 // By default, all tests turn off compression. 41 // By default, all tests turn off compression.
40 EnableCompression(false); 42 EnableCompression(false);
41 google_get_request_initialized_ = false; 43 google_get_request_initialized_ = false;
42 google_post_request_initialized_ = false; 44 google_post_request_initialized_ = false;
43 google_chunked_post_request_initialized_ = false; 45 google_chunked_post_request_initialized_ = false;
44 } 46 }
45 47
(...skipping 11 matching lines...) Expand all
57 59
58 void EnableCompression(bool enabled) { 60 void EnableCompression(bool enabled) {
59 spdy::SpdyFramer::set_enable_compression_default(enabled); 61 spdy::SpdyFramer::set_enable_compression_default(enabled);
60 } 62 }
61 63
62 // A helper class that handles all the initial npn/ssl setup. 64 // A helper class that handles all the initial npn/ssl setup.
63 class NormalSpdyTransactionHelper { 65 class NormalSpdyTransactionHelper {
64 public: 66 public:
65 NormalSpdyTransactionHelper(const HttpRequestInfo& request, 67 NormalSpdyTransactionHelper(const HttpRequestInfo& request,
66 const BoundNetLog& log, 68 const BoundNetLog& log,
67 SpdyNetworkTransactionTestTypes test_type) 69 SpdyNetworkTransactionSpdy3TestTypes test_type)
68 : request_(request), 70 : request_(request),
69 session_deps_(new SpdySessionDependencies()), 71 session_deps_(new SpdySessionDependencies()),
70 session_(SpdySessionDependencies::SpdyCreateSession( 72 session_(SpdySessionDependencies::SpdyCreateSession(
71 session_deps_.get())), 73 session_deps_.get())),
72 log_(log), 74 log_(log),
73 test_type_(test_type), 75 test_type_(test_type),
74 deterministic_(false), 76 deterministic_(false),
75 spdy_enabled_(true) { 77 spdy_enabled_(true) {
76 switch (test_type_) { 78 switch (test_type_) {
77 case SPDYNOSSL: 79 case SPDYNOSSL:
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 next_protos.push_back("http/1.1"); 124 next_protos.push_back("http/1.1");
123 next_protos.push_back("spdy/2"); 125 next_protos.push_back("spdy/2");
124 next_protos.push_back("spdy/2.1"); 126 next_protos.push_back("spdy/2.1");
125 127
126 switch (test_type_) { 128 switch (test_type_) {
127 case SPDYNPN: 129 case SPDYNPN:
128 session_->http_server_properties()->SetAlternateProtocol( 130 session_->http_server_properties()->SetAlternateProtocol(
129 HostPortPair("www.google.com", 80), 443, 131 HostPortPair("www.google.com", 80), 443,
130 NPN_SPDY_21); 132 NPN_SPDY_21);
131 HttpStreamFactory::set_use_alternate_protocols(true); 133 HttpStreamFactory::set_use_alternate_protocols(true);
132 HttpStreamFactory::set_next_protos(next_protos); 134 HttpStreamFactory::SetNextProtos(next_protos);
133 break; 135 break;
134 case SPDYNOSSL: 136 case SPDYNOSSL:
135 HttpStreamFactory::set_force_spdy_over_ssl(false); 137 HttpStreamFactory::set_force_spdy_over_ssl(false);
136 HttpStreamFactory::set_force_spdy_always(true); 138 HttpStreamFactory::set_force_spdy_always(true);
137 break; 139 break;
138 case SPDYSSL: 140 case SPDYSSL:
139 HttpStreamFactory::set_force_spdy_over_ssl(true); 141 HttpStreamFactory::set_force_spdy_over_ssl(true);
140 HttpStreamFactory::set_force_spdy_always(true); 142 HttpStreamFactory::set_force_spdy_always(true);
141 break; 143 break;
142 default: 144 default:
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 void ResetTrans() { trans_.reset(); } 300 void ResetTrans() { trans_.reset(); }
299 TransactionHelperResult& output() { return output_; } 301 TransactionHelperResult& output() { return output_; }
300 const HttpRequestInfo& request() const { return request_; } 302 const HttpRequestInfo& request() const { return request_; }
301 const scoped_refptr<HttpNetworkSession>& session() const { 303 const scoped_refptr<HttpNetworkSession>& session() const {
302 return session_; 304 return session_;
303 } 305 }
304 scoped_ptr<SpdySessionDependencies>& session_deps() { 306 scoped_ptr<SpdySessionDependencies>& session_deps() {
305 return session_deps_; 307 return session_deps_;
306 } 308 }
307 int port() const { return port_; } 309 int port() const { return port_; }
308 SpdyNetworkTransactionTestTypes test_type() const { return test_type_; } 310 SpdyNetworkTransactionSpdy3TestTypes test_type() const {
311 return test_type_;
312 }
309 313
310 private: 314 private:
311 typedef std::vector<StaticSocketDataProvider*> DataVector; 315 typedef std::vector<StaticSocketDataProvider*> DataVector;
312 typedef std::vector<linked_ptr<SSLSocketDataProvider> > SSLVector; 316 typedef std::vector<linked_ptr<SSLSocketDataProvider> > SSLVector;
313 typedef std::vector<linked_ptr<StaticSocketDataProvider> > AlternateVector; 317 typedef std::vector<linked_ptr<StaticSocketDataProvider> > AlternateVector;
314 typedef std::vector<scoped_refptr<DeterministicSocketData> > 318 typedef std::vector<scoped_refptr<DeterministicSocketData> >
315 AlternateDeterministicVector; 319 AlternateDeterministicVector;
316 HttpRequestInfo request_; 320 HttpRequestInfo request_;
317 scoped_ptr<SpdySessionDependencies> session_deps_; 321 scoped_ptr<SpdySessionDependencies> session_deps_;
318 scoped_refptr<HttpNetworkSession> session_; 322 scoped_refptr<HttpNetworkSession> session_;
319 TransactionHelperResult output_; 323 TransactionHelperResult output_;
320 scoped_ptr<StaticSocketDataProvider> first_transaction_; 324 scoped_ptr<StaticSocketDataProvider> first_transaction_;
321 SSLVector ssl_vector_; 325 SSLVector ssl_vector_;
322 TestCompletionCallback callback; 326 TestCompletionCallback callback;
323 scoped_ptr<HttpNetworkTransaction> trans_; 327 scoped_ptr<HttpNetworkTransaction> trans_;
324 scoped_ptr<HttpNetworkTransaction> trans_http_; 328 scoped_ptr<HttpNetworkTransaction> trans_http_;
325 DataVector data_vector_; 329 DataVector data_vector_;
326 AlternateVector alternate_vector_; 330 AlternateVector alternate_vector_;
327 AlternateDeterministicVector alternate_deterministic_vector_; 331 AlternateDeterministicVector alternate_deterministic_vector_;
328 const BoundNetLog& log_; 332 const BoundNetLog& log_;
329 SpdyNetworkTransactionTestTypes test_type_; 333 SpdyNetworkTransactionSpdy3TestTypes test_type_;
330 int port_; 334 int port_;
331 bool deterministic_; 335 bool deterministic_;
332 bool spdy_enabled_; 336 bool spdy_enabled_;
333 }; 337 };
334 338
335 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, 339 void ConnectStatusHelperWithExpectedStatus(const MockRead& status,
336 int expected_status); 340 int expected_status);
337 341
338 void ConnectStatusHelper(const MockRead& status); 342 void ConnectStatusHelper(const MockRead& status);
339 343
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 HttpRequestInfo google_get_request_; 526 HttpRequestInfo google_get_request_;
523 HttpRequestInfo google_post_request_; 527 HttpRequestInfo google_post_request_;
524 HttpRequestInfo google_chunked_post_request_; 528 HttpRequestInfo google_chunked_post_request_;
525 HttpRequestInfo google_get_push_request_; 529 HttpRequestInfo google_get_push_request_;
526 }; 530 };
527 531
528 //----------------------------------------------------------------------------- 532 //-----------------------------------------------------------------------------
529 // All tests are run with three different connection types: SPDY after NPN 533 // All tests are run with three different connection types: SPDY after NPN
530 // negotiation, SPDY without SSL, and SPDY with SSL. 534 // negotiation, SPDY without SSL, and SPDY with SSL.
531 INSTANTIATE_TEST_CASE_P(Spdy, 535 INSTANTIATE_TEST_CASE_P(Spdy,
532 SpdyNetworkTransactionTest, 536 SpdyNetworkTransactionSpdy3Test,
533 ::testing::Values(SPDYNOSSL, SPDYSSL, SPDYNPN)); 537 ::testing::Values(SPDYNOSSL, SPDYSSL, SPDYNPN));
534 538
535 539
536 // Verify HttpNetworkTransaction constructor. 540 // Verify HttpNetworkTransaction constructor.
537 TEST_P(SpdyNetworkTransactionTest, Constructor) { 541 TEST_P(SpdyNetworkTransactionSpdy3Test, Constructor) {
538 SpdySessionDependencies session_deps; 542 SpdySessionDependencies session_deps;
539 scoped_refptr<HttpNetworkSession> session( 543 scoped_refptr<HttpNetworkSession> session(
540 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 544 SpdySessionDependencies::SpdyCreateSession(&session_deps));
541 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); 545 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session));
542 } 546 }
543 547
544 TEST_P(SpdyNetworkTransactionTest, Get) { 548 TEST_P(SpdyNetworkTransactionSpdy3Test, Get) {
545 // Construct the request. 549 // Construct the request.
546 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 550 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
547 MockWrite writes[] = { CreateMockWrite(*req) }; 551 MockWrite writes[] = { CreateMockWrite(*req) };
548 552
549 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 553 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
550 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 554 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
551 MockRead reads[] = { 555 MockRead reads[] = {
552 CreateMockRead(*resp), 556 CreateMockRead(*resp),
553 CreateMockRead(*body), 557 CreateMockRead(*body),
554 MockRead(ASYNC, 0, 0) // EOF 558 MockRead(ASYNC, 0, 0) // EOF
555 }; 559 };
556 560
557 scoped_ptr<DelayedSocketData> data( 561 scoped_ptr<DelayedSocketData> data(
558 new DelayedSocketData(1, reads, arraysize(reads), 562 new DelayedSocketData(1, reads, arraysize(reads),
559 writes, arraysize(writes))); 563 writes, arraysize(writes)));
560 NormalSpdyTransactionHelper helper(CreateGetRequest(), 564 NormalSpdyTransactionHelper helper(CreateGetRequest(),
561 BoundNetLog(), GetParam()); 565 BoundNetLog(), GetParam());
562 helper.RunToCompletion(data.get()); 566 helper.RunToCompletion(data.get());
563 TransactionHelperResult out = helper.output(); 567 TransactionHelperResult out = helper.output();
564 EXPECT_EQ(OK, out.rv); 568 EXPECT_EQ(OK, out.rv);
565 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 569 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
566 EXPECT_EQ("hello!", out.response_data); 570 EXPECT_EQ("hello!", out.response_data);
567 } 571 }
568 572
569 TEST_P(SpdyNetworkTransactionTest, GetAtEachPriority) { 573 TEST_P(SpdyNetworkTransactionSpdy3Test, GetAtEachPriority) {
570 for (RequestPriority p = HIGHEST; p < NUM_PRIORITIES; 574 for (RequestPriority p = HIGHEST; p < NUM_PRIORITIES;
571 p = RequestPriority(p+1)) { 575 p = RequestPriority(p+1)) {
572 // Construct the request. 576 // Construct the request.
573 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, p)); 577 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, p));
574 MockWrite writes[] = { CreateMockWrite(*req) }; 578 MockWrite writes[] = { CreateMockWrite(*req) };
575 579
576 const int spdy_prio = reinterpret_cast<spdy::SpdySynStreamControlFrame*>( 580 const int spdy_prio = reinterpret_cast<spdy::SpdySynStreamControlFrame*>(
577 req.get())->priority(); 581 req.get())->priority();
578 // this repeats the RequestPriority-->SpdyPriority mapping from 582 // this repeats the RequestPriority-->SpdyPriority mapping from
579 // SpdyFramer::ConvertRequestPriorityToSpdyPriority to make 583 // SpdyFramer::ConvertRequestPriorityToSpdyPriority to make
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 // Start three gets simultaniously; making sure that multiplexed 626 // Start three gets simultaniously; making sure that multiplexed
623 // streams work properly. 627 // streams work properly.
624 628
625 // This can't use the TransactionHelper method, since it only 629 // This can't use the TransactionHelper method, since it only
626 // handles a single transaction, and finishes them as soon 630 // handles a single transaction, and finishes them as soon
627 // as it launches them. 631 // as it launches them.
628 632
629 // TODO(gavinp): create a working generalized TransactionHelper that 633 // TODO(gavinp): create a working generalized TransactionHelper that
630 // can allow multiple streams in flight. 634 // can allow multiple streams in flight.
631 635
632 TEST_P(SpdyNetworkTransactionTest, ThreeGets) { 636 TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGets) {
633 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 637 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
634 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 638 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
635 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false)); 639 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false));
636 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true)); 640 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true));
637 641
638 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 642 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
639 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); 643 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
640 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false)); 644 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false));
641 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true)); 645 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
642 646
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 721
718 out.rv = ReadTransaction(trans1.get(), &out.response_data); 722 out.rv = ReadTransaction(trans1.get(), &out.response_data);
719 helper.VerifyDataConsumed(); 723 helper.VerifyDataConsumed();
720 EXPECT_EQ(OK, out.rv); 724 EXPECT_EQ(OK, out.rv);
721 725
722 EXPECT_EQ(OK, out.rv); 726 EXPECT_EQ(OK, out.rv);
723 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 727 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
724 EXPECT_EQ("hello!hello!", out.response_data); 728 EXPECT_EQ("hello!hello!", out.response_data);
725 } 729 }
726 730
727 TEST_P(SpdyNetworkTransactionTest, TwoGetsLateBinding) { 731 TEST_P(SpdyNetworkTransactionSpdy3Test, TwoGetsLateBinding) {
728 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 732 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
729 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 733 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
730 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false)); 734 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false));
731 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true)); 735 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true));
732 736
733 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 737 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
734 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); 738 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
735 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false)); 739 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false));
736 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true)); 740 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
737 741
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 out.status_line = response2->headers->GetStatusLine(); 808 out.status_line = response2->headers->GetStatusLine();
805 out.response_info = *response2; 809 out.response_info = *response2;
806 out.rv = ReadTransaction(trans2.get(), &out.response_data); 810 out.rv = ReadTransaction(trans2.get(), &out.response_data);
807 EXPECT_EQ(OK, out.rv); 811 EXPECT_EQ(OK, out.rv);
808 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 812 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
809 EXPECT_EQ("hello!hello!", out.response_data); 813 EXPECT_EQ("hello!hello!", out.response_data);
810 814
811 helper.VerifyDataConsumed(); 815 helper.VerifyDataConsumed();
812 } 816 }
813 817
814 TEST_P(SpdyNetworkTransactionTest, TwoGetsLateBindingFromPreconnect) { 818 TEST_P(SpdyNetworkTransactionSpdy3Test, TwoGetsLateBindingFromPreconnect) {
815 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 819 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
816 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 820 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
817 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false)); 821 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false));
818 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true)); 822 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true));
819 823
820 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 824 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
821 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); 825 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
822 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false)); 826 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false));
823 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true)); 827 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
824 828
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 EXPECT_EQ("hello!hello!", out.response_data); 913 EXPECT_EQ("hello!hello!", out.response_data);
910 914
911 helper.VerifyDataConsumed(); 915 helper.VerifyDataConsumed();
912 } 916 }
913 917
914 // Similar to ThreeGets above, however this test adds a SETTINGS 918 // Similar to ThreeGets above, however this test adds a SETTINGS
915 // frame. The SETTINGS frame is read during the IO loop waiting on 919 // frame. The SETTINGS frame is read during the IO loop waiting on
916 // the first transaction completion, and sets a maximum concurrent 920 // the first transaction completion, and sets a maximum concurrent
917 // stream limit of 1. This means that our IO loop exists after the 921 // stream limit of 1. This means that our IO loop exists after the
918 // second transaction completes, so we can assert on read_index(). 922 // second transaction completes, so we can assert on read_index().
919 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrent) { 923 TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrent) {
920 // Construct the request. 924 // Construct the request.
921 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 925 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
922 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 926 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
923 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false)); 927 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false));
924 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true)); 928 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true));
925 929
926 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 930 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
927 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); 931 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
928 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false)); 932 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false));
929 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true)); 933 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 helper.VerifyDataConsumed(); 1046 helper.VerifyDataConsumed();
1043 } 1047 }
1044 EXPECT_EQ(OK, out.rv); 1048 EXPECT_EQ(OK, out.rv);
1045 } 1049 }
1046 1050
1047 // Similar to ThreeGetsWithMaxConcurrent above, however this test adds 1051 // Similar to ThreeGetsWithMaxConcurrent above, however this test adds
1048 // a fourth transaction. The third and fourth transactions have 1052 // a fourth transaction. The third and fourth transactions have
1049 // different data ("hello!" vs "hello!hello!") and because of the 1053 // different data ("hello!" vs "hello!hello!") and because of the
1050 // user specified priority, we expect to see them inverted in 1054 // user specified priority, we expect to see them inverted in
1051 // the response from the server. 1055 // the response from the server.
1052 TEST_P(SpdyNetworkTransactionTest, FourGetsWithMaxConcurrentPriority) { 1056 TEST_P(SpdyNetworkTransactionSpdy3Test, FourGetsWithMaxConcurrentPriority) {
1053 // Construct the request. 1057 // Construct the request.
1054 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 1058 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
1055 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 1059 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
1056 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false)); 1060 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false));
1057 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true)); 1061 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true));
1058 1062
1059 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 1063 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
1060 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); 1064 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
1061 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false)); 1065 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false));
1062 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true)); 1066 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1202 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1199 EXPECT_EQ("hello!", out.response_data); 1203 EXPECT_EQ("hello!", out.response_data);
1200 helper.VerifyDataConsumed(); 1204 helper.VerifyDataConsumed();
1201 EXPECT_EQ(OK, out.rv); 1205 EXPECT_EQ(OK, out.rv);
1202 } 1206 }
1203 1207
1204 // Similar to ThreeGetsMaxConcurrrent above, however, this test 1208 // Similar to ThreeGetsMaxConcurrrent above, however, this test
1205 // deletes a session in the middle of the transaction to insure 1209 // deletes a session in the middle of the transaction to insure
1206 // that we properly remove pendingcreatestream objects from 1210 // that we properly remove pendingcreatestream objects from
1207 // the spdy_session 1211 // the spdy_session
1208 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentDelete) { 1212 TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrentDelete) {
1209 // Construct the request. 1213 // Construct the request.
1210 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 1214 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
1211 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 1215 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
1212 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false)); 1216 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false));
1213 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true)); 1217 scoped_ptr<spdy::SpdyFrame> fbody(ConstructSpdyBodyFrame(1, true));
1214 1218
1215 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 1219 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
1216 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); 1220 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
1217 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false)); 1221 scoped_ptr<spdy::SpdyFrame> body2(ConstructSpdyBodyFrame(3, false));
1218 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true)); 1222 scoped_ptr<spdy::SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 out.status_line = response2->headers->GetStatusLine(); 1307 out.status_line = response2->headers->GetStatusLine();
1304 out.response_info = *response2; 1308 out.response_info = *response2;
1305 out.rv = ReadTransaction(trans2.get(), &out.response_data); 1309 out.rv = ReadTransaction(trans2.get(), &out.response_data);
1306 EXPECT_EQ(OK, out.rv); 1310 EXPECT_EQ(OK, out.rv);
1307 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1311 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1308 EXPECT_EQ("hello!hello!", out.response_data); 1312 EXPECT_EQ("hello!hello!", out.response_data);
1309 helper.VerifyDataConsumed(); 1313 helper.VerifyDataConsumed();
1310 EXPECT_EQ(OK, out.rv); 1314 EXPECT_EQ(OK, out.rv);
1311 } 1315 }
1312 1316
1317 namespace {
1318
1313 // The KillerCallback will delete the transaction on error as part of the 1319 // The KillerCallback will delete the transaction on error as part of the
1314 // callback. 1320 // callback.
1315 class KillerCallback : public TestCompletionCallbackBase { 1321 class KillerCallback : public TestCompletionCallbackBase {
1316 public: 1322 public:
1317 explicit KillerCallback(HttpNetworkTransaction* transaction) 1323 explicit KillerCallback(HttpNetworkTransaction* transaction)
1318 : transaction_(transaction), 1324 : transaction_(transaction),
1319 ALLOW_THIS_IN_INITIALIZER_LIST(callback_( 1325 ALLOW_THIS_IN_INITIALIZER_LIST(callback_(
1320 base::Bind(&KillerCallback::OnComplete, base::Unretained(this)))) { 1326 base::Bind(&KillerCallback::OnComplete, base::Unretained(this)))) {
1321 } 1327 }
1322 1328
1323 virtual ~KillerCallback() {} 1329 virtual ~KillerCallback() {}
1324 1330
1325 const CompletionCallback& callback() const { return callback_; } 1331 const CompletionCallback& callback() const { return callback_; }
1326 1332
1327 private: 1333 private:
1328 void OnComplete(int result) { 1334 void OnComplete(int result) {
1329 if (result < 0) 1335 if (result < 0)
1330 delete transaction_; 1336 delete transaction_;
1331 1337
1332 SetResult(result); 1338 SetResult(result);
1333 } 1339 }
1334 1340
1335 HttpNetworkTransaction* transaction_; 1341 HttpNetworkTransaction* transaction_;
1336 CompletionCallback callback_; 1342 CompletionCallback callback_;
1337 }; 1343 };
1338 1344
1345 } // namespace
1346
1339 // Similar to ThreeGetsMaxConcurrrentDelete above, however, this test 1347 // Similar to ThreeGetsMaxConcurrrentDelete above, however, this test
1340 // closes the socket while we have a pending transaction waiting for 1348 // closes the socket while we have a pending transaction waiting for
1341 // a pending stream creation. http://crbug.com/52901 1349 // a pending stream creation. http://crbug.com/52901
1342 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentSocketClose) { 1350 TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrentSocketClose) {
1343 // Construct the request. 1351 // Construct the request.
1344 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 1352 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
1345 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 1353 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
1346 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false)); 1354 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, false));
1347 scoped_ptr<spdy::SpdyFrame> fin_body(ConstructSpdyBodyFrame(1, true)); 1355 scoped_ptr<spdy::SpdyFrame> fin_body(ConstructSpdyBodyFrame(1, true));
1348 1356
1349 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 1357 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
1350 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); 1358 scoped_ptr<spdy::SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
1351 1359
1352 spdy::SpdySettings settings; 1360 spdy::SpdySettings settings;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1426 ASSERT_TRUE(response2 != NULL); 1434 ASSERT_TRUE(response2 != NULL);
1427 out.status_line = response2->headers->GetStatusLine(); 1435 out.status_line = response2->headers->GetStatusLine();
1428 out.response_info = *response2; 1436 out.response_info = *response2;
1429 out.rv = ReadTransaction(&trans2, &out.response_data); 1437 out.rv = ReadTransaction(&trans2, &out.response_data);
1430 EXPECT_EQ(ERR_CONNECTION_RESET, out.rv); 1438 EXPECT_EQ(ERR_CONNECTION_RESET, out.rv);
1431 1439
1432 helper.VerifyDataConsumed(); 1440 helper.VerifyDataConsumed();
1433 } 1441 }
1434 1442
1435 // Test that a simple PUT request works. 1443 // Test that a simple PUT request works.
1436 TEST_P(SpdyNetworkTransactionTest, Put) { 1444 TEST_P(SpdyNetworkTransactionSpdy3Test, Put) {
1437 // Setup the request 1445 // Setup the request
1438 HttpRequestInfo request; 1446 HttpRequestInfo request;
1439 request.method = "PUT"; 1447 request.method = "PUT";
1440 request.url = GURL("http://www.google.com/"); 1448 request.url = GURL("http://www.google.com/");
1441 1449
1442 const SpdyHeaderInfo kSynStartHeader = { 1450 const SpdyHeaderInfo kSynStartHeader = {
1443 spdy::SYN_STREAM, // Kind = Syn 1451 spdy::SYN_STREAM, // Kind = Syn
1444 1, // Stream ID 1452 1, // Stream ID
1445 0, // Associated stream ID 1453 0, // Associated stream ID
1446 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority 1454 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 NormalSpdyTransactionHelper helper(request, 1505 NormalSpdyTransactionHelper helper(request,
1498 BoundNetLog(), GetParam()); 1506 BoundNetLog(), GetParam());
1499 helper.RunToCompletion(data.get()); 1507 helper.RunToCompletion(data.get());
1500 TransactionHelperResult out = helper.output(); 1508 TransactionHelperResult out = helper.output();
1501 1509
1502 EXPECT_EQ(OK, out.rv); 1510 EXPECT_EQ(OK, out.rv);
1503 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1511 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1504 } 1512 }
1505 1513
1506 // Test that a simple HEAD request works. 1514 // Test that a simple HEAD request works.
1507 TEST_P(SpdyNetworkTransactionTest, Head) { 1515 TEST_P(SpdyNetworkTransactionSpdy3Test, Head) {
1508 // Setup the request 1516 // Setup the request
1509 HttpRequestInfo request; 1517 HttpRequestInfo request;
1510 request.method = "HEAD"; 1518 request.method = "HEAD";
1511 request.url = GURL("http://www.google.com/"); 1519 request.url = GURL("http://www.google.com/");
1512 1520
1513 const SpdyHeaderInfo kSynStartHeader = { 1521 const SpdyHeaderInfo kSynStartHeader = {
1514 spdy::SYN_STREAM, // Kind = Syn 1522 spdy::SYN_STREAM, // Kind = Syn
1515 1, // Stream ID 1523 1, // Stream ID
1516 0, // Associated stream ID 1524 0, // Associated stream ID
1517 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority 1525 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 NormalSpdyTransactionHelper helper(request, 1576 NormalSpdyTransactionHelper helper(request,
1569 BoundNetLog(), GetParam()); 1577 BoundNetLog(), GetParam());
1570 helper.RunToCompletion(data.get()); 1578 helper.RunToCompletion(data.get());
1571 TransactionHelperResult out = helper.output(); 1579 TransactionHelperResult out = helper.output();
1572 1580
1573 EXPECT_EQ(OK, out.rv); 1581 EXPECT_EQ(OK, out.rv);
1574 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1582 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1575 } 1583 }
1576 1584
1577 // Test that a simple POST works. 1585 // Test that a simple POST works.
1578 TEST_P(SpdyNetworkTransactionTest, Post) { 1586 TEST_P(SpdyNetworkTransactionSpdy3Test, Post) {
1579 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost(kUploadDataSize, NULL, 0)); 1587 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost(kUploadDataSize, NULL, 0));
1580 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 1588 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
1581 MockWrite writes[] = { 1589 MockWrite writes[] = {
1582 CreateMockWrite(*req), 1590 CreateMockWrite(*req),
1583 CreateMockWrite(*body), // POST upload frame 1591 CreateMockWrite(*body), // POST upload frame
1584 }; 1592 };
1585 1593
1586 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0)); 1594 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
1587 MockRead reads[] = { 1595 MockRead reads[] = {
1588 CreateMockRead(*resp), 1596 CreateMockRead(*resp),
1589 CreateMockRead(*body), 1597 CreateMockRead(*body),
1590 MockRead(ASYNC, 0, 0) // EOF 1598 MockRead(ASYNC, 0, 0) // EOF
1591 }; 1599 };
1592 1600
1593 scoped_ptr<DelayedSocketData> data( 1601 scoped_ptr<DelayedSocketData> data(
1594 new DelayedSocketData(2, reads, arraysize(reads), 1602 new DelayedSocketData(2, reads, arraysize(reads),
1595 writes, arraysize(writes))); 1603 writes, arraysize(writes)));
1596 NormalSpdyTransactionHelper helper(CreatePostRequest(), 1604 NormalSpdyTransactionHelper helper(CreatePostRequest(),
1597 BoundNetLog(), GetParam()); 1605 BoundNetLog(), GetParam());
1598 helper.RunToCompletion(data.get()); 1606 helper.RunToCompletion(data.get());
1599 TransactionHelperResult out = helper.output(); 1607 TransactionHelperResult out = helper.output();
1600 EXPECT_EQ(OK, out.rv); 1608 EXPECT_EQ(OK, out.rv);
1601 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1609 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1602 EXPECT_EQ("hello!", out.response_data); 1610 EXPECT_EQ("hello!", out.response_data);
1603 } 1611 }
1604 1612
1605 // Test that a chunked POST works. 1613 // Test that a chunked POST works.
1606 TEST_P(SpdyNetworkTransactionTest, ChunkedPost) { 1614 TEST_P(SpdyNetworkTransactionSpdy3Test, ChunkedPost) {
1607 UploadDataStream::set_merge_chunks(false); 1615 UploadDataStream::set_merge_chunks(false);
1608 scoped_ptr<spdy::SpdyFrame> req(ConstructChunkedSpdyPost(NULL, 0)); 1616 scoped_ptr<spdy::SpdyFrame> req(ConstructChunkedSpdyPost(NULL, 0));
1609 scoped_ptr<spdy::SpdyFrame> chunk1(ConstructSpdyBodyFrame(1, false)); 1617 scoped_ptr<spdy::SpdyFrame> chunk1(ConstructSpdyBodyFrame(1, false));
1610 scoped_ptr<spdy::SpdyFrame> chunk2(ConstructSpdyBodyFrame(1, true)); 1618 scoped_ptr<spdy::SpdyFrame> chunk2(ConstructSpdyBodyFrame(1, true));
1611 MockWrite writes[] = { 1619 MockWrite writes[] = {
1612 CreateMockWrite(*req), 1620 CreateMockWrite(*req),
1613 CreateMockWrite(*chunk1), 1621 CreateMockWrite(*chunk1),
1614 CreateMockWrite(*chunk2), 1622 CreateMockWrite(*chunk2),
1615 }; 1623 };
1616 1624
(...skipping 11 matching lines...) Expand all
1628 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), 1636 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(),
1629 BoundNetLog(), GetParam()); 1637 BoundNetLog(), GetParam());
1630 helper.RunToCompletion(data.get()); 1638 helper.RunToCompletion(data.get());
1631 TransactionHelperResult out = helper.output(); 1639 TransactionHelperResult out = helper.output();
1632 EXPECT_EQ(OK, out.rv); 1640 EXPECT_EQ(OK, out.rv);
1633 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1641 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1634 EXPECT_EQ("hello!hello!", out.response_data); 1642 EXPECT_EQ("hello!hello!", out.response_data);
1635 } 1643 }
1636 1644
1637 // Test that a POST without any post data works. 1645 // Test that a POST without any post data works.
1638 TEST_P(SpdyNetworkTransactionTest, NullPost) { 1646 TEST_P(SpdyNetworkTransactionSpdy3Test, NullPost) {
1639 // Setup the request 1647 // Setup the request
1640 HttpRequestInfo request; 1648 HttpRequestInfo request;
1641 request.method = "POST"; 1649 request.method = "POST";
1642 request.url = GURL("http://www.google.com/"); 1650 request.url = GURL("http://www.google.com/");
1643 // Create an empty UploadData. 1651 // Create an empty UploadData.
1644 request.upload_data = NULL; 1652 request.upload_data = NULL;
1645 1653
1646 // When request.upload_data is NULL for post, content-length is 1654 // When request.upload_data is NULL for post, content-length is
1647 // expected to be 0. 1655 // expected to be 0.
1648 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost(0, NULL, 0)); 1656 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost(0, NULL, 0));
(...skipping 18 matching lines...) Expand all
1667 NormalSpdyTransactionHelper helper(request, 1675 NormalSpdyTransactionHelper helper(request,
1668 BoundNetLog(), GetParam()); 1676 BoundNetLog(), GetParam());
1669 helper.RunToCompletion(data.get()); 1677 helper.RunToCompletion(data.get());
1670 TransactionHelperResult out = helper.output(); 1678 TransactionHelperResult out = helper.output();
1671 EXPECT_EQ(OK, out.rv); 1679 EXPECT_EQ(OK, out.rv);
1672 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1680 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1673 EXPECT_EQ("hello!", out.response_data); 1681 EXPECT_EQ("hello!", out.response_data);
1674 } 1682 }
1675 1683
1676 // Test that a simple POST works. 1684 // Test that a simple POST works.
1677 TEST_P(SpdyNetworkTransactionTest, EmptyPost) { 1685 TEST_P(SpdyNetworkTransactionSpdy3Test, EmptyPost) {
1678 // Setup the request 1686 // Setup the request
1679 HttpRequestInfo request; 1687 HttpRequestInfo request;
1680 request.method = "POST"; 1688 request.method = "POST";
1681 request.url = GURL("http://www.google.com/"); 1689 request.url = GURL("http://www.google.com/");
1682 // Create an empty UploadData. 1690 // Create an empty UploadData.
1683 request.upload_data = new UploadData(); 1691 request.upload_data = new UploadData();
1684 1692
1685 // Http POST Content-Length is using UploadDataStream::size(). 1693 // Http POST Content-Length is using UploadDataStream::size().
1686 // It is the same as request.upload_data->GetContentLengthSync(). 1694 // It is the same as request.upload_data->GetContentLengthSync().
1687 scoped_ptr<UploadDataStream> stream( 1695 scoped_ptr<UploadDataStream> stream(
(...skipping 26 matching lines...) Expand all
1714 NormalSpdyTransactionHelper helper(request, 1722 NormalSpdyTransactionHelper helper(request,
1715 BoundNetLog(), GetParam()); 1723 BoundNetLog(), GetParam());
1716 helper.RunToCompletion(data.get()); 1724 helper.RunToCompletion(data.get());
1717 TransactionHelperResult out = helper.output(); 1725 TransactionHelperResult out = helper.output();
1718 EXPECT_EQ(OK, out.rv); 1726 EXPECT_EQ(OK, out.rv);
1719 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1727 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1720 EXPECT_EQ("hello!", out.response_data); 1728 EXPECT_EQ("hello!", out.response_data);
1721 } 1729 }
1722 1730
1723 // While we're doing a post, the server sends back a SYN_REPLY. 1731 // While we're doing a post, the server sends back a SYN_REPLY.
1724 TEST_P(SpdyNetworkTransactionTest, PostWithEarlySynReply) { 1732 TEST_P(SpdyNetworkTransactionSpdy3Test, PostWithEarlySynReply) {
1725 static const char upload[] = { "hello!" }; 1733 static const char upload[] = { "hello!" };
1726 1734
1727 // Setup the request 1735 // Setup the request
1728 HttpRequestInfo request; 1736 HttpRequestInfo request;
1729 request.method = "POST"; 1737 request.method = "POST";
1730 request.url = GURL("http://www.google.com/"); 1738 request.url = GURL("http://www.google.com/");
1731 request.upload_data = new UploadData(); 1739 request.upload_data = new UploadData();
1732 request.upload_data->AppendBytes(upload, sizeof(upload)); 1740 request.upload_data->AppendBytes(upload, sizeof(upload));
1733 1741
1734 // Http POST Content-Length is using UploadDataStream::size(). 1742 // Http POST Content-Length is using UploadDataStream::size().
(...skipping 20 matching lines...) Expand all
1755 helper.RunDefaultTest(); 1763 helper.RunDefaultTest();
1756 helper.VerifyDataConsumed(); 1764 helper.VerifyDataConsumed();
1757 1765
1758 TransactionHelperResult out = helper.output(); 1766 TransactionHelperResult out = helper.output();
1759 EXPECT_EQ(ERR_SYN_REPLY_NOT_RECEIVED, out.rv); 1767 EXPECT_EQ(ERR_SYN_REPLY_NOT_RECEIVED, out.rv);
1760 } 1768 }
1761 1769
1762 // The client upon cancellation tries to send a RST_STREAM frame. The mock 1770 // The client upon cancellation tries to send a RST_STREAM frame. The mock
1763 // socket causes the TCP write to return zero. This test checks that the client 1771 // socket causes the TCP write to return zero. This test checks that the client
1764 // tries to queue up the RST_STREAM frame again. 1772 // tries to queue up the RST_STREAM frame again.
1765 TEST_P(SpdyNetworkTransactionTest, SocketWriteReturnsZero) { 1773 TEST_P(SpdyNetworkTransactionSpdy3Test, SocketWriteReturnsZero) {
1766 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 1774 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
1767 scoped_ptr<spdy::SpdyFrame> rst( 1775 scoped_ptr<spdy::SpdyFrame> rst(
1768 ConstructSpdyRstStream(1, spdy::CANCEL)); 1776 ConstructSpdyRstStream(1, spdy::CANCEL));
1769 MockWrite writes[] = { 1777 MockWrite writes[] = {
1770 CreateMockWrite(*req.get(), 0, SYNCHRONOUS), 1778 CreateMockWrite(*req.get(), 0, SYNCHRONOUS),
1771 MockWrite(SYNCHRONOUS, 0, 0, 2), 1779 MockWrite(SYNCHRONOUS, 0, 0, 2),
1772 CreateMockWrite(*rst.get(), 3, SYNCHRONOUS), 1780 CreateMockWrite(*rst.get(), 3, SYNCHRONOUS),
1773 }; 1781 };
1774 1782
1775 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 1783 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
(...skipping 20 matching lines...) Expand all
1796 data->SetStop(2); 1804 data->SetStop(2);
1797 data->Run(); 1805 data->Run();
1798 helper.ResetTrans(); 1806 helper.ResetTrans();
1799 data->SetStop(20); 1807 data->SetStop(20);
1800 data->Run(); 1808 data->Run();
1801 1809
1802 helper.VerifyDataConsumed(); 1810 helper.VerifyDataConsumed();
1803 } 1811 }
1804 1812
1805 // Test that the transaction doesn't crash when we don't have a reply. 1813 // Test that the transaction doesn't crash when we don't have a reply.
1806 TEST_P(SpdyNetworkTransactionTest, ResponseWithoutSynReply) { 1814 TEST_P(SpdyNetworkTransactionSpdy3Test, ResponseWithoutSynReply) {
1807 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 1815 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
1808 MockRead reads[] = { 1816 MockRead reads[] = {
1809 CreateMockRead(*body), 1817 CreateMockRead(*body),
1810 MockRead(ASYNC, 0, 0) // EOF 1818 MockRead(ASYNC, 0, 0) // EOF
1811 }; 1819 };
1812 1820
1813 scoped_ptr<DelayedSocketData> data( 1821 scoped_ptr<DelayedSocketData> data(
1814 new DelayedSocketData(1, reads, arraysize(reads), NULL, 0)); 1822 new DelayedSocketData(1, reads, arraysize(reads), NULL, 0));
1815 NormalSpdyTransactionHelper helper(CreateGetRequest(), 1823 NormalSpdyTransactionHelper helper(CreateGetRequest(),
1816 BoundNetLog(), GetParam()); 1824 BoundNetLog(), GetParam());
1817 helper.RunToCompletion(data.get()); 1825 helper.RunToCompletion(data.get());
1818 TransactionHelperResult out = helper.output(); 1826 TransactionHelperResult out = helper.output();
1819 EXPECT_EQ(ERR_SYN_REPLY_NOT_RECEIVED, out.rv); 1827 EXPECT_EQ(ERR_SYN_REPLY_NOT_RECEIVED, out.rv);
1820 } 1828 }
1821 1829
1822 // Test that the transaction doesn't crash when we get two replies on the same 1830 // Test that the transaction doesn't crash when we get two replies on the same
1823 // stream ID. See http://crbug.com/45639. 1831 // stream ID. See http://crbug.com/45639.
1824 TEST_P(SpdyNetworkTransactionTest, ResponseWithTwoSynReplies) { 1832 TEST_P(SpdyNetworkTransactionSpdy3Test, ResponseWithTwoSynReplies) {
1825 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 1833 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
1826 MockWrite writes[] = { CreateMockWrite(*req) }; 1834 MockWrite writes[] = { CreateMockWrite(*req) };
1827 1835
1828 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 1836 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
1829 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 1837 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
1830 MockRead reads[] = { 1838 MockRead reads[] = {
1831 CreateMockRead(*resp), 1839 CreateMockRead(*resp),
1832 CreateMockRead(*resp), 1840 CreateMockRead(*resp),
1833 CreateMockRead(*body), 1841 CreateMockRead(*body),
1834 MockRead(ASYNC, 0, 0) // EOF 1842 MockRead(ASYNC, 0, 0) // EOF
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 // since request has not been completely written, therefore we feed 1884 // since request has not been completely written, therefore we feed
1877 // enough number of WINDOW_UPDATEs to finish the first read and cause a 1885 // enough number of WINDOW_UPDATEs to finish the first read and cause a
1878 // write, leading to a complete write of request body; after that we send 1886 // write, leading to a complete write of request body; after that we send
1879 // a reply with a body, to cause a graceful shutdown. 1887 // a reply with a body, to cause a graceful shutdown.
1880 1888
1881 // TODO(agayev): develop a socket data provider where both, reads and 1889 // TODO(agayev): develop a socket data provider where both, reads and
1882 // writes are ordered so that writing tests like these are easy and rewrite 1890 // writes are ordered so that writing tests like these are easy and rewrite
1883 // all these tests using it. Right now we are working around the 1891 // all these tests using it. Right now we are working around the
1884 // limitations as described above and it's not deterministic, tests may 1892 // limitations as described above and it's not deterministic, tests may
1885 // fail under specific circumstances. 1893 // fail under specific circumstances.
1886 TEST_P(SpdyNetworkTransactionTest, WindowUpdateReceived) { 1894 TEST_P(SpdyNetworkTransactionSpdy3Test, WindowUpdateReceived) {
1887 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl); 1895 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl);
1888 1896
1889 static int kFrameCount = 2; 1897 static int kFrameCount = 2;
1890 scoped_ptr<std::string> content( 1898 scoped_ptr<std::string> content(
1891 new std::string(kMaxSpdyFrameChunkSize, 'a')); 1899 new std::string(kMaxSpdyFrameChunkSize, 'a'));
1892 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost( 1900 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost(
1893 kMaxSpdyFrameChunkSize * kFrameCount, NULL, 0)); 1901 kMaxSpdyFrameChunkSize * kFrameCount, NULL, 0));
1894 scoped_ptr<spdy::SpdyFrame> body( 1902 scoped_ptr<spdy::SpdyFrame> body(
1895 ConstructSpdyBodyFrame(1, content->c_str(), content->size(), false)); 1903 ConstructSpdyBodyFrame(1, content->c_str(), content->size(), false));
1896 scoped_ptr<spdy::SpdyFrame> body_end( 1904 scoped_ptr<spdy::SpdyFrame> body_end(
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1954 kDeltaWindowSize * kDeltaCount - 1962 kDeltaWindowSize * kDeltaCount -
1955 kMaxSpdyFrameChunkSize * kFrameCount, 1963 kMaxSpdyFrameChunkSize * kFrameCount,
1956 stream->stream()->send_window_size()); 1964 stream->stream()->send_window_size());
1957 helper.VerifyDataConsumed(); 1965 helper.VerifyDataConsumed();
1958 1966
1959 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN); 1967 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN);
1960 } 1968 }
1961 1969
1962 // Test that received data frames and sent WINDOW_UPDATE frames change 1970 // Test that received data frames and sent WINDOW_UPDATE frames change
1963 // the recv_window_size_ correctly. 1971 // the recv_window_size_ correctly.
1964 TEST_P(SpdyNetworkTransactionTest, WindowUpdateSent) { 1972 TEST_P(SpdyNetworkTransactionSpdy3Test, WindowUpdateSent) {
1965 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl); 1973 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl);
1966 1974
1967 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 1975 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
1968 scoped_ptr<spdy::SpdyFrame> window_update( 1976 scoped_ptr<spdy::SpdyFrame> window_update(
1969 ConstructSpdyWindowUpdate(1, kUploadDataSize)); 1977 ConstructSpdyWindowUpdate(1, kUploadDataSize));
1970 1978
1971 MockWrite writes[] = { 1979 MockWrite writes[] = {
1972 CreateMockWrite(*req), 1980 CreateMockWrite(*req),
1973 CreateMockWrite(*window_update), 1981 CreateMockWrite(*window_update),
1974 }; 1982 };
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2042 // Read EOF. 2050 // Read EOF.
2043 data->CompleteRead(); 2051 data->CompleteRead();
2044 2052
2045 helper.VerifyDataConsumed(); 2053 helper.VerifyDataConsumed();
2046 2054
2047 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN); 2055 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN);
2048 } 2056 }
2049 2057
2050 // Test that WINDOW_UPDATE frame causing overflow is handled correctly. We 2058 // Test that WINDOW_UPDATE frame causing overflow is handled correctly. We
2051 // use the same trick as in the above test to enforce our scenario. 2059 // use the same trick as in the above test to enforce our scenario.
2052 TEST_P(SpdyNetworkTransactionTest, WindowUpdateOverflow) { 2060 TEST_P(SpdyNetworkTransactionSpdy3Test, WindowUpdateOverflow) {
2053 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl); 2061 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl);
2054 2062
2055 // number of full frames we hope to write (but will not, used to 2063 // number of full frames we hope to write (but will not, used to
2056 // set content-length header correctly) 2064 // set content-length header correctly)
2057 static int kFrameCount = 3; 2065 static int kFrameCount = 3;
2058 2066
2059 scoped_ptr<std::string> content( 2067 scoped_ptr<std::string> content(
2060 new std::string(kMaxSpdyFrameChunkSize, 'a')); 2068 new std::string(kMaxSpdyFrameChunkSize, 'a'));
2061 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost( 2069 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyPost(
2062 kMaxSpdyFrameChunkSize * kFrameCount, NULL, 0)); 2070 kMaxSpdyFrameChunkSize * kFrameCount, NULL, 0));
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
2134 // data frame containing default content (which is "hello!") and this frame 2142 // data frame containing default content (which is "hello!") and this frame
2135 // also contains a FIN flag. DelayedSocketData is used to enforce all 2143 // also contains a FIN flag. DelayedSocketData is used to enforce all
2136 // writes go through before a read could happen. However, the last frame 2144 // writes go through before a read could happen. However, the last frame
2137 // ("hello!") is not supposed to go through since by the time its turn 2145 // ("hello!") is not supposed to go through since by the time its turn
2138 // arrives, window size is 0. At this point MessageLoop::Run() called via 2146 // arrives, window size is 0. At this point MessageLoop::Run() called via
2139 // callback would block. Therefore we call MessageLoop::RunAllPending() 2147 // callback would block. Therefore we call MessageLoop::RunAllPending()
2140 // which returns after performing all possible writes. We use DCHECKS to 2148 // which returns after performing all possible writes. We use DCHECKS to
2141 // ensure that last data frame is still there and stream has stalled. 2149 // ensure that last data frame is still there and stream has stalled.
2142 // After that, next read is artifically enforced, which causes a 2150 // After that, next read is artifically enforced, which causes a
2143 // WINDOW_UPDATE to be read and I/O process resumes. 2151 // WINDOW_UPDATE to be read and I/O process resumes.
2144 TEST_P(SpdyNetworkTransactionTest, FlowControlStallResume) { 2152 TEST_P(SpdyNetworkTransactionSpdy3Test, FlowControlStallResume) {
2145 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl); 2153 SpdySession::set_use_flow_control(SpdySession::kEnableFlowControl);
2146 2154
2147 // Number of frames we need to send to zero out the window size: data 2155 // Number of frames we need to send to zero out the window size: data
2148 // frames plus SYN_STREAM plus the last data frame; also we need another 2156 // frames plus SYN_STREAM plus the last data frame; also we need another
2149 // data frame that we will send once the WINDOW_UPDATE is received, 2157 // data frame that we will send once the WINDOW_UPDATE is received,
2150 // therefore +3. 2158 // therefore +3.
2151 size_t nwrites = 2159 size_t nwrites =
2152 spdy::kSpdyStreamInitialWindowSize / kMaxSpdyFrameChunkSize + 3; 2160 spdy::kSpdyStreamInitialWindowSize / kMaxSpdyFrameChunkSize + 3;
2153 2161
2154 // Calculate last frame's size; 0 size data frame is legal. 2162 // Calculate last frame's size; 0 size data frame is legal.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2234 // But the body is not yet fully sent ("hello!" is not yet sent). 2242 // But the body is not yet fully sent ("hello!" is not yet sent).
2235 EXPECT_FALSE(stream->stream()->body_sent()); 2243 EXPECT_FALSE(stream->stream()->body_sent());
2236 2244
2237 data->ForceNextRead(); // Read in WINDOW_UPDATE frame. 2245 data->ForceNextRead(); // Read in WINDOW_UPDATE frame.
2238 rv = callback.WaitForResult(); 2246 rv = callback.WaitForResult();
2239 helper.VerifyDataConsumed(); 2247 helper.VerifyDataConsumed();
2240 2248
2241 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN); 2249 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN);
2242 } 2250 }
2243 2251
2244 TEST_P(SpdyNetworkTransactionTest, CancelledTransaction) { 2252 TEST_P(SpdyNetworkTransactionSpdy3Test, CancelledTransaction) {
2245 // Construct the request. 2253 // Construct the request.
2246 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2254 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2247 MockWrite writes[] = { 2255 MockWrite writes[] = {
2248 CreateMockWrite(*req), 2256 CreateMockWrite(*req),
2249 }; 2257 };
2250 2258
2251 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 2259 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
2252 MockRead reads[] = { 2260 MockRead reads[] = {
2253 CreateMockRead(*resp), 2261 CreateMockRead(*resp),
2254 // This following read isn't used by the test, except during the 2262 // This following read isn't used by the test, except during the
(...skipping 18 matching lines...) Expand all
2273 EXPECT_EQ(ERR_IO_PENDING, rv); 2281 EXPECT_EQ(ERR_IO_PENDING, rv);
2274 helper.ResetTrans(); // Cancel the transaction. 2282 helper.ResetTrans(); // Cancel the transaction.
2275 2283
2276 // Flush the MessageLoop while the SpdySessionDependencies (in particular, the 2284 // Flush the MessageLoop while the SpdySessionDependencies (in particular, the
2277 // MockClientSocketFactory) are still alive. 2285 // MockClientSocketFactory) are still alive.
2278 MessageLoop::current()->RunAllPending(); 2286 MessageLoop::current()->RunAllPending();
2279 helper.VerifyDataNotConsumed(); 2287 helper.VerifyDataNotConsumed();
2280 } 2288 }
2281 2289
2282 // Verify that the client sends a Rst Frame upon cancelling the stream. 2290 // Verify that the client sends a Rst Frame upon cancelling the stream.
2283 TEST_P(SpdyNetworkTransactionTest, CancelledTransactionSendRst) { 2291 TEST_P(SpdyNetworkTransactionSpdy3Test, CancelledTransactionSendRst) {
2284 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2292 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2285 scoped_ptr<spdy::SpdyFrame> rst( 2293 scoped_ptr<spdy::SpdyFrame> rst(
2286 ConstructSpdyRstStream(1, spdy::CANCEL)); 2294 ConstructSpdyRstStream(1, spdy::CANCEL));
2287 MockWrite writes[] = { 2295 MockWrite writes[] = {
2288 CreateMockWrite(*req, 0, SYNCHRONOUS), 2296 CreateMockWrite(*req, 0, SYNCHRONOUS),
2289 CreateMockWrite(*rst, 2, SYNCHRONOUS), 2297 CreateMockWrite(*rst, 2, SYNCHRONOUS),
2290 }; 2298 };
2291 2299
2292 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 2300 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
2293 MockRead reads[] = { 2301 MockRead reads[] = {
(...skipping 24 matching lines...) Expand all
2318 helper.ResetTrans(); 2326 helper.ResetTrans();
2319 data->SetStop(20); 2327 data->SetStop(20);
2320 data->Run(); 2328 data->Run();
2321 2329
2322 helper.VerifyDataConsumed(); 2330 helper.VerifyDataConsumed();
2323 } 2331 }
2324 2332
2325 // Verify that the client can correctly deal with the user callback attempting 2333 // Verify that the client can correctly deal with the user callback attempting
2326 // to start another transaction on a session that is closing down. See 2334 // to start another transaction on a session that is closing down. See
2327 // http://crbug.com/47455 2335 // http://crbug.com/47455
2328 TEST_P(SpdyNetworkTransactionTest, StartTransactionOnReadCallback) { 2336 TEST_P(SpdyNetworkTransactionSpdy3Test, StartTransactionOnReadCallback) {
2329 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2337 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2330 MockWrite writes[] = { CreateMockWrite(*req) }; 2338 MockWrite writes[] = { CreateMockWrite(*req) };
2331 MockWrite writes2[] = { CreateMockWrite(*req) }; 2339 MockWrite writes2[] = { CreateMockWrite(*req) };
2332 2340
2333 // The indicated length of this packet is longer than its actual length. When 2341 // The indicated length of this packet is longer than its actual length. When
2334 // the session receives an empty packet after this one, it shuts down the 2342 // the session receives an empty packet after this one, it shuts down the
2335 // session, and calls the read callback with the incomplete data. 2343 // session, and calls the read callback with the incomplete data.
2336 const uint8 kGetBodyFrame2[] = { 2344 const uint8 kGetBodyFrame2[] = {
2337 0x00, 0x00, 0x00, 0x01, 2345 0x00, 0x00, 0x00, 0x01,
2338 0x01, 0x00, 0x00, 0x07, 2346 0x01, 0x00, 0x00, 0x07,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2370 // Start the transaction with basic parameters. 2378 // Start the transaction with basic parameters.
2371 TestCompletionCallback callback; 2379 TestCompletionCallback callback;
2372 int rv = trans->Start(&helper.request(), callback.callback(), BoundNetLog()); 2380 int rv = trans->Start(&helper.request(), callback.callback(), BoundNetLog());
2373 EXPECT_EQ(ERR_IO_PENDING, rv); 2381 EXPECT_EQ(ERR_IO_PENDING, rv);
2374 rv = callback.WaitForResult(); 2382 rv = callback.WaitForResult();
2375 2383
2376 const int kSize = 3000; 2384 const int kSize = 3000;
2377 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 2385 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
2378 rv = trans->Read( 2386 rv = trans->Read(
2379 buf, kSize, 2387 buf, kSize,
2380 base::Bind(&SpdyNetworkTransactionTest::StartTransactionCallback, 2388 base::Bind(&SpdyNetworkTransactionSpdy3Test::StartTransactionCallback,
2381 helper.session())); 2389 helper.session()));
2382 // This forces an err_IO_pending, which sets the callback. 2390 // This forces an err_IO_pending, which sets the callback.
2383 data->CompleteRead(); 2391 data->CompleteRead();
2384 // This finishes the read. 2392 // This finishes the read.
2385 data->CompleteRead(); 2393 data->CompleteRead();
2386 helper.VerifyDataConsumed(); 2394 helper.VerifyDataConsumed();
2387 } 2395 }
2388 2396
2389 // Verify that the client can correctly deal with the user callback deleting the 2397 // Verify that the client can correctly deal with the user callback deleting the
2390 // transaction. Failures will usually be valgrind errors. See 2398 // transaction. Failures will usually be valgrind errors. See
2391 // http://crbug.com/46925 2399 // http://crbug.com/46925
2392 TEST_P(SpdyNetworkTransactionTest, DeleteSessionOnReadCallback) { 2400 TEST_P(SpdyNetworkTransactionSpdy3Test, DeleteSessionOnReadCallback) {
2393 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2401 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2394 MockWrite writes[] = { CreateMockWrite(*req) }; 2402 MockWrite writes[] = { CreateMockWrite(*req) };
2395 2403
2396 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 2404 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
2397 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 2405 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
2398 MockRead reads[] = { 2406 MockRead reads[] = {
2399 CreateMockRead(*resp.get(), 2), 2407 CreateMockRead(*resp.get(), 2),
2400 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause 2408 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause
2401 CreateMockRead(*body.get(), 4), 2409 CreateMockRead(*body.get(), 4),
2402 MockRead(ASYNC, 0, 0, 5), // EOF 2410 MockRead(ASYNC, 0, 0, 5), // EOF
(...skipping 14 matching lines...) Expand all
2417 int rv = trans->Start(&helper.request(), callback.callback(), BoundNetLog()); 2425 int rv = trans->Start(&helper.request(), callback.callback(), BoundNetLog());
2418 EXPECT_EQ(ERR_IO_PENDING, rv); 2426 EXPECT_EQ(ERR_IO_PENDING, rv);
2419 rv = callback.WaitForResult(); 2427 rv = callback.WaitForResult();
2420 2428
2421 // Setup a user callback which will delete the session, and clear out the 2429 // Setup a user callback which will delete the session, and clear out the
2422 // memory holding the stream object. Note that the callback deletes trans. 2430 // memory holding the stream object. Note that the callback deletes trans.
2423 const int kSize = 3000; 2431 const int kSize = 3000;
2424 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 2432 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
2425 rv = trans->Read( 2433 rv = trans->Read(
2426 buf, kSize, 2434 buf, kSize,
2427 base::Bind(&SpdyNetworkTransactionTest::DeleteSessionCallback, 2435 base::Bind(&SpdyNetworkTransactionSpdy3Test::DeleteSessionCallback,
2428 base::Unretained(&helper))); 2436 base::Unretained(&helper)));
2429 ASSERT_EQ(ERR_IO_PENDING, rv); 2437 ASSERT_EQ(ERR_IO_PENDING, rv);
2430 data->CompleteRead(); 2438 data->CompleteRead();
2431 2439
2432 // Finish running rest of tasks. 2440 // Finish running rest of tasks.
2433 MessageLoop::current()->RunAllPending(); 2441 MessageLoop::current()->RunAllPending();
2434 helper.VerifyDataConsumed(); 2442 helper.VerifyDataConsumed();
2435 } 2443 }
2436 2444
2437 // Send a spdy request to www.google.com that gets redirected to www.foo.com. 2445 // Send a spdy request to www.google.com that gets redirected to www.foo.com.
2438 TEST_P(SpdyNetworkTransactionTest, RedirectGetRequest) { 2446 TEST_P(SpdyNetworkTransactionSpdy3Test, RedirectGetRequest) {
2439 // These are headers which the net::URLRequest tacks on. 2447 // These are headers which the net::URLRequest tacks on.
2440 const char* const kExtraHeaders[] = { 2448 const char* const kExtraHeaders[] = {
2441 "accept-encoding", 2449 "accept-encoding",
2442 "gzip,deflate", 2450 "gzip,deflate",
2443 }; 2451 };
2444 const SpdyHeaderInfo kSynStartHeader = MakeSpdyHeader(spdy::SYN_STREAM); 2452 const SpdyHeaderInfo kSynStartHeader = MakeSpdyHeader(spdy::SYN_STREAM);
2445 const char* const kStandardGetHeaders[] = { 2453 const char* const kStandardGetHeaders[] = {
2446 "host", 2454 "host",
2447 "www.google.com", 2455 "www.google.com",
2448 "method", 2456 "method",
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2533 std::string contents("hello!"); 2541 std::string contents("hello!");
2534 EXPECT_EQ(contents, d.data_received()); 2542 EXPECT_EQ(contents, d.data_received());
2535 } 2543 }
2536 EXPECT_TRUE(data->at_read_eof()); 2544 EXPECT_TRUE(data->at_read_eof());
2537 EXPECT_TRUE(data->at_write_eof()); 2545 EXPECT_TRUE(data->at_write_eof());
2538 EXPECT_TRUE(data2->at_read_eof()); 2546 EXPECT_TRUE(data2->at_read_eof());
2539 EXPECT_TRUE(data2->at_write_eof()); 2547 EXPECT_TRUE(data2->at_write_eof());
2540 } 2548 }
2541 2549
2542 // Detect response with upper case headers and reset the stream. 2550 // Detect response with upper case headers and reset the stream.
2543 TEST_P(SpdyNetworkTransactionTest, UpperCaseHeaders) { 2551 TEST_P(SpdyNetworkTransactionSpdy3Test, UpperCaseHeaders) {
2544 scoped_ptr<spdy::SpdyFrame> 2552 scoped_ptr<spdy::SpdyFrame>
2545 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2553 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2546 scoped_ptr<spdy::SpdyFrame> 2554 scoped_ptr<spdy::SpdyFrame>
2547 rst(ConstructSpdyRstStream(1, spdy::PROTOCOL_ERROR)); 2555 rst(ConstructSpdyRstStream(1, spdy::PROTOCOL_ERROR));
2548 MockWrite writes[] = { 2556 MockWrite writes[] = {
2549 CreateMockWrite(*syn, 0), 2557 CreateMockWrite(*syn, 0),
2550 CreateMockWrite(*rst, 2), 2558 CreateMockWrite(*rst, 2),
2551 }; 2559 };
2552 2560
2553 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 2561 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
(...skipping 13 matching lines...) Expand all
2567 arraysize(writes))); 2575 arraysize(writes)));
2568 NormalSpdyTransactionHelper helper(CreateGetRequest(), 2576 NormalSpdyTransactionHelper helper(CreateGetRequest(),
2569 BoundNetLog(), GetParam()); 2577 BoundNetLog(), GetParam());
2570 helper.RunToCompletion(data.get()); 2578 helper.RunToCompletion(data.get());
2571 TransactionHelperResult out = helper.output(); 2579 TransactionHelperResult out = helper.output();
2572 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv); 2580 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
2573 } 2581 }
2574 2582
2575 // Detect response with upper case headers in a HEADERS frame and reset the 2583 // Detect response with upper case headers in a HEADERS frame and reset the
2576 // stream. 2584 // stream.
2577 TEST_P(SpdyNetworkTransactionTest, UpperCaseHeadersInHeadersFrame) { 2585 TEST_P(SpdyNetworkTransactionSpdy3Test, UpperCaseHeadersInHeadersFrame) {
2578 scoped_ptr<spdy::SpdyFrame> 2586 scoped_ptr<spdy::SpdyFrame>
2579 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2587 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2580 scoped_ptr<spdy::SpdyFrame> 2588 scoped_ptr<spdy::SpdyFrame>
2581 rst(ConstructSpdyRstStream(1, spdy::PROTOCOL_ERROR)); 2589 rst(ConstructSpdyRstStream(1, spdy::PROTOCOL_ERROR));
2582 MockWrite writes[] = { 2590 MockWrite writes[] = {
2583 CreateMockWrite(*syn, 0), 2591 CreateMockWrite(*syn, 0),
2584 CreateMockWrite(*rst, 2), 2592 CreateMockWrite(*rst, 2),
2585 }; 2593 };
2586 2594
2587 static const char* const kInitialHeaders[] = { 2595 static const char* const kInitialHeaders[] = {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2625 new DelayedSocketData(1, reads, arraysize(reads), 2633 new DelayedSocketData(1, reads, arraysize(reads),
2626 writes, arraysize(writes))); 2634 writes, arraysize(writes)));
2627 NormalSpdyTransactionHelper helper(CreateGetRequest(), 2635 NormalSpdyTransactionHelper helper(CreateGetRequest(),
2628 BoundNetLog(), GetParam()); 2636 BoundNetLog(), GetParam());
2629 helper.RunToCompletion(data.get()); 2637 helper.RunToCompletion(data.get());
2630 TransactionHelperResult out = helper.output(); 2638 TransactionHelperResult out = helper.output();
2631 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv); 2639 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
2632 } 2640 }
2633 2641
2634 // Detect push stream with upper case headers and reset the stream. 2642 // Detect push stream with upper case headers and reset the stream.
2635 TEST_P(SpdyNetworkTransactionTest, UpperCaseHeadersOnPush) { 2643 TEST_P(SpdyNetworkTransactionSpdy3Test, UpperCaseHeadersOnPush) {
2636 scoped_ptr<spdy::SpdyFrame> 2644 scoped_ptr<spdy::SpdyFrame>
2637 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2645 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2638 scoped_ptr<spdy::SpdyFrame> 2646 scoped_ptr<spdy::SpdyFrame>
2639 rst(ConstructSpdyRstStream(2, spdy::PROTOCOL_ERROR)); 2647 rst(ConstructSpdyRstStream(2, spdy::PROTOCOL_ERROR));
2640 MockWrite writes[] = { 2648 MockWrite writes[] = {
2641 CreateMockWrite(*syn, 0), 2649 CreateMockWrite(*syn, 0),
2642 CreateMockWrite(*rst, 2), 2650 CreateMockWrite(*rst, 2),
2643 }; 2651 };
2644 2652
2645 scoped_ptr<spdy::SpdyFrame> 2653 scoped_ptr<spdy::SpdyFrame>
(...skipping 18 matching lines...) Expand all
2664 arraysize(writes))); 2672 arraysize(writes)));
2665 NormalSpdyTransactionHelper helper(CreateGetRequest(), 2673 NormalSpdyTransactionHelper helper(CreateGetRequest(),
2666 BoundNetLog(), GetParam()); 2674 BoundNetLog(), GetParam());
2667 helper.RunToCompletion(data.get()); 2675 helper.RunToCompletion(data.get());
2668 TransactionHelperResult out = helper.output(); 2676 TransactionHelperResult out = helper.output();
2669 EXPECT_EQ(OK, out.rv); 2677 EXPECT_EQ(OK, out.rv);
2670 } 2678 }
2671 2679
2672 // Send a spdy request to www.google.com. Get a pushed stream that redirects to 2680 // Send a spdy request to www.google.com. Get a pushed stream that redirects to
2673 // www.foo.com. 2681 // www.foo.com.
2674 TEST_P(SpdyNetworkTransactionTest, RedirectServerPush) { 2682 TEST_P(SpdyNetworkTransactionSpdy3Test, RedirectServerPush) {
2675 // These are headers which the net::URLRequest tacks on. 2683 // These are headers which the net::URLRequest tacks on.
2676 const char* const kExtraHeaders[] = { 2684 const char* const kExtraHeaders[] = {
2677 "accept-encoding", 2685 "accept-encoding",
2678 "gzip,deflate", 2686 "gzip,deflate",
2679 }; 2687 };
2680 const SpdyHeaderInfo kSynStartHeader = MakeSpdyHeader(spdy::SYN_STREAM); 2688 const SpdyHeaderInfo kSynStartHeader = MakeSpdyHeader(spdy::SYN_STREAM);
2681 const char* const kStandardGetHeaders[] = { 2689 const char* const kStandardGetHeaders[] = {
2682 "host", 2690 "host",
2683 "www.google.com", 2691 "www.google.com",
2684 "method", 2692 "method",
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
2800 EXPECT_EQ(contents2, d2.data_received()); 2808 EXPECT_EQ(contents2, d2.data_received());
2801 } 2809 }
2802 data->CompleteRead(); 2810 data->CompleteRead();
2803 data2->CompleteRead(); 2811 data2->CompleteRead();
2804 EXPECT_TRUE(data->at_read_eof()); 2812 EXPECT_TRUE(data->at_read_eof());
2805 EXPECT_TRUE(data->at_write_eof()); 2813 EXPECT_TRUE(data->at_write_eof());
2806 EXPECT_TRUE(data2->at_read_eof()); 2814 EXPECT_TRUE(data2->at_read_eof());
2807 EXPECT_TRUE(data2->at_write_eof()); 2815 EXPECT_TRUE(data2->at_write_eof());
2808 } 2816 }
2809 2817
2810 TEST_P(SpdyNetworkTransactionTest, ServerPushSingleDataFrame) { 2818 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushSingleDataFrame) {
2811 static const unsigned char kPushBodyFrame[] = { 2819 static const unsigned char kPushBodyFrame[] = {
2812 0x00, 0x00, 0x00, 0x02, // header, ID 2820 0x00, 0x00, 0x00, 0x02, // header, ID
2813 0x01, 0x00, 0x00, 0x06, // FIN, length 2821 0x01, 0x00, 0x00, 0x06, // FIN, length
2814 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 2822 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
2815 }; 2823 };
2816 scoped_ptr<spdy::SpdyFrame> 2824 scoped_ptr<spdy::SpdyFrame>
2817 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2825 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2818 scoped_ptr<spdy::SpdyFrame> 2826 scoped_ptr<spdy::SpdyFrame>
2819 stream1_body(ConstructSpdyBodyFrame(1, true)); 2827 stream1_body(ConstructSpdyBodyFrame(1, true));
2820 MockWrite writes[] = { 2828 MockWrite writes[] = {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2853 2861
2854 // Verify the SYN_REPLY. 2862 // Verify the SYN_REPLY.
2855 EXPECT_TRUE(response.headers != NULL); 2863 EXPECT_TRUE(response.headers != NULL);
2856 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 2864 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
2857 2865
2858 // Verify the pushed stream. 2866 // Verify the pushed stream.
2859 EXPECT_TRUE(response2.headers != NULL); 2867 EXPECT_TRUE(response2.headers != NULL);
2860 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 2868 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
2861 } 2869 }
2862 2870
2863 TEST_P(SpdyNetworkTransactionTest, ServerPushSingleDataFrame2) { 2871 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushSingleDataFrame2) {
2864 static const unsigned char kPushBodyFrame[] = { 2872 static const unsigned char kPushBodyFrame[] = {
2865 0x00, 0x00, 0x00, 0x02, // header, ID 2873 0x00, 0x00, 0x00, 0x02, // header, ID
2866 0x01, 0x00, 0x00, 0x06, // FIN, length 2874 0x01, 0x00, 0x00, 0x06, // FIN, length
2867 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 2875 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
2868 }; 2876 };
2869 scoped_ptr<spdy::SpdyFrame> 2877 scoped_ptr<spdy::SpdyFrame>
2870 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2878 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2871 MockWrite writes[] = { 2879 MockWrite writes[] = {
2872 CreateMockWrite(*stream1_syn, 1), 2880 CreateMockWrite(*stream1_syn, 1),
2873 }; 2881 };
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2906 2914
2907 // Verify the SYN_REPLY. 2915 // Verify the SYN_REPLY.
2908 EXPECT_TRUE(response.headers != NULL); 2916 EXPECT_TRUE(response.headers != NULL);
2909 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 2917 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
2910 2918
2911 // Verify the pushed stream. 2919 // Verify the pushed stream.
2912 EXPECT_TRUE(response2.headers != NULL); 2920 EXPECT_TRUE(response2.headers != NULL);
2913 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 2921 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
2914 } 2922 }
2915 2923
2916 TEST_P(SpdyNetworkTransactionTest, ServerPushServerAborted) { 2924 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushServerAborted) {
2917 scoped_ptr<spdy::SpdyFrame> 2925 scoped_ptr<spdy::SpdyFrame>
2918 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2926 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
2919 scoped_ptr<spdy::SpdyFrame> 2927 scoped_ptr<spdy::SpdyFrame>
2920 stream1_body(ConstructSpdyBodyFrame(1, true)); 2928 stream1_body(ConstructSpdyBodyFrame(1, true));
2921 MockWrite writes[] = { 2929 MockWrite writes[] = {
2922 CreateMockWrite(*stream1_syn, 1), 2930 CreateMockWrite(*stream1_syn, 1),
2923 }; 2931 };
2924 2932
2925 scoped_ptr<spdy::SpdyFrame> 2933 scoped_ptr<spdy::SpdyFrame>
2926 stream1_reply(ConstructSpdyGetSynReply(NULL, 0, 1)); 2934 stream1_reply(ConstructSpdyGetSynReply(NULL, 0, 1));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2968 << data->write_count() 2976 << data->write_count()
2969 << " Write index: " 2977 << " Write index: "
2970 << data->write_index(); 2978 << data->write_index();
2971 2979
2972 // Verify the SYN_REPLY. 2980 // Verify the SYN_REPLY.
2973 HttpResponseInfo response = *trans->GetResponseInfo(); 2981 HttpResponseInfo response = *trans->GetResponseInfo();
2974 EXPECT_TRUE(response.headers != NULL); 2982 EXPECT_TRUE(response.headers != NULL);
2975 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 2983 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
2976 } 2984 }
2977 2985
2978 TEST_P(SpdyNetworkTransactionTest, ServerPushDuplicate) { 2986 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushDuplicate) {
2979 // Verify that we don't leak streams and that we properly send a reset 2987 // Verify that we don't leak streams and that we properly send a reset
2980 // if the server pushes the same stream twice. 2988 // if the server pushes the same stream twice.
2981 static const unsigned char kPushBodyFrame[] = { 2989 static const unsigned char kPushBodyFrame[] = {
2982 0x00, 0x00, 0x00, 0x02, // header, ID 2990 0x00, 0x00, 0x00, 0x02, // header, ID
2983 0x01, 0x00, 0x00, 0x06, // FIN, length 2991 0x01, 0x00, 0x00, 0x06, // FIN, length
2984 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 2992 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
2985 }; 2993 };
2986 2994
2987 scoped_ptr<spdy::SpdyFrame> 2995 scoped_ptr<spdy::SpdyFrame>
2988 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 2996 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
3034 3042
3035 // Verify the SYN_REPLY. 3043 // Verify the SYN_REPLY.
3036 EXPECT_TRUE(response.headers != NULL); 3044 EXPECT_TRUE(response.headers != NULL);
3037 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 3045 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
3038 3046
3039 // Verify the pushed stream. 3047 // Verify the pushed stream.
3040 EXPECT_TRUE(response2.headers != NULL); 3048 EXPECT_TRUE(response2.headers != NULL);
3041 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 3049 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
3042 } 3050 }
3043 3051
3044 TEST_P(SpdyNetworkTransactionTest, ServerPushMultipleDataFrame) { 3052 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushMultipleDataFrame) {
3045 static const unsigned char kPushBodyFrame1[] = { 3053 static const unsigned char kPushBodyFrame1[] = {
3046 0x00, 0x00, 0x00, 0x02, // header, ID 3054 0x00, 0x00, 0x00, 0x02, // header, ID
3047 0x01, 0x00, 0x00, 0x1F, // FIN, length 3055 0x01, 0x00, 0x00, 0x1F, // FIN, length
3048 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 3056 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
3049 }; 3057 };
3050 static const char kPushBodyFrame2[] = " my darling"; 3058 static const char kPushBodyFrame2[] = " my darling";
3051 static const char kPushBodyFrame3[] = " hello"; 3059 static const char kPushBodyFrame3[] = " hello";
3052 static const char kPushBodyFrame4[] = " my baby"; 3060 static const char kPushBodyFrame4[] = " my baby";
3053 3061
3054 scoped_ptr<spdy::SpdyFrame> 3062 scoped_ptr<spdy::SpdyFrame>
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
3097 3105
3098 // Verify the SYN_REPLY. 3106 // Verify the SYN_REPLY.
3099 EXPECT_TRUE(response.headers != NULL); 3107 EXPECT_TRUE(response.headers != NULL);
3100 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 3108 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
3101 3109
3102 // Verify the pushed stream. 3110 // Verify the pushed stream.
3103 EXPECT_TRUE(response2.headers != NULL); 3111 EXPECT_TRUE(response2.headers != NULL);
3104 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 3112 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
3105 } 3113 }
3106 3114
3107 TEST_P(SpdyNetworkTransactionTest, ServerPushMultipleDataFrameInterrupted) { 3115 TEST_P(SpdyNetworkTransactionSpdy3Test,
3116 ServerPushMultipleDataFrameInterrupted) {
3108 SpdySession::set_use_flow_control(SpdySession::kDisableFlowControl); 3117 SpdySession::set_use_flow_control(SpdySession::kDisableFlowControl);
3109 3118
3110 static const unsigned char kPushBodyFrame1[] = { 3119 static const unsigned char kPushBodyFrame1[] = {
3111 0x00, 0x00, 0x00, 0x02, // header, ID 3120 0x00, 0x00, 0x00, 0x02, // header, ID
3112 0x01, 0x00, 0x00, 0x1F, // FIN, length 3121 0x01, 0x00, 0x00, 0x1F, // FIN, length
3113 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 3122 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
3114 }; 3123 };
3115 static const char kPushBodyFrame2[] = " my darling"; 3124 static const char kPushBodyFrame2[] = " my darling";
3116 static const char kPushBodyFrame3[] = " hello"; 3125 static const char kPushBodyFrame3[] = " hello";
3117 static const char kPushBodyFrame4[] = " my baby"; 3126 static const char kPushBodyFrame4[] = " my baby";
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
3165 EXPECT_TRUE(response.headers != NULL); 3174 EXPECT_TRUE(response.headers != NULL);
3166 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 3175 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
3167 3176
3168 // Verify the pushed stream. 3177 // Verify the pushed stream.
3169 EXPECT_TRUE(response2.headers != NULL); 3178 EXPECT_TRUE(response2.headers != NULL);
3170 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 3179 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
3171 3180
3172 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN); 3181 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN);
3173 } 3182 }
3174 3183
3175 TEST_P(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID0) { 3184 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushInvalidAssociatedStreamID0) {
3176 scoped_ptr<spdy::SpdyFrame> 3185 scoped_ptr<spdy::SpdyFrame>
3177 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3186 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3178 scoped_ptr<spdy::SpdyFrame> 3187 scoped_ptr<spdy::SpdyFrame>
3179 stream1_body(ConstructSpdyBodyFrame(1, true)); 3188 stream1_body(ConstructSpdyBodyFrame(1, true));
3180 scoped_ptr<spdy::SpdyFrame> 3189 scoped_ptr<spdy::SpdyFrame>
3181 stream2_rst(ConstructSpdyRstStream(2, spdy::INVALID_STREAM)); 3190 stream2_rst(ConstructSpdyRstStream(2, spdy::INVALID_STREAM));
3182 MockWrite writes[] = { 3191 MockWrite writes[] = {
3183 CreateMockWrite(*stream1_syn, 1), 3192 CreateMockWrite(*stream1_syn, 1),
3184 CreateMockWrite(*stream2_rst, 4), 3193 CreateMockWrite(*stream2_rst, 4),
3185 }; 3194 };
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3227 << data->write_count() 3236 << data->write_count()
3228 << " Write index: " 3237 << " Write index: "
3229 << data->write_index(); 3238 << data->write_index();
3230 3239
3231 // Verify the SYN_REPLY. 3240 // Verify the SYN_REPLY.
3232 HttpResponseInfo response = *trans->GetResponseInfo(); 3241 HttpResponseInfo response = *trans->GetResponseInfo();
3233 EXPECT_TRUE(response.headers != NULL); 3242 EXPECT_TRUE(response.headers != NULL);
3234 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 3243 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
3235 } 3244 }
3236 3245
3237 TEST_P(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID9) { 3246 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushInvalidAssociatedStreamID9) {
3238 scoped_ptr<spdy::SpdyFrame> 3247 scoped_ptr<spdy::SpdyFrame>
3239 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3248 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3240 scoped_ptr<spdy::SpdyFrame> 3249 scoped_ptr<spdy::SpdyFrame>
3241 stream1_body(ConstructSpdyBodyFrame(1, true)); 3250 stream1_body(ConstructSpdyBodyFrame(1, true));
3242 scoped_ptr<spdy::SpdyFrame> 3251 scoped_ptr<spdy::SpdyFrame>
3243 stream2_rst(ConstructSpdyRstStream(2, spdy::INVALID_ASSOCIATED_STREAM)); 3252 stream2_rst(ConstructSpdyRstStream(2, spdy::INVALID_ASSOCIATED_STREAM));
3244 MockWrite writes[] = { 3253 MockWrite writes[] = {
3245 CreateMockWrite(*stream1_syn, 1), 3254 CreateMockWrite(*stream1_syn, 1),
3246 CreateMockWrite(*stream2_rst, 4), 3255 CreateMockWrite(*stream2_rst, 4),
3247 }; 3256 };
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3289 << data->write_count() 3298 << data->write_count()
3290 << " Write index: " 3299 << " Write index: "
3291 << data->write_index(); 3300 << data->write_index();
3292 3301
3293 // Verify the SYN_REPLY. 3302 // Verify the SYN_REPLY.
3294 HttpResponseInfo response = *trans->GetResponseInfo(); 3303 HttpResponseInfo response = *trans->GetResponseInfo();
3295 EXPECT_TRUE(response.headers != NULL); 3304 EXPECT_TRUE(response.headers != NULL);
3296 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 3305 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
3297 } 3306 }
3298 3307
3299 TEST_P(SpdyNetworkTransactionTest, ServerPushNoURL) { 3308 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushNoURL) {
3300 scoped_ptr<spdy::SpdyFrame> 3309 scoped_ptr<spdy::SpdyFrame>
3301 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3310 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3302 scoped_ptr<spdy::SpdyFrame> 3311 scoped_ptr<spdy::SpdyFrame>
3303 stream1_body(ConstructSpdyBodyFrame(1, true)); 3312 stream1_body(ConstructSpdyBodyFrame(1, true));
3304 scoped_ptr<spdy::SpdyFrame> 3313 scoped_ptr<spdy::SpdyFrame>
3305 stream2_rst(ConstructSpdyRstStream(2, spdy::PROTOCOL_ERROR)); 3314 stream2_rst(ConstructSpdyRstStream(2, spdy::PROTOCOL_ERROR));
3306 MockWrite writes[] = { 3315 MockWrite writes[] = {
3307 CreateMockWrite(*stream1_syn, 1), 3316 CreateMockWrite(*stream1_syn, 1),
3308 CreateMockWrite(*stream2_rst, 4), 3317 CreateMockWrite(*stream2_rst, 4),
3309 }; 3318 };
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3348 << data->write_index(); 3357 << data->write_index();
3349 3358
3350 // Verify the SYN_REPLY. 3359 // Verify the SYN_REPLY.
3351 HttpResponseInfo response = *trans->GetResponseInfo(); 3360 HttpResponseInfo response = *trans->GetResponseInfo();
3352 EXPECT_TRUE(response.headers != NULL); 3361 EXPECT_TRUE(response.headers != NULL);
3353 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 3362 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
3354 } 3363 }
3355 3364
3356 // Verify that various SynReply headers parse correctly through the 3365 // Verify that various SynReply headers parse correctly through the
3357 // HTTP layer. 3366 // HTTP layer.
3358 TEST_P(SpdyNetworkTransactionTest, SynReplyHeaders) { 3367 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyHeaders) {
3359 struct SynReplyHeadersTests { 3368 struct SynReplyHeadersTests {
3360 int num_headers; 3369 int num_headers;
3361 const char* extra_headers[5]; 3370 const char* extra_headers[5];
3362 const char* expected_headers; 3371 const char* expected_headers;
3363 } test_cases[] = { 3372 } test_cases[] = {
3364 // This uses a multi-valued cookie header. 3373 // This uses a multi-valued cookie header.
3365 { 2, 3374 { 2,
3366 { "cookie", "val1", 3375 { "cookie", "val1",
3367 "cookie", "val2", // will get appended separated by NULL 3376 "cookie", "val2", // will get appended separated by NULL
3368 NULL 3377 NULL
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
3429 lines.append(": "); 3438 lines.append(": ");
3430 lines.append(value); 3439 lines.append(value);
3431 lines.append("\n"); 3440 lines.append("\n");
3432 } 3441 }
3433 EXPECT_EQ(std::string(test_cases[i].expected_headers), lines); 3442 EXPECT_EQ(std::string(test_cases[i].expected_headers), lines);
3434 } 3443 }
3435 } 3444 }
3436 3445
3437 // Verify that various SynReply headers parse vary fields correctly 3446 // Verify that various SynReply headers parse vary fields correctly
3438 // through the HTTP layer, and the response matches the request. 3447 // through the HTTP layer, and the response matches the request.
3439 TEST_P(SpdyNetworkTransactionTest, SynReplyHeadersVary) { 3448 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyHeadersVary) {
3440 static const SpdyHeaderInfo syn_reply_info = { 3449 static const SpdyHeaderInfo syn_reply_info = {
3441 spdy::SYN_REPLY, // Syn Reply 3450 spdy::SYN_REPLY, // Syn Reply
3442 1, // Stream ID 3451 1, // Stream ID
3443 0, // Associated Stream ID 3452 0, // Associated Stream ID
3444 net::ConvertRequestPriorityToSpdyPriority(LOWEST), 3453 net::ConvertRequestPriorityToSpdyPriority(LOWEST),
3445 // Priority 3454 // Priority
3446 spdy::CONTROL_FLAG_NONE, // Control Flags 3455 spdy::CONTROL_FLAG_NONE, // Control Flags
3447 false, // Compressed 3456 false, // Compressed
3448 spdy::INVALID, // Status 3457 spdy::INVALID, // Status
3449 NULL, // Data 3458 NULL, // Data
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
3598 ConstructSpdyReplyString(test_cases[i].extra_headers[1], 3607 ConstructSpdyReplyString(test_cases[i].extra_headers[1],
3599 test_cases[i].num_headers[1], 3608 test_cases[i].num_headers[1],
3600 reply_buffer, 3609 reply_buffer,
3601 256); 3610 256);
3602 3611
3603 EXPECT_EQ(std::string(reply_buffer), lines) << i; 3612 EXPECT_EQ(std::string(reply_buffer), lines) << i;
3604 } 3613 }
3605 } 3614 }
3606 3615
3607 // Verify that we don't crash on invalid SynReply responses. 3616 // Verify that we don't crash on invalid SynReply responses.
3608 TEST_P(SpdyNetworkTransactionTest, InvalidSynReply) { 3617 TEST_P(SpdyNetworkTransactionSpdy3Test, InvalidSynReply) {
3609 const SpdyHeaderInfo kSynStartHeader = { 3618 const SpdyHeaderInfo kSynStartHeader = {
3610 spdy::SYN_REPLY, // Kind = SynReply 3619 spdy::SYN_REPLY, // Kind = SynReply
3611 1, // Stream ID 3620 1, // Stream ID
3612 0, // Associated stream ID 3621 0, // Associated stream ID
3613 net::ConvertRequestPriorityToSpdyPriority(LOWEST), 3622 net::ConvertRequestPriorityToSpdyPriority(LOWEST),
3614 // Priority 3623 // Priority
3615 spdy::CONTROL_FLAG_NONE, // Control Flags 3624 spdy::CONTROL_FLAG_NONE, // Control Flags
3616 false, // Compressed 3625 false, // Compressed
3617 spdy::INVALID, // Status 3626 spdy::INVALID, // Status
3618 NULL, // Data 3627 NULL, // Data
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3668 writes, arraysize(writes))); 3677 writes, arraysize(writes)));
3669 NormalSpdyTransactionHelper helper(CreateGetRequest(), 3678 NormalSpdyTransactionHelper helper(CreateGetRequest(),
3670 BoundNetLog(), GetParam()); 3679 BoundNetLog(), GetParam());
3671 helper.RunToCompletion(data.get()); 3680 helper.RunToCompletion(data.get());
3672 TransactionHelperResult out = helper.output(); 3681 TransactionHelperResult out = helper.output();
3673 EXPECT_EQ(ERR_INCOMPLETE_SPDY_HEADERS, out.rv); 3682 EXPECT_EQ(ERR_INCOMPLETE_SPDY_HEADERS, out.rv);
3674 } 3683 }
3675 } 3684 }
3676 3685
3677 // Verify that we don't crash on some corrupt frames. 3686 // Verify that we don't crash on some corrupt frames.
3678 TEST_P(SpdyNetworkTransactionTest, CorruptFrameSessionError) { 3687 TEST_P(SpdyNetworkTransactionSpdy3Test, CorruptFrameSessionError) {
3679 // This is the length field that's too short. 3688 // This is the length field that's too short.
3680 scoped_ptr<spdy::SpdyFrame> syn_reply_wrong_length( 3689 scoped_ptr<spdy::SpdyFrame> syn_reply_wrong_length(
3681 ConstructSpdyGetSynReply(NULL, 0, 1)); 3690 ConstructSpdyGetSynReply(NULL, 0, 1));
3682 syn_reply_wrong_length->set_length(syn_reply_wrong_length->length() - 4); 3691 syn_reply_wrong_length->set_length(syn_reply_wrong_length->length() - 4);
3683 3692
3684 struct SynReplyTests { 3693 struct SynReplyTests {
3685 const spdy::SpdyFrame* syn_reply; 3694 const spdy::SpdyFrame* syn_reply;
3686 } test_cases[] = { 3695 } test_cases[] = {
3687 { syn_reply_wrong_length.get(), }, 3696 { syn_reply_wrong_length.get(), },
3688 }; 3697 };
(...skipping 18 matching lines...) Expand all
3707 writes, arraysize(writes))); 3716 writes, arraysize(writes)));
3708 NormalSpdyTransactionHelper helper(CreateGetRequest(), 3717 NormalSpdyTransactionHelper helper(CreateGetRequest(),
3709 BoundNetLog(), GetParam()); 3718 BoundNetLog(), GetParam());
3710 helper.RunToCompletion(data.get()); 3719 helper.RunToCompletion(data.get());
3711 TransactionHelperResult out = helper.output(); 3720 TransactionHelperResult out = helper.output();
3712 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv); 3721 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
3713 } 3722 }
3714 } 3723 }
3715 3724
3716 // Test that we shutdown correctly on write errors. 3725 // Test that we shutdown correctly on write errors.
3717 TEST_P(SpdyNetworkTransactionTest, WriteError) { 3726 TEST_P(SpdyNetworkTransactionSpdy3Test, WriteError) {
3718 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3727 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3719 MockWrite writes[] = { 3728 MockWrite writes[] = {
3720 // We'll write 10 bytes successfully 3729 // We'll write 10 bytes successfully
3721 MockWrite(ASYNC, req->data(), 10), 3730 MockWrite(ASYNC, req->data(), 10),
3722 // Followed by ERROR! 3731 // Followed by ERROR!
3723 MockWrite(ASYNC, ERR_FAILED), 3732 MockWrite(ASYNC, ERR_FAILED),
3724 }; 3733 };
3725 3734
3726 scoped_ptr<DelayedSocketData> data( 3735 scoped_ptr<DelayedSocketData> data(
3727 new DelayedSocketData(2, NULL, 0, 3736 new DelayedSocketData(2, NULL, 0,
3728 writes, arraysize(writes))); 3737 writes, arraysize(writes)));
3729 NormalSpdyTransactionHelper helper(CreateGetRequest(), 3738 NormalSpdyTransactionHelper helper(CreateGetRequest(),
3730 BoundNetLog(), GetParam()); 3739 BoundNetLog(), GetParam());
3731 helper.RunToCompletion(data.get()); 3740 helper.RunToCompletion(data.get());
3732 TransactionHelperResult out = helper.output(); 3741 TransactionHelperResult out = helper.output();
3733 EXPECT_EQ(ERR_FAILED, out.rv); 3742 EXPECT_EQ(ERR_FAILED, out.rv);
3734 data->Reset(); 3743 data->Reset();
3735 } 3744 }
3736 3745
3737 // Test that partial writes work. 3746 // Test that partial writes work.
3738 TEST_P(SpdyNetworkTransactionTest, PartialWrite) { 3747 TEST_P(SpdyNetworkTransactionSpdy3Test, PartialWrite) {
3739 // Chop the SYN_STREAM frame into 5 chunks. 3748 // Chop the SYN_STREAM frame into 5 chunks.
3740 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3749 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3741 const int kChunks = 5; 3750 const int kChunks = 5;
3742 scoped_array<MockWrite> writes(ChopWriteFrame(*req.get(), kChunks)); 3751 scoped_array<MockWrite> writes(ChopWriteFrame(*req.get(), kChunks));
3743 3752
3744 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 3753 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
3745 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 3754 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
3746 MockRead reads[] = { 3755 MockRead reads[] = {
3747 CreateMockRead(*resp), 3756 CreateMockRead(*resp),
3748 CreateMockRead(*body), 3757 CreateMockRead(*body),
3749 MockRead(ASYNC, 0, 0) // EOF 3758 MockRead(ASYNC, 0, 0) // EOF
3750 }; 3759 };
3751 3760
3752 scoped_ptr<DelayedSocketData> data( 3761 scoped_ptr<DelayedSocketData> data(
3753 new DelayedSocketData(kChunks, reads, arraysize(reads), 3762 new DelayedSocketData(kChunks, reads, arraysize(reads),
3754 writes.get(), kChunks)); 3763 writes.get(), kChunks));
3755 NormalSpdyTransactionHelper helper(CreateGetRequest(), 3764 NormalSpdyTransactionHelper helper(CreateGetRequest(),
3756 BoundNetLog(), GetParam()); 3765 BoundNetLog(), GetParam());
3757 helper.RunToCompletion(data.get()); 3766 helper.RunToCompletion(data.get());
3758 TransactionHelperResult out = helper.output(); 3767 TransactionHelperResult out = helper.output();
3759 EXPECT_EQ(OK, out.rv); 3768 EXPECT_EQ(OK, out.rv);
3760 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 3769 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
3761 EXPECT_EQ("hello!", out.response_data); 3770 EXPECT_EQ("hello!", out.response_data);
3762 } 3771 }
3763 3772
3764 // In this test, we enable compression, but get a uncompressed SynReply from 3773 // In this test, we enable compression, but get a uncompressed SynReply from
3765 // the server. Verify that teardown is all clean. 3774 // the server. Verify that teardown is all clean.
3766 TEST_P(SpdyNetworkTransactionTest, DecompressFailureOnSynReply) { 3775 TEST_P(SpdyNetworkTransactionSpdy3Test, DecompressFailureOnSynReply) {
3767 // For this test, we turn on the normal compression. 3776 // For this test, we turn on the normal compression.
3768 EnableCompression(true); 3777 EnableCompression(true);
3769 3778
3770 scoped_ptr<spdy::SpdyFrame> compressed( 3779 scoped_ptr<spdy::SpdyFrame> compressed(
3771 ConstructSpdyGet(NULL, 0, true, 1, LOWEST)); 3780 ConstructSpdyGet(NULL, 0, true, 1, LOWEST));
3772 scoped_ptr<spdy::SpdyFrame> rst( 3781 scoped_ptr<spdy::SpdyFrame> rst(
3773 ConstructSpdyRstStream(1, spdy::PROTOCOL_ERROR)); 3782 ConstructSpdyRstStream(1, spdy::PROTOCOL_ERROR));
3774 MockWrite writes[] = { 3783 MockWrite writes[] = {
3775 CreateMockWrite(*compressed), 3784 CreateMockWrite(*compressed),
3776 }; 3785 };
(...skipping 11 matching lines...) Expand all
3788 BoundNetLog(), GetParam()); 3797 BoundNetLog(), GetParam());
3789 helper.RunToCompletion(data.get()); 3798 helper.RunToCompletion(data.get());
3790 TransactionHelperResult out = helper.output(); 3799 TransactionHelperResult out = helper.output();
3791 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv); 3800 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
3792 data->Reset(); 3801 data->Reset();
3793 3802
3794 EnableCompression(false); 3803 EnableCompression(false);
3795 } 3804 }
3796 3805
3797 // Test that the NetLog contains good data for a simple GET request. 3806 // Test that the NetLog contains good data for a simple GET request.
3798 TEST_P(SpdyNetworkTransactionTest, NetLog) { 3807 TEST_P(SpdyNetworkTransactionSpdy3Test, NetLog) {
3799 static const char* const kExtraHeaders[] = { 3808 static const char* const kExtraHeaders[] = {
3800 "user-agent", "Chrome", 3809 "user-agent", "Chrome",
3801 }; 3810 };
3802 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(kExtraHeaders, 1, false, 1, 3811 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(kExtraHeaders, 1, false, 1,
3803 LOWEST)); 3812 LOWEST));
3804 MockWrite writes[] = { CreateMockWrite(*req) }; 3813 MockWrite writes[] = { CreateMockWrite(*req) };
3805 3814
3806 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 3815 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
3807 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 3816 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
3808 MockRead reads[] = { 3817 MockRead reads[] = {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3876 it != end; 3885 it != end;
3877 ++it) { 3886 ++it) {
3878 EXPECT_EQ(it->second, (*headers)[it->first]); 3887 EXPECT_EQ(it->second, (*headers)[it->first]);
3879 } 3888 }
3880 } 3889 }
3881 3890
3882 // Since we buffer the IO from the stream to the renderer, this test verifies 3891 // Since we buffer the IO from the stream to the renderer, this test verifies
3883 // that when we read out the maximum amount of data (e.g. we received 50 bytes 3892 // that when we read out the maximum amount of data (e.g. we received 50 bytes
3884 // on the network, but issued a Read for only 5 of those bytes) that the data 3893 // on the network, but issued a Read for only 5 of those bytes) that the data
3885 // flow still works correctly. 3894 // flow still works correctly.
3886 TEST_P(SpdyNetworkTransactionTest, BufferFull) { 3895 TEST_P(SpdyNetworkTransactionSpdy3Test, BufferFull) {
3887 SpdySession::set_use_flow_control(SpdySession::kDisableFlowControl); 3896 SpdySession::set_use_flow_control(SpdySession::kDisableFlowControl);
3888 3897
3889 spdy::SpdyFramer framer; 3898 spdy::SpdyFramer framer;
3890 3899
3891 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3900 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3892 MockWrite writes[] = { CreateMockWrite(*req) }; 3901 MockWrite writes[] = { CreateMockWrite(*req) };
3893 3902
3894 // 2 data frames in a single read. 3903 // 2 data frames in a single read.
3895 scoped_ptr<spdy::SpdyFrame> data_frame_1( 3904 scoped_ptr<spdy::SpdyFrame> data_frame_1(
3896 framer.CreateDataFrame(1, "goodby", 6, spdy::DATA_FLAG_NONE)); 3905 framer.CreateDataFrame(1, "goodby", 6, spdy::DATA_FLAG_NONE));
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
3975 EXPECT_EQ(OK, out.rv); 3984 EXPECT_EQ(OK, out.rv);
3976 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 3985 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
3977 EXPECT_EQ("goodbye world", out.response_data); 3986 EXPECT_EQ("goodbye world", out.response_data);
3978 3987
3979 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN); 3988 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN);
3980 } 3989 }
3981 3990
3982 // Verify that basic buffering works; when multiple data frames arrive 3991 // Verify that basic buffering works; when multiple data frames arrive
3983 // at the same time, ensure that we don't notify a read completion for 3992 // at the same time, ensure that we don't notify a read completion for
3984 // each data frame individually. 3993 // each data frame individually.
3985 TEST_P(SpdyNetworkTransactionTest, Buffering) { 3994 TEST_P(SpdyNetworkTransactionSpdy3Test, Buffering) {
3986 SpdySession::set_use_flow_control(SpdySession::kDisableFlowControl); 3995 SpdySession::set_use_flow_control(SpdySession::kDisableFlowControl);
3987 3996
3988 spdy::SpdyFramer framer; 3997 spdy::SpdyFramer framer;
3989 3998
3990 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 3999 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
3991 MockWrite writes[] = { CreateMockWrite(*req) }; 4000 MockWrite writes[] = { CreateMockWrite(*req) };
3992 4001
3993 // 4 data frames in a single read. 4002 // 4 data frames in a single read.
3994 scoped_ptr<spdy::SpdyFrame> data_frame( 4003 scoped_ptr<spdy::SpdyFrame> data_frame(
3995 framer.CreateDataFrame(1, "message", 7, spdy::DATA_FLAG_NONE)); 4004 framer.CreateDataFrame(1, "message", 7, spdy::DATA_FLAG_NONE));
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
4074 helper.VerifyDataConsumed(); 4083 helper.VerifyDataConsumed();
4075 4084
4076 EXPECT_EQ(OK, out.rv); 4085 EXPECT_EQ(OK, out.rv);
4077 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 4086 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
4078 EXPECT_EQ("messagemessagemessagemessage", out.response_data); 4087 EXPECT_EQ("messagemessagemessagemessage", out.response_data);
4079 4088
4080 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN); 4089 SpdySession::set_use_flow_control(SpdySession::kFlowControlBasedOnNPN);
4081 } 4090 }
4082 4091
4083 // Verify the case where we buffer data but read it after it has been buffered. 4092 // Verify the case where we buffer data but read it after it has been buffered.
4084 TEST_P(SpdyNetworkTransactionTest, BufferedAll) { 4093 TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedAll) {
4085 spdy::SpdyFramer framer; 4094 spdy::SpdyFramer framer;
4086 4095
4087 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 4096 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
4088 MockWrite writes[] = { CreateMockWrite(*req) }; 4097 MockWrite writes[] = { CreateMockWrite(*req) };
4089 4098
4090 // 5 data frames in a single read. 4099 // 5 data frames in a single read.
4091 scoped_ptr<spdy::SpdyFrame> syn_reply( 4100 scoped_ptr<spdy::SpdyFrame> syn_reply(
4092 ConstructSpdyGetSynReply(NULL, 0, 1)); 4101 ConstructSpdyGetSynReply(NULL, 0, 1));
4093 syn_reply->set_flags(spdy::CONTROL_FLAG_NONE); // turn off FIN bit 4102 syn_reply->set_flags(spdy::CONTROL_FLAG_NONE); // turn off FIN bit
4094 scoped_ptr<spdy::SpdyFrame> data_frame( 4103 scoped_ptr<spdy::SpdyFrame> data_frame(
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
4166 4175
4167 // Verify that we consumed all test data. 4176 // Verify that we consumed all test data.
4168 helper.VerifyDataConsumed(); 4177 helper.VerifyDataConsumed();
4169 4178
4170 EXPECT_EQ(OK, out.rv); 4179 EXPECT_EQ(OK, out.rv);
4171 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 4180 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
4172 EXPECT_EQ("messagemessagemessagemessage", out.response_data); 4181 EXPECT_EQ("messagemessagemessagemessage", out.response_data);
4173 } 4182 }
4174 4183
4175 // Verify the case where we buffer data and close the connection. 4184 // Verify the case where we buffer data and close the connection.
4176 TEST_P(SpdyNetworkTransactionTest, BufferedClosed) { 4185 TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedClosed) {
4177 spdy::SpdyFramer framer; 4186 spdy::SpdyFramer framer;
4178 4187
4179 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 4188 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
4180 MockWrite writes[] = { CreateMockWrite(*req) }; 4189 MockWrite writes[] = { CreateMockWrite(*req) };
4181 4190
4182 // All data frames in a single read. 4191 // All data frames in a single read.
4183 // NOTE: We don't FIN the stream. 4192 // NOTE: We don't FIN the stream.
4184 scoped_ptr<spdy::SpdyFrame> data_frame( 4193 scoped_ptr<spdy::SpdyFrame> data_frame(
4185 framer.CreateDataFrame(1, "message", 7, spdy::DATA_FLAG_NONE)); 4194 framer.CreateDataFrame(1, "message", 7, spdy::DATA_FLAG_NONE));
4186 const spdy::SpdyFrame* data_frames[4] = { 4195 const spdy::SpdyFrame* data_frames[4] = {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
4257 4266
4258 // Flush the MessageLoop while the SpdySessionDependencies (in particular, the 4267 // Flush the MessageLoop while the SpdySessionDependencies (in particular, the
4259 // MockClientSocketFactory) are still alive. 4268 // MockClientSocketFactory) are still alive.
4260 MessageLoop::current()->RunAllPending(); 4269 MessageLoop::current()->RunAllPending();
4261 4270
4262 // Verify that we consumed all test data. 4271 // Verify that we consumed all test data.
4263 helper.VerifyDataConsumed(); 4272 helper.VerifyDataConsumed();
4264 } 4273 }
4265 4274
4266 // Verify the case where we buffer data and cancel the transaction. 4275 // Verify the case where we buffer data and cancel the transaction.
4267 TEST_P(SpdyNetworkTransactionTest, BufferedCancelled) { 4276 TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedCancelled) {
4268 spdy::SpdyFramer framer; 4277 spdy::SpdyFramer framer;
4269 4278
4270 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 4279 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
4271 MockWrite writes[] = { CreateMockWrite(*req) }; 4280 MockWrite writes[] = { CreateMockWrite(*req) };
4272 4281
4273 // NOTE: We don't FIN the stream. 4282 // NOTE: We don't FIN the stream.
4274 scoped_ptr<spdy::SpdyFrame> data_frame( 4283 scoped_ptr<spdy::SpdyFrame> data_frame(
4275 framer.CreateDataFrame(1, "message", 7, spdy::DATA_FLAG_NONE)); 4284 framer.CreateDataFrame(1, "message", 7, spdy::DATA_FLAG_NONE));
4276 4285
4277 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 4286 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
4329 // Flush the MessageLoop; this will cause the buffered IO task 4338 // Flush the MessageLoop; this will cause the buffered IO task
4330 // to run for the final time. 4339 // to run for the final time.
4331 MessageLoop::current()->RunAllPending(); 4340 MessageLoop::current()->RunAllPending();
4332 4341
4333 // Verify that we consumed all test data. 4342 // Verify that we consumed all test data.
4334 helper.VerifyDataConsumed(); 4343 helper.VerifyDataConsumed();
4335 } 4344 }
4336 4345
4337 // Test that if the server requests persistence of settings, that we save 4346 // Test that if the server requests persistence of settings, that we save
4338 // the settings in the SpdySettingsStorage. 4347 // the settings in the SpdySettingsStorage.
4339 TEST_P(SpdyNetworkTransactionTest, SettingsSaved) { 4348 TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsSaved) {
4340 static const SpdyHeaderInfo kSynReplyInfo = { 4349 static const SpdyHeaderInfo kSynReplyInfo = {
4341 spdy::SYN_REPLY, // Syn Reply 4350 spdy::SYN_REPLY, // Syn Reply
4342 1, // Stream ID 4351 1, // Stream ID
4343 0, // Associated Stream ID 4352 0, // Associated Stream ID
4344 net::ConvertRequestPriorityToSpdyPriority(LOWEST), 4353 net::ConvertRequestPriorityToSpdyPriority(LOWEST),
4345 // Priority 4354 // Priority
4346 spdy::CONTROL_FLAG_NONE, // Control Flags 4355 spdy::CONTROL_FLAG_NONE, // Control Flags
4347 false, // Compressed 4356 false, // Compressed
4348 spdy::INVALID, // Status 4357 spdy::INVALID, // Status
4349 NULL, // Data 4358 NULL, // Data
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
4440 setting = saved_settings.front(); 4449 setting = saved_settings.front();
4441 saved_settings.pop_front(); 4450 saved_settings.pop_front();
4442 EXPECT_EQ(spdy::SETTINGS_FLAG_PERSISTED, setting.first.flags()); 4451 EXPECT_EQ(spdy::SETTINGS_FLAG_PERSISTED, setting.first.flags());
4443 EXPECT_EQ(kSampleId3, setting.first.id()); 4452 EXPECT_EQ(kSampleId3, setting.first.id());
4444 EXPECT_EQ(kSampleValue3, setting.second); 4453 EXPECT_EQ(kSampleValue3, setting.second);
4445 } 4454 }
4446 } 4455 }
4447 4456
4448 // Test that when there are settings saved that they are sent back to the 4457 // Test that when there are settings saved that they are sent back to the
4449 // server upon session establishment. 4458 // server upon session establishment.
4450 TEST_P(SpdyNetworkTransactionTest, SettingsPlayback) { 4459 TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsPlayback) {
4451 static const SpdyHeaderInfo kSynReplyInfo = { 4460 static const SpdyHeaderInfo kSynReplyInfo = {
4452 spdy::SYN_REPLY, // Syn Reply 4461 spdy::SYN_REPLY, // Syn Reply
4453 1, // Stream ID 4462 1, // Stream ID
4454 0, // Associated Stream ID 4463 0, // Associated Stream ID
4455 net::ConvertRequestPriorityToSpdyPriority(LOWEST), 4464 net::ConvertRequestPriorityToSpdyPriority(LOWEST),
4456 // Priority 4465 // Priority
4457 spdy::CONTROL_FLAG_NONE, // Control Flags 4466 spdy::CONTROL_FLAG_NONE, // Control Flags
4458 false, // Compressed 4467 false, // Compressed
4459 spdy::INVALID, // Status 4468 spdy::INVALID, // Status
4460 NULL, // Data 4469 NULL, // Data
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
4556 4565
4557 // Verify the second persisted setting. 4566 // Verify the second persisted setting.
4558 setting = saved_settings.front(); 4567 setting = saved_settings.front();
4559 saved_settings.pop_front(); 4568 saved_settings.pop_front();
4560 EXPECT_EQ(spdy::SETTINGS_FLAG_PERSISTED, setting.first.flags()); 4569 EXPECT_EQ(spdy::SETTINGS_FLAG_PERSISTED, setting.first.flags());
4561 EXPECT_EQ(kSampleId2, setting.first.id()); 4570 EXPECT_EQ(kSampleId2, setting.first.id());
4562 EXPECT_EQ(kSampleValue2, setting.second); 4571 EXPECT_EQ(kSampleValue2, setting.second);
4563 } 4572 }
4564 } 4573 }
4565 4574
4566 TEST_P(SpdyNetworkTransactionTest, GoAwayWithActiveStream) { 4575 TEST_P(SpdyNetworkTransactionSpdy3Test, GoAwayWithActiveStream) {
4567 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 4576 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
4568 MockWrite writes[] = { CreateMockWrite(*req) }; 4577 MockWrite writes[] = { CreateMockWrite(*req) };
4569 4578
4570 scoped_ptr<spdy::SpdyFrame> go_away(ConstructSpdyGoAway()); 4579 scoped_ptr<spdy::SpdyFrame> go_away(ConstructSpdyGoAway());
4571 MockRead reads[] = { 4580 MockRead reads[] = {
4572 CreateMockRead(*go_away), 4581 CreateMockRead(*go_away),
4573 MockRead(ASYNC, 0, 0), // EOF 4582 MockRead(ASYNC, 0, 0), // EOF
4574 }; 4583 };
4575 4584
4576 scoped_ptr<DelayedSocketData> data( 4585 scoped_ptr<DelayedSocketData> data(
4577 new DelayedSocketData(1, reads, arraysize(reads), 4586 new DelayedSocketData(1, reads, arraysize(reads),
4578 writes, arraysize(writes))); 4587 writes, arraysize(writes)));
4579 NormalSpdyTransactionHelper helper(CreateGetRequest(), 4588 NormalSpdyTransactionHelper helper(CreateGetRequest(),
4580 BoundNetLog(), GetParam()); 4589 BoundNetLog(), GetParam());
4581 helper.AddData(data.get()); 4590 helper.AddData(data.get());
4582 helper.RunToCompletion(data.get()); 4591 helper.RunToCompletion(data.get());
4583 TransactionHelperResult out = helper.output(); 4592 TransactionHelperResult out = helper.output();
4584 EXPECT_EQ(ERR_ABORTED, out.rv); 4593 EXPECT_EQ(ERR_ABORTED, out.rv);
4585 } 4594 }
4586 4595
4587 TEST_P(SpdyNetworkTransactionTest, CloseWithActiveStream) { 4596 TEST_P(SpdyNetworkTransactionSpdy3Test, CloseWithActiveStream) {
4588 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 4597 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
4589 MockWrite writes[] = { CreateMockWrite(*req) }; 4598 MockWrite writes[] = { CreateMockWrite(*req) };
4590 4599
4591 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 4600 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
4592 MockRead reads[] = { 4601 MockRead reads[] = {
4593 CreateMockRead(*resp), 4602 CreateMockRead(*resp),
4594 MockRead(SYNCHRONOUS, 0, 0) // EOF 4603 MockRead(SYNCHRONOUS, 0, 0) // EOF
4595 }; 4604 };
4596 4605
4597 scoped_ptr<DelayedSocketData> data( 4606 scoped_ptr<DelayedSocketData> data(
(...skipping 18 matching lines...) Expand all
4616 EXPECT_TRUE(response->headers != NULL); 4625 EXPECT_TRUE(response->headers != NULL);
4617 EXPECT_TRUE(response->was_fetched_via_spdy); 4626 EXPECT_TRUE(response->was_fetched_via_spdy);
4618 out.rv = ReadTransaction(trans, &out.response_data); 4627 out.rv = ReadTransaction(trans, &out.response_data);
4619 EXPECT_EQ(ERR_CONNECTION_CLOSED, out.rv); 4628 EXPECT_EQ(ERR_CONNECTION_CLOSED, out.rv);
4620 4629
4621 // Verify that we consumed all test data. 4630 // Verify that we consumed all test data.
4622 helper.VerifyDataConsumed(); 4631 helper.VerifyDataConsumed();
4623 } 4632 }
4624 4633
4625 // Test to make sure we can correctly connect through a proxy. 4634 // Test to make sure we can correctly connect through a proxy.
4626 TEST_P(SpdyNetworkTransactionTest, ProxyConnect) { 4635 TEST_P(SpdyNetworkTransactionSpdy3Test, ProxyConnect) {
4627 NormalSpdyTransactionHelper helper(CreateGetRequest(), 4636 NormalSpdyTransactionHelper helper(CreateGetRequest(),
4628 BoundNetLog(), GetParam()); 4637 BoundNetLog(), GetParam());
4629 helper.session_deps().reset(new SpdySessionDependencies( 4638 helper.session_deps().reset(new SpdySessionDependencies(
4630 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"))); 4639 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")));
4631 helper.SetSession(make_scoped_refptr( 4640 helper.SetSession(make_scoped_refptr(
4632 SpdySessionDependencies::SpdyCreateSession(helper.session_deps().get()))); 4641 SpdySessionDependencies::SpdyCreateSession(helper.session_deps().get())));
4633 helper.RunPreTestSetup(); 4642 helper.RunPreTestSetup();
4634 HttpNetworkTransaction* trans = helper.trans(); 4643 HttpNetworkTransaction* trans = helper.trans();
4635 4644
4636 const char kConnect443[] = {"CONNECT www.google.com:443 HTTP/1.1\r\n" 4645 const char kConnect443[] = {"CONNECT www.google.com:443 HTTP/1.1\r\n"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
4717 4726
4718 std::string response_data; 4727 std::string response_data;
4719 ASSERT_EQ(OK, ReadTransaction(trans, &response_data)); 4728 ASSERT_EQ(OK, ReadTransaction(trans, &response_data));
4720 EXPECT_EQ("hello!", response_data); 4729 EXPECT_EQ("hello!", response_data);
4721 helper.VerifyDataConsumed(); 4730 helper.VerifyDataConsumed();
4722 } 4731 }
4723 4732
4724 // Test to make sure we can correctly connect through a proxy to www.google.com, 4733 // Test to make sure we can correctly connect through a proxy to www.google.com,
4725 // if there already exists a direct spdy connection to www.google.com. See 4734 // if there already exists a direct spdy connection to www.google.com. See
4726 // http://crbug.com/49874 4735 // http://crbug.com/49874
4727 TEST_P(SpdyNetworkTransactionTest, DirectConnectProxyReconnect) { 4736 TEST_P(SpdyNetworkTransactionSpdy3Test, DirectConnectProxyReconnect) {
4728 // When setting up the first transaction, we store the SpdySessionPool so that 4737 // When setting up the first transaction, we store the SpdySessionPool so that
4729 // we can use the same pool in the second transaction. 4738 // we can use the same pool in the second transaction.
4730 NormalSpdyTransactionHelper helper(CreateGetRequest(), 4739 NormalSpdyTransactionHelper helper(CreateGetRequest(),
4731 BoundNetLog(), GetParam()); 4740 BoundNetLog(), GetParam());
4732 4741
4733 // Use a proxy service which returns a proxy fallback list from DIRECT to 4742 // Use a proxy service which returns a proxy fallback list from DIRECT to
4734 // myproxy:70. For this test there will be no fallback, so it is equivalent 4743 // myproxy:70. For this test there will be no fallback, so it is equivalent
4735 // to simply DIRECT. The reason for appending the second proxy is to verify 4744 // to simply DIRECT. The reason for appending the second proxy is to verify
4736 // that the session pool key used does is just "DIRECT". 4745 // that the session pool key used does is just "DIRECT".
4737 helper.session_deps().reset(new SpdySessionDependencies( 4746 helper.session_deps().reset(new SpdySessionDependencies(
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
4895 EXPECT_EQ("hello!", response_data); 4904 EXPECT_EQ("hello!", response_data);
4896 4905
4897 data->CompleteRead(); 4906 data->CompleteRead();
4898 helper_proxy.VerifyDataConsumed(); 4907 helper_proxy.VerifyDataConsumed();
4899 } 4908 }
4900 4909
4901 // When we get a TCP-level RST, we need to retry a HttpNetworkTransaction 4910 // When we get a TCP-level RST, we need to retry a HttpNetworkTransaction
4902 // on a new connection, if the connection was previously known to be good. 4911 // on a new connection, if the connection was previously known to be good.
4903 // This can happen when a server reboots without saying goodbye, or when 4912 // This can happen when a server reboots without saying goodbye, or when
4904 // we're behind a NAT that masked the RST. 4913 // we're behind a NAT that masked the RST.
4905 TEST_P(SpdyNetworkTransactionTest, VerifyRetryOnConnectionReset) { 4914 TEST_P(SpdyNetworkTransactionSpdy3Test, VerifyRetryOnConnectionReset) {
4906 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 4915 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
4907 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 4916 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
4908 MockRead reads[] = { 4917 MockRead reads[] = {
4909 CreateMockRead(*resp), 4918 CreateMockRead(*resp),
4910 CreateMockRead(*body), 4919 CreateMockRead(*body),
4911 MockRead(ASYNC, ERR_IO_PENDING), 4920 MockRead(ASYNC, ERR_IO_PENDING),
4912 MockRead(ASYNC, ERR_CONNECTION_RESET), 4921 MockRead(ASYNC, ERR_CONNECTION_RESET),
4913 }; 4922 };
4914 4923
4915 MockRead reads2[] = { 4924 MockRead reads2[] = {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
4977 EXPECT_EQ(OK, rv); 4986 EXPECT_EQ(OK, rv);
4978 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 4987 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
4979 EXPECT_EQ("hello!", response_data); 4988 EXPECT_EQ("hello!", response_data);
4980 } 4989 }
4981 4990
4982 helper.VerifyDataConsumed(); 4991 helper.VerifyDataConsumed();
4983 } 4992 }
4984 } 4993 }
4985 4994
4986 // Test that turning SPDY on and off works properly. 4995 // Test that turning SPDY on and off works properly.
4987 TEST_P(SpdyNetworkTransactionTest, SpdyOnOffToggle) { 4996 TEST_P(SpdyNetworkTransactionSpdy3Test, SpdyOnOffToggle) {
4988 net::HttpStreamFactory::set_spdy_enabled(true); 4997 net::HttpStreamFactory::set_spdy_enabled(true);
4989 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 4998 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
4990 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; 4999 MockWrite spdy_writes[] = { CreateMockWrite(*req) };
4991 5000
4992 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 5001 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
4993 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); 5002 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
4994 MockRead spdy_reads[] = { 5003 MockRead spdy_reads[] = {
4995 CreateMockRead(*resp), 5004 CreateMockRead(*resp),
4996 CreateMockRead(*body), 5005 CreateMockRead(*body),
4997 MockRead(ASYNC, 0, 0) // EOF 5006 MockRead(ASYNC, 0, 0) // EOF
(...skipping 26 matching lines...) Expand all
5024 helper2.RunToCompletion(data2.get()); 5033 helper2.RunToCompletion(data2.get());
5025 TransactionHelperResult out2 = helper2.output(); 5034 TransactionHelperResult out2 = helper2.output();
5026 EXPECT_EQ(OK, out2.rv); 5035 EXPECT_EQ(OK, out2.rv);
5027 EXPECT_EQ("HTTP/1.1 200 OK", out2.status_line); 5036 EXPECT_EQ("HTTP/1.1 200 OK", out2.status_line);
5028 EXPECT_EQ("hello from http", out2.response_data); 5037 EXPECT_EQ("hello from http", out2.response_data);
5029 5038
5030 net::HttpStreamFactory::set_spdy_enabled(true); 5039 net::HttpStreamFactory::set_spdy_enabled(true);
5031 } 5040 }
5032 5041
5033 // Tests that Basic authentication works over SPDY 5042 // Tests that Basic authentication works over SPDY
5034 TEST_P(SpdyNetworkTransactionTest, SpdyBasicAuth) { 5043 TEST_P(SpdyNetworkTransactionSpdy3Test, SpdyBasicAuth) {
5035 net::HttpStreamFactory::set_spdy_enabled(true); 5044 net::HttpStreamFactory::set_spdy_enabled(true);
5036 5045
5037 // The first request will be a bare GET, the second request will be a 5046 // The first request will be a bare GET, the second request will be a
5038 // GET with an Authorization header. 5047 // GET with an Authorization header.
5039 scoped_ptr<spdy::SpdyFrame> req_get( 5048 scoped_ptr<spdy::SpdyFrame> req_get(
5040 ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5049 ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5041 const char* const kExtraAuthorizationHeaders[] = { 5050 const char* const kExtraAuthorizationHeaders[] = {
5042 "authorization", 5051 "authorization",
5043 "Basic Zm9vOmJhcg==", 5052 "Basic Zm9vOmJhcg==",
5044 }; 5053 };
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
5115 EXPECT_EQ(OK, rv_restart_complete); 5124 EXPECT_EQ(OK, rv_restart_complete);
5116 // TODO(cbentzel): This is actually the same response object as before, but 5125 // TODO(cbentzel): This is actually the same response object as before, but
5117 // data has changed. 5126 // data has changed.
5118 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); 5127 const HttpResponseInfo* const response_restart = trans->GetResponseInfo();
5119 ASSERT_TRUE(response_restart != NULL); 5128 ASSERT_TRUE(response_restart != NULL);
5120 ASSERT_TRUE(response_restart->headers != NULL); 5129 ASSERT_TRUE(response_restart->headers != NULL);
5121 EXPECT_EQ(200, response_restart->headers->response_code()); 5130 EXPECT_EQ(200, response_restart->headers->response_code());
5122 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL); 5131 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL);
5123 } 5132 }
5124 5133
5125 TEST_P(SpdyNetworkTransactionTest, ServerPushWithHeaders) { 5134 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushWithHeaders) {
5126 static const unsigned char kPushBodyFrame[] = { 5135 static const unsigned char kPushBodyFrame[] = {
5127 0x00, 0x00, 0x00, 0x02, // header, ID 5136 0x00, 0x00, 0x00, 0x02, // header, ID
5128 0x01, 0x00, 0x00, 0x06, // FIN, length 5137 0x01, 0x00, 0x00, 0x06, // FIN, length
5129 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 5138 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
5130 }; 5139 };
5131 scoped_ptr<spdy::SpdyFrame> 5140 scoped_ptr<spdy::SpdyFrame>
5132 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5141 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5133 scoped_ptr<spdy::SpdyFrame> 5142 scoped_ptr<spdy::SpdyFrame>
5134 stream1_body(ConstructSpdyBodyFrame(1, true)); 5143 stream1_body(ConstructSpdyBodyFrame(1, true));
5135 MockWrite writes[] = { 5144 MockWrite writes[] = {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
5198 5207
5199 // Verify the SYN_REPLY. 5208 // Verify the SYN_REPLY.
5200 EXPECT_TRUE(response.headers != NULL); 5209 EXPECT_TRUE(response.headers != NULL);
5201 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5210 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5202 5211
5203 // Verify the pushed stream. 5212 // Verify the pushed stream.
5204 EXPECT_TRUE(response2.headers != NULL); 5213 EXPECT_TRUE(response2.headers != NULL);
5205 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 5214 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
5206 } 5215 }
5207 5216
5208 TEST_P(SpdyNetworkTransactionTest, ServerPushClaimBeforeHeaders) { 5217 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushClaimBeforeHeaders) {
5209 // We push a stream and attempt to claim it before the headers come down. 5218 // We push a stream and attempt to claim it before the headers come down.
5210 static const unsigned char kPushBodyFrame[] = { 5219 static const unsigned char kPushBodyFrame[] = {
5211 0x00, 0x00, 0x00, 0x02, // header, ID 5220 0x00, 0x00, 0x00, 0x02, // header, ID
5212 0x01, 0x00, 0x00, 0x06, // FIN, length 5221 0x01, 0x00, 0x00, 0x06, // FIN, length
5213 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 5222 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
5214 }; 5223 };
5215 scoped_ptr<spdy::SpdyFrame> 5224 scoped_ptr<spdy::SpdyFrame>
5216 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5225 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5217 scoped_ptr<spdy::SpdyFrame> 5226 scoped_ptr<spdy::SpdyFrame>
5218 stream1_body(ConstructSpdyBodyFrame(1, true)); 5227 stream1_body(ConstructSpdyBodyFrame(1, true));
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
5335 5344
5336 // Verify the SYN_REPLY. 5345 // Verify the SYN_REPLY.
5337 EXPECT_TRUE(response.headers != NULL); 5346 EXPECT_TRUE(response.headers != NULL);
5338 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5347 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5339 5348
5340 // Verify the pushed stream. 5349 // Verify the pushed stream.
5341 EXPECT_TRUE(response2.headers != NULL); 5350 EXPECT_TRUE(response2.headers != NULL);
5342 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); 5351 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine());
5343 } 5352 }
5344 5353
5345 TEST_P(SpdyNetworkTransactionTest, ServerPushWithTwoHeaderFrames) { 5354 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushWithTwoHeaderFrames) {
5346 // We push a stream and attempt to claim it before the headers come down. 5355 // We push a stream and attempt to claim it before the headers come down.
5347 static const unsigned char kPushBodyFrame[] = { 5356 static const unsigned char kPushBodyFrame[] = {
5348 0x00, 0x00, 0x00, 0x02, // header, ID 5357 0x00, 0x00, 0x00, 0x02, // header, ID
5349 0x01, 0x00, 0x00, 0x06, // FIN, length 5358 0x01, 0x00, 0x00, 0x06, // FIN, length
5350 'p', 'u', 's', 'h', 'e', 'd' // "pushed" 5359 'p', 'u', 's', 'h', 'e', 'd' // "pushed"
5351 }; 5360 };
5352 scoped_ptr<spdy::SpdyFrame> 5361 scoped_ptr<spdy::SpdyFrame>
5353 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5362 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5354 scoped_ptr<spdy::SpdyFrame> 5363 scoped_ptr<spdy::SpdyFrame>
5355 stream1_body(ConstructSpdyBodyFrame(1, true)); 5364 stream1_body(ConstructSpdyBodyFrame(1, true));
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
5494 5503
5495 // Verify we got all the headers 5504 // Verify we got all the headers
5496 EXPECT_TRUE(response2.headers->HasHeaderValue( 5505 EXPECT_TRUE(response2.headers->HasHeaderValue(
5497 "url", 5506 "url",
5498 "http://www.google.com/foo.dat")); 5507 "http://www.google.com/foo.dat"));
5499 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye")); 5508 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye"));
5500 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200")); 5509 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200"));
5501 EXPECT_TRUE(response2.headers->HasHeaderValue("version", "HTTP/1.1")); 5510 EXPECT_TRUE(response2.headers->HasHeaderValue("version", "HTTP/1.1"));
5502 } 5511 }
5503 5512
5504 TEST_P(SpdyNetworkTransactionTest, SynReplyWithHeaders) { 5513 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithHeaders) {
5505 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5514 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5506 MockWrite writes[] = { CreateMockWrite(*req) }; 5515 MockWrite writes[] = { CreateMockWrite(*req) };
5507 5516
5508 static const char* const kInitialHeaders[] = { 5517 static const char* const kInitialHeaders[] = {
5509 "status", 5518 "status",
5510 "200 OK", 5519 "200 OK",
5511 "version", 5520 "version",
5512 "HTTP/1.1" 5521 "HTTP/1.1"
5513 }; 5522 };
5514 static const char* const kLateHeaders[] = { 5523 static const char* const kLateHeaders[] = {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5550 writes, arraysize(writes))); 5559 writes, arraysize(writes)));
5551 NormalSpdyTransactionHelper helper(CreateGetRequest(), 5560 NormalSpdyTransactionHelper helper(CreateGetRequest(),
5552 BoundNetLog(), GetParam()); 5561 BoundNetLog(), GetParam());
5553 helper.RunToCompletion(data.get()); 5562 helper.RunToCompletion(data.get());
5554 TransactionHelperResult out = helper.output(); 5563 TransactionHelperResult out = helper.output();
5555 EXPECT_EQ(OK, out.rv); 5564 EXPECT_EQ(OK, out.rv);
5556 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 5565 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
5557 EXPECT_EQ("hello!", out.response_data); 5566 EXPECT_EQ("hello!", out.response_data);
5558 } 5567 }
5559 5568
5560 TEST_P(SpdyNetworkTransactionTest, SynReplyWithLateHeaders) { 5569 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithLateHeaders) {
5561 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5570 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5562 MockWrite writes[] = { CreateMockWrite(*req) }; 5571 MockWrite writes[] = { CreateMockWrite(*req) };
5563 5572
5564 static const char* const kInitialHeaders[] = { 5573 static const char* const kInitialHeaders[] = {
5565 "status", 5574 "status",
5566 "200 OK", 5575 "200 OK",
5567 "version", 5576 "version",
5568 "HTTP/1.1" 5577 "HTTP/1.1"
5569 }; 5578 };
5570 static const char* const kLateHeaders[] = { 5579 static const char* const kLateHeaders[] = {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
5608 writes, arraysize(writes))); 5617 writes, arraysize(writes)));
5609 NormalSpdyTransactionHelper helper(CreateGetRequest(), 5618 NormalSpdyTransactionHelper helper(CreateGetRequest(),
5610 BoundNetLog(), GetParam()); 5619 BoundNetLog(), GetParam());
5611 helper.RunToCompletion(data.get()); 5620 helper.RunToCompletion(data.get());
5612 TransactionHelperResult out = helper.output(); 5621 TransactionHelperResult out = helper.output();
5613 EXPECT_EQ(OK, out.rv); 5622 EXPECT_EQ(OK, out.rv);
5614 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 5623 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
5615 EXPECT_EQ("hello!hello!", out.response_data); 5624 EXPECT_EQ("hello!hello!", out.response_data);
5616 } 5625 }
5617 5626
5618 TEST_P(SpdyNetworkTransactionTest, SynReplyWithDuplicateLateHeaders) { 5627 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithDuplicateLateHeaders) {
5619 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5628 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5620 MockWrite writes[] = { CreateMockWrite(*req) }; 5629 MockWrite writes[] = { CreateMockWrite(*req) };
5621 5630
5622 static const char* const kInitialHeaders[] = { 5631 static const char* const kInitialHeaders[] = {
5623 "status", 5632 "status",
5624 "200 OK", 5633 "200 OK",
5625 "version", 5634 "version",
5626 "HTTP/1.1" 5635 "HTTP/1.1"
5627 }; 5636 };
5628 static const char* const kLateHeaders[] = { 5637 static const char* const kLateHeaders[] = {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5664 scoped_ptr<DelayedSocketData> data( 5673 scoped_ptr<DelayedSocketData> data(
5665 new DelayedSocketData(1, reads, arraysize(reads), 5674 new DelayedSocketData(1, reads, arraysize(reads),
5666 writes, arraysize(writes))); 5675 writes, arraysize(writes)));
5667 NormalSpdyTransactionHelper helper(CreateGetRequest(), 5676 NormalSpdyTransactionHelper helper(CreateGetRequest(),
5668 BoundNetLog(), GetParam()); 5677 BoundNetLog(), GetParam());
5669 helper.RunToCompletion(data.get()); 5678 helper.RunToCompletion(data.get());
5670 TransactionHelperResult out = helper.output(); 5679 TransactionHelperResult out = helper.output();
5671 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv); 5680 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
5672 } 5681 }
5673 5682
5674 TEST_P(SpdyNetworkTransactionTest, ServerPushCrossOriginCorrectness) { 5683 TEST_P(SpdyNetworkTransactionSpdy3Test, ServerPushCrossOriginCorrectness) {
5675 // In this test we want to verify that we can't accidentally push content 5684 // In this test we want to verify that we can't accidentally push content
5676 // which can't be pushed by this content server. 5685 // which can't be pushed by this content server.
5677 // This test assumes that: 5686 // This test assumes that:
5678 // - if we're requesting http://www.foo.com/barbaz 5687 // - if we're requesting http://www.foo.com/barbaz
5679 // - the browser has made a connection to "www.foo.com". 5688 // - the browser has made a connection to "www.foo.com".
5680 5689
5681 // A list of the URL to fetch, followed by the URL being pushed. 5690 // A list of the URL to fetch, followed by the URL being pushed.
5682 static const char* const kTestCases[] = { 5691 static const char* const kTestCases[] = {
5683 "http://www.google.com/foo.html", 5692 "http://www.google.com/foo.html",
5684 "http://www.google.com:81/foo.js", // Bad port 5693 "http://www.google.com:81/foo.js", // Bad port
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
5776 response = *trans->GetResponseInfo(); 5785 response = *trans->GetResponseInfo();
5777 5786
5778 VerifyStreamsClosed(helper); 5787 VerifyStreamsClosed(helper);
5779 5788
5780 // Verify the SYN_REPLY. 5789 // Verify the SYN_REPLY.
5781 EXPECT_TRUE(response.headers != NULL); 5790 EXPECT_TRUE(response.headers != NULL);
5782 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5791 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5783 } 5792 }
5784 } 5793 }
5785 5794
5786 TEST_P(SpdyNetworkTransactionTest, RetryAfterRefused) { 5795 TEST_P(SpdyNetworkTransactionSpdy3Test, RetryAfterRefused) {
5787 // Construct the request. 5796 // Construct the request.
5788 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); 5797 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
5789 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); 5798 scoped_ptr<spdy::SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST));
5790 MockWrite writes[] = { 5799 MockWrite writes[] = {
5791 CreateMockWrite(*req, 1), 5800 CreateMockWrite(*req, 1),
5792 CreateMockWrite(*req2, 3), 5801 CreateMockWrite(*req2, 3),
5793 }; 5802 };
5794 5803
5795 scoped_ptr<spdy::SpdyFrame> refused( 5804 scoped_ptr<spdy::SpdyFrame> refused(
5796 ConstructSpdyRstStream(1, spdy::REFUSED_STREAM)); 5805 ConstructSpdyRstStream(1, spdy::REFUSED_STREAM));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5832 << " Write index: " 5841 << " Write index: "
5833 << data->write_index(); 5842 << data->write_index();
5834 5843
5835 // Verify the SYN_REPLY. 5844 // Verify the SYN_REPLY.
5836 HttpResponseInfo response = *trans->GetResponseInfo(); 5845 HttpResponseInfo response = *trans->GetResponseInfo();
5837 EXPECT_TRUE(response.headers != NULL); 5846 EXPECT_TRUE(response.headers != NULL);
5838 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5847 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5839 } 5848 }
5840 5849
5841 } // namespace net 5850 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_network_transaction_spdy2_unittest.cc ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698