| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 SpdyNetworkTransactionTestParams( | 62 SpdyNetworkTransactionTestParams( |
| 63 NextProto protocol, | 63 NextProto protocol, |
| 64 SpdyNetworkTransactionTestSSLType ssl_type) | 64 SpdyNetworkTransactionTestSSLType ssl_type) |
| 65 : protocol(protocol), | 65 : protocol(protocol), |
| 66 ssl_type(ssl_type) {} | 66 ssl_type(ssl_type) {} |
| 67 | 67 |
| 68 NextProto protocol; | 68 NextProto protocol; |
| 69 SpdyNetworkTransactionTestSSLType ssl_type; | 69 SpdyNetworkTransactionTestSSLType ssl_type; |
| 70 }; | 70 }; |
| 71 | 71 |
| 72 void UpdateSpdySessionDependencies( |
| 73 SpdyNetworkTransactionTestParams test_params, |
| 74 SpdySessionDependencies* session_deps) { |
| 75 switch (test_params.ssl_type) { |
| 76 case SPDYNPN: |
| 77 session_deps->http_server_properties.SetAlternateProtocol( |
| 78 HostPortPair("www.google.com", 80), 443, |
| 79 AlternateProtocolFromNextProto(test_params.protocol)); |
| 80 session_deps->use_alternate_protocols = true; |
| 81 session_deps->next_protos = SpdyNextProtos(); |
| 82 break; |
| 83 case SPDYNOSSL: |
| 84 session_deps->force_spdy_over_ssl = false; |
| 85 session_deps->force_spdy_always = true; |
| 86 break; |
| 87 case SPDYSSL: |
| 88 session_deps->force_spdy_over_ssl = true; |
| 89 session_deps->force_spdy_always = true; |
| 90 break; |
| 91 default: |
| 92 NOTREACHED(); |
| 93 } |
| 94 } |
| 95 |
| 72 SpdySessionDependencies* CreateSpdySessionDependencies( | 96 SpdySessionDependencies* CreateSpdySessionDependencies( |
| 73 SpdyNetworkTransactionTestParams test_params) { | 97 SpdyNetworkTransactionTestParams test_params) { |
| 74 return new SpdySessionDependencies(test_params.protocol); | 98 SpdySessionDependencies* session_deps = |
| 99 new SpdySessionDependencies(test_params.protocol); |
| 100 UpdateSpdySessionDependencies(test_params, session_deps); |
| 101 return session_deps; |
| 75 } | 102 } |
| 76 | 103 |
| 77 SpdySessionDependencies* CreateSpdySessionDependencies( | 104 SpdySessionDependencies* CreateSpdySessionDependencies( |
| 78 SpdyNetworkTransactionTestParams test_params, | 105 SpdyNetworkTransactionTestParams test_params, |
| 79 ProxyService* proxy_service) { | 106 ProxyService* proxy_service) { |
| 80 return new SpdySessionDependencies(test_params.protocol, proxy_service); | 107 SpdySessionDependencies* session_deps = |
| 108 new SpdySessionDependencies(test_params.protocol, proxy_service); |
| 109 UpdateSpdySessionDependencies(test_params, session_deps); |
| 110 return session_deps; |
| 81 } | 111 } |
| 82 | 112 |
| 83 } // namespace | 113 } // namespace |
| 84 | 114 |
| 85 class SpdyNetworkTransactionTest | 115 class SpdyNetworkTransactionTest |
| 86 : public ::testing::TestWithParam<SpdyNetworkTransactionTestParams> { | 116 : public ::testing::TestWithParam<SpdyNetworkTransactionTestParams> { |
| 87 protected: | 117 protected: |
| 88 SpdyNetworkTransactionTest() : spdy_util_(GetParam().protocol) { | 118 SpdyNetworkTransactionTest() : spdy_util_(GetParam().protocol) { |
| 89 LOG(INFO) << __FUNCTION__; | 119 LOG(INFO) << __FUNCTION__; |
| 90 } | 120 } |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 | 196 |
| 167 void SetSpdyDisabled() { | 197 void SetSpdyDisabled() { |
| 168 spdy_enabled_ = false; | 198 spdy_enabled_ = false; |
| 169 port_ = 80; | 199 port_ = 80; |
| 170 } | 200 } |
| 171 | 201 |
| 172 void RunPreTestSetup() { | 202 void RunPreTestSetup() { |
| 173 LOG(INFO) << __FUNCTION__; | 203 LOG(INFO) << __FUNCTION__; |
| 174 if (!session_deps_.get()) | 204 if (!session_deps_.get()) |
| 175 session_deps_.reset(CreateSpdySessionDependencies(test_params_)); | 205 session_deps_.reset(CreateSpdySessionDependencies(test_params_)); |
| 176 if (!session_.get()) | 206 if (!session_.get()) { |
| 177 session_ = SpdySessionDependencies::SpdyCreateSession( | 207 session_ = SpdySessionDependencies::SpdyCreateSession( |
| 178 session_deps_.get()); | 208 session_deps_.get()); |
| 179 HttpStreamFactory::set_use_alternate_protocols(false); | |
| 180 HttpStreamFactory::set_force_spdy_over_ssl(false); | |
| 181 HttpStreamFactory::set_force_spdy_always(false); | |
| 182 | |
| 183 std::vector<NextProto> next_protos = SpdyNextProtos(); | |
| 184 | |
| 185 switch (test_params_.ssl_type) { | |
| 186 case SPDYNPN: | |
| 187 session_->http_server_properties()->SetAlternateProtocol( | |
| 188 HostPortPair("www.google.com", 80), 443, | |
| 189 AlternateProtocolFromNextProto(test_params_.protocol)); | |
| 190 HttpStreamFactory::set_use_alternate_protocols(true); | |
| 191 HttpStreamFactory::SetNextProtos(next_protos); | |
| 192 break; | |
| 193 case SPDYNOSSL: | |
| 194 HttpStreamFactory::set_force_spdy_over_ssl(false); | |
| 195 HttpStreamFactory::set_force_spdy_always(true); | |
| 196 break; | |
| 197 case SPDYSSL: | |
| 198 HttpStreamFactory::set_force_spdy_over_ssl(true); | |
| 199 HttpStreamFactory::set_force_spdy_always(true); | |
| 200 break; | |
| 201 default: | |
| 202 NOTREACHED(); | |
| 203 } | 209 } |
| 204 | 210 |
| 205 // We're now ready to use SSL-npn SPDY. | 211 // We're now ready to use SSL-npn SPDY. |
| 206 trans_.reset(new HttpNetworkTransaction(priority_, session_.get())); | 212 trans_.reset(new HttpNetworkTransaction(priority_, session_.get())); |
| 207 LOG(INFO) << __FUNCTION__; | 213 LOG(INFO) << __FUNCTION__; |
| 208 } | 214 } |
| 209 | 215 |
| 210 // Start the transaction, read some data, finish. | 216 // Start the transaction, read some data, finish. |
| 211 void RunDefaultTest() { | 217 void RunDefaultTest() { |
| 212 LOG(INFO) << __FUNCTION__; | 218 LOG(INFO) << __FUNCTION__; |
| (...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 TestCompletionCallback callback1; | 1076 TestCompletionCallback callback1; |
| 1071 TestCompletionCallback callback2; | 1077 TestCompletionCallback callback2; |
| 1072 | 1078 |
| 1073 HttpRequestInfo httpreq = CreateGetRequest(); | 1079 HttpRequestInfo httpreq = CreateGetRequest(); |
| 1074 | 1080 |
| 1075 // Preconnect the first. | 1081 // Preconnect the first. |
| 1076 SSLConfig preconnect_ssl_config; | 1082 SSLConfig preconnect_ssl_config; |
| 1077 helper.session()->ssl_config_service()->GetSSLConfig(&preconnect_ssl_config); | 1083 helper.session()->ssl_config_service()->GetSSLConfig(&preconnect_ssl_config); |
| 1078 HttpStreamFactory* http_stream_factory = | 1084 HttpStreamFactory* http_stream_factory = |
| 1079 helper.session()->http_stream_factory(); | 1085 helper.session()->http_stream_factory(); |
| 1080 if (http_stream_factory->has_next_protos()) { | 1086 helper.session()->GetNextProtos(&preconnect_ssl_config.next_protos); |
| 1081 preconnect_ssl_config.next_protos = http_stream_factory->next_protos(); | |
| 1082 } | |
| 1083 | 1087 |
| 1084 http_stream_factory->PreconnectStreams( | 1088 http_stream_factory->PreconnectStreams( |
| 1085 1, httpreq, DEFAULT_PRIORITY, | 1089 1, httpreq, DEFAULT_PRIORITY, |
| 1086 preconnect_ssl_config, preconnect_ssl_config); | 1090 preconnect_ssl_config, preconnect_ssl_config); |
| 1087 | 1091 |
| 1088 out.rv = trans1->Start(&httpreq, callback1.callback(), log); | 1092 out.rv = trans1->Start(&httpreq, callback1.callback(), log); |
| 1089 ASSERT_EQ(ERR_IO_PENDING, out.rv); | 1093 ASSERT_EQ(ERR_IO_PENDING, out.rv); |
| 1090 out.rv = trans2->Start(&httpreq, callback2.callback(), log); | 1094 out.rv = trans2->Start(&httpreq, callback2.callback(), log); |
| 1091 ASSERT_EQ(ERR_IO_PENDING, out.rv); | 1095 ASSERT_EQ(ERR_IO_PENDING, out.rv); |
| 1092 | 1096 |
| (...skipping 1441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2534 CreateMockRead(*resp2, 2), | 2538 CreateMockRead(*resp2, 2), |
| 2535 CreateMockRead(*body2, 3), | 2539 CreateMockRead(*body2, 3), |
| 2536 MockRead(ASYNC, 0, 0, 4) // EOF | 2540 MockRead(ASYNC, 0, 0, 4) // EOF |
| 2537 }; | 2541 }; |
| 2538 OrderedSocketData data(reads, arraysize(reads), | 2542 OrderedSocketData data(reads, arraysize(reads), |
| 2539 writes, arraysize(writes)); | 2543 writes, arraysize(writes)); |
| 2540 OrderedSocketData data2(reads2, arraysize(reads2), | 2544 OrderedSocketData data2(reads2, arraysize(reads2), |
| 2541 writes2, arraysize(writes2)); | 2545 writes2, arraysize(writes2)); |
| 2542 | 2546 |
| 2543 // TODO(erikchen): Make test support SPDYSSL, SPDYNPN | 2547 // TODO(erikchen): Make test support SPDYSSL, SPDYNPN |
| 2544 HttpStreamFactory::set_force_spdy_over_ssl(false); | |
| 2545 HttpStreamFactory::set_force_spdy_always(true); | |
| 2546 TestDelegate d; | 2548 TestDelegate d; |
| 2547 { | 2549 { |
| 2548 SpdyURLRequestContext spdy_url_request_context(GetParam().protocol); | 2550 SpdyURLRequestContext spdy_url_request_context( |
| 2551 GetParam().protocol, |
| 2552 false /* force_spdy_over_ssl*/, |
| 2553 true /* force_spdy_always */); |
| 2549 net::URLRequest r(GURL("http://www.google.com/"), | 2554 net::URLRequest r(GURL("http://www.google.com/"), |
| 2550 DEFAULT_PRIORITY, | 2555 DEFAULT_PRIORITY, |
| 2551 &d, | 2556 &d, |
| 2552 &spdy_url_request_context); | 2557 &spdy_url_request_context); |
| 2553 spdy_url_request_context.socket_factory(). | 2558 spdy_url_request_context.socket_factory(). |
| 2554 AddSocketDataProvider(&data); | 2559 AddSocketDataProvider(&data); |
| 2555 spdy_url_request_context.socket_factory(). | 2560 spdy_url_request_context.socket_factory(). |
| 2556 AddSocketDataProvider(&data2); | 2561 AddSocketDataProvider(&data2); |
| 2557 | 2562 |
| 2558 d.set_quit_on_redirect(true); | 2563 d.set_quit_on_redirect(true); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2628 CreateMockRead(*resp2, 2), | 2633 CreateMockRead(*resp2, 2), |
| 2629 CreateMockRead(*body2, 3), | 2634 CreateMockRead(*body2, 3), |
| 2630 MockRead(ASYNC, 0, 0, 5) // EOF | 2635 MockRead(ASYNC, 0, 0, 5) // EOF |
| 2631 }; | 2636 }; |
| 2632 OrderedSocketData data(reads, arraysize(reads), | 2637 OrderedSocketData data(reads, arraysize(reads), |
| 2633 writes, arraysize(writes)); | 2638 writes, arraysize(writes)); |
| 2634 OrderedSocketData data2(reads2, arraysize(reads2), | 2639 OrderedSocketData data2(reads2, arraysize(reads2), |
| 2635 writes2, arraysize(writes2)); | 2640 writes2, arraysize(writes2)); |
| 2636 | 2641 |
| 2637 // TODO(erikchen): Make test support SPDYSSL, SPDYNPN | 2642 // TODO(erikchen): Make test support SPDYSSL, SPDYNPN |
| 2638 HttpStreamFactory::set_force_spdy_over_ssl(false); | |
| 2639 HttpStreamFactory::set_force_spdy_always(true); | |
| 2640 TestDelegate d; | 2643 TestDelegate d; |
| 2641 TestDelegate d2; | 2644 TestDelegate d2; |
| 2642 SpdyURLRequestContext spdy_url_request_context(GetParam().protocol); | 2645 SpdyURLRequestContext spdy_url_request_context( |
| 2646 GetParam().protocol, |
| 2647 false /* force_spdy_over_ssl*/, |
| 2648 true /* force_spdy_always */); |
| 2643 { | 2649 { |
| 2644 net::URLRequest r(GURL("http://www.google.com/"), | 2650 net::URLRequest r(GURL("http://www.google.com/"), |
| 2645 DEFAULT_PRIORITY, | 2651 DEFAULT_PRIORITY, |
| 2646 &d, | 2652 &d, |
| 2647 &spdy_url_request_context); | 2653 &spdy_url_request_context); |
| 2648 spdy_url_request_context.socket_factory(). | 2654 spdy_url_request_context.socket_factory(). |
| 2649 AddSocketDataProvider(&data); | 2655 AddSocketDataProvider(&data); |
| 2650 | 2656 |
| 2651 r.Start(); | 2657 r.Start(); |
| 2652 base::RunLoop().Run(); | 2658 base::RunLoop().Run(); |
| (...skipping 2324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4977 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 4983 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 4978 EXPECT_EQ("hello!", response_data); | 4984 EXPECT_EQ("hello!", response_data); |
| 4979 } | 4985 } |
| 4980 | 4986 |
| 4981 helper.VerifyDataConsumed(); | 4987 helper.VerifyDataConsumed(); |
| 4982 } | 4988 } |
| 4983 } | 4989 } |
| 4984 | 4990 |
| 4985 // Test that turning SPDY on and off works properly. | 4991 // Test that turning SPDY on and off works properly. |
| 4986 TEST_P(SpdyNetworkTransactionTest, SpdyOnOffToggle) { | 4992 TEST_P(SpdyNetworkTransactionTest, SpdyOnOffToggle) { |
| 4987 net::HttpStreamFactory::set_spdy_enabled(true); | 4993 HttpStreamFactory::set_spdy_enabled(true); |
| 4988 scoped_ptr<SpdyFrame> req( | 4994 scoped_ptr<SpdyFrame> req( |
| 4989 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 4995 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 4990 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 4996 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
| 4991 | 4997 |
| 4992 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 4998 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 4993 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 4999 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 4994 MockRead spdy_reads[] = { | 5000 MockRead spdy_reads[] = { |
| 4995 CreateMockRead(*resp), | 5001 CreateMockRead(*resp), |
| 4996 CreateMockRead(*body), | 5002 CreateMockRead(*body), |
| 4997 MockRead(ASYNC, 0, 0) // EOF | 5003 MockRead(ASYNC, 0, 0) // EOF |
| (...skipping 1575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6573 // since we're send-stalled. | 6579 // since we're send-stalled. |
| 6574 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control()); | 6580 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control()); |
| 6575 | 6581 |
| 6576 // Read in WINDOW_UPDATE or SETTINGS frame. | 6582 // Read in WINDOW_UPDATE or SETTINGS frame. |
| 6577 data.RunFor((GetParam().protocol >= kProtoSPDY31) ? 9 : 8); | 6583 data.RunFor((GetParam().protocol >= kProtoSPDY31) ? 9 : 8); |
| 6578 rv = callback.WaitForResult(); | 6584 rv = callback.WaitForResult(); |
| 6579 helper.VerifyDataConsumed(); | 6585 helper.VerifyDataConsumed(); |
| 6580 } | 6586 } |
| 6581 | 6587 |
| 6582 } // namespace net | 6588 } // namespace net |
| OLD | NEW |