OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |