| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 } | 95 } |
| 96 | 96 |
| 97 private: | 97 private: |
| 98 std::vector<QuicEncryptedPacket*> packets_; | 98 std::vector<QuicEncryptedPacket*> packets_; |
| 99 std::vector<MockWrite> writes_; | 99 std::vector<MockWrite> writes_; |
| 100 std::vector<MockRead> reads_; | 100 std::vector<MockRead> reads_; |
| 101 size_t sequence_number_; | 101 size_t sequence_number_; |
| 102 scoped_ptr<SocketDataProvider> socket_data_; | 102 scoped_ptr<SocketDataProvider> socket_data_; |
| 103 }; | 103 }; |
| 104 | 104 |
| 105 class ProxyHeadersHandler { |
| 106 public: |
| 107 ProxyHeadersHandler() : was_called_(false) {} |
| 108 |
| 109 bool was_called() { return was_called_; } |
| 110 |
| 111 void OnBeforeProxyHeadersSent(const ProxyInfo& proxy_info, |
| 112 HttpRequestHeaders* request_headers) { |
| 113 was_called_ = true; |
| 114 } |
| 115 |
| 116 private: |
| 117 bool was_called_; |
| 118 }; |
| 119 |
| 105 class QuicNetworkTransactionTest | 120 class QuicNetworkTransactionTest |
| 106 : public PlatformTest, | 121 : public PlatformTest, |
| 107 public ::testing::WithParamInterface<QuicVersion> { | 122 public ::testing::WithParamInterface<QuicVersion> { |
| 108 protected: | 123 protected: |
| 109 QuicNetworkTransactionTest() | 124 QuicNetworkTransactionTest() |
| 110 : clock_(new MockClock), | 125 : clock_(new MockClock), |
| 111 maker_(GetParam(), 0, clock_), | 126 maker_(GetParam(), 0, clock_), |
| 112 ssl_config_service_(new SSLConfigServiceDefaults), | 127 ssl_config_service_(new SSLConfigServiceDefaults), |
| 113 proxy_service_(ProxyService::CreateDirect()), | 128 proxy_service_(ProxyService::CreateDirect()), |
| 114 auth_handler_factory_( | 129 auth_handler_factory_( |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 | 277 |
| 263 void SendRequestAndExpectHttpResponse(const std::string& expected) { | 278 void SendRequestAndExpectHttpResponse(const std::string& expected) { |
| 264 scoped_ptr<HttpNetworkTransaction> trans( | 279 scoped_ptr<HttpNetworkTransaction> trans( |
| 265 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 280 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 266 RunTransaction(trans.get()); | 281 RunTransaction(trans.get()); |
| 267 CheckWasHttpResponse(trans); | 282 CheckWasHttpResponse(trans); |
| 268 CheckResponseData(trans.get(), expected); | 283 CheckResponseData(trans.get(), expected); |
| 269 } | 284 } |
| 270 | 285 |
| 271 void SendRequestAndExpectQuicResponse(const std::string& expected) { | 286 void SendRequestAndExpectQuicResponse(const std::string& expected) { |
| 272 scoped_ptr<HttpNetworkTransaction> trans( | 287 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, false); |
| 273 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 288 } |
| 274 RunTransaction(trans.get()); | 289 |
| 275 CheckWasQuicResponse(trans); | 290 void SendRequestAndExpectQuicResponseFromProxy(const std::string& expected) { |
| 276 CheckResponseData(trans.get(), expected); | 291 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true); |
| 277 } | 292 } |
| 278 | 293 |
| 279 void AddQuicAlternateProtocolMapping( | 294 void AddQuicAlternateProtocolMapping( |
| 280 MockCryptoClientStream::HandshakeMode handshake_mode) { | 295 MockCryptoClientStream::HandshakeMode handshake_mode) { |
| 281 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); | 296 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); |
| 282 session_->http_server_properties()->SetAlternateProtocol( | 297 session_->http_server_properties()->SetAlternateProtocol( |
| 283 HostPortPair::FromURL(request_.url), 80, QUIC, 1); | 298 HostPortPair::FromURL(request_.url), 80, QUIC, 1); |
| 284 } | 299 } |
| 285 | 300 |
| 286 void ExpectBrokenAlternateProtocolMapping() { | 301 void ExpectBrokenAlternateProtocolMapping() { |
| 287 ASSERT_TRUE(session_->http_server_properties()->HasAlternateProtocol( | |
| 288 HostPortPair::FromURL(request_.url))); | |
| 289 const AlternateProtocolInfo alternate = | 302 const AlternateProtocolInfo alternate = |
| 290 session_->http_server_properties()->GetAlternateProtocol( | 303 session_->http_server_properties()->GetAlternateProtocol( |
| 291 HostPortPair::FromURL(request_.url)); | 304 HostPortPair::FromURL(request_.url)); |
| 305 EXPECT_NE(UNINITIALIZED_ALTERNATE_PROTOCOL, alternate.protocol); |
| 292 EXPECT_TRUE(alternate.is_broken); | 306 EXPECT_TRUE(alternate.is_broken); |
| 293 } | 307 } |
| 294 | 308 |
| 295 void ExpectQuicAlternateProtocolMapping() { | 309 void ExpectQuicAlternateProtocolMapping() { |
| 296 ASSERT_TRUE(session_->http_server_properties()->HasAlternateProtocol( | |
| 297 HostPortPair::FromURL(request_.url))); | |
| 298 const AlternateProtocolInfo alternate = | 310 const AlternateProtocolInfo alternate = |
| 299 session_->http_server_properties()->GetAlternateProtocol( | 311 session_->http_server_properties()->GetAlternateProtocol( |
| 300 HostPortPair::FromURL(request_.url)); | 312 HostPortPair::FromURL(request_.url)); |
| 301 EXPECT_EQ(QUIC, alternate.protocol); | 313 EXPECT_EQ(QUIC, alternate.protocol); |
| 302 } | 314 } |
| 303 | 315 |
| 304 void AddHangingNonAlternateProtocolSocketData() { | 316 void AddHangingNonAlternateProtocolSocketData() { |
| 305 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); | 317 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 306 hanging_data_.set_connect_data(hanging_connect); | 318 hanging_data_.set_connect_data(hanging_connect); |
| 307 socket_factory_.AddSocketDataProvider(&hanging_data_); | 319 socket_factory_.AddSocketDataProvider(&hanging_data_); |
| 308 } | 320 } |
| 309 | 321 |
| 310 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. | 322 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. |
| 311 QuicTestPacketMaker maker_; | 323 QuicTestPacketMaker maker_; |
| 312 scoped_refptr<HttpNetworkSession> session_; | 324 scoped_refptr<HttpNetworkSession> session_; |
| 313 MockClientSocketFactory socket_factory_; | 325 MockClientSocketFactory socket_factory_; |
| 314 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 326 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 315 MockHostResolver host_resolver_; | 327 MockHostResolver host_resolver_; |
| 316 MockCertVerifier cert_verifier_; | 328 MockCertVerifier cert_verifier_; |
| 317 TransportSecurityState transport_security_state_; | 329 TransportSecurityState transport_security_state_; |
| 318 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; | 330 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; |
| 319 scoped_ptr<ProxyService> proxy_service_; | 331 scoped_ptr<ProxyService> proxy_service_; |
| 320 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; | 332 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; |
| 321 MockRandom random_generator_; | 333 MockRandom random_generator_; |
| 322 HttpServerPropertiesImpl http_server_properties; | 334 HttpServerPropertiesImpl http_server_properties; |
| 323 HttpNetworkSession::Params params_; | 335 HttpNetworkSession::Params params_; |
| 324 HttpRequestInfo request_; | 336 HttpRequestInfo request_; |
| 325 CapturingBoundNetLog net_log_; | 337 CapturingBoundNetLog net_log_; |
| 326 StaticSocketDataProvider hanging_data_; | 338 StaticSocketDataProvider hanging_data_; |
| 339 |
| 340 private: |
| 341 void SendRequestAndExpectQuicResponseMaybeFromProxy( |
| 342 const std::string& expected, |
| 343 bool used_proxy) { |
| 344 scoped_ptr<HttpNetworkTransaction> trans( |
| 345 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 346 ProxyHeadersHandler proxy_headers_handler; |
| 347 trans->SetBeforeProxyHeadersSentCallback( |
| 348 base::Bind(&ProxyHeadersHandler::OnBeforeProxyHeadersSent, |
| 349 base::Unretained(&proxy_headers_handler))); |
| 350 RunTransaction(trans.get()); |
| 351 CheckWasQuicResponse(trans); |
| 352 CheckResponseData(trans.get(), expected); |
| 353 EXPECT_EQ(used_proxy, proxy_headers_handler.was_called()); |
| 354 } |
| 327 }; | 355 }; |
| 328 | 356 |
| 329 INSTANTIATE_TEST_CASE_P(Version, QuicNetworkTransactionTest, | 357 INSTANTIATE_TEST_CASE_P(Version, QuicNetworkTransactionTest, |
| 330 ::testing::ValuesIn(QuicSupportedVersions())); | 358 ::testing::ValuesIn(QuicSupportedVersions())); |
| 331 | 359 |
| 332 TEST_P(QuicNetworkTransactionTest, ForceQuic) { | 360 TEST_P(QuicNetworkTransactionTest, ForceQuic) { |
| 333 params_.origin_to_force_quic_on = | 361 params_.origin_to_force_quic_on = |
| 334 HostPortPair::FromString("www.google.com:80"); | 362 HostPortPair::FromString("www.google.com:80"); |
| 335 | 363 |
| 336 MockQuicData mock_quic_data; | 364 MockQuicData mock_quic_data; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 435 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 408 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF | 436 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
| 409 | 437 |
| 410 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); | 438 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); |
| 411 | 439 |
| 412 // There is no need to set up an alternate protocol job, because | 440 // There is no need to set up an alternate protocol job, because |
| 413 // no attempt will be made to speak to the proxy over TCP. | 441 // no attempt will be made to speak to the proxy over TCP. |
| 414 | 442 |
| 415 CreateSession(); | 443 CreateSession(); |
| 416 | 444 |
| 417 SendRequestAndExpectQuicResponse("hello!"); | 445 SendRequestAndExpectQuicResponseFromProxy("hello!"); |
| 418 } | 446 } |
| 419 | 447 |
| 420 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { | 448 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { |
| 421 params_.origin_to_force_quic_on = | 449 params_.origin_to_force_quic_on = |
| 422 HostPortPair::FromString("www.google.com:80"); | 450 HostPortPair::FromString("www.google.com:80"); |
| 423 | 451 |
| 424 MockQuicData mock_quic_data; | 452 MockQuicData mock_quic_data; |
| 425 mock_quic_data.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 453 mock_quic_data.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 426 | 454 |
| 427 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 0); | 455 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 0); |
| (...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1035 nullptr, | 1063 nullptr, |
| 1036 net_log_.bound()); | 1064 net_log_.bound()); |
| 1037 | 1065 |
| 1038 CreateSessionWithNextProtos(); | 1066 CreateSessionWithNextProtos(); |
| 1039 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1067 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1040 SendRequestAndExpectHttpResponse("hello world"); | 1068 SendRequestAndExpectHttpResponse("hello world"); |
| 1041 } | 1069 } |
| 1042 | 1070 |
| 1043 } // namespace test | 1071 } // namespace test |
| 1044 } // namespace net | 1072 } // namespace net |
| OLD | NEW |