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

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: Self review 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 return job->num_streams_; 115 return job->num_streams_;
116 } 116 }
117 }; 117 };
118 118
119 class JobControllerPeer { 119 class JobControllerPeer {
120 public: 120 public:
121 static bool main_job_is_blocked( 121 static bool main_job_is_blocked(
122 HttpStreamFactoryImpl::JobController* job_controller) { 122 HttpStreamFactoryImpl::JobController* job_controller) {
123 return job_controller->main_job_is_blocked_; 123 return job_controller->main_job_is_blocked_;
124 } 124 }
125
126 static AlternativeServiceInfo GetAlternativeServiceInfoFor(
127 HttpStreamFactoryImpl::JobController* job_controller,
128 const HttpRequestInfo& request_info,
129 HttpStreamRequest::Delegate* delegate,
130 HttpStreamRequest::StreamType stream_type) {
131 return job_controller->GetAlternativeServiceInfoFor(request_info, delegate,
132 stream_type);
133 }
125 }; 134 };
126 135
127 class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { 136 class HttpStreamFactoryImplJobControllerTest : public ::testing::Test {
128 public: 137 public:
129 HttpStreamFactoryImplJobControllerTest() 138 HttpStreamFactoryImplJobControllerTest()
130 : session_deps_(ProxyService::CreateDirect()), 139 : session_deps_(ProxyService::CreateDirect()),
131 use_alternative_proxy_(false), 140 use_alternative_proxy_(false),
132 is_preconnect_(false), 141 is_preconnect_(false),
133 enable_ip_based_pooling_(true), 142 enable_ip_based_pooling_(true),
134 enable_alternative_services_(true), 143 enable_alternative_services_(true),
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 } 195 }
187 196
188 ~HttpStreamFactoryImplJobControllerTest() override {} 197 ~HttpStreamFactoryImplJobControllerTest() override {}
189 198
190 void SetAlternativeService(const HttpRequestInfo& request_info, 199 void SetAlternativeService(const HttpRequestInfo& request_info,
191 AlternativeService alternative_service) { 200 AlternativeService alternative_service) {
192 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url); 201 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url);
193 url::SchemeHostPort server(request_info.url); 202 url::SchemeHostPort server(request_info.url);
194 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 203 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
195 session_->http_server_properties()->SetAlternativeService( 204 session_->http_server_properties()->SetAlternativeService(
196 server, alternative_service, expiration); 205 server, alternative_service, expiration,
206 HttpNetworkSession::Params().quic_supported_versions);
197 } 207 }
198 208
199 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info, 209 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info,
200 bool should_mark_broken) { 210 bool should_mark_broken) {
201 const url::SchemeHostPort server(request_info.url); 211 const url::SchemeHostPort server(request_info.url);
202 const AlternativeServiceInfoVector alternative_service_info_vector = 212 const AlternativeServiceInfoVector alternative_service_info_vector =
203 session_->http_server_properties()->GetAlternativeServiceInfos(server); 213 session_->http_server_properties()->GetAlternativeServiceInfos(server);
204 EXPECT_EQ(1u, alternative_service_info_vector.size()); 214 EXPECT_EQ(1u, alternative_service_info_vector.size());
205 EXPECT_EQ(should_mark_broken, 215 EXPECT_EQ(should_mark_broken,
206 session_->http_server_properties()->IsAlternativeServiceBroken( 216 session_->http_server_properties()->IsAlternativeServiceBroken(
(...skipping 1266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1473 Initialize(); 1483 Initialize();
1474 Preconnect(kNumPreconects); 1484 Preconnect(kNumPreconects);
1475 // If experiment is enabled, only 1 stream is requested. 1485 // If experiment is enabled, only 1 stream is requested.
1476 EXPECT_EQ( 1486 EXPECT_EQ(
1477 (int)actual_num_connects, 1487 (int)actual_num_connects,
1478 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job())); 1488 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job()));
1479 base::RunLoop().RunUntilIdle(); 1489 base::RunLoop().RunUntilIdle();
1480 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 1490 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
1481 } 1491 }
1482 1492
1493 // Test that GetAlternativeServiceInfoFor will include a list of advertised
1494 // versions.
1495 TEST_F(HttpStreamFactoryImplJobControllerTest, GetAlternativeServiceInfoFor) {
1496 HttpRequestInfo request_info;
1497 request_info.method = "GET";
1498 request_info.url = GURL("https://www.google.com");
1499
1500 Initialize(request_info);
1501 url::SchemeHostPort server(request_info.url);
1502 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1503 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url);
1504 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
1505
1506 // Set alternative service with no advertised version, JobController will
1507 // append default supported quic versions when get alternative service info.
1508 session_->http_server_properties()->SetAlternativeService(
1509 server, alternative_service, expiration, QuicVersionVector());
1510
1511 AlternativeServiceInfo alt_svc_info =
1512 JobControllerPeer::GetAlternativeServiceInfoFor(
1513 job_controller_, request_info, &request_delegate_,
1514 HttpStreamRequest::HTTP_STREAM);
1515 const QuicVersionVector supported_versions =
1516 session_->params().quic_supported_versions;
1517 // Verify that JobController appends list of supported QUIC versions.
1518 EXPECT_EQ(supported_versions.size(),
1519 alt_svc_info.advertised_versions().size());
1520 for (unsigned int i = 0; i < supported_versions.size(); i++) {
1521 EXPECT_EQ(supported_versions[i], alt_svc_info.advertised_versions()[i]);
1522 }
1523
1524 // Set alternative service for the same server with QUIC_VERSION_39 specified.
1525 ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService(
1526 server, alternative_service, expiration, {QUIC_VERSION_39}));
1527
1528 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
1529 job_controller_, request_info, &request_delegate_,
1530 HttpStreamRequest::HTTP_STREAM);
1531 EXPECT_EQ(1u, alt_svc_info.advertised_versions().size());
1532 // Verify that JobController returns the single version specified in set.
1533 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[0]);
1534
1535 // Set alternative service for the same server with two QUIC versions:
1536 // QUIC_VERSION_35, QUIC_VERSION_39.
1537 ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService(
1538 server, alternative_service, expiration,
1539 {QUIC_VERSION_35, QUIC_VERSION_39}));
1540
1541 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
1542 job_controller_, request_info, &request_delegate_,
1543 HttpStreamRequest::HTTP_STREAM);
1544 EXPECT_EQ(2u, alt_svc_info.advertised_versions().size());
1545 // Verify that JobController returns the list of versions specified in set.
1546 EXPECT_EQ(QUIC_VERSION_35, alt_svc_info.advertised_versions()[0]);
1547 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[1]);
1548 }
1549
1483 } // namespace net 1550 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698