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

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: Addressed comments 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 class TestSocketPerformanceWatcher : public SocketPerformanceWatcher {
145 public:
146 TestSocketPerformanceWatcher()
147 : received_updated_rtt_available_notification_(false) {}
148
149 ~TestSocketPerformanceWatcher() override {}
150
151 void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) override {
152 received_updated_rtt_available_notification_ = true;
153 }
154
155 bool IsRTTAvailableRTTNotificationReceived() const {
156 return received_updated_rtt_available_notification_;
157 }
158
159 private:
160 bool received_updated_rtt_available_notification_;
161 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcher);
162 };
163
164 class TestNetworkQualityEstimator : public NetworkQualityEstimator {
165 public:
166 TestNetworkQualityEstimator()
167 : NetworkQualityEstimator(scoped_ptr<net::ExternalEstimateProvider>(),
168 std::map<std::string, std::string>()) {}
169
170 ~TestNetworkQualityEstimator() override {}
171
172 scoped_ptr<SocketPerformanceWatcher> CreateUDPSocketPerformanceWatcher()
173 const override {
174 TestSocketPerformanceWatcher* watcher = new TestSocketPerformanceWatcher();
175 watchers_.push_back(watcher);
176 return scoped_ptr<TestSocketPerformanceWatcher>(watcher);
177 }
178
179 scoped_ptr<SocketPerformanceWatcher> CreateTCPSocketPerformanceWatcher()
180 const override {
181 NOTIMPLEMENTED();
182 return scoped_ptr<SocketPerformanceWatcher>();
Ryan Sleevi 2015/09/18 17:36:45 nullptr
tbansal1 2015/09/18 17:59:59 Done.
183 }
184
185 bool IsRTTAvailableRTTNotificationReceived() const {
186 for (const auto& watcher : watchers_)
187 if (watcher && watcher->IsRTTAvailableRTTNotificationReceived())
Ryan Sleevi 2015/09/18 17:36:45 When is a null watcher in watchers_ valid?
tbansal1 2015/09/18 17:59:59 Removed the check.
188 return true;
189 return false;
190 }
191
192 size_t GetWatchersCreated() const { return watchers_.size(); }
193
194 private:
195 mutable std::vector<TestSocketPerformanceWatcher*> watchers_;
196 DISALLOW_COPY_AND_ASSIGN(TestNetworkQualityEstimator);
197 };
198
142 class QuicNetworkTransactionTest 199 class QuicNetworkTransactionTest
143 : public PlatformTest, 200 : public PlatformTest,
144 public ::testing::WithParamInterface<QuicVersion> { 201 public ::testing::WithParamInterface<QuicVersion> {
145 protected: 202 protected:
146 QuicNetworkTransactionTest() 203 QuicNetworkTransactionTest()
147 : clock_(new MockClock), 204 : clock_(new MockClock),
148 maker_(GetParam(), 0, clock_, kDefaultServerHostName), 205 maker_(GetParam(), 0, clock_, kDefaultServerHostName),
206 test_network_quality_estimator_(new TestNetworkQualityEstimator()),
149 ssl_config_service_(new SSLConfigServiceDefaults), 207 ssl_config_service_(new SSLConfigServiceDefaults),
150 proxy_service_(ProxyService::CreateDirect()), 208 proxy_service_(ProxyService::CreateDirect()),
151 auth_handler_factory_( 209 auth_handler_factory_(
152 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), 210 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)),
153 random_generator_(0), 211 random_generator_(0),
154 hanging_data_(nullptr, 0, nullptr, 0) { 212 hanging_data_(nullptr, 0, nullptr, 0) {
155 request_.method = "GET"; 213 request_.method = "GET";
156 std::string url("http://"); 214 std::string url("http://");
157 url.append(kDefaultServerHostName); 215 url.append(kDefaultServerHostName);
158 request_.url = GURL(url); 216 request_.url = GURL(url);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 void CreateSessionWithFactory(ClientSocketFactory* socket_factory, 299 void CreateSessionWithFactory(ClientSocketFactory* socket_factory,
242 bool use_next_protos) { 300 bool use_next_protos) {
243 params_.enable_quic = true; 301 params_.enable_quic = true;
244 params_.quic_clock = clock_; 302 params_.quic_clock = clock_;
245 params_.quic_random = &random_generator_; 303 params_.quic_random = &random_generator_;
246 params_.client_socket_factory = socket_factory; 304 params_.client_socket_factory = socket_factory;
247 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; 305 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
248 params_.host_resolver = &host_resolver_; 306 params_.host_resolver = &host_resolver_;
249 params_.cert_verifier = &cert_verifier_; 307 params_.cert_verifier = &cert_verifier_;
250 params_.transport_security_state = &transport_security_state_; 308 params_.transport_security_state = &transport_security_state_;
309 params_.socket_performance_watcher_factory =
310 test_network_quality_estimator_.get();
251 params_.proxy_service = proxy_service_.get(); 311 params_.proxy_service = proxy_service_.get();
252 params_.ssl_config_service = ssl_config_service_.get(); 312 params_.ssl_config_service = ssl_config_service_.get();
253 params_.http_auth_handler_factory = auth_handler_factory_.get(); 313 params_.http_auth_handler_factory = auth_handler_factory_.get();
254 params_.http_server_properties = http_server_properties_.GetWeakPtr(); 314 params_.http_server_properties = http_server_properties_.GetWeakPtr();
255 params_.quic_supported_versions = SupportedVersions(GetParam()); 315 params_.quic_supported_versions = SupportedVersions(GetParam());
256 316
257 if (use_next_protos) { 317 if (use_next_protos) {
258 params_.use_alternative_services = true; 318 params_.use_alternative_services = true;
259 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); 319 params_.next_protos = NextProtosWithSpdyAndQuic(true, true);
260 } 320 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 } 425 }
366 426
367 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. 427 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession.
368 QuicTestPacketMaker maker_; 428 QuicTestPacketMaker maker_;
369 scoped_refptr<HttpNetworkSession> session_; 429 scoped_refptr<HttpNetworkSession> session_;
370 MockClientSocketFactory socket_factory_; 430 MockClientSocketFactory socket_factory_;
371 MockCryptoClientStreamFactory crypto_client_stream_factory_; 431 MockCryptoClientStreamFactory crypto_client_stream_factory_;
372 MockHostResolver host_resolver_; 432 MockHostResolver host_resolver_;
373 MockCertVerifier cert_verifier_; 433 MockCertVerifier cert_verifier_;
374 TransportSecurityState transport_security_state_; 434 TransportSecurityState transport_security_state_;
435 scoped_ptr<TestNetworkQualityEstimator> test_network_quality_estimator_;
375 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; 436 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
376 scoped_ptr<ProxyService> proxy_service_; 437 scoped_ptr<ProxyService> proxy_service_;
377 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; 438 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_;
378 MockRandom random_generator_; 439 MockRandom random_generator_;
379 HttpServerPropertiesImpl http_server_properties_; 440 HttpServerPropertiesImpl http_server_properties_;
380 HttpNetworkSession::Params params_; 441 HttpNetworkSession::Params params_;
381 HttpRequestInfo request_; 442 HttpRequestInfo request_;
382 BoundTestNetLog net_log_; 443 BoundTestNetLog net_log_;
383 StaticSocketDataProvider hanging_data_; 444 StaticSocketDataProvider hanging_data_;
384 445
(...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 484 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
424 485
425 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 486 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
426 487
427 // The non-alternate protocol job needs to hang in order to guarantee that 488 // The non-alternate protocol job needs to hang in order to guarantee that
428 // the alternate-protocol job will "win". 489 // the alternate-protocol job will "win".
429 AddHangingNonAlternateProtocolSocketData(); 490 AddHangingNonAlternateProtocolSocketData();
430 491
431 CreateSession(); 492 CreateSession();
432 493
494 EXPECT_FALSE(
495 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
433 SendRequestAndExpectQuicResponse("hello!"); 496 SendRequestAndExpectQuicResponse("hello!");
497 EXPECT_TRUE(
498 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
434 499
435 // Check that the NetLog was filled reasonably. 500 // Check that the NetLog was filled reasonably.
436 TestNetLogEntry::List entries; 501 TestNetLogEntry::List entries;
437 net_log_.GetEntries(&entries); 502 net_log_.GetEntries(&entries);
438 EXPECT_LT(0u, entries.size()); 503 EXPECT_LT(0u, entries.size());
439 504
440 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED. 505 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED.
441 int pos = ExpectLogContainsSomewhere( 506 int pos = ExpectLogContainsSomewhere(
442 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, 507 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED,
443 NetLog::PHASE_NONE); 508 NetLog::PHASE_NONE);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 549 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false,
485 GetResponseHeaders("200 OK"))); 550 GetResponseHeaders("200 OK")));
486 mock_quic_data.AddRead( 551 mock_quic_data.AddRead(
487 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 552 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
488 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 553 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
489 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 554 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
490 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 555 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
491 556
492 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 557 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
493 558
559 EXPECT_FALSE(
560 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
494 // There is no need to set up an alternate protocol job, because 561 // 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. 562 // no attempt will be made to speak to the proxy over TCP.
496 563
497 CreateSession(); 564 CreateSession();
498 565
499 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 566 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
567 EXPECT_TRUE(
568 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
500 } 569 }
501 570
502 // Regression test for https://crbug.com/492458. Test that for an HTTP 571 // 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 572 // connection through a QUIC proxy, the certificate exhibited by the proxy is
504 // checked against the proxy hostname, not the origin hostname. 573 // checked against the proxy hostname, not the origin hostname.
505 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { 574 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) {
506 const std::string origin_host = "news.example.com"; 575 const std::string origin_host = "news.example.com";
507 const std::string proxy_host = "www.example.org"; 576 const std::string proxy_host = "www.example.org";
508 577
509 params_.enable_insecure_quic = true; 578 params_.enable_insecure_quic = true;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 CreateSessionWithNextProtos(); 610 CreateSessionWithNextProtos();
542 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 611 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
543 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 612 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
544 } 613 }
545 614
546 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { 615 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) {
547 params_.enable_insecure_quic = true; 616 params_.enable_insecure_quic = true;
548 params_.origin_to_force_quic_on = 617 params_.origin_to_force_quic_on =
549 HostPortPair::FromString("www.google.com:80"); 618 HostPortPair::FromString("www.google.com:80");
550 619
551 MockQuicData mock_quic_data; 620 MockQuicData mock_quic_data1;
552 mock_quic_data.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); 621 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
553 622
554 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 623 MockQuicData mock_quic_data2;
624 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
625
626 mock_quic_data1.AddSocketDataToFactory(&socket_factory_);
627 mock_quic_data2.AddSocketDataToFactory(&socket_factory_);
555 628
556 CreateSession(); 629 CreateSession();
557 630
558 scoped_ptr<HttpNetworkTransaction> trans( 631 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated());
559 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 632 for (size_t i = 0; i < 2; ++i) {
560 TestCompletionCallback callback; 633 scoped_ptr<HttpNetworkTransaction> trans(
561 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 634 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
562 EXPECT_EQ(ERR_IO_PENDING, rv); 635 TestCompletionCallback callback;
563 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); 636 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
637 EXPECT_EQ(ERR_IO_PENDING, rv);
638 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
639 EXPECT_EQ(1 + i, test_network_quality_estimator_->GetWatchersCreated());
640 }
564 } 641 }
565 642
566 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { 643 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) {
567 // Attempt to "force" quic on 443, which will not be honored. 644 // Attempt to "force" quic on 443, which will not be honored.
568 params_.origin_to_force_quic_on = 645 params_.origin_to_force_quic_on =
569 HostPortPair::FromString("www.google.com:443"); 646 HostPortPair::FromString("www.google.com:443");
570 647
571 MockRead http_reads[] = { 648 MockRead http_reads[] = {
572 MockRead("HTTP/1.1 200 OK\r\n\r\n"), 649 MockRead("HTTP/1.1 200 OK\r\n\r\n"),
573 MockRead("hello world"), 650 MockRead("hello world"),
574 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 651 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
575 MockRead(ASYNC, OK) 652 MockRead(ASYNC, OK)
576 }; 653 };
577 654
578 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); 655 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0);
579 socket_factory_.AddSocketDataProvider(&data); 656 socket_factory_.AddSocketDataProvider(&data);
580 SSLSocketDataProvider ssl(ASYNC, OK); 657 SSLSocketDataProvider ssl(ASYNC, OK);
581 socket_factory_.AddSSLSocketDataProvider(&ssl); 658 socket_factory_.AddSSLSocketDataProvider(&ssl);
582 659
583 CreateSession(); 660 CreateSession();
584 661
585 SendRequestAndExpectHttpResponse("hello world"); 662 SendRequestAndExpectHttpResponse("hello world");
663 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated());
586 } 664 }
587 665
588 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { 666 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) {
589 params_.enable_insecure_quic = true; 667 params_.enable_insecure_quic = true;
590 668
591 MockRead http_reads[] = { 669 MockRead http_reads[] = {
592 MockRead("HTTP/1.1 200 OK\r\n"), 670 MockRead("HTTP/1.1 200 OK\r\n"),
593 MockRead(kQuicAlternativeServiceHttpHeader), MockRead("hello world"), 671 MockRead(kQuicAlternativeServiceHttpHeader), MockRead("hello world"),
594 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 672 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
595 MockRead(ASYNC, OK)}; 673 MockRead(ASYNC, OK)};
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after
1452 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( 1530 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
1453 QuicSession::HANDSHAKE_CONFIRMED); 1531 QuicSession::HANDSHAKE_CONFIRMED);
1454 EXPECT_EQ(OK, callback.WaitForResult()); 1532 EXPECT_EQ(OK, callback.WaitForResult());
1455 1533
1456 CheckWasQuicResponse(trans); 1534 CheckWasQuicResponse(trans);
1457 CheckResponseData(trans, "hello!"); 1535 CheckResponseData(trans, "hello!");
1458 } 1536 }
1459 1537
1460 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) { 1538 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) {
1461 params_.enable_insecure_quic = true; 1539 params_.enable_insecure_quic = true;
1540 EXPECT_FALSE(
1541 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
1462 // Alternate-protocol job 1542 // Alternate-protocol job
1463 scoped_ptr<QuicEncryptedPacket> close(ConstructConnectionClosePacket(1)); 1543 scoped_ptr<QuicEncryptedPacket> close(ConstructConnectionClosePacket(1));
1464 MockRead quic_reads[] = { 1544 MockRead quic_reads[] = {
1465 MockRead(ASYNC, close->data(), close->length()), 1545 MockRead(ASYNC, close->data(), close->length()),
1466 MockRead(ASYNC, ERR_IO_PENDING), // No more data to read 1546 MockRead(ASYNC, ERR_IO_PENDING), // No more data to read
1467 MockRead(ASYNC, OK), // EOF 1547 MockRead(ASYNC, OK), // EOF
1468 }; 1548 };
1469 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), 1549 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads),
1470 nullptr, 0); 1550 nullptr, 0);
1471 socket_factory_.AddSocketDataProvider(&quic_data); 1551 socket_factory_.AddSocketDataProvider(&quic_data);
1472 1552
1473 // Main job which will succeed even though the alternate job fails. 1553 // Main job which will succeed even though the alternate job fails.
1474 MockRead http_reads[] = { 1554 MockRead http_reads[] = {
1475 MockRead("HTTP/1.1 200 OK\r\n\r\n"), 1555 MockRead("HTTP/1.1 200 OK\r\n\r\n"),
1476 MockRead("hello from http"), 1556 MockRead("hello from http"),
1477 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1557 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1478 MockRead(ASYNC, OK) 1558 MockRead(ASYNC, OK)
1479 }; 1559 };
1480 1560
1481 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), 1561 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
1482 nullptr, 0); 1562 nullptr, 0);
1483 socket_factory_.AddSocketDataProvider(&http_data); 1563 socket_factory_.AddSocketDataProvider(&http_data);
1484 1564
1485 CreateSessionWithNextProtos(); 1565 CreateSessionWithNextProtos();
1486 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); 1566 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START);
1487 SendRequestAndExpectHttpResponse("hello from http"); 1567 SendRequestAndExpectHttpResponse("hello from http");
1488 ExpectBrokenAlternateProtocolMapping(); 1568 ExpectBrokenAlternateProtocolMapping();
1569 EXPECT_TRUE(
1570 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
1489 } 1571 }
1490 1572
1491 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) { 1573 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) {
1492 params_.enable_insecure_quic = true; 1574 params_.enable_insecure_quic = true;
1493 // Alternate-protocol job 1575 // Alternate-protocol job
1494 MockRead quic_reads[] = { 1576 MockRead quic_reads[] = {
1495 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), 1577 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED),
1496 }; 1578 };
1497 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), 1579 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads),
1498 nullptr, 0); 1580 nullptr, 0);
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
1714 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 1796 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
1715 TestCompletionCallback callback; 1797 TestCompletionCallback callback;
1716 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 1798 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
1717 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, 1799 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC,
1718 callback.GetResult(rv)); 1800 callback.GetResult(rv));
1719 } 1801 }
1720 1802
1721 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { 1803 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) {
1722 params_.enable_insecure_quic = true; 1804 params_.enable_insecure_quic = true;
1723 maker_.set_hostname("www.example.org"); 1805 maker_.set_hostname("www.example.org");
1806 EXPECT_FALSE(
1807 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
1724 MockQuicData mock_quic_data; 1808 MockQuicData mock_quic_data;
1725 mock_quic_data.AddWrite( 1809 mock_quic_data.AddWrite(
1726 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1810 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1727 GetRequestHeaders("GET", "https", "/"))); 1811 GetRequestHeaders("GET", "https", "/")));
1728 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1812 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1729 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1813 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1730 mock_quic_data.AddRead( 1814 mock_quic_data.AddRead(
1731 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1815 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1732 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1816 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1733 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. 1817 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data.
1734 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1818 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1735 1819
1736 scoped_refptr<X509Certificate> cert( 1820 scoped_refptr<X509Certificate> cert(
1737 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); 1821 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"));
1738 ASSERT_TRUE(cert.get()); 1822 ASSERT_TRUE(cert.get());
1739 bool common_name_fallback_used; 1823 bool common_name_fallback_used;
1740 EXPECT_TRUE( 1824 EXPECT_TRUE(
1741 cert->VerifyNameMatch("www.example.org", &common_name_fallback_used)); 1825 cert->VerifyNameMatch("www.example.org", &common_name_fallback_used));
1742 ProofVerifyDetailsChromium verify_details; 1826 ProofVerifyDetailsChromium verify_details;
1743 verify_details.cert_verify_result.verified_cert = cert; 1827 verify_details.cert_verify_result.verified_cert = cert;
1744 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1828 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1745 1829
1746 request_.url = GURL("https://www.example.org:443"); 1830 request_.url = GURL("https://www.example.org:443");
1747 AddHangingNonAlternateProtocolSocketData(); 1831 AddHangingNonAlternateProtocolSocketData();
1748 CreateSessionWithNextProtos(); 1832 CreateSessionWithNextProtos();
1749 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 1833 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
1750 SendRequestAndExpectQuicResponse("hello!"); 1834 SendRequestAndExpectQuicResponse("hello!");
1835 EXPECT_TRUE(
1836 test_network_quality_estimator_->IsRTTAvailableRTTNotificationReceived());
1751 } 1837 }
1752 1838
1753 } // namespace test 1839 } // namespace test
1754 } // namespace net 1840 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698