Chromium Code Reviews| Index: net/spdy/spdy_network_transaction_unittest.cc |
| diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc |
| index b937655a023133c3a18b96abb33e25684dab2de4..2a1a70f8cb06a6bf13642aedc519c7ccc49c95b4 100644 |
| --- a/net/spdy/spdy_network_transaction_unittest.cc |
| +++ b/net/spdy/spdy_network_transaction_unittest.cc |
| @@ -33,6 +33,7 @@ |
| #include "net/spdy/spdy_session_pool.h" |
| #include "net/spdy/spdy_test_util_common.h" |
| #include "net/spdy/spdy_test_utils.h" |
| +#include "net/ssl/ssl_connection_status_flags.h" |
| #include "net/url_request/url_request_test_util.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/platform_test.h" |
| @@ -217,7 +218,7 @@ class SpdyNetworkTransactionTest |
| } |
| bool StartDefaultTest() { |
| - output_.rv = trans_->Start(&request_, callback.callback(), log_); |
| + output_.rv = trans_->Start(&request_, callback_.callback(), log_); |
| // We expect an IO Pending or some sort of error. |
| EXPECT_LT(output_.rv, 0); |
| @@ -225,7 +226,7 @@ class SpdyNetworkTransactionTest |
| } |
| void FinishDefaultTest() { |
| - output_.rv = callback.WaitForResult(); |
| + output_.rv = callback_.WaitForResult(); |
| if (output_.rv != OK) { |
| session_->spdy_session_pool()->CloseCurrentSessions(net::ERR_ABORTED); |
| return; |
| @@ -305,17 +306,35 @@ class SpdyNetworkTransactionTest |
| VerifyDataConsumed(); |
| } |
| + void RunToCompletionWithSSLData( |
| + StaticSocketDataProvider* data, |
| + scoped_ptr<SSLSocketDataProvider> ssl_provider) { |
| + RunPreTestSetup(); |
| + AddDataWithSSLSocketDataProvider(data, ssl_provider.Pass()); |
| + RunDefaultTest(); |
| + VerifyDataConsumed(); |
| + } |
| + |
| void AddData(StaticSocketDataProvider* data) { |
| + scoped_ptr<SSLSocketDataProvider> ssl_provider( |
| + new SSLSocketDataProvider(ASYNC, OK)); |
| + AddDataWithSSLSocketDataProvider(data, ssl_provider.Pass()); |
| + } |
| + |
| + void AddDataWithSSLSocketDataProvider( |
| + StaticSocketDataProvider* data, |
| + scoped_ptr<SSLSocketDataProvider> ssl_provider) { |
| DCHECK(!deterministic_); |
| data_vector_.push_back(data); |
| - SSLSocketDataProvider* ssl_provider = |
| - new SSLSocketDataProvider(ASYNC, OK); |
| if (test_params_.ssl_type == SPDYNPN) |
| ssl_provider->SetNextProto(test_params_.protocol); |
| - ssl_vector_.push_back(ssl_provider); |
| - if (test_params_.ssl_type == SPDYNPN || test_params_.ssl_type == SPDYSSL) |
| - session_deps_->socket_factory->AddSSLSocketDataProvider(ssl_provider); |
| + if (test_params_.ssl_type == SPDYNPN || |
| + test_params_.ssl_type == SPDYSSL) { |
| + session_deps_->socket_factory->AddSSLSocketDataProvider( |
| + ssl_provider.get()); |
| + } |
| + ssl_vector_.push_back(ssl_provider.release()); |
| session_deps_->socket_factory->AddSocketDataProvider(data); |
| if (test_params_.ssl_type == SPDYNPN) { |
| @@ -388,7 +407,7 @@ class SpdyNetworkTransactionTest |
| TransactionHelperResult output_; |
| scoped_ptr<StaticSocketDataProvider> first_transaction_; |
| SSLVector ssl_vector_; |
| - TestCompletionCallback callback; |
| + TestCompletionCallback callback_; |
| scoped_ptr<HttpNetworkTransaction> trans_; |
| scoped_ptr<HttpNetworkTransaction> trans_http_; |
| DataVector data_vector_; |
| @@ -6579,4 +6598,44 @@ TEST_P(SpdyNetworkTransactionTest, FlowControlNegativeSendWindowSize) { |
| helper.VerifyDataConsumed(); |
| } |
| +typedef SpdyNetworkTransactionTest SpdyNetworkTransactionSSLTest; |
| + |
| +//----------------------------------------------------------------------------- |
| +// All tests are run with three different connection types: SPDY after NPN |
| +// negotiation, SPDY without SSL, and SPDY with SSL. |
| +// |
| +// TODO(akalin): Use ::testing::Combine() when we are able to use |
| +// <tr1/tuple>. |
| +INSTANTIATE_TEST_CASE_P( |
| + Spdy, |
| + SpdyNetworkTransactionSSLTest, |
| + ::testing::Values(SpdyNetworkTransactionTestParams(kProtoDeprecatedSPDY2, |
| + SPDYNPN), |
| + SpdyNetworkTransactionTestParams(kProtoSPDY3, SPDYNPN), |
| + SpdyNetworkTransactionTestParams(kProtoSPDY31, SPDYNPN), |
| + SpdyNetworkTransactionTestParams(kProtoSPDY4, SPDYNPN))); |
| + |
| +TEST_P(SpdyNetworkTransactionSSLTest, TLSVersionTooOld) { |
| + // TODO(willchan): Fix crbug.com/375033 to send GOAWAYs. |
| + // scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway()); |
| + // MockWrite writes[] = { |
| + // CreateMockWrite(*goaway) |
| + // }; |
| + |
|
agl
2014/05/20 02:45:13
This blank line should probably appear under the c
|
| + // DelayedSocketData data(1, NULL, 0, writes, arraysize(writes)); |
| + DelayedSocketData data(1, NULL, 0, NULL, 0); |
| + HttpRequestInfo request; |
| + request.method = "GET"; |
| + request.url = GURL("https://www.google.com/"); |
| + NormalSpdyTransactionHelper helper( |
| + request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL); |
| + scoped_ptr<SSLSocketDataProvider> ssl_provider( |
| + new SSLSocketDataProvider(ASYNC, OK)); |
| + SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3, |
| + &ssl_provider->connection_status); |
| + helper.RunToCompletionWithSSLData(&data, ssl_provider.Pass()); |
| + TransactionHelperResult out = helper.output(); |
| + EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv); |
| +} |
| + |
| } // namespace net |