Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(634)

Side by Side Diff: net/quic/quic_network_transaction_unittest.cc

Issue 1376473003: Notify NQE of TCP RTT values (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased, addressed sleevi comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "net/base/chunked_upload_data_stream.h" 13 #include "net/base/chunked_upload_data_stream.h"
14 #include "net/base/network_quality_estimator.h" 14 #include "net/base/network_quality_estimator_watcher_factory.h"
15 #include "net/base/socket_performance_watcher.h" 15 #include "net/base/socket_performance_watcher.h"
16 #include "net/base/socket_performance_watcher_factory.h"
16 #include "net/base/test_completion_callback.h" 17 #include "net/base/test_completion_callback.h"
17 #include "net/base/test_data_directory.h" 18 #include "net/base/test_data_directory.h"
18 #include "net/cert/mock_cert_verifier.h" 19 #include "net/cert/mock_cert_verifier.h"
19 #include "net/cert/multi_log_ct_verifier.h" 20 #include "net/cert/multi_log_ct_verifier.h"
20 #include "net/dns/mock_host_resolver.h" 21 #include "net/dns/mock_host_resolver.h"
21 #include "net/http/http_auth_handler_factory.h" 22 #include "net/http/http_auth_handler_factory.h"
22 #include "net/http/http_network_session.h" 23 #include "net/http/http_network_session.h"
23 #include "net/http/http_network_transaction.h" 24 #include "net/http/http_network_transaction.h"
24 #include "net/http/http_server_properties_impl.h" 25 #include "net/http/http_server_properties_impl.h"
25 #include "net/http/http_stream.h" 26 #include "net/http/http_stream.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 133
133 void OnBeforeProxyHeadersSent(const ProxyInfo& proxy_info, 134 void OnBeforeProxyHeadersSent(const ProxyInfo& proxy_info,
134 HttpRequestHeaders* request_headers) { 135 HttpRequestHeaders* request_headers) {
135 was_called_ = true; 136 was_called_ = true;
136 } 137 }
137 138
138 private: 139 private:
139 bool was_called_; 140 bool was_called_;
140 }; 141 };
141 142
142 class TestNetworkQualityEstimator : public NetworkQualityEstimator { 143 class TestSocketPerformanceWatcherFactory
144 : public SocketPerformanceWatcherFactory {
143 public: 145 public:
144 TestNetworkQualityEstimator() 146 TestSocketPerformanceWatcherFactory()
145 : NetworkQualityEstimator(scoped_ptr<net::ExternalEstimateProvider>(), 147 : watcher_count_(0u), rtt_notification_received_(false) {}
146 std::map<std::string, std::string>()), 148 ~TestSocketPerformanceWatcherFactory() override {}
147 watcher_count_(0) {}
148 149
149 ~TestNetworkQualityEstimator() override {} 150 // SocketPerformanceWatcherFactory implementation:
150
151 scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher( 151 scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
152 const Protocol protocol) override { 152 const Protocol protocol) override {
153 if (protocol != PROTOCOL_QUIC) { 153 if (protocol != PROTOCOL_QUIC) {
154 NOTIMPLEMENTED(); 154 return nullptr;
155 } 155 }
156 ++watcher_count_; 156 ++watcher_count_;
157 return NetworkQualityEstimator::CreateSocketPerformanceWatcher(protocol); 157 return scoped_ptr<SocketPerformanceWatcher>(
158 new SocketPerformanceWatcher(protocol, this));
158 } 159 }
160 void OnUpdatedRTTAvailable(const Protocol protocol,
161 const base::TimeDelta& rtt) override {
162 rtt_notification_received_ = true;
163 }
164 void OnWatcherReset() override {}
159 165
160 size_t watcher_count() const { return watcher_count_; } 166 size_t watcher_count() const { return watcher_count_; }
161 167
168 bool rtt_notification_received() const { return rtt_notification_received_; }
169
162 private: 170 private:
163 size_t watcher_count_; 171 size_t watcher_count_;
164 DISALLOW_COPY_AND_ASSIGN(TestNetworkQualityEstimator); 172 bool rtt_notification_received_;
165 };
166 173
167 class TestRTTObserver : public NetworkQualityEstimator::RTTObserver { 174 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory);
168 public:
169 TestRTTObserver() : rtt_notification_received_(false) {}
170
171 bool rtt_notification_received() const { return rtt_notification_received_; }
172
173 // NetworkQualityEstimator::RttObserver implementation:
174 void OnRTTObservation(
175 int32_t rtt_ms,
176 const base::TimeTicks& timestamp,
177 net::NetworkQualityEstimator::ObservationSource source) override {
178 rtt_notification_received_ = true;
179 }
180
181 private:
182 bool rtt_notification_received_;
183 }; 175 };
184 176
185 class QuicNetworkTransactionTest 177 class QuicNetworkTransactionTest
186 : public PlatformTest, 178 : public PlatformTest,
187 public ::testing::WithParamInterface<QuicVersion> { 179 public ::testing::WithParamInterface<QuicVersion> {
188 protected: 180 protected:
189 QuicNetworkTransactionTest() 181 QuicNetworkTransactionTest()
190 : clock_(new MockClock), 182 : clock_(new MockClock),
191 maker_(GetParam(), 0, clock_, kDefaultServerHostName), 183 maker_(GetParam(), 0, clock_, kDefaultServerHostName),
192 cert_transparency_verifier_(new MultiLogCTVerifier()), 184 cert_transparency_verifier_(new MultiLogCTVerifier()),
193 test_network_quality_estimator_(new TestNetworkQualityEstimator()),
194 ssl_config_service_(new SSLConfigServiceDefaults), 185 ssl_config_service_(new SSLConfigServiceDefaults),
195 proxy_service_(ProxyService::CreateDirect()), 186 proxy_service_(ProxyService::CreateDirect()),
196 auth_handler_factory_( 187 auth_handler_factory_(
197 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), 188 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)),
198 random_generator_(0), 189 random_generator_(0),
199 ssl_data_(ASYNC, OK) { 190 ssl_data_(ASYNC, OK) {
200 request_.method = "GET"; 191 request_.method = "GET";
201 std::string url("https://"); 192 std::string url("https://");
202 url.append(kDefaultServerHostName); 193 url.append(kDefaultServerHostName);
203 request_.url = GURL(url); 194 request_.url = GURL(url);
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 params_.enable_quic = true; 426 params_.enable_quic = true;
436 params_.quic_clock = clock_; 427 params_.quic_clock = clock_;
437 params_.quic_random = &random_generator_; 428 params_.quic_random = &random_generator_;
438 params_.client_socket_factory = socket_factory; 429 params_.client_socket_factory = socket_factory;
439 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; 430 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
440 params_.host_resolver = &host_resolver_; 431 params_.host_resolver = &host_resolver_;
441 params_.cert_verifier = &cert_verifier_; 432 params_.cert_verifier = &cert_verifier_;
442 params_.transport_security_state = &transport_security_state_; 433 params_.transport_security_state = &transport_security_state_;
443 params_.cert_transparency_verifier = cert_transparency_verifier_.get(); 434 params_.cert_transparency_verifier = cert_transparency_verifier_.get();
444 params_.socket_performance_watcher_factory = 435 params_.socket_performance_watcher_factory =
445 test_network_quality_estimator_.get(); 436 &test_socket_performance_watcher_factory_;
446 params_.proxy_service = proxy_service_.get(); 437 params_.proxy_service = proxy_service_.get();
447 params_.ssl_config_service = ssl_config_service_.get(); 438 params_.ssl_config_service = ssl_config_service_.get();
448 params_.http_auth_handler_factory = auth_handler_factory_.get(); 439 params_.http_auth_handler_factory = auth_handler_factory_.get();
449 params_.http_server_properties = http_server_properties_.GetWeakPtr(); 440 params_.http_server_properties = http_server_properties_.GetWeakPtr();
450 params_.quic_supported_versions = SupportedVersions(GetParam()); 441 params_.quic_supported_versions = SupportedVersions(GetParam());
451 for (const char* host : 442 for (const char* host :
452 {kDefaultServerHostName, "www.example.org", "news.example.org", 443 {kDefaultServerHostName, "www.example.org", "news.example.org",
453 "bar.example.org", "foo.example.org", "invalid.example.org", 444 "bar.example.org", "foo.example.org", "invalid.example.org",
454 "mail.example.com"}) { 445 "mail.example.com"}) {
455 params_.quic_host_whitelist.insert(host); 446 params_.quic_host_whitelist.insert(host);
456 } 447 }
457 448
458 test_network_quality_estimator_->AddRTTObserver(&rtt_observer_);
459
460 session_.reset(new HttpNetworkSession(params_)); 449 session_.reset(new HttpNetworkSession(params_));
461 session_->quic_stream_factory()->set_require_confirmation(false); 450 session_->quic_stream_factory()->set_require_confirmation(false);
462 ASSERT_EQ(params_.quic_socket_receive_buffer_size, 451 ASSERT_EQ(params_.quic_socket_receive_buffer_size,
463 session_->quic_stream_factory()->socket_receive_buffer_size()); 452 session_->quic_stream_factory()->socket_receive_buffer_size());
464 } 453 }
465 454
466 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { 455 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) {
467 const HttpResponseInfo* response = trans->GetResponseInfo(); 456 const HttpResponseInfo* response = trans->GetResponseInfo();
468 ASSERT_TRUE(response != nullptr); 457 ASSERT_TRUE(response != nullptr);
469 ASSERT_TRUE(response->headers.get() != nullptr); 458 ASSERT_TRUE(response->headers.get() != nullptr);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. 570 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession.
582 QuicTestPacketMaker maker_; 571 QuicTestPacketMaker maker_;
583 scoped_ptr<HttpNetworkSession> session_; 572 scoped_ptr<HttpNetworkSession> session_;
584 MockClientSocketFactory socket_factory_; 573 MockClientSocketFactory socket_factory_;
585 ProofVerifyDetailsChromium verify_details_; 574 ProofVerifyDetailsChromium verify_details_;
586 MockCryptoClientStreamFactory crypto_client_stream_factory_; 575 MockCryptoClientStreamFactory crypto_client_stream_factory_;
587 MockHostResolver host_resolver_; 576 MockHostResolver host_resolver_;
588 MockCertVerifier cert_verifier_; 577 MockCertVerifier cert_verifier_;
589 TransportSecurityState transport_security_state_; 578 TransportSecurityState transport_security_state_;
590 scoped_ptr<CTVerifier> cert_transparency_verifier_; 579 scoped_ptr<CTVerifier> cert_transparency_verifier_;
591 scoped_ptr<TestNetworkQualityEstimator> test_network_quality_estimator_; 580 TestSocketPerformanceWatcherFactory test_socket_performance_watcher_factory_;
592 TestRTTObserver rtt_observer_;
593 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; 581 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
594 scoped_ptr<ProxyService> proxy_service_; 582 scoped_ptr<ProxyService> proxy_service_;
595 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; 583 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_;
596 MockRandom random_generator_; 584 MockRandom random_generator_;
597 HttpServerPropertiesImpl http_server_properties_; 585 HttpServerPropertiesImpl http_server_properties_;
598 HttpNetworkSession::Params params_; 586 HttpNetworkSession::Params params_;
599 HttpRequestInfo request_; 587 HttpRequestInfo request_;
600 BoundTestNetLog net_log_; 588 BoundTestNetLog net_log_;
601 std::vector<scoped_ptr<StaticSocketDataProvider>> hanging_data_; 589 std::vector<scoped_ptr<StaticSocketDataProvider>> hanging_data_;
602 SSLSocketDataProvider ssl_data_; 590 SSLSocketDataProvider ssl_data_;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 630 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
643 631
644 // The non-alternate protocol job needs to hang in order to guarantee that 632 // The non-alternate protocol job needs to hang in order to guarantee that
645 // the alternate-protocol job will "win". 633 // the alternate-protocol job will "win".
646 AddHangingNonAlternateProtocolSocketData(); 634 AddHangingNonAlternateProtocolSocketData();
647 635
648 params_.parse_alternative_services = false; 636 params_.parse_alternative_services = false;
649 params_.enable_alternative_service_with_different_host = false; 637 params_.enable_alternative_service_with_different_host = false;
650 CreateSession(); 638 CreateSession();
651 639
652 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); 640 EXPECT_FALSE(
641 test_socket_performance_watcher_factory_.rtt_notification_received());
653 SendRequestAndExpectQuicResponse("hello!"); 642 SendRequestAndExpectQuicResponse("hello!");
654 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); 643 EXPECT_TRUE(
644 test_socket_performance_watcher_factory_.rtt_notification_received());
655 645
656 // Check that the NetLog was filled reasonably. 646 // Check that the NetLog was filled reasonably.
657 TestNetLogEntry::List entries; 647 TestNetLogEntry::List entries;
658 net_log_.GetEntries(&entries); 648 net_log_.GetEntries(&entries);
659 EXPECT_LT(0u, entries.size()); 649 EXPECT_LT(0u, entries.size());
660 650
661 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED. 651 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED.
662 int pos = ExpectLogContainsSomewhere( 652 int pos = ExpectLogContainsSomewhere(
663 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, 653 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED,
664 NetLog::PHASE_NONE); 654 NetLog::PHASE_NONE);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 694 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
705 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 695 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
706 mock_quic_data.AddRead( 696 mock_quic_data.AddRead(
707 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 697 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
708 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 698 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
709 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 699 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
710 mock_quic_data.AddRead(ASYNC, 0); // EOF 700 mock_quic_data.AddRead(ASYNC, 0); // EOF
711 701
712 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 702 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
713 703
714 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); 704 EXPECT_FALSE(
705 test_socket_performance_watcher_factory_.rtt_notification_received());
715 // There is no need to set up an alternate protocol job, because 706 // There is no need to set up an alternate protocol job, because
716 // no attempt will be made to speak to the proxy over TCP. 707 // no attempt will be made to speak to the proxy over TCP.
717 708
718 request_.url = GURL("http://mail.example.org/"); 709 request_.url = GURL("http://mail.example.org/");
719 params_.parse_alternative_services = false; 710 params_.parse_alternative_services = false;
720 params_.enable_alternative_service_with_different_host = false; 711 params_.enable_alternative_service_with_different_host = false;
721 CreateSession(); 712 CreateSession();
722 713
723 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 714 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
724 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); 715 EXPECT_TRUE(
716 test_socket_performance_watcher_factory_.rtt_notification_received());
725 } 717 }
726 718
727 // Regression test for https://crbug.com/492458. Test that for an HTTP 719 // Regression test for https://crbug.com/492458. Test that for an HTTP
728 // connection through a QUIC proxy, the certificate exhibited by the proxy is 720 // connection through a QUIC proxy, the certificate exhibited by the proxy is
729 // checked against the proxy hostname, not the origin hostname. 721 // checked against the proxy hostname, not the origin hostname.
730 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { 722 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) {
731 const std::string origin_host = "mail.example.com"; 723 const std::string origin_host = "mail.example.com";
732 const std::string proxy_host = "www.example.org"; 724 const std::string proxy_host = "www.example.org";
733 725
734 params_.enable_quic_for_proxies = true; 726 params_.enable_quic_for_proxies = true;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); 816 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
825 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 817 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
826 818
827 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); 819 mock_quic_data1.AddSocketDataToFactory(&socket_factory_);
828 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); 820 mock_quic_data2.AddSocketDataToFactory(&socket_factory_);
829 821
830 params_.parse_alternative_services = false; 822 params_.parse_alternative_services = false;
831 params_.enable_alternative_service_with_different_host = false; 823 params_.enable_alternative_service_with_different_host = false;
832 CreateSession(); 824 CreateSession();
833 825
834 EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count()); 826 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count());
835 for (size_t i = 0; i < 2; ++i) { 827 for (size_t i = 0; i < 2; ++i) {
836 scoped_ptr<HttpNetworkTransaction> trans( 828 scoped_ptr<HttpNetworkTransaction> trans(
837 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 829 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
838 TestCompletionCallback callback; 830 TestCompletionCallback callback;
839 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 831 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
840 EXPECT_EQ(ERR_IO_PENDING, rv); 832 EXPECT_EQ(ERR_IO_PENDING, rv);
841 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); 833 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
842 EXPECT_EQ(1 + i, test_network_quality_estimator_->watcher_count()); 834 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count());
843 } 835 }
844 } 836 }
845 837
846 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { 838 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) {
847 // Attempt to "force" quic on 443, which will not be honored. 839 // Attempt to "force" quic on 443, which will not be honored.
848 params_.origins_to_force_quic_on.insert( 840 params_.origins_to_force_quic_on.insert(
849 HostPortPair::FromString("www.google.com:443")); 841 HostPortPair::FromString("www.google.com:443"));
850 842
851 MockRead http_reads[] = { 843 MockRead http_reads[] = {
852 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), 844 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"),
853 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 845 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
854 MockRead(ASYNC, OK)}; 846 MockRead(ASYNC, OK)};
855 847
856 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); 848 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0);
857 socket_factory_.AddSocketDataProvider(&data); 849 socket_factory_.AddSocketDataProvider(&data);
858 SSLSocketDataProvider ssl(ASYNC, OK); 850 SSLSocketDataProvider ssl(ASYNC, OK);
859 socket_factory_.AddSSLSocketDataProvider(&ssl); 851 socket_factory_.AddSSLSocketDataProvider(&ssl);
860 852
861 params_.parse_alternative_services = false; 853 params_.parse_alternative_services = false;
862 params_.enable_alternative_service_with_different_host = false; 854 params_.enable_alternative_service_with_different_host = false;
863 CreateSession(); 855 CreateSession();
864 856
865 SendRequestAndExpectHttpResponse("hello world"); 857 SendRequestAndExpectHttpResponse("hello world");
866 EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count()); 858 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count());
867 } 859 }
868 860
869 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { 861 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) {
870 MockRead http_reads[] = { 862 MockRead http_reads[] = {
871 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), 863 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader),
872 MockRead("hello world"), 864 MockRead("hello world"),
873 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 865 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
874 MockRead(ASYNC, OK)}; 866 MockRead(ASYNC, OK)};
875 867
876 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 868 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
(...skipping 1408 matching lines...) Expand 10 before | Expand all | Expand 10 after
2285 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 2277 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
2286 nullptr, net_log_.bound()); 2278 nullptr, net_log_.bound());
2287 2279
2288 CreateSession(); 2280 CreateSession();
2289 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 2281 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
2290 SendRequestAndExpectHttpResponse("hello world"); 2282 SendRequestAndExpectHttpResponse("hello world");
2291 } 2283 }
2292 2284
2293 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { 2285 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) {
2294 maker_.set_hostname("www.example.org"); 2286 maker_.set_hostname("www.example.org");
2295 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); 2287 EXPECT_FALSE(
2288 test_socket_performance_watcher_factory_.rtt_notification_received());
2296 MockQuicData mock_quic_data; 2289 MockQuicData mock_quic_data;
2297 mock_quic_data.AddWrite( 2290 mock_quic_data.AddWrite(
2298 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 2291 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
2299 GetRequestHeaders("GET", "https", "/"))); 2292 GetRequestHeaders("GET", "https", "/")));
2300 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 2293 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
2301 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 2294 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
2302 mock_quic_data.AddRead( 2295 mock_quic_data.AddRead(
2303 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 2296 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
2304 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 2297 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
2305 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. 2298 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data.
2306 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 2299 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
2307 2300
2308 request_.url = GURL("https://www.example.org:443"); 2301 request_.url = GURL("https://www.example.org:443");
2309 AddHangingNonAlternateProtocolSocketData(); 2302 AddHangingNonAlternateProtocolSocketData();
2310 CreateSession(); 2303 CreateSession();
2311 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 2304 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
2312 SendRequestAndExpectQuicResponse("hello!"); 2305 SendRequestAndExpectQuicResponse("hello!");
2313 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); 2306 EXPECT_TRUE(
2307 test_socket_performance_watcher_factory_.rtt_notification_received());
2314 } 2308 }
2315 2309
2316 TEST_P(QuicNetworkTransactionTest, QuicUpload) { 2310 TEST_P(QuicNetworkTransactionTest, QuicUpload) {
2317 params_.origins_to_force_quic_on.insert( 2311 params_.origins_to_force_quic_on.insert(
2318 HostPortPair::FromString("mail.example.org:443")); 2312 HostPortPair::FromString("mail.example.org:443"));
2319 2313
2320 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 2314 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
2321 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; 2315 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)};
2322 SequencedSocketData socket_data(reads, arraysize(reads), writes, 2316 SequencedSocketData socket_data(reads, arraysize(reads), writes,
2323 arraysize(writes)); 2317 arraysize(writes));
(...skipping 15 matching lines...) Expand all
2339 scoped_ptr<HttpNetworkTransaction> trans( 2333 scoped_ptr<HttpNetworkTransaction> trans(
2340 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2334 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2341 TestCompletionCallback callback; 2335 TestCompletionCallback callback;
2342 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2336 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
2343 EXPECT_EQ(ERR_IO_PENDING, rv); 2337 EXPECT_EQ(ERR_IO_PENDING, rv);
2344 EXPECT_NE(OK, callback.WaitForResult()); 2338 EXPECT_NE(OK, callback.WaitForResult());
2345 } 2339 }
2346 2340
2347 } // namespace test 2341 } // namespace test
2348 } // namespace net 2342 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698