| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_server_properties_impl.h" | 5 #include "net/http/http_server_properties_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | |
| 11 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
| 12 #include "base/logging.h" | 11 #include "base/logging.h" |
| 13 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/values.h" | 13 #include "base/values.h" |
| 15 #include "net/base/host_port_pair.h" | 14 #include "net/base/host_port_pair.h" |
| 16 #include "net/base/ip_address_number.h" | 15 #include "net/base/ip_address_number.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 17 |
| 19 namespace base { | 18 namespace base { |
| 20 class ListValue; | 19 class ListValue; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 44 } | 43 } |
| 45 | 44 |
| 46 namespace { | 45 namespace { |
| 47 | 46 |
| 48 const int kMaxSupportsSpdyServerHosts = 500; | 47 const int kMaxSupportsSpdyServerHosts = 500; |
| 49 const SpdySettingsIds kSpdySettingsId = SETTINGS_UPLOAD_BANDWIDTH; | 48 const SpdySettingsIds kSpdySettingsId = SETTINGS_UPLOAD_BANDWIDTH; |
| 50 const SpdySettingsFlags kSpdySettingsFlags = SETTINGS_FLAG_PERSISTED; | 49 const SpdySettingsFlags kSpdySettingsFlags = SETTINGS_FLAG_PERSISTED; |
| 51 | 50 |
| 52 struct SpdySettingsDataToVerify { | 51 struct SpdySettingsDataToVerify { |
| 53 HostPortPair spdy_server; | 52 HostPortPair spdy_server; |
| 54 uint32 value; | 53 uint32_t value; |
| 55 }; | 54 }; |
| 56 | 55 |
| 57 class HttpServerPropertiesImplTest : public testing::Test { | 56 class HttpServerPropertiesImplTest : public testing::Test { |
| 58 protected: | 57 protected: |
| 59 bool HasAlternativeService(const HostPortPair& origin) { | 58 bool HasAlternativeService(const HostPortPair& origin) { |
| 60 const AlternativeServiceVector alternative_service_vector = | 59 const AlternativeServiceVector alternative_service_vector = |
| 61 impl_.GetAlternativeServices(origin); | 60 impl_.GetAlternativeServices(origin); |
| 62 return !alternative_service_vector.empty(); | 61 return !alternative_service_vector.empty(); |
| 63 } | 62 } |
| 64 | 63 |
| 65 bool SetAlternativeService(const HostPortPair& origin, | 64 bool SetAlternativeService(const HostPortPair& origin, |
| 66 const AlternativeService& alternative_service, | 65 const AlternativeService& alternative_service, |
| 67 double alternative_probability) { | 66 double alternative_probability) { |
| 68 const base::Time expiration = | 67 const base::Time expiration = |
| 69 base::Time::Now() + base::TimeDelta::FromDays(1); | 68 base::Time::Now() + base::TimeDelta::FromDays(1); |
| 70 return impl_.SetAlternativeService(origin, alternative_service, | 69 return impl_.SetAlternativeService(origin, alternative_service, |
| 71 alternative_probability, expiration); | 70 alternative_probability, expiration); |
| 72 } | 71 } |
| 73 | 72 |
| 74 void InitializeSpdySettingsUploadBandwidth(SpdySettingsMap* spdy_settings_map, | 73 void InitializeSpdySettingsUploadBandwidth(SpdySettingsMap* spdy_settings_map, |
| 75 const HostPortPair& spdy_server, | 74 const HostPortPair& spdy_server, |
| 76 uint32 value) { | 75 uint32_t value) { |
| 77 SettingsMap settings_map; | 76 SettingsMap settings_map; |
| 78 settings_map[kSpdySettingsId] = | 77 settings_map[kSpdySettingsId] = |
| 79 SettingsFlagsAndValue(kSpdySettingsFlags, value); | 78 SettingsFlagsAndValue(kSpdySettingsFlags, value); |
| 80 spdy_settings_map->Put(spdy_server, settings_map); | 79 spdy_settings_map->Put(spdy_server, settings_map); |
| 81 } | 80 } |
| 82 | 81 |
| 83 void VerifySpdySettingsUploadBandwidth( | 82 void VerifySpdySettingsUploadBandwidth( |
| 84 const SpdySettingsDataToVerify* data_to_verify) { | 83 const SpdySettingsDataToVerify* data_to_verify) { |
| 85 const SpdySettingsMap& spdy_settings_map = impl_.spdy_settings_map(); | 84 const SpdySettingsMap& spdy_settings_map = impl_.spdy_settings_map(); |
| 86 int count = 0; | 85 int count = 0; |
| (...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1102 | 1101 |
| 1103 TEST_F(SpdySettingsServerPropertiesTest, SetSpdySetting) { | 1102 TEST_F(SpdySettingsServerPropertiesTest, SetSpdySetting) { |
| 1104 HostPortPair spdy_server_empty(std::string(), 443); | 1103 HostPortPair spdy_server_empty(std::string(), 443); |
| 1105 const SettingsMap& settings_map0 = impl_.GetSpdySettings(spdy_server_empty); | 1104 const SettingsMap& settings_map0 = impl_.GetSpdySettings(spdy_server_empty); |
| 1106 EXPECT_EQ(0U, settings_map0.size()); // Returns kEmptySettingsMap. | 1105 EXPECT_EQ(0U, settings_map0.size()); // Returns kEmptySettingsMap. |
| 1107 | 1106 |
| 1108 // Add www.google.com:443 as persisting. | 1107 // Add www.google.com:443 as persisting. |
| 1109 HostPortPair spdy_server_google("www.google.com", 443); | 1108 HostPortPair spdy_server_google("www.google.com", 443); |
| 1110 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH; | 1109 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH; |
| 1111 const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST; | 1110 const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST; |
| 1112 const uint32 value1 = 31337; | 1111 const uint32_t value1 = 31337; |
| 1113 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1)); | 1112 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1)); |
| 1114 // Check the values. | 1113 // Check the values. |
| 1115 const SettingsMap& settings_map1_ret = | 1114 const SettingsMap& settings_map1_ret = |
| 1116 impl_.GetSpdySettings(spdy_server_google); | 1115 impl_.GetSpdySettings(spdy_server_google); |
| 1117 ASSERT_EQ(1U, settings_map1_ret.size()); | 1116 ASSERT_EQ(1U, settings_map1_ret.size()); |
| 1118 SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); | 1117 SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); |
| 1119 EXPECT_TRUE(it1_ret != settings_map1_ret.end()); | 1118 EXPECT_TRUE(it1_ret != settings_map1_ret.end()); |
| 1120 SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; | 1119 SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; |
| 1121 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); | 1120 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); |
| 1122 EXPECT_EQ(value1, flags_and_value1_ret.second); | 1121 EXPECT_EQ(value1, flags_and_value1_ret.second); |
| 1123 | 1122 |
| 1124 // Add mail.google.com:443 as not persisting. | 1123 // Add mail.google.com:443 as not persisting. |
| 1125 HostPortPair spdy_server_mail("mail.google.com", 443); | 1124 HostPortPair spdy_server_mail("mail.google.com", 443); |
| 1126 const SpdySettingsIds id2 = SETTINGS_DOWNLOAD_BANDWIDTH; | 1125 const SpdySettingsIds id2 = SETTINGS_DOWNLOAD_BANDWIDTH; |
| 1127 const SpdySettingsFlags flags2 = SETTINGS_FLAG_NONE; | 1126 const SpdySettingsFlags flags2 = SETTINGS_FLAG_NONE; |
| 1128 const uint32 value2 = 62667; | 1127 const uint32_t value2 = 62667; |
| 1129 EXPECT_FALSE(impl_.SetSpdySetting(spdy_server_mail, id2, flags2, value2)); | 1128 EXPECT_FALSE(impl_.SetSpdySetting(spdy_server_mail, id2, flags2, value2)); |
| 1130 const SettingsMap& settings_map2_ret = | 1129 const SettingsMap& settings_map2_ret = |
| 1131 impl_.GetSpdySettings(spdy_server_mail); | 1130 impl_.GetSpdySettings(spdy_server_mail); |
| 1132 EXPECT_EQ(0U, settings_map2_ret.size()); // Returns kEmptySettingsMap. | 1131 EXPECT_EQ(0U, settings_map2_ret.size()); // Returns kEmptySettingsMap. |
| 1133 | 1132 |
| 1134 // Add docs.google.com:443 as persisting | 1133 // Add docs.google.com:443 as persisting |
| 1135 HostPortPair spdy_server_docs("docs.google.com", 443); | 1134 HostPortPair spdy_server_docs("docs.google.com", 443); |
| 1136 const SpdySettingsIds id3 = SETTINGS_ROUND_TRIP_TIME; | 1135 const SpdySettingsIds id3 = SETTINGS_ROUND_TRIP_TIME; |
| 1137 const SpdySettingsFlags flags3 = SETTINGS_FLAG_PLEASE_PERSIST; | 1136 const SpdySettingsFlags flags3 = SETTINGS_FLAG_PLEASE_PERSIST; |
| 1138 const uint32 value3 = 93997; | 1137 const uint32_t value3 = 93997; |
| 1139 SettingsFlagsAndValue flags_and_value3(flags3, value3); | 1138 SettingsFlagsAndValue flags_and_value3(flags3, value3); |
| 1140 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id3, flags3, value3)); | 1139 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id3, flags3, value3)); |
| 1141 // Check the values. | 1140 // Check the values. |
| 1142 const SettingsMap& settings_map3_ret = | 1141 const SettingsMap& settings_map3_ret = |
| 1143 impl_.GetSpdySettings(spdy_server_docs); | 1142 impl_.GetSpdySettings(spdy_server_docs); |
| 1144 ASSERT_EQ(1U, settings_map3_ret.size()); | 1143 ASSERT_EQ(1U, settings_map3_ret.size()); |
| 1145 SettingsMap::const_iterator it3_ret = settings_map3_ret.find(id3); | 1144 SettingsMap::const_iterator it3_ret = settings_map3_ret.find(id3); |
| 1146 EXPECT_TRUE(it3_ret != settings_map3_ret.end()); | 1145 EXPECT_TRUE(it3_ret != settings_map3_ret.end()); |
| 1147 SettingsFlagsAndValue flags_and_value3_ret = it3_ret->second; | 1146 SettingsFlagsAndValue flags_and_value3_ret = it3_ret->second; |
| 1148 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3_ret.first); | 1147 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3_ret.first); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1169 ASSERT_GT(impl_.spdy_settings_map().size(), 0U); | 1168 ASSERT_GT(impl_.spdy_settings_map().size(), 0U); |
| 1170 impl_.ClearAllSpdySettings(); | 1169 impl_.ClearAllSpdySettings(); |
| 1171 ASSERT_EQ(0U, impl_.spdy_settings_map().size()); | 1170 ASSERT_EQ(0U, impl_.spdy_settings_map().size()); |
| 1172 } | 1171 } |
| 1173 | 1172 |
| 1174 TEST_F(SpdySettingsServerPropertiesTest, Clear) { | 1173 TEST_F(SpdySettingsServerPropertiesTest, Clear) { |
| 1175 // Add www.google.com:443 as persisting. | 1174 // Add www.google.com:443 as persisting. |
| 1176 HostPortPair spdy_server_google("www.google.com", 443); | 1175 HostPortPair spdy_server_google("www.google.com", 443); |
| 1177 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH; | 1176 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH; |
| 1178 const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST; | 1177 const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST; |
| 1179 const uint32 value1 = 31337; | 1178 const uint32_t value1 = 31337; |
| 1180 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1)); | 1179 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1)); |
| 1181 // Check the values. | 1180 // Check the values. |
| 1182 const SettingsMap& settings_map1_ret = | 1181 const SettingsMap& settings_map1_ret = |
| 1183 impl_.GetSpdySettings(spdy_server_google); | 1182 impl_.GetSpdySettings(spdy_server_google); |
| 1184 ASSERT_EQ(1U, settings_map1_ret.size()); | 1183 ASSERT_EQ(1U, settings_map1_ret.size()); |
| 1185 SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); | 1184 SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); |
| 1186 EXPECT_TRUE(it1_ret != settings_map1_ret.end()); | 1185 EXPECT_TRUE(it1_ret != settings_map1_ret.end()); |
| 1187 SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; | 1186 SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; |
| 1188 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); | 1187 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); |
| 1189 EXPECT_EQ(value1, flags_and_value1_ret.second); | 1188 EXPECT_EQ(value1, flags_and_value1_ret.second); |
| 1190 | 1189 |
| 1191 // Add docs.google.com:443 as persisting | 1190 // Add docs.google.com:443 as persisting |
| 1192 HostPortPair spdy_server_docs("docs.google.com", 443); | 1191 HostPortPair spdy_server_docs("docs.google.com", 443); |
| 1193 const SpdySettingsIds id3 = SETTINGS_ROUND_TRIP_TIME; | 1192 const SpdySettingsIds id3 = SETTINGS_ROUND_TRIP_TIME; |
| 1194 const SpdySettingsFlags flags3 = SETTINGS_FLAG_PLEASE_PERSIST; | 1193 const SpdySettingsFlags flags3 = SETTINGS_FLAG_PLEASE_PERSIST; |
| 1195 const uint32 value3 = 93997; | 1194 const uint32_t value3 = 93997; |
| 1196 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id3, flags3, value3)); | 1195 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id3, flags3, value3)); |
| 1197 // Check the values. | 1196 // Check the values. |
| 1198 const SettingsMap& settings_map3_ret = | 1197 const SettingsMap& settings_map3_ret = |
| 1199 impl_.GetSpdySettings(spdy_server_docs); | 1198 impl_.GetSpdySettings(spdy_server_docs); |
| 1200 ASSERT_EQ(1U, settings_map3_ret.size()); | 1199 ASSERT_EQ(1U, settings_map3_ret.size()); |
| 1201 SettingsMap::const_iterator it3_ret = settings_map3_ret.find(id3); | 1200 SettingsMap::const_iterator it3_ret = settings_map3_ret.find(id3); |
| 1202 EXPECT_TRUE(it3_ret != settings_map3_ret.end()); | 1201 EXPECT_TRUE(it3_ret != settings_map3_ret.end()); |
| 1203 SettingsFlagsAndValue flags_and_value3_ret = it3_ret->second; | 1202 SettingsFlagsAndValue flags_and_value3_ret = it3_ret->second; |
| 1204 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3_ret.first); | 1203 EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3_ret.first); |
| 1205 EXPECT_EQ(value3, flags_and_value3_ret.second); | 1204 EXPECT_EQ(value3, flags_and_value3_ret.second); |
| 1206 | 1205 |
| 1207 impl_.Clear(); | 1206 impl_.Clear(); |
| 1208 EXPECT_EQ(0U, impl_.GetSpdySettings(spdy_server_google).size()); | 1207 EXPECT_EQ(0U, impl_.GetSpdySettings(spdy_server_google).size()); |
| 1209 EXPECT_EQ(0U, impl_.GetSpdySettings(spdy_server_docs).size()); | 1208 EXPECT_EQ(0U, impl_.GetSpdySettings(spdy_server_docs).size()); |
| 1210 } | 1209 } |
| 1211 | 1210 |
| 1212 TEST_F(SpdySettingsServerPropertiesTest, MRUOfGetSpdySettings) { | 1211 TEST_F(SpdySettingsServerPropertiesTest, MRUOfGetSpdySettings) { |
| 1213 // Add www.google.com:443 as persisting. | 1212 // Add www.google.com:443 as persisting. |
| 1214 HostPortPair spdy_server_google("www.google.com", 443); | 1213 HostPortPair spdy_server_google("www.google.com", 443); |
| 1215 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH; | 1214 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH; |
| 1216 const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST; | 1215 const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST; |
| 1217 const uint32 value1 = 31337; | 1216 const uint32_t value1 = 31337; |
| 1218 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1)); | 1217 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1)); |
| 1219 | 1218 |
| 1220 // Add docs.google.com:443 as persisting | 1219 // Add docs.google.com:443 as persisting |
| 1221 HostPortPair spdy_server_docs("docs.google.com", 443); | 1220 HostPortPair spdy_server_docs("docs.google.com", 443); |
| 1222 const SpdySettingsIds id2 = SETTINGS_ROUND_TRIP_TIME; | 1221 const SpdySettingsIds id2 = SETTINGS_ROUND_TRIP_TIME; |
| 1223 const SpdySettingsFlags flags2 = SETTINGS_FLAG_PLEASE_PERSIST; | 1222 const SpdySettingsFlags flags2 = SETTINGS_FLAG_PLEASE_PERSIST; |
| 1224 const uint32 value2 = 93997; | 1223 const uint32_t value2 = 93997; |
| 1225 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id2, flags2, value2)); | 1224 EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id2, flags2, value2)); |
| 1226 | 1225 |
| 1227 // Verify the first element is docs.google.com:443. | 1226 // Verify the first element is docs.google.com:443. |
| 1228 const SpdySettingsMap& map = impl_.spdy_settings_map(); | 1227 const SpdySettingsMap& map = impl_.spdy_settings_map(); |
| 1229 SpdySettingsMap::const_iterator it = map.begin(); | 1228 SpdySettingsMap::const_iterator it = map.begin(); |
| 1230 EXPECT_TRUE(it->first.Equals(spdy_server_docs)); | 1229 EXPECT_TRUE(it->first.Equals(spdy_server_docs)); |
| 1231 const SettingsMap& settings_map2_ret = it->second; | 1230 const SettingsMap& settings_map2_ret = it->second; |
| 1232 ASSERT_EQ(1U, settings_map2_ret.size()); | 1231 ASSERT_EQ(1U, settings_map2_ret.size()); |
| 1233 SettingsMap::const_iterator it2_ret = settings_map2_ret.find(id2); | 1232 SettingsMap::const_iterator it2_ret = settings_map2_ret.find(id2); |
| 1234 EXPECT_TRUE(it2_ret != settings_map2_ret.end()); | 1233 EXPECT_TRUE(it2_ret != settings_map2_ret.end()); |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1464 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); | 1463 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); |
| 1465 | 1464 |
| 1466 impl_.Clear(); | 1465 impl_.Clear(); |
| 1467 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); | 1466 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); |
| 1468 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); | 1467 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); |
| 1469 } | 1468 } |
| 1470 | 1469 |
| 1471 } // namespace | 1470 } // namespace |
| 1472 | 1471 |
| 1473 } // namespace net | 1472 } // namespace net |
| OLD | NEW |