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

Side by Side Diff: net/http/http_server_properties_impl_unittest.cc

Issue 1534593002: SPDY Settings - preferences read from the disk maintain MRU order (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix_spdy_servers_mru_cache
Patch Set: rebase Created 5 years 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
« no previous file with comments | « net/http/http_server_properties_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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" 10 #include "base/basictypes.h"
11 #include "base/containers/hash_tables.h" 11 #include "base/containers/hash_tables.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "net/base/host_port_pair.h" 15 #include "net/base/host_port_pair.h"
16 #include "net/base/ip_address_number.h" 16 #include "net/base/ip_address_number.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 namespace base { 19 namespace base {
20 class ListValue; 20 class ListValue;
21 } 21 }
22 22
23 namespace net { 23 namespace net {
24 24
25 const int kMaxSupportsSpdyServerHosts = 500;
26
27 class HttpServerPropertiesImplPeer { 25 class HttpServerPropertiesImplPeer {
28 public: 26 public:
29 static void AddBrokenAlternativeServiceWithExpirationTime( 27 static void AddBrokenAlternativeServiceWithExpirationTime(
30 HttpServerPropertiesImpl& impl, 28 HttpServerPropertiesImpl& impl,
31 AlternativeService alternative_service, 29 AlternativeService alternative_service,
32 base::TimeTicks when) { 30 base::TimeTicks when) {
33 impl.broken_alternative_services_.insert( 31 impl.broken_alternative_services_.insert(
34 std::make_pair(alternative_service, when)); 32 std::make_pair(alternative_service, when));
35 ++impl.recently_broken_alternative_services_[alternative_service]; 33 ++impl.recently_broken_alternative_services_[alternative_service];
36 } 34 }
37 35
38 static void ExpireBrokenAlternateProtocolMappings( 36 static void ExpireBrokenAlternateProtocolMappings(
39 HttpServerPropertiesImpl& impl) { 37 HttpServerPropertiesImpl& impl) {
40 impl.ExpireBrokenAlternateProtocolMappings(); 38 impl.ExpireBrokenAlternateProtocolMappings();
41 } 39 }
42 }; 40 };
43 41
44 void PrintTo(const AlternativeService& alternative_service, std::ostream* os) { 42 void PrintTo(const AlternativeService& alternative_service, std::ostream* os) {
45 *os << alternative_service.ToString(); 43 *os << alternative_service.ToString();
46 } 44 }
47 45
48 namespace { 46 namespace {
49 47
48 const int kMaxSupportsSpdyServerHosts = 500;
49 const SpdySettingsIds kSpdySettingsId = SETTINGS_UPLOAD_BANDWIDTH;
50 const SpdySettingsFlags kSpdySettingsFlags = SETTINGS_FLAG_PERSISTED;
51
52 struct SpdySettingsDataToVerify {
53 HostPortPair spdy_server;
54 uint32 value;
55 };
56
50 class HttpServerPropertiesImplTest : public testing::Test { 57 class HttpServerPropertiesImplTest : public testing::Test {
51 protected: 58 protected:
52 bool HasAlternativeService(const HostPortPair& origin) { 59 bool HasAlternativeService(const HostPortPair& origin) {
53 const AlternativeServiceVector alternative_service_vector = 60 const AlternativeServiceVector alternative_service_vector =
54 impl_.GetAlternativeServices(origin); 61 impl_.GetAlternativeServices(origin);
55 return !alternative_service_vector.empty(); 62 return !alternative_service_vector.empty();
56 } 63 }
57 64
58 bool SetAlternativeService(const HostPortPair& origin, 65 bool SetAlternativeService(const HostPortPair& origin,
59 const AlternativeService& alternative_service, 66 const AlternativeService& alternative_service,
60 double alternative_probability) { 67 double alternative_probability) {
61 const base::Time expiration = 68 const base::Time expiration =
62 base::Time::Now() + base::TimeDelta::FromDays(1); 69 base::Time::Now() + base::TimeDelta::FromDays(1);
63 return impl_.SetAlternativeService(origin, alternative_service, 70 return impl_.SetAlternativeService(origin, alternative_service,
64 alternative_probability, expiration); 71 alternative_probability, expiration);
65 } 72 }
66 73
74 void InitializeSpdySettingsUploadBandwidth(SpdySettingsMap* spdy_settings_map,
75 const HostPortPair& spdy_server,
76 uint32 value) {
77 SettingsMap settings_map;
78 settings_map[kSpdySettingsId] =
79 SettingsFlagsAndValue(kSpdySettingsFlags, value);
80 spdy_settings_map->Put(spdy_server, settings_map);
81 }
82
83 void VerifySpdySettingsUploadBandwidth(
84 const SpdySettingsDataToVerify* data_to_verify) {
85 const SpdySettingsMap& spdy_settings_map = impl_.spdy_settings_map();
86 int count = 0;
87 for (SpdySettingsMap::const_iterator map_it = spdy_settings_map.begin();
88 map_it != spdy_settings_map.end(); ++map_it, ++count) {
89 const SpdySettingsDataToVerify& data = data_to_verify[count];
90 EXPECT_TRUE(data.spdy_server.Equals(map_it->first));
91 const SettingsMap& settings_map_memory = map_it->second;
92
93 EXPECT_EQ(1U, settings_map_memory.size());
94 SettingsMap::const_iterator it =
95 settings_map_memory.find(kSpdySettingsId);
96 EXPECT_TRUE(it != settings_map_memory.end());
97 SettingsFlagsAndValue flags_and_value_memory = it->second;
98 EXPECT_EQ(kSpdySettingsFlags, flags_and_value_memory.first);
99 EXPECT_EQ(data.value, flags_and_value_memory.second);
100 }
101 }
102
67 HttpServerPropertiesImpl impl_; 103 HttpServerPropertiesImpl impl_;
68 }; 104 };
69 105
70 typedef HttpServerPropertiesImplTest SpdyServerPropertiesTest; 106 typedef HttpServerPropertiesImplTest SpdyServerPropertiesTest;
71 107
72 TEST_F(SpdyServerPropertiesTest, Initialize) { 108 TEST_F(SpdyServerPropertiesTest, Initialize) {
73 HostPortPair spdy_server_google("www.google.com", 443); 109 HostPortPair spdy_server_google("www.google.com", 443);
74 std::string spdy_server_g = spdy_server_google.ToString(); 110 std::string spdy_server_g = spdy_server_google.ToString();
75 111
76 HostPortPair spdy_server_docs("docs.google.com", 443); 112 HostPortPair spdy_server_docs("docs.google.com", 443);
(...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 EXPECT_TRUE( 967 EXPECT_TRUE(
932 impl_.WasAlternativeServiceRecentlyBroken(bar_alternative_service)); 968 impl_.WasAlternativeServiceRecentlyBroken(bar_alternative_service));
933 EXPECT_FALSE( 969 EXPECT_FALSE(
934 impl_.WasAlternativeServiceRecentlyBroken(baz_alternative_service)); 970 impl_.WasAlternativeServiceRecentlyBroken(baz_alternative_service));
935 } 971 }
936 972
937 typedef HttpServerPropertiesImplTest SpdySettingsServerPropertiesTest; 973 typedef HttpServerPropertiesImplTest SpdySettingsServerPropertiesTest;
938 974
939 TEST_F(SpdySettingsServerPropertiesTest, Initialize) { 975 TEST_F(SpdySettingsServerPropertiesTest, Initialize) {
940 HostPortPair spdy_server_google("www.google.com", 443); 976 HostPortPair spdy_server_google("www.google.com", 443);
977 HostPortPair spdy_server_photos("photos.google.com", 443);
978 HostPortPair spdy_server_docs("docs.google.com", 443);
979 HostPortPair spdy_server_mail("mail.google.com", 443);
941 980
942 // Check by initializing empty spdy settings. 981 // Check by initializing empty spdy settings.
943 SpdySettingsMap spdy_settings_map(SpdySettingsMap::NO_AUTO_EVICT); 982 SpdySettingsMap spdy_settings_map(SpdySettingsMap::NO_AUTO_EVICT);
944 impl_.InitializeSpdySettingsServers(&spdy_settings_map); 983 impl_.InitializeSpdySettingsServers(&spdy_settings_map);
945 EXPECT_TRUE(impl_.GetSpdySettings(spdy_server_google).empty()); 984 EXPECT_TRUE(impl_.GetSpdySettings(spdy_server_google).empty());
946 985
947 // Check by initializing with www.google.com:443 spdy server settings. 986 // Check by initializing spdy server settings for www.google.com:443 and
948 SettingsMap settings_map; 987 // photos.google.com:443.
949 const SpdySettingsIds id = SETTINGS_UPLOAD_BANDWIDTH; 988 const SpdySettingsDataToVerify data_to_verify1[] = {
950 const SpdySettingsFlags flags = SETTINGS_FLAG_PERSISTED; 989 {spdy_server_google, 10000}, {spdy_server_photos, 20000},
951 const uint32 value = 31337; 990 };
952 SettingsFlagsAndValue flags_and_value(flags, value); 991 // Insert them in reverse order to make spdy_server_google as MRU.
953 settings_map[id] = flags_and_value; 992 SpdySettingsMap spdy_settings_map1(SpdySettingsMap::NO_AUTO_EVICT);
954 spdy_settings_map.Put(spdy_server_google, settings_map); 993 InitializeSpdySettingsUploadBandwidth(&spdy_settings_map1,
955 impl_.InitializeSpdySettingsServers(&spdy_settings_map); 994 data_to_verify1[1].spdy_server,
995 data_to_verify1[1].value);
996 InitializeSpdySettingsUploadBandwidth(&spdy_settings_map1,
997 data_to_verify1[0].spdy_server,
998 data_to_verify1[0].value);
999 impl_.InitializeSpdySettingsServers(&spdy_settings_map1);
1000 VerifySpdySettingsUploadBandwidth(data_to_verify1);
956 1001
957 const SettingsMap& settings_map2 = impl_.GetSpdySettings(spdy_server_google); 1002 // Check by initializing mail.google.com:443 and docs.google.com:443 as spdy
958 ASSERT_EQ(1U, settings_map2.size()); 1003 // servers.
959 SettingsMap::const_iterator it = settings_map2.find(id); 1004 const SpdySettingsDataToVerify data_to_verify2[] = {
960 EXPECT_TRUE(it != settings_map2.end()); 1005 {spdy_server_google, 10000},
961 SettingsFlagsAndValue flags_and_value2 = it->second; 1006 {spdy_server_photos, 20000},
962 EXPECT_EQ(flags, flags_and_value2.first); 1007 {spdy_server_mail, 30000},
963 EXPECT_EQ(value, flags_and_value2.second); 1008 {spdy_server_docs, 40000},
1009 };
1010 SpdySettingsMap spdy_settings_map2(SpdySettingsMap::NO_AUTO_EVICT);
1011 InitializeSpdySettingsUploadBandwidth(&spdy_settings_map2,
1012 data_to_verify2[3].spdy_server,
1013 data_to_verify2[3].value);
1014 InitializeSpdySettingsUploadBandwidth(&spdy_settings_map2,
1015 data_to_verify2[2].spdy_server,
1016 data_to_verify2[2].value);
1017 impl_.InitializeSpdySettingsServers(&spdy_settings_map2);
1018 VerifySpdySettingsUploadBandwidth(data_to_verify2);
1019
1020 // Verify new data that is being initialized overwrites what is already in the
1021 // memory and also verify the recency list order by updating 3rd and 1st
1022 // element's data.
1023 const SpdySettingsDataToVerify data_to_verify3[] = {
1024 {spdy_server_google, 10000},
1025 {spdy_server_photos, 60000}, // Change the value of photos.
1026 {spdy_server_mail, 30000},
1027 {spdy_server_docs, 50000}, // Change the value of docs.
1028 };
1029 SpdySettingsMap spdy_settings_map3(SpdySettingsMap::NO_AUTO_EVICT);
1030 InitializeSpdySettingsUploadBandwidth(&spdy_settings_map3,
1031 data_to_verify3[3].spdy_server,
1032 data_to_verify3[3].value);
1033 InitializeSpdySettingsUploadBandwidth(&spdy_settings_map3,
1034 data_to_verify3[1].spdy_server,
1035 data_to_verify3[1].value);
1036 impl_.InitializeSpdySettingsServers(&spdy_settings_map3);
1037 VerifySpdySettingsUploadBandwidth(data_to_verify3);
964 } 1038 }
965 1039
966 TEST_F(SpdySettingsServerPropertiesTest, SetSpdySetting) { 1040 TEST_F(SpdySettingsServerPropertiesTest, SetSpdySetting) {
967 HostPortPair spdy_server_empty(std::string(), 443); 1041 HostPortPair spdy_server_empty(std::string(), 443);
968 const SettingsMap& settings_map0 = impl_.GetSpdySettings(spdy_server_empty); 1042 const SettingsMap& settings_map0 = impl_.GetSpdySettings(spdy_server_empty);
969 EXPECT_EQ(0U, settings_map0.size()); // Returns kEmptySettingsMap. 1043 EXPECT_EQ(0U, settings_map0.size()); // Returns kEmptySettingsMap.
970 1044
971 // Add www.google.com:443 as persisting. 1045 // Add www.google.com:443 as persisting.
972 HostPortPair spdy_server_google("www.google.com", 443); 1046 HostPortPair spdy_server_google("www.google.com", 443);
973 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH; 1047 const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH;
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); 1308 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id)));
1235 1309
1236 impl_.Clear(); 1310 impl_.Clear();
1237 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); 1311 EXPECT_EQ(0u, impl_.quic_server_info_map().size());
1238 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); 1312 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id));
1239 } 1313 }
1240 1314
1241 } // namespace 1315 } // namespace
1242 1316
1243 } // namespace net 1317 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_server_properties_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698