Index: net/http/http_server_properties_manager_unittest.cc |
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc |
index e4f2141977ef55ed41ce9b04efa8cb15da284235..1fd0e07fcffebc260855ac46092ad585a5116ffe 100644 |
--- a/net/http/http_server_properties_manager_unittest.cc |
+++ b/net/http/http_server_properties_manager_unittest.cc |
@@ -162,9 +162,9 @@ class HttpServerPropertiesManagerTest : public testing::Test { |
} |
bool HasAlternativeService(const HostPortPair& server) { |
- const AlternativeService alternative_service = |
- http_server_props_manager_->GetAlternativeService(server); |
- return alternative_service.protocol != UNINITIALIZED_ALTERNATE_PROTOCOL; |
+ const AlternativeServiceVector alternative_service_vector = |
+ http_server_props_manager_->GetAlternativeServices(server); |
+ return !alternative_service_vector.empty(); |
} |
//base::RunLoop loop_; |
@@ -189,13 +189,16 @@ TEST_F(HttpServerPropertiesManagerTest, |
// Set supports_spdy for www.google.com:80. |
server_pref_dict->SetBoolean("supports_spdy", true); |
- // Set up alternative_service for www.google.com:80. |
- base::DictionaryValue* alternative_service_dict = new base::DictionaryValue; |
- alternative_service_dict->SetString("protocol_str", "npn-h2"); |
- alternative_service_dict->SetString("host", "maps.google.com"); |
- alternative_service_dict->SetInteger("port", 443); |
+ // Set up alternative_services for www.google.com:80. |
+ base::DictionaryValue* alternative_service_dict0 = new base::DictionaryValue; |
+ alternative_service_dict0->SetInteger("port", 443); |
+ alternative_service_dict0->SetString("protocol_str", "npn-spdy/3"); |
+ base::DictionaryValue* alternative_service_dict1 = new base::DictionaryValue; |
+ alternative_service_dict1->SetInteger("port", 1234); |
+ alternative_service_dict1->SetString("protocol_str", "quic"); |
base::ListValue* alternative_service_list = new base::ListValue; |
- alternative_service_list->Append(alternative_service_dict); |
+ alternative_service_list->Append(alternative_service_dict0); |
+ alternative_service_list->Append(alternative_service_dict1); |
server_pref_dict->SetWithoutPathExpansion("alternative_service", |
alternative_service_list); |
@@ -215,7 +218,7 @@ TEST_F(HttpServerPropertiesManagerTest, |
server_pref_dict1->SetBoolean("supports_spdy", true); |
// Set up alternate_protocol for mail.google.com:80 to test migration to |
- // alternative-service. |
+ // alternative_service. |
base::DictionaryValue* alternate_protocol_dict = new base::DictionaryValue; |
alternate_protocol_dict->SetString("protocol_str", "npn-spdy/3.1"); |
alternate_protocol_dict->SetInteger("port", 444); |
@@ -259,16 +262,24 @@ TEST_F(HttpServerPropertiesManagerTest, |
HostPortPair::FromString("foo.google.com:1337"))); |
// Verify alternative service. |
- AlternativeService alternative_service = |
- http_server_props_manager_->GetAlternativeService(google_server); |
- EXPECT_EQ(NPN_SPDY_4, alternative_service.protocol); |
- EXPECT_EQ("maps.google.com", alternative_service.host); |
- EXPECT_EQ(443, alternative_service.port); |
- alternative_service = |
- http_server_props_manager_->GetAlternativeService(mail_server); |
- EXPECT_EQ(NPN_SPDY_3_1, alternative_service.protocol); |
- EXPECT_EQ("mail.google.com", alternative_service.host); |
- EXPECT_EQ(444, alternative_service.port); |
+ const AlternativeServiceMap& map = |
+ http_server_props_manager_->alternative_service_map(); |
+ ASSERT_EQ(2u, map.size()); |
+ AlternativeServiceMap::const_iterator map_it = map.begin(); |
+ EXPECT_EQ("www.google.com", map_it->first.host()); |
+ ASSERT_EQ(2u, map_it->second.size()); |
+ EXPECT_EQ(NPN_SPDY_3, map_it->second[0].alternative_service.protocol); |
+ EXPECT_TRUE(map_it->second[0].alternative_service.host.empty()); |
+ EXPECT_EQ(443, map_it->second[0].alternative_service.port); |
+ EXPECT_EQ(QUIC, map_it->second[1].alternative_service.protocol); |
+ EXPECT_TRUE(map_it->second[1].alternative_service.host.empty()); |
+ EXPECT_EQ(1234, map_it->second[1].alternative_service.port); |
+ ++map_it; |
+ EXPECT_EQ("mail.google.com", map_it->first.host()); |
+ ASSERT_EQ(1u, map_it->second.size()); |
+ EXPECT_EQ(NPN_SPDY_3_1, map_it->second[0].alternative_service.protocol); |
+ EXPECT_TRUE(map_it->second[0].alternative_service.host.empty()); |
+ EXPECT_EQ(444, map_it->second[0].alternative_service.port); |
// Verify SupportsQuic. |
IPAddressNumber last_address; |
@@ -296,7 +307,6 @@ TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) { |
server_pref_dict->SetBoolean("supports_spdy", true); |
// Set up alternative_service for www.google.com:65536. |
- |
base::DictionaryValue* alternative_service_dict = new base::DictionaryValue; |
alternative_service_dict->SetString("protocol_str", "npn-spdy/3"); |
alternative_service_dict->SetInteger("port", 80); |
@@ -506,13 +516,14 @@ TEST_F(HttpServerPropertiesManagerTest, ClearAllSpdySetting) { |
Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
} |
-TEST_F(HttpServerPropertiesManagerTest, GetAlternativeService) { |
+TEST_F(HttpServerPropertiesManagerTest, GetAlternativeServices) { |
ExpectPrefsUpdate(); |
ExpectScheduleUpdatePrefsOnNetworkThread(); |
HostPortPair spdy_server_mail("mail.google.com", 80); |
EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
- AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com", 443); |
+ const AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com", |
+ 443); |
http_server_props_manager_->SetAlternativeService(spdy_server_mail, |
alternative_service, 1.0); |
// ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. |
@@ -523,13 +534,60 @@ TEST_F(HttpServerPropertiesManagerTest, GetAlternativeService) { |
base::RunLoop().RunUntilIdle(); |
Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
- alternative_service = |
- http_server_props_manager_->GetAlternativeService(spdy_server_mail); |
- EXPECT_EQ(443, alternative_service.port); |
- EXPECT_EQ(NPN_SPDY_4, alternative_service.protocol); |
+ AlternativeServiceVector alternative_service_vector = |
+ http_server_props_manager_->GetAlternativeServices(spdy_server_mail); |
+ ASSERT_EQ(1u, alternative_service_vector.size()); |
+ EXPECT_EQ(alternative_service, alternative_service_vector[0]); |
+} |
+ |
+TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) { |
+ ExpectPrefsUpdate(); |
+ ExpectScheduleUpdatePrefsOnNetworkThread(); |
+ |
+ HostPortPair spdy_server_mail("mail.google.com", 80); |
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
+ AlternativeServiceInfoVector alternative_service_info_vector; |
+ const AlternativeService alternative_service1(NPN_SPDY_4, "mail.google.com", |
+ 443); |
+ alternative_service_info_vector.push_back( |
+ AlternativeServiceInfo(alternative_service1, 1.0)); |
+ const AlternativeService alternative_service2(QUIC, "mail.google.com", 1234); |
+ alternative_service_info_vector.push_back( |
+ AlternativeServiceInfo(alternative_service2, 1.0)); |
+ http_server_props_manager_->SetAlternativeServices( |
+ spdy_server_mail, alternative_service_info_vector); |
+ // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. |
+ http_server_props_manager_->SetAlternativeServices( |
+ spdy_server_mail, alternative_service_info_vector); |
+ |
+ // Run the task. |
+ base::RunLoop().RunUntilIdle(); |
+ Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
+ |
+ AlternativeServiceVector alternative_service_vector = |
+ http_server_props_manager_->GetAlternativeServices(spdy_server_mail); |
+ ASSERT_EQ(2u, alternative_service_vector.size()); |
+ EXPECT_EQ(alternative_service1, alternative_service_vector[0]); |
+ EXPECT_EQ(alternative_service2, alternative_service_vector[1]); |
+} |
+ |
+TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServicesEmpty) { |
+ HostPortPair spdy_server_mail("mail.google.com", 80); |
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
+ const AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com", |
+ 443); |
+ http_server_props_manager_->SetAlternativeServices( |
+ spdy_server_mail, AlternativeServiceInfoVector()); |
+ // ExpectScheduleUpdatePrefsOnNetworkThread() should not be called. |
+ |
+ // Run the task. |
+ base::RunLoop().RunUntilIdle(); |
+ Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
+ |
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
} |
-TEST_F(HttpServerPropertiesManagerTest, ClearAlternativeService) { |
+TEST_F(HttpServerPropertiesManagerTest, ClearAlternativeServices) { |
ExpectPrefsUpdate(); |
ExpectScheduleUpdatePrefsOnNetworkThread(); |
@@ -539,9 +597,9 @@ TEST_F(HttpServerPropertiesManagerTest, ClearAlternativeService) { |
http_server_props_manager_->SetAlternativeService(spdy_server_mail, |
alternative_service, 1.0); |
ExpectScheduleUpdatePrefsOnNetworkThread(); |
- http_server_props_manager_->ClearAlternativeService(spdy_server_mail); |
+ http_server_props_manager_->ClearAlternativeServices(spdy_server_mail); |
// ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. |
- http_server_props_manager_->ClearAlternativeService(spdy_server_mail); |
+ http_server_props_manager_->ClearAlternativeServices(spdy_server_mail); |
// Run the task. |
base::RunLoop().RunUntilIdle(); |
@@ -719,7 +777,6 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) { |
// Set up alternative_service for www.google.com:i. |
base::DictionaryValue* alternative_service_dict = new base::DictionaryValue; |
alternative_service_dict->SetString("protocol_str", "npn-h2"); |
- alternative_service_dict->SetString("host", ""); |
alternative_service_dict->SetInteger("port", i); |
base::ListValue* alternative_service_list = new base::ListValue; |
alternative_service_list->Append(alternative_service_dict); |
@@ -759,11 +816,12 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) { |
// Verify alternative service. |
for (int i = 0; i < 200; ++i) { |
std::string server = StringPrintf("www.google.com:%d", i); |
- AlternativeService alternative_service = |
- http_server_props_manager_->GetAlternativeService( |
+ AlternativeServiceVector alternative_service_vector = |
+ http_server_props_manager_->GetAlternativeServices( |
HostPortPair::FromString(server)); |
- EXPECT_EQ(i, alternative_service.port); |
- EXPECT_EQ(NPN_SPDY_4, alternative_service.protocol); |
+ ASSERT_EQ(1u, alternative_service_vector.size()); |
+ EXPECT_EQ(NPN_SPDY_4, alternative_service_vector[0].protocol); |
+ EXPECT_EQ(i, alternative_service_vector[0].port); |
} |
// Verify SupportsQuic. |
@@ -779,12 +837,21 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { |
const HostPortPair server_mail("mail.google.com", 80); |
// Set alternate protocol. |
- AlternativeService www_altsvc(NPN_SPDY_4, "", 443); |
- AlternativeService mail_altsvc(NPN_SPDY_3_1, "mail.google.com", 444); |
- http_server_props_manager_->SetAlternativeService(server_www, www_altsvc, |
- 1.0); |
- http_server_props_manager_->SetAlternativeService(server_mail, mail_altsvc, |
- 0.2); |
+ AlternativeServiceInfoVector alternative_service_info_vector; |
+ AlternativeService www_alternative_service1(NPN_SPDY_4, "", 443); |
+ alternative_service_info_vector.push_back( |
+ AlternativeServiceInfo(www_alternative_service1, 1.0)); |
+ AlternativeService www_alternative_service2(NPN_SPDY_4, "www.google.com", |
+ 1234); |
+ alternative_service_info_vector.push_back( |
+ AlternativeServiceInfo(www_alternative_service2, 0.7)); |
+ http_server_props_manager_->SetAlternativeServices( |
+ server_www, alternative_service_info_vector); |
+ |
+ AlternativeService mail_alternative_service(NPN_SPDY_3_1, "foo.google.com", |
+ 444); |
+ http_server_props_manager_->SetAlternativeService( |
+ server_mail, mail_alternative_service, 0.2); |
// Set ServerNetworkStats. |
ServerNetworkStats stats; |
@@ -805,11 +872,11 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { |
// Verify preferences. |
const char expected_json[] = |
"{\"servers\":{\"mail.google.com:80\":{\"alternative_service\":[{" |
- "\"host\":" |
- "\"mail.google.com\",\"port\":444,\"probability\":0.2,\"protocol_str\":" |
- "\"npn-spdy/" |
- "3.1\"}],\"network_stats\":{\"srtt\":42}},\"www.google.com:80\":" |
- "{\"alternative_service\":[{\"port\":443,\"probability\":1.0," |
+ "\"host\":\"foo.google.com\",\"port\":444,\"probability\":0.2," |
+ "\"protocol_str\":\"npn-spdy/3.1\"}],\"network_stats\":{\"srtt\":42}}," |
+ "\"www.google.com:80\":{\"alternative_service\":[{\"port\":443," |
+ "\"probability\":1.0,\"protocol_str\":\"npn-h2\"}," |
+ "{\"host\":\"www.google.com\",\"port\":1234,\"probability\":0.7," |
"\"protocol_str\":\"npn-h2\"}]}},\"supports_quic\":" |
"{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":3}"; |