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

Side by Side Diff: net/http/http_stream_factory_impl_job_controller_unittest.cc

Issue 2901093004: Add and persist a new field in AlternativeServiceInfo to list QUIC verisons advertised (Closed)
Patch Set: fix cronet/grpc Created 3 years, 6 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) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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 "net/http/http_stream_factory_impl_job_controller.h" 5 #include "net/http/http_stream_factory_impl_job_controller.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 return job->spdy_session_key_; 145 return job->spdy_session_key_;
146 } 146 }
147 }; 147 };
148 148
149 class JobControllerPeer { 149 class JobControllerPeer {
150 public: 150 public:
151 static bool main_job_is_blocked( 151 static bool main_job_is_blocked(
152 HttpStreamFactoryImpl::JobController* job_controller) { 152 HttpStreamFactoryImpl::JobController* job_controller) {
153 return job_controller->main_job_is_blocked_; 153 return job_controller->main_job_is_blocked_;
154 } 154 }
155
155 static bool main_job_is_resumed( 156 static bool main_job_is_resumed(
156 HttpStreamFactoryImpl::JobController* job_controller) { 157 HttpStreamFactoryImpl::JobController* job_controller) {
157 return job_controller->main_job_is_resumed_; 158 return job_controller->main_job_is_resumed_;
158 } 159 }
160
161 static AlternativeServiceInfo GetAlternativeServiceInfoFor(
162 HttpStreamFactoryImpl::JobController* job_controller,
163 const HttpRequestInfo& request_info,
164 HttpStreamRequest::Delegate* delegate,
165 HttpStreamRequest::StreamType stream_type) {
166 return job_controller->GetAlternativeServiceInfoFor(request_info, delegate,
167 stream_type);
168 }
159 }; 169 };
160 170
161 class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { 171 class HttpStreamFactoryImplJobControllerTest : public ::testing::Test {
162 public: 172 public:
163 HttpStreamFactoryImplJobControllerTest() 173 HttpStreamFactoryImplJobControllerTest()
164 : session_deps_(ProxyService::CreateDirect()), 174 : session_deps_(ProxyService::CreateDirect()),
165 random_generator_(0), 175 random_generator_(0),
166 client_maker_(HttpNetworkSession::Params().quic_supported_versions[0], 176 client_maker_(HttpNetworkSession::Params().quic_supported_versions[0],
167 0, 177 0,
168 &clock_, 178 &clock_,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 EXPECT_TRUE(tcp_data_->AllReadDataConsumed()); 257 EXPECT_TRUE(tcp_data_->AllReadDataConsumed());
248 EXPECT_TRUE(tcp_data_->AllWriteDataConsumed()); 258 EXPECT_TRUE(tcp_data_->AllWriteDataConsumed());
249 } 259 }
250 } 260 }
251 261
252 void SetAlternativeService(const HttpRequestInfo& request_info, 262 void SetAlternativeService(const HttpRequestInfo& request_info,
253 AlternativeService alternative_service) { 263 AlternativeService alternative_service) {
254 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url); 264 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url);
255 url::SchemeHostPort server(request_info.url); 265 url::SchemeHostPort server(request_info.url);
256 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 266 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
257 session_->http_server_properties()->SetAlternativeService( 267 if (alternative_service.protocol == kProtoQUIC) {
258 server, alternative_service, expiration); 268 session_->http_server_properties()->SetQuicAlternativeService(
269 server, alternative_service, expiration,
270 session_->params().quic_supported_versions);
271 } else {
272 session_->http_server_properties()->SetHttp2AlternativeService(
273 server, alternative_service, expiration);
274 }
259 } 275 }
260 276
261 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info, 277 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info,
262 bool should_mark_broken) { 278 bool should_mark_broken) {
263 const url::SchemeHostPort server(request_info.url); 279 const url::SchemeHostPort server(request_info.url);
264 const AlternativeServiceInfoVector alternative_service_info_vector = 280 const AlternativeServiceInfoVector alternative_service_info_vector =
265 session_->http_server_properties()->GetAlternativeServiceInfos(server); 281 session_->http_server_properties()->GetAlternativeServiceInfos(server);
266 EXPECT_EQ(1u, alternative_service_info_vector.size()); 282 EXPECT_EQ(1u, alternative_service_info_vector.size());
267 EXPECT_EQ(should_mark_broken, 283 EXPECT_EQ(should_mark_broken,
268 session_->http_server_properties()->IsAlternativeServiceBroken( 284 session_->http_server_properties()->IsAlternativeServiceBroken(
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after
1701 Initialize(); 1717 Initialize();
1702 Preconnect(kNumPreconects); 1718 Preconnect(kNumPreconects);
1703 // If experiment is enabled, only 1 stream is requested. 1719 // If experiment is enabled, only 1 stream is requested.
1704 EXPECT_EQ( 1720 EXPECT_EQ(
1705 (int)actual_num_connects, 1721 (int)actual_num_connects,
1706 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job())); 1722 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job()));
1707 base::RunLoop().RunUntilIdle(); 1723 base::RunLoop().RunUntilIdle();
1708 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 1724 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
1709 } 1725 }
1710 1726
1727 // Test that GetAlternativeServiceInfoFor will include a list of advertised
Bence 2017/06/16 14:43:40 Since GetAlternativeServiceInfoFor() only has one
Zhongyi Shi 2017/06/20 23:23:37 Whoops. I probably should give some more context h
Bence 2017/06/21 12:39:25 Oh, I totally forgot about that. Sorry. Optional
Zhongyi Shi 2017/06/21 21:01:33 Currently, we are returning a single AlternativerS
1728 // versions. Returns an empty list if advertised versions are missing in
1729 // HttpServerProperties.
1730 TEST_F(HttpStreamFactoryImplJobControllerTest, GetAlternativeServiceInfoFor) {
1731 HttpRequestInfo request_info;
1732 request_info.method = "GET";
1733 request_info.url = GURL("https://www.google.com");
1734
1735 Initialize(request_info);
1736 url::SchemeHostPort server(request_info.url);
1737 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1738 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url);
1739 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
1740
1741 // Set alternative service with no advertised version.
1742 session_->http_server_properties()->SetQuicAlternativeService(
1743 server, alternative_service, expiration, QuicVersionVector());
1744
1745 AlternativeServiceInfo alt_svc_info =
1746 JobControllerPeer::GetAlternativeServiceInfoFor(
1747 job_controller_, request_info, &request_delegate_,
1748 HttpStreamRequest::HTTP_STREAM);
1749 // Verify that JobController get an empty list of supported QUIC versions.
1750 EXPECT_TRUE(alt_svc_info.advertised_versions().empty());
1751
1752 // Set alternative service for the same server with QUIC_VERSION_39 specified.
1753 ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
1754 server, alternative_service, expiration, {QUIC_VERSION_39}));
1755
1756 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
1757 job_controller_, request_info, &request_delegate_,
1758 HttpStreamRequest::HTTP_STREAM);
1759 EXPECT_EQ(1u, alt_svc_info.advertised_versions().size());
1760 // Verify that JobController returns the single version specified in set.
1761 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[0]);
1762
1763 // Set alternative service for the same server with two QUIC versions:
1764 // QUIC_VERSION_35, QUIC_VERSION_39.
1765 ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
1766 server, alternative_service, expiration,
1767 {QUIC_VERSION_35, QUIC_VERSION_39}));
1768
1769 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
1770 job_controller_, request_info, &request_delegate_,
1771 HttpStreamRequest::HTTP_STREAM);
1772 EXPECT_EQ(2u, alt_svc_info.advertised_versions().size());
1773 // Verify that JobController returns the list of versions specified in set.
1774 EXPECT_EQ(QUIC_VERSION_35, alt_svc_info.advertised_versions()[0]);
1775 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[1]);
1776 }
1777
1711 } // namespace net 1778 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698