Chromium Code Reviews| 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" |
| 11 #include "net/base/network_quality_estimator.h" | |
| 12 #include "net/base/socket_performance_watcher.h" | |
| 11 #include "net/base/test_completion_callback.h" | 13 #include "net/base/test_completion_callback.h" |
| 12 #include "net/base/test_data_directory.h" | 14 #include "net/base/test_data_directory.h" |
| 13 #include "net/cert/mock_cert_verifier.h" | 15 #include "net/cert/mock_cert_verifier.h" |
| 14 #include "net/dns/mock_host_resolver.h" | 16 #include "net/dns/mock_host_resolver.h" |
| 15 #include "net/http/http_auth_handler_factory.h" | 17 #include "net/http/http_auth_handler_factory.h" |
| 16 #include "net/http/http_network_session.h" | 18 #include "net/http/http_network_session.h" |
| 17 #include "net/http/http_network_transaction.h" | 19 #include "net/http/http_network_transaction.h" |
| 18 #include "net/http/http_server_properties_impl.h" | 20 #include "net/http/http_server_properties_impl.h" |
| 19 #include "net/http/http_stream.h" | 21 #include "net/http/http_stream.h" |
| 20 #include "net/http/http_stream_factory.h" | 22 #include "net/http/http_stream_factory.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 132 | 134 |
| 133 void OnBeforeProxyHeadersSent(const ProxyInfo& proxy_info, | 135 void OnBeforeProxyHeadersSent(const ProxyInfo& proxy_info, |
| 134 HttpRequestHeaders* request_headers) { | 136 HttpRequestHeaders* request_headers) { |
| 135 was_called_ = true; | 137 was_called_ = true; |
| 136 } | 138 } |
| 137 | 139 |
| 138 private: | 140 private: |
| 139 bool was_called_; | 141 bool was_called_; |
| 140 }; | 142 }; |
| 141 | 143 |
| 144 // Verifies whether the socket performance watcher was notified of updated RTT. | |
| 145 class WatcherNotificationVerifier { | |
| 146 public: | |
| 147 WatcherNotificationVerifier() | |
| 148 : received_updated_rtt_available_notification_(false) {} | |
| 149 | |
| 150 virtual ~WatcherNotificationVerifier() {} | |
| 151 | |
| 152 void OnUpdatedRTTAvailable() { | |
| 153 received_updated_rtt_available_notification_ = true; | |
| 154 } | |
| 155 | |
| 156 bool IsRTTAvailableRTTNotificationReceived() const { | |
| 157 return received_updated_rtt_available_notification_; | |
| 158 } | |
| 159 | |
| 160 private: | |
| 161 bool received_updated_rtt_available_notification_; | |
| 162 DISALLOW_COPY_AND_ASSIGN(WatcherNotificationVerifier); | |
| 163 }; | |
|
Ryan Hamilton
2015/09/18 15:56:38
Instead of creating this class which exists simply
tbansal1
2015/09/18 17:21:20
Removed the class. I am not sure if EXPECT_TRUE(ha
| |
| 164 | |
| 165 class TestSocketPerformanceWatcher : public SocketPerformanceWatcher { | |
| 166 public: | |
| 167 TestSocketPerformanceWatcher(WatcherNotificationVerifier* watcher_checker) | |
| 168 : watcher_notification_verifier_(watcher_checker) {} | |
| 169 | |
| 170 ~TestSocketPerformanceWatcher() override {} | |
| 171 | |
| 172 void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) override { | |
| 173 watcher_notification_verifier_->OnUpdatedRTTAvailable(); | |
| 174 } | |
| 175 | |
| 176 private: | |
| 177 WatcherNotificationVerifier* watcher_notification_verifier_; | |
| 178 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcher); | |
| 179 }; | |
| 180 | |
| 181 class TestNetworkQualityEstimator : public NetworkQualityEstimator { | |
|
Ryan Hamilton
2015/09/18 15:56:38
Instead of a full blown NQE, how 'bout just a Soc
tbansal1
2015/09/18 17:21:20
Yeah, I had TestSocketPerformanceWatcherFactory be
Ryan Hamilton
2015/09/18 22:01:26
Are you actually testing any methods of the NQE be
tbansal1
2015/09/18 22:36:22
Not right now. That's because NQE is not doing any
| |
| 182 public: | |
| 183 TestNetworkQualityEstimator() | |
| 184 : NetworkQualityEstimator(scoped_ptr<net::ExternalEstimateProvider>(), | |
| 185 std::map<std::string, std::string>()), | |
| 186 watcher_notification_verifier_(new WatcherNotificationVerifier()), | |
| 187 watchers_created_(0) {} | |
| 188 | |
| 189 ~TestNetworkQualityEstimator() override {} | |
| 190 | |
| 191 scoped_ptr<SocketPerformanceWatcher> CreateUDPSocketPerformanceWatcher() | |
| 192 const override { | |
| 193 watchers_created_++; | |
| 194 return scoped_ptr<TestSocketPerformanceWatcher>( | |
| 195 new TestSocketPerformanceWatcher(watcher_notification_verifier_.get())); | |
| 196 } | |
| 197 | |
| 198 scoped_ptr<SocketPerformanceWatcher> CreateTCPSocketPerformanceWatcher() | |
| 199 const override { | |
| 200 NOTIMPLEMENTED(); | |
| 201 return scoped_ptr<SocketPerformanceWatcher>(); | |
| 202 } | |
| 203 | |
| 204 bool IsRTTAvailableRTTNotificationReceived() const { | |
| 205 return watcher_notification_verifier_ | |
| 206 ->IsRTTAvailableRTTNotificationReceived(); | |
| 207 } | |
| 208 | |
| 209 size_t GetWatchersCreated() const { return watchers_created_; } | |
| 210 | |
| 211 private: | |
| 212 scoped_ptr<WatcherNotificationVerifier> watcher_notification_verifier_; | |
| 213 mutable size_t watchers_created_; | |
| 214 DISALLOW_COPY_AND_ASSIGN(TestNetworkQualityEstimator); | |
| 215 }; | |
| 216 | |
| 142 class QuicNetworkTransactionTest | 217 class QuicNetworkTransactionTest |
| 143 : public PlatformTest, | 218 : public PlatformTest, |
| 144 public ::testing::WithParamInterface<QuicVersion> { | 219 public ::testing::WithParamInterface<QuicVersion> { |
| 145 protected: | 220 protected: |
| 146 QuicNetworkTransactionTest() | 221 QuicNetworkTransactionTest() |
| 147 : clock_(new MockClock), | 222 : clock_(new MockClock), |
| 148 maker_(GetParam(), 0, clock_, kDefaultServerHostName), | 223 maker_(GetParam(), 0, clock_, kDefaultServerHostName), |
| 224 test_network_quality_estimator_(new TestNetworkQualityEstimator()), | |
| 149 ssl_config_service_(new SSLConfigServiceDefaults), | 225 ssl_config_service_(new SSLConfigServiceDefaults), |
| 150 proxy_service_(ProxyService::CreateDirect()), | 226 proxy_service_(ProxyService::CreateDirect()), |
| 151 auth_handler_factory_( | 227 auth_handler_factory_( |
| 152 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 228 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
| 153 random_generator_(0), | 229 random_generator_(0), |
| 154 hanging_data_(nullptr, 0, nullptr, 0) { | 230 hanging_data_(nullptr, 0, nullptr, 0) { |
| 155 request_.method = "GET"; | 231 request_.method = "GET"; |
| 156 std::string url("http://"); | 232 std::string url("http://"); |
| 157 url.append(kDefaultServerHostName); | 233 url.append(kDefaultServerHostName); |
| 158 request_.url = GURL(url); | 234 request_.url = GURL(url); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 241 void CreateSessionWithFactory(ClientSocketFactory* socket_factory, | 317 void CreateSessionWithFactory(ClientSocketFactory* socket_factory, |
| 242 bool use_next_protos) { | 318 bool use_next_protos) { |
| 243 params_.enable_quic = true; | 319 params_.enable_quic = true; |
| 244 params_.quic_clock = clock_; | 320 params_.quic_clock = clock_; |
| 245 params_.quic_random = &random_generator_; | 321 params_.quic_random = &random_generator_; |
| 246 params_.client_socket_factory = socket_factory; | 322 params_.client_socket_factory = socket_factory; |
| 247 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; | 323 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; |
| 248 params_.host_resolver = &host_resolver_; | 324 params_.host_resolver = &host_resolver_; |
| 249 params_.cert_verifier = &cert_verifier_; | 325 params_.cert_verifier = &cert_verifier_; |
| 250 params_.transport_security_state = &transport_security_state_; | 326 params_.transport_security_state = &transport_security_state_; |
| 327 params_.socket_performance_watcher_factory = | |
| 328 test_network_quality_estimator_.get(); | |
| 251 params_.proxy_service = proxy_service_.get(); | 329 params_.proxy_service = proxy_service_.get(); |
| 252 params_.ssl_config_service = ssl_config_service_.get(); | 330 params_.ssl_config_service = ssl_config_service_.get(); |
| 253 params_.http_auth_handler_factory = auth_handler_factory_.get(); | 331 params_.http_auth_handler_factory = auth_handler_factory_.get(); |
| 254 params_.http_server_properties = http_server_properties_.GetWeakPtr(); | 332 params_.http_server_properties = http_server_properties_.GetWeakPtr(); |
| 255 params_.quic_supported_versions = SupportedVersions(GetParam()); | 333 params_.quic_supported_versions = SupportedVersions(GetParam()); |
| 256 | 334 |
| 257 if (use_next_protos) { | 335 if (use_next_protos) { |
| 258 params_.use_alternative_services = true; | 336 params_.use_alternative_services = true; |
| 259 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); | 337 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); |
| 260 } | 338 } |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 365 } | 443 } |
| 366 | 444 |
| 367 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. | 445 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. |
| 368 QuicTestPacketMaker maker_; | 446 QuicTestPacketMaker maker_; |
| 369 scoped_refptr<HttpNetworkSession> session_; | 447 scoped_refptr<HttpNetworkSession> session_; |
| 370 MockClientSocketFactory socket_factory_; | 448 MockClientSocketFactory socket_factory_; |
| 371 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 449 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 372 MockHostResolver host_resolver_; | 450 MockHostResolver host_resolver_; |
| 373 MockCertVerifier cert_verifier_; | 451 MockCertVerifier cert_verifier_; |
| 374 TransportSecurityState transport_security_state_; | 452 TransportSecurityState transport_security_state_; |
| 453 scoped_ptr<TestNetworkQualityEstimator> test_network_quality_estimator_; | |
| 375 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; | 454 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; |
| 376 scoped_ptr<ProxyService> proxy_service_; | 455 scoped_ptr<ProxyService> proxy_service_; |
| 377 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; | 456 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; |
| 378 MockRandom random_generator_; | 457 MockRandom random_generator_; |
| 379 HttpServerPropertiesImpl http_server_properties_; | 458 HttpServerPropertiesImpl http_server_properties_; |
| 380 HttpNetworkSession::Params params_; | 459 HttpNetworkSession::Params params_; |
| 381 HttpRequestInfo request_; | 460 HttpRequestInfo request_; |
| 382 BoundTestNetLog net_log_; | 461 BoundTestNetLog net_log_; |
| 383 StaticSocketDataProvider hanging_data_; | 462 StaticSocketDataProvider hanging_data_; |
| 384 | 463 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 423 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 502 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 424 | 503 |
| 425 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 504 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 426 | 505 |
| 427 // The non-alternate protocol job needs to hang in order to guarantee that | 506 // The non-alternate protocol job needs to hang in order to guarantee that |
| 428 // the alternate-protocol job will "win". | 507 // the alternate-protocol job will "win". |
| 429 AddHangingNonAlternateProtocolSocketData(); | 508 AddHangingNonAlternateProtocolSocketData(); |
| 430 | 509 |
| 431 CreateSession(); | 510 CreateSession(); |
| 432 | 511 |
| 512 EXPECT_FALSE( | |
| 513 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 514 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 433 SendRequestAndExpectQuicResponse("hello!"); | 515 SendRequestAndExpectQuicResponse("hello!"); |
| 516 EXPECT_TRUE( | |
| 517 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 518 EXPECT_EQ(1U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 434 | 519 |
| 435 // Check that the NetLog was filled reasonably. | 520 // Check that the NetLog was filled reasonably. |
| 436 TestNetLogEntry::List entries; | 521 TestNetLogEntry::List entries; |
| 437 net_log_.GetEntries(&entries); | 522 net_log_.GetEntries(&entries); |
| 438 EXPECT_LT(0u, entries.size()); | 523 EXPECT_LT(0u, entries.size()); |
| 439 | 524 |
| 440 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED. | 525 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED. |
| 441 int pos = ExpectLogContainsSomewhere( | 526 int pos = ExpectLogContainsSomewhere( |
| 442 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, | 527 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, |
| 443 NetLog::PHASE_NONE); | 528 NetLog::PHASE_NONE); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 484 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, | 569 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
| 485 GetResponseHeaders("200 OK"))); | 570 GetResponseHeaders("200 OK"))); |
| 486 mock_quic_data.AddRead( | 571 mock_quic_data.AddRead( |
| 487 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 572 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 488 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 573 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 489 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 574 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 490 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF | 575 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
| 491 | 576 |
| 492 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 577 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 493 | 578 |
| 579 EXPECT_FALSE( | |
| 580 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 581 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 494 // There is no need to set up an alternate protocol job, because | 582 // There is no need to set up an alternate protocol job, because |
| 495 // no attempt will be made to speak to the proxy over TCP. | 583 // no attempt will be made to speak to the proxy over TCP. |
| 496 | 584 |
| 497 CreateSession(); | 585 CreateSession(); |
| 498 | 586 |
| 499 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 587 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
| 588 EXPECT_TRUE( | |
| 589 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 590 EXPECT_EQ(1U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 500 } | 591 } |
| 501 | 592 |
| 502 // Regression test for https://crbug.com/492458. Test that for an HTTP | 593 // Regression test for https://crbug.com/492458. Test that for an HTTP |
| 503 // connection through a QUIC proxy, the certificate exhibited by the proxy is | 594 // connection through a QUIC proxy, the certificate exhibited by the proxy is |
| 504 // checked against the proxy hostname, not the origin hostname. | 595 // checked against the proxy hostname, not the origin hostname. |
| 505 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { | 596 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { |
| 506 const std::string origin_host = "news.example.com"; | 597 const std::string origin_host = "news.example.com"; |
| 507 const std::string proxy_host = "www.example.org"; | 598 const std::string proxy_host = "www.example.org"; |
| 508 | 599 |
| 509 params_.enable_insecure_quic = true; | 600 params_.enable_insecure_quic = true; |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 533 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used)); | 624 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used)); |
| 534 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); | 625 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); |
| 535 ProofVerifyDetailsChromium verify_details; | 626 ProofVerifyDetailsChromium verify_details; |
| 536 verify_details.cert_verify_result.verified_cert = cert; | 627 verify_details.cert_verify_result.verified_cert = cert; |
| 537 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 628 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 538 | 629 |
| 539 request_.url = GURL("http://" + origin_host); | 630 request_.url = GURL("http://" + origin_host); |
| 540 AddHangingNonAlternateProtocolSocketData(); | 631 AddHangingNonAlternateProtocolSocketData(); |
| 541 CreateSessionWithNextProtos(); | 632 CreateSessionWithNextProtos(); |
| 542 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 633 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 634 EXPECT_FALSE( | |
| 635 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 636 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 543 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 637 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
| 638 EXPECT_TRUE( | |
| 639 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 640 EXPECT_EQ(1U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 544 } | 641 } |
| 545 | 642 |
| 546 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { | 643 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { |
| 547 params_.enable_insecure_quic = true; | 644 params_.enable_insecure_quic = true; |
| 548 params_.origin_to_force_quic_on = | 645 params_.origin_to_force_quic_on = |
| 549 HostPortPair::FromString("www.google.com:80"); | 646 HostPortPair::FromString("www.google.com:80"); |
| 550 | 647 |
| 551 MockQuicData mock_quic_data; | 648 MockQuicData mock_quic_data1; |
| 552 mock_quic_data.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 649 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 553 | 650 |
| 554 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 651 MockQuicData mock_quic_data2; |
| 652 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | |
| 653 | |
| 654 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); | |
| 655 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | |
| 555 | 656 |
| 556 CreateSession(); | 657 CreateSession(); |
| 557 | 658 |
| 558 scoped_ptr<HttpNetworkTransaction> trans( | 659 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); |
| 559 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 660 for (size_t i = 0; i < 2; ++i) { |
| 560 TestCompletionCallback callback; | 661 scoped_ptr<HttpNetworkTransaction> trans( |
| 561 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 662 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 562 EXPECT_EQ(ERR_IO_PENDING, rv); | 663 TestCompletionCallback callback; |
| 563 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 664 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 665 EXPECT_EQ(ERR_IO_PENDING, rv); | |
| 666 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | |
| 667 EXPECT_EQ(1 + i, test_network_quality_estimator_->GetWatchersCreated()); | |
| 668 } | |
| 564 } | 669 } |
| 565 | 670 |
| 566 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { | 671 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { |
| 567 // Attempt to "force" quic on 443, which will not be honored. | 672 // Attempt to "force" quic on 443, which will not be honored. |
| 568 params_.origin_to_force_quic_on = | 673 params_.origin_to_force_quic_on = |
| 569 HostPortPair::FromString("www.google.com:443"); | 674 HostPortPair::FromString("www.google.com:443"); |
| 570 | 675 |
| 571 MockRead http_reads[] = { | 676 MockRead http_reads[] = { |
| 572 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 677 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
| 573 MockRead("hello world"), | 678 MockRead("hello world"), |
| 574 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 679 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 575 MockRead(ASYNC, OK) | 680 MockRead(ASYNC, OK) |
| 576 }; | 681 }; |
| 577 | 682 |
| 578 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); | 683 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); |
| 579 socket_factory_.AddSocketDataProvider(&data); | 684 socket_factory_.AddSocketDataProvider(&data); |
| 580 SSLSocketDataProvider ssl(ASYNC, OK); | 685 SSLSocketDataProvider ssl(ASYNC, OK); |
| 581 socket_factory_.AddSSLSocketDataProvider(&ssl); | 686 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 582 | 687 |
| 583 CreateSession(); | 688 CreateSession(); |
| 584 | 689 |
| 585 SendRequestAndExpectHttpResponse("hello world"); | 690 SendRequestAndExpectHttpResponse("hello world"); |
| 691 EXPECT_FALSE( | |
| 692 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 693 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 586 } | 694 } |
| 587 | 695 |
| 588 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { | 696 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { |
| 589 params_.enable_insecure_quic = true; | 697 params_.enable_insecure_quic = true; |
| 590 | 698 |
| 591 MockRead http_reads[] = { | 699 MockRead http_reads[] = { |
| 592 MockRead("HTTP/1.1 200 OK\r\n"), | 700 MockRead("HTTP/1.1 200 OK\r\n"), |
| 593 MockRead(kQuicAlternativeServiceHttpHeader), MockRead("hello world"), | 701 MockRead(kQuicAlternativeServiceHttpHeader), MockRead("hello world"), |
| 594 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 702 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 595 MockRead(ASYNC, OK)}; | 703 MockRead(ASYNC, OK)}; |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1452 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 1560 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 1453 QuicSession::HANDSHAKE_CONFIRMED); | 1561 QuicSession::HANDSHAKE_CONFIRMED); |
| 1454 EXPECT_EQ(OK, callback.WaitForResult()); | 1562 EXPECT_EQ(OK, callback.WaitForResult()); |
| 1455 | 1563 |
| 1456 CheckWasQuicResponse(trans); | 1564 CheckWasQuicResponse(trans); |
| 1457 CheckResponseData(trans, "hello!"); | 1565 CheckResponseData(trans, "hello!"); |
| 1458 } | 1566 } |
| 1459 | 1567 |
| 1460 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) { | 1568 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) { |
| 1461 params_.enable_insecure_quic = true; | 1569 params_.enable_insecure_quic = true; |
| 1570 EXPECT_FALSE( | |
| 1571 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 1572 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 1462 // Alternate-protocol job | 1573 // Alternate-protocol job |
| 1463 scoped_ptr<QuicEncryptedPacket> close(ConstructConnectionClosePacket(1)); | 1574 scoped_ptr<QuicEncryptedPacket> close(ConstructConnectionClosePacket(1)); |
| 1464 MockRead quic_reads[] = { | 1575 MockRead quic_reads[] = { |
| 1465 MockRead(ASYNC, close->data(), close->length()), | 1576 MockRead(ASYNC, close->data(), close->length()), |
| 1466 MockRead(ASYNC, ERR_IO_PENDING), // No more data to read | 1577 MockRead(ASYNC, ERR_IO_PENDING), // No more data to read |
| 1467 MockRead(ASYNC, OK), // EOF | 1578 MockRead(ASYNC, OK), // EOF |
| 1468 }; | 1579 }; |
| 1469 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 1580 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
| 1470 nullptr, 0); | 1581 nullptr, 0); |
| 1471 socket_factory_.AddSocketDataProvider(&quic_data); | 1582 socket_factory_.AddSocketDataProvider(&quic_data); |
| 1472 | 1583 |
| 1473 // Main job which will succeed even though the alternate job fails. | 1584 // Main job which will succeed even though the alternate job fails. |
| 1474 MockRead http_reads[] = { | 1585 MockRead http_reads[] = { |
| 1475 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 1586 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
| 1476 MockRead("hello from http"), | 1587 MockRead("hello from http"), |
| 1477 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1588 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 1478 MockRead(ASYNC, OK) | 1589 MockRead(ASYNC, OK) |
| 1479 }; | 1590 }; |
| 1480 | 1591 |
| 1481 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 1592 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| 1482 nullptr, 0); | 1593 nullptr, 0); |
| 1483 socket_factory_.AddSocketDataProvider(&http_data); | 1594 socket_factory_.AddSocketDataProvider(&http_data); |
| 1484 | 1595 |
| 1485 CreateSessionWithNextProtos(); | 1596 CreateSessionWithNextProtos(); |
| 1486 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 1597 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
| 1487 SendRequestAndExpectHttpResponse("hello from http"); | 1598 SendRequestAndExpectHttpResponse("hello from http"); |
| 1488 ExpectBrokenAlternateProtocolMapping(); | 1599 ExpectBrokenAlternateProtocolMapping(); |
| 1600 EXPECT_TRUE( | |
| 1601 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 1602 EXPECT_EQ(1U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 1489 } | 1603 } |
| 1490 | 1604 |
| 1491 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) { | 1605 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) { |
| 1492 params_.enable_insecure_quic = true; | 1606 params_.enable_insecure_quic = true; |
| 1493 // Alternate-protocol job | 1607 // Alternate-protocol job |
| 1494 MockRead quic_reads[] = { | 1608 MockRead quic_reads[] = { |
| 1495 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 1609 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
| 1496 }; | 1610 }; |
| 1497 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 1611 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
| 1498 nullptr, 0); | 1612 nullptr, 0); |
| 1499 socket_factory_.AddSocketDataProvider(&quic_data); | 1613 socket_factory_.AddSocketDataProvider(&quic_data); |
| 1500 | 1614 |
| 1501 // Main job which will succeed even though the alternate job fails. | 1615 // Main job which will succeed even though the alternate job fails. |
| 1502 MockRead http_reads[] = { | 1616 MockRead http_reads[] = { |
| 1503 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 1617 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
| 1504 MockRead("hello from http"), | 1618 MockRead("hello from http"), |
| 1505 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1619 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 1506 MockRead(ASYNC, OK) | 1620 MockRead(ASYNC, OK) |
| 1507 }; | 1621 }; |
| 1508 | 1622 |
| 1509 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 1623 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| 1510 nullptr, 0); | 1624 nullptr, 0); |
| 1511 socket_factory_.AddSocketDataProvider(&http_data); | 1625 socket_factory_.AddSocketDataProvider(&http_data); |
| 1512 | 1626 |
| 1513 CreateSessionWithNextProtos(); | 1627 CreateSessionWithNextProtos(); |
| 1514 | 1628 |
| 1515 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 1629 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
| 1630 EXPECT_FALSE( | |
| 1631 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 1632 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 1516 SendRequestAndExpectHttpResponse("hello from http"); | 1633 SendRequestAndExpectHttpResponse("hello from http"); |
| 1517 ExpectBrokenAlternateProtocolMapping(); | 1634 ExpectBrokenAlternateProtocolMapping(); |
| 1635 EXPECT_TRUE( | |
| 1636 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 1637 EXPECT_EQ(1U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 1518 } | 1638 } |
| 1519 | 1639 |
| 1520 TEST_P(QuicNetworkTransactionTest, NoBrokenAlternateProtocolIfTcpFails) { | 1640 TEST_P(QuicNetworkTransactionTest, NoBrokenAlternateProtocolIfTcpFails) { |
| 1521 params_.enable_insecure_quic = true; | 1641 params_.enable_insecure_quic = true; |
| 1522 // Alternate-protocol job will fail when the session attempts to read. | 1642 // Alternate-protocol job will fail when the session attempts to read. |
| 1523 MockRead quic_reads[] = { | 1643 MockRead quic_reads[] = { |
| 1524 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 1644 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
| 1525 }; | 1645 }; |
| 1526 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 1646 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
| 1527 nullptr, 0); | 1647 nullptr, 0); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1637 | 1757 |
| 1638 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 1758 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| 1639 nullptr, 0); | 1759 nullptr, 0); |
| 1640 socket_factory_.AddSocketDataProvider(&http_data); | 1760 socket_factory_.AddSocketDataProvider(&http_data); |
| 1641 | 1761 |
| 1642 CreateSessionWithNextProtos(); | 1762 CreateSessionWithNextProtos(); |
| 1643 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 1763 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
| 1644 SendRequestAndExpectHttpResponse("hello from http"); | 1764 SendRequestAndExpectHttpResponse("hello from http"); |
| 1645 | 1765 |
| 1646 ExpectBrokenAlternateProtocolMapping(); | 1766 ExpectBrokenAlternateProtocolMapping(); |
| 1767 EXPECT_FALSE( | |
| 1768 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 1769 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 1647 } | 1770 } |
| 1648 | 1771 |
| 1649 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { | 1772 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { |
| 1650 params_.enable_insecure_quic = true; | 1773 params_.enable_insecure_quic = true; |
| 1651 MockQuicData mock_quic_data; | 1774 MockQuicData mock_quic_data; |
| 1652 mock_quic_data.AddSynchronousRead(ConstructConnectionClosePacket(1)); | 1775 mock_quic_data.AddSynchronousRead(ConstructConnectionClosePacket(1)); |
| 1653 mock_quic_data.AddWrite( | 1776 mock_quic_data.AddWrite( |
| 1654 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1777 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
| 1655 GetRequestHeaders("GET", "http", "/"))); | 1778 GetRequestHeaders("GET", "http", "/"))); |
| 1656 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1779 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1714 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1837 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1715 TestCompletionCallback callback; | 1838 TestCompletionCallback callback; |
| 1716 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1839 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1717 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, | 1840 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, |
| 1718 callback.GetResult(rv)); | 1841 callback.GetResult(rv)); |
| 1719 } | 1842 } |
| 1720 | 1843 |
| 1721 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { | 1844 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { |
| 1722 params_.enable_insecure_quic = true; | 1845 params_.enable_insecure_quic = true; |
| 1723 maker_.set_hostname("www.example.org"); | 1846 maker_.set_hostname("www.example.org"); |
| 1847 EXPECT_FALSE( | |
| 1848 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 1849 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); | |
| 1724 MockQuicData mock_quic_data; | 1850 MockQuicData mock_quic_data; |
| 1725 mock_quic_data.AddWrite( | 1851 mock_quic_data.AddWrite( |
| 1726 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1852 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
| 1727 GetRequestHeaders("GET", "https", "/"))); | 1853 GetRequestHeaders("GET", "https", "/"))); |
| 1728 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1854 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1729 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1855 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1730 mock_quic_data.AddRead( | 1856 mock_quic_data.AddRead( |
| 1731 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1857 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1732 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1858 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1733 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 1859 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
| 1734 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1860 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1735 | 1861 |
| 1736 scoped_refptr<X509Certificate> cert( | 1862 scoped_refptr<X509Certificate> cert( |
| 1737 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); | 1863 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); |
| 1738 ASSERT_TRUE(cert.get()); | 1864 ASSERT_TRUE(cert.get()); |
| 1739 bool common_name_fallback_used; | 1865 bool common_name_fallback_used; |
| 1740 EXPECT_TRUE( | 1866 EXPECT_TRUE( |
| 1741 cert->VerifyNameMatch("www.example.org", &common_name_fallback_used)); | 1867 cert->VerifyNameMatch("www.example.org", &common_name_fallback_used)); |
| 1742 ProofVerifyDetailsChromium verify_details; | 1868 ProofVerifyDetailsChromium verify_details; |
| 1743 verify_details.cert_verify_result.verified_cert = cert; | 1869 verify_details.cert_verify_result.verified_cert = cert; |
| 1744 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1870 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 1745 | 1871 |
| 1746 request_.url = GURL("https://www.example.org:443"); | 1872 request_.url = GURL("https://www.example.org:443"); |
| 1747 AddHangingNonAlternateProtocolSocketData(); | 1873 AddHangingNonAlternateProtocolSocketData(); |
| 1748 CreateSessionWithNextProtos(); | 1874 CreateSessionWithNextProtos(); |
| 1749 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1875 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 1750 SendRequestAndExpectQuicResponse("hello!"); | 1876 SendRequestAndExpectQuicResponse("hello!"); |
| 1877 EXPECT_TRUE( | |
| 1878 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived()); | |
| 1879 EXPECT_EQ(1U, test_network_quality_estimator_->GetWatchersCreated()); | |
|
Ryan Hamilton
2015/09/18 15:56:38
I doesn't seem like we need to test this behavior
tbansal1
2015/09/18 17:21:20
Agreed. Removed some of the tests.
| |
| 1751 } | 1880 } |
| 1752 | 1881 |
| 1753 } // namespace test | 1882 } // namespace test |
| 1754 } // namespace net | 1883 } // namespace net |
| OLD | NEW |