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

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: manually fix rebase issues 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);
267 QuicVersionVector advertised_versions;
268 if (alternative_service.protocol == kProtoQUIC)
269 advertised_versions = session_->params().quic_supported_versions;
270
257 session_->http_server_properties()->SetAlternativeService( 271 session_->http_server_properties()->SetAlternativeService(
258 server, alternative_service, expiration); 272 server, alternative_service, expiration, advertised_versions);
259 } 273 }
260 274
261 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info, 275 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info,
262 bool should_mark_broken) { 276 bool should_mark_broken) {
263 const url::SchemeHostPort server(request_info.url); 277 const url::SchemeHostPort server(request_info.url);
264 const AlternativeServiceInfoVector alternative_service_info_vector = 278 const AlternativeServiceInfoVector alternative_service_info_vector =
265 session_->http_server_properties()->GetAlternativeServiceInfos(server); 279 session_->http_server_properties()->GetAlternativeServiceInfos(server);
266 EXPECT_EQ(1u, alternative_service_info_vector.size()); 280 EXPECT_EQ(1u, alternative_service_info_vector.size());
267 EXPECT_EQ(should_mark_broken, 281 EXPECT_EQ(should_mark_broken,
268 session_->http_server_properties()->IsAlternativeServiceBroken( 282 session_->http_server_properties()->IsAlternativeServiceBroken(
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after
1701 Initialize(); 1715 Initialize();
1702 Preconnect(kNumPreconects); 1716 Preconnect(kNumPreconects);
1703 // If experiment is enabled, only 1 stream is requested. 1717 // If experiment is enabled, only 1 stream is requested.
1704 EXPECT_EQ( 1718 EXPECT_EQ(
1705 (int)actual_num_connects, 1719 (int)actual_num_connects,
1706 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job())); 1720 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job()));
1707 base::RunLoop().RunUntilIdle(); 1721 base::RunLoop().RunUntilIdle();
1708 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 1722 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
1709 } 1723 }
1710 1724
1725 // Test that GetAlternativeServiceInfoFor will include a list of advertised
1726 // versions. Returns an empty list if advertised versions are missing in
1727 // HttpServerProperties.
1728 TEST_F(HttpStreamFactoryImplJobControllerTest, GetAlternativeServiceInfoFor) {
1729 HttpRequestInfo request_info;
1730 request_info.method = "GET";
1731 request_info.url = GURL("https://www.google.com");
1732
1733 Initialize(request_info);
1734 url::SchemeHostPort server(request_info.url);
1735 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1736 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url);
1737 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
1738
1739 // Set alternative service with no advertised version.
1740 session_->http_server_properties()->SetAlternativeService(
1741 server, alternative_service, expiration, QuicVersionVector());
1742
1743 AlternativeServiceInfo alt_svc_info =
1744 JobControllerPeer::GetAlternativeServiceInfoFor(
1745 job_controller_, request_info, &request_delegate_,
1746 HttpStreamRequest::HTTP_STREAM);
1747 // Verify that JobController get an empty list of supported QUIC versions.
1748 EXPECT_TRUE(alt_svc_info.advertised_versions().empty());
1749
1750 // Set alternative service for the same server with QUIC_VERSION_39 specified.
1751 ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService(
1752 server, alternative_service, expiration, {QUIC_VERSION_39}));
1753
1754 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
1755 job_controller_, request_info, &request_delegate_,
1756 HttpStreamRequest::HTTP_STREAM);
1757 EXPECT_EQ(1u, alt_svc_info.advertised_versions().size());
1758 // Verify that JobController returns the single version specified in set.
1759 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[0]);
1760
1761 // Set alternative service for the same server with two QUIC versions:
1762 // QUIC_VERSION_35, QUIC_VERSION_39.
1763 ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService(
1764 server, alternative_service, expiration,
1765 {QUIC_VERSION_35, QUIC_VERSION_39}));
1766
1767 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
1768 job_controller_, request_info, &request_delegate_,
1769 HttpStreamRequest::HTTP_STREAM);
1770 EXPECT_EQ(2u, alt_svc_info.advertised_versions().size());
1771 // Verify that JobController returns the list of versions specified in set.
1772 EXPECT_EQ(QUIC_VERSION_35, alt_svc_info.advertised_versions()[0]);
1773 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[1]);
1774 }
1775
1711 } // namespace net 1776 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698