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

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

Issue 2587303002: Change http_server_properties_manager to always persist data to memory after 1s (Closed)
Patch Set: Created 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_manager.h" 5 #include "net/http/http_server_properties_manager.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 78
79 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { 79 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
80 public: 80 public:
81 TestingHttpServerPropertiesManager( 81 TestingHttpServerPropertiesManager(
82 HttpServerPropertiesManager::PrefDelegate* pref_delegate, 82 HttpServerPropertiesManager::PrefDelegate* pref_delegate,
83 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner, 83 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner,
84 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner) 84 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner)
85 : HttpServerPropertiesManager(pref_delegate, 85 : HttpServerPropertiesManager(pref_delegate,
86 pref_task_runner, 86 pref_task_runner,
87 net_task_runner), 87 net_task_runner),
88 pref_update_delay_(base::TimeDelta()) { 88 pref_update_delay_(base::TimeDelta()),
89 cache_update_delay_(base::TimeDelta()) {
89 InitializeOnNetworkThread(); 90 InitializeOnNetworkThread();
90 } 91 }
91 92
92 ~TestingHttpServerPropertiesManager() override {} 93 ~TestingHttpServerPropertiesManager() override {}
93 94
94 // Make these methods public for testing. 95 // Make these methods public for testing.
95 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; 96 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread;
96 97
97 // Post tasks without a delay during tests. 98 // Post tasks without a delay during tests.
98 void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override { 99 void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override {
99 HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread( 100 HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread(
100 pref_update_delay_); 101 pref_update_delay_);
101 } 102 }
102 103
103 void UpdateCacheFromPrefsOnUIConcrete() { 104 void UpdateCacheFromPrefsOnUIConcrete() {
104 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread(); 105 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread();
105 } 106 }
106 107
107 // Post tasks without a delay during tests. 108 // Post tasks without a delay during tests.
108 void StartCacheUpdateTimerOnPrefThread(base::TimeDelta delay) override { 109 void StartCacheUpdateTimerOnPrefThread(base::TimeDelta delay) override {
109 HttpServerPropertiesManager::StartCacheUpdateTimerOnPrefThread( 110 HttpServerPropertiesManager::StartCacheUpdateTimerOnPrefThread(
110 base::TimeDelta()); 111 cache_update_delay_);
111 } 112 }
112 113
113 void UpdatePrefsFromCacheOnNetworkThreadConcrete( 114 void UpdatePrefsFromCacheOnNetworkThreadConcrete(
114 const base::Closure& callback) { 115 const base::Closure& callback) {
115 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback); 116 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback);
116 } 117 }
117 118
118 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) { 119 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) {
119 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location); 120 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location);
120 } 121 }
121 122
122 void ScheduleUpdatePrefsOnNetworkThread() { 123 void ScheduleUpdatePrefsOnNetworkThread() {
123 // Picked a random Location as caller. 124 // Picked a random Location as caller.
124 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread( 125 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(
125 DETECTED_CORRUPTED_PREFS); 126 DETECTED_CORRUPTED_PREFS);
126 } 127 }
127 128
128 void set_pref_update_delay(base::TimeDelta delay) { 129 void set_pref_update_delay(base::TimeDelta delay) {
129 pref_update_delay_ = delay; 130 pref_update_delay_ = delay;
130 } 131 }
132 void set_cache_update_delay(base::TimeDelta delay) {
133 cache_update_delay_ = delay;
134 }
131 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void()); 135 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void());
132 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&)); 136 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&));
133 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location)); 137 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location));
134 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread, 138 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread,
135 void(std::vector<std::string>* spdy_servers, 139 void(std::vector<std::string>* spdy_servers,
136 AlternativeServiceMap* alternative_service_map, 140 AlternativeServiceMap* alternative_service_map,
137 IPAddress* last_quic_address, 141 IPAddress* last_quic_address,
138 ServerNetworkStatsMap* server_network_stats_map, 142 ServerNetworkStatsMap* server_network_stats_map,
139 QuicServerInfoMap* quic_server_info_map, 143 QuicServerInfoMap* quic_server_info_map,
140 bool detected_corrupted_prefs)); 144 bool detected_corrupted_prefs));
141 MOCK_METHOD6(UpdatePrefsOnPrefThread, 145 MOCK_METHOD6(UpdatePrefsOnPrefThread,
142 void(base::ListValue* spdy_server_list, 146 void(base::ListValue* spdy_server_list,
143 AlternativeServiceMap* alternative_service_map, 147 AlternativeServiceMap* alternative_service_map,
144 IPAddress* last_quic_address, 148 IPAddress* last_quic_address,
145 ServerNetworkStatsMap* server_network_stats_map, 149 ServerNetworkStatsMap* server_network_stats_map,
146 QuicServerInfoMap* quic_server_info_map, 150 QuicServerInfoMap* quic_server_info_map,
147 const base::Closure& completion)); 151 const base::Closure& completion));
148 152
149 private: 153 private:
150 // Time delays used in test for posting tasks. Default to zero. 154 // Time delays used in test for posting tasks. Default to zero.
151 base::TimeDelta pref_update_delay_; 155 base::TimeDelta pref_update_delay_;
156 base::TimeDelta cache_update_delay_;
152 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); 157 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
153 }; 158 };
154 159
155 } // namespace 160 } // namespace
156 161
157 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated 162 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated
158 // to version 4, delete the following code. 163 // to version 4, delete the following code.
159 static const int kHttpServerPropertiesVersions[] = {3, 4, 5}; 164 static const int kHttpServerPropertiesVersions[] = {3, 4, 5};
160 165
161 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { 166 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> {
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 "\"version\":5}"; 1198 "\"version\":5}";
1194 1199
1195 const base::Value* http_server_properties = 1200 const base::Value* http_server_properties =
1196 &pref_delegate_->GetServerProperties(); 1201 &pref_delegate_->GetServerProperties();
1197 std::string preferences_json; 1202 std::string preferences_json;
1198 EXPECT_TRUE( 1203 EXPECT_TRUE(
1199 base::JSONWriter::Write(*http_server_properties, &preferences_json)); 1204 base::JSONWriter::Write(*http_server_properties, &preferences_json));
1200 EXPECT_EQ(expected_json, preferences_json); 1205 EXPECT_EQ(expected_json, preferences_json);
1201 } 1206 }
1202 1207
1208 TEST_P(HttpServerPropertiesManagerTest,
1209 SingleCacheUpdateForMultipleUpdatesScheduled) {
1210 http_server_props_manager_->set_cache_update_delay(
1211 base::TimeDelta::FromMilliseconds(60));
1212
1213 // Update cache.
1214 ExpectCacheUpdate();
xunjieli 2016/12/20 14:00:27 I guess you are doing a follow-up to make sure tha
Zhongyi Shi 2016/12/20 20:03:38 If you take a close look on the previous CL, we ch
xunjieli 2016/12/21 02:13:09 Acknowledged.
1215
1216 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount());
1217 // Update cache.
1218 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1219 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
1220
1221 // Move forward the task runner 20ms.
1222 pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
1223 // Schedule a new cache update within the time window should be a no-op.
1224 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1225 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
1226
1227 // Move forward the task runner 40ms, now the cache update should be
1228 // exectured.
1229 pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40));
1230
1231 // Since this test has no pref corruption, there shouldn't be any pref update.
1232 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1233 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1234
1235 // Schedule one more cache update. The task should be successfully scheduled
1236 // on pref task runner.
1237 ExpectCacheUpdate();
1238 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1239 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
1240
1241 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1242 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1243 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1244 }
1245
1203 TEST_P(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { 1246 TEST_P(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) {
1204 std::unique_ptr<base::Value> server_value = base::JSONReader::Read( 1247 std::unique_ptr<base::Value> server_value = base::JSONReader::Read(
1205 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"}," 1248 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"},"
1206 "{\"port\":123,\"protocol_str\":\"quic\"," 1249 "{\"port\":123,\"protocol_str\":\"quic\","
1207 "\"expiration\":\"9223372036854775807\"},{\"host\":\"example.org\"," 1250 "\"expiration\":\"9223372036854775807\"},{\"host\":\"example.org\","
1208 "\"port\":1234,\"protocol_str\":\"h2\"," 1251 "\"port\":1234,\"protocol_str\":\"h2\","
1209 "\"expiration\":\"13758804000000000\"}]}"); 1252 "\"expiration\":\"13758804000000000\"}]}");
1210 ASSERT_TRUE(server_value); 1253 ASSERT_TRUE(server_value);
1211 base::DictionaryValue* server_dict; 1254 base::DictionaryValue* server_dict;
1212 ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); 1255 ASSERT_TRUE(server_value->GetAsDictionary(&server_dict));
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1478 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1521 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1479 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1522 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1480 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1523 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1481 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 1524 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
1482 http_server_props_manager_.reset(); 1525 http_server_props_manager_.reset();
1483 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1526 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1484 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1527 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1485 } 1528 }
1486 1529
1487 } // namespace net 1530 } // namespace net
OLDNEW
« net/http/http_server_properties_manager.cc ('K') | « net/http/http_server_properties_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698