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 |