Index: net/http/http_stream_factory_impl_job_controller_unittest.cc |
diff --git a/net/http/http_stream_factory_impl_job_controller_unittest.cc b/net/http/http_stream_factory_impl_job_controller_unittest.cc |
index 0e30b72664ec3dc8746d2d31a0f2e6e60e3a8fae..38216b9f66d97dbba0c51ebd10c42f90ea43b35d 100644 |
--- a/net/http/http_stream_factory_impl_job_controller_unittest.cc |
+++ b/net/http/http_stream_factory_impl_job_controller_unittest.cc |
@@ -122,6 +122,15 @@ class JobControllerPeer { |
HttpStreamFactoryImpl::JobController* job_controller) { |
return job_controller->main_job_is_blocked_; |
} |
+ |
+ static AlternativeServiceInfo GetAlternativeServiceInfoFor( |
+ HttpStreamFactoryImpl::JobController* job_controller, |
+ const HttpRequestInfo& request_info, |
+ HttpStreamRequest::Delegate* delegate, |
+ HttpStreamRequest::StreamType stream_type) { |
+ return job_controller->GetAlternativeServiceInfoFor(request_info, delegate, |
+ stream_type); |
+ } |
}; |
class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { |
@@ -193,7 +202,8 @@ class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { |
url::SchemeHostPort server(request_info.url); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
session_->http_server_properties()->SetAlternativeService( |
- server, alternative_service, expiration); |
+ server, alternative_service, expiration, |
+ HttpNetworkSession::Params().quic_supported_versions); |
} |
void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info, |
@@ -1480,4 +1490,61 @@ TEST_P(HttpStreamFactoryImplJobControllerPreconnectTest, |
EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); |
} |
+// Test that GetAlternativeServiceInfoFor will include a list of advertised |
+// versions. |
+TEST_F(HttpStreamFactoryImplJobControllerTest, GetAlternativeServiceInfoFor) { |
+ HttpRequestInfo request_info; |
+ request_info.method = "GET"; |
+ request_info.url = GURL("https://www.google.com"); |
+ |
+ Initialize(request_info); |
+ url::SchemeHostPort server(request_info.url); |
+ AlternativeService alternative_service(kProtoQUIC, server.host(), 443); |
+ HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url); |
+ base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
+ |
+ // Set alternative service with no advertised version, JobController will |
+ // append default supported quic versions when get alternative service info. |
+ session_->http_server_properties()->SetAlternativeService( |
+ server, alternative_service, expiration, QuicVersionVector()); |
+ |
+ AlternativeServiceInfo alt_svc_info = |
+ JobControllerPeer::GetAlternativeServiceInfoFor( |
+ job_controller_, request_info, &request_delegate_, |
+ HttpStreamRequest::HTTP_STREAM); |
+ const QuicVersionVector supported_versions = |
+ session_->params().quic_supported_versions; |
+ // Verify that JobController appends list of supported QUIC versions. |
+ EXPECT_EQ(supported_versions.size(), |
+ alt_svc_info.advertised_versions().size()); |
+ for (unsigned int i = 0; i < supported_versions.size(); i++) { |
+ EXPECT_EQ(supported_versions[i], alt_svc_info.advertised_versions()[i]); |
+ } |
+ |
+ // Set alternative service for the same server with QUIC_VERSION_39 specified. |
+ ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService( |
+ server, alternative_service, expiration, {QUIC_VERSION_39})); |
+ |
+ alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( |
+ job_controller_, request_info, &request_delegate_, |
+ HttpStreamRequest::HTTP_STREAM); |
+ EXPECT_EQ(1u, alt_svc_info.advertised_versions().size()); |
+ // Verify that JobController returns the single version specified in set. |
+ EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[0]); |
+ |
+ // Set alternative service for the same server with two QUIC versions: |
+ // QUIC_VERSION_35, QUIC_VERSION_39. |
+ ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService( |
+ server, alternative_service, expiration, |
+ {QUIC_VERSION_35, QUIC_VERSION_39})); |
+ |
+ alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( |
+ job_controller_, request_info, &request_delegate_, |
+ HttpStreamRequest::HTTP_STREAM); |
+ EXPECT_EQ(2u, alt_svc_info.advertised_versions().size()); |
+ // Verify that JobController returns the list of versions specified in set. |
+ EXPECT_EQ(QUIC_VERSION_35, alt_svc_info.advertised_versions()[0]); |
+ EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[1]); |
+} |
+ |
} // namespace net |