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

Unified Diff: net/http/http_server_properties_manager_unittest.cc

Issue 1216703002: Implement multiple alternative services per origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nit. Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_server_properties_manager.cc ('k') | net/http/http_stream_factory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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}";
« no previous file with comments | « net/http/http_server_properties_manager.cc ('k') | net/http/http_stream_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698