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

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

Issue 1305293004: Notfiy NQE of QUIC RTT (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased, addressed comments, added more tests Created 5 years, 3 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/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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698