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

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

Issue 2681383002: HttpServerPropertiesManager and tests cleanup (Closed)
Patch Set: simplify tests Created 3 years, 10 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 unified diff | Download patch
« no previous file with comments | « net/http/http_server_properties_manager.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 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 79
80 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { 80 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
81 public: 81 public:
82 TestingHttpServerPropertiesManager( 82 TestingHttpServerPropertiesManager(
83 HttpServerPropertiesManager::PrefDelegate* pref_delegate, 83 HttpServerPropertiesManager::PrefDelegate* pref_delegate,
84 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner, 84 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner,
85 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner) 85 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner)
86 : HttpServerPropertiesManager(pref_delegate, 86 : HttpServerPropertiesManager(pref_delegate,
87 pref_task_runner, 87 pref_task_runner,
88 net_task_runner), 88 net_task_runner) {
89 pref_update_delay_(base::TimeDelta()),
90 cache_update_delay_(base::TimeDelta()) {
91 InitializeOnNetworkThread(); 89 InitializeOnNetworkThread();
92 } 90 }
93 91
94 ~TestingHttpServerPropertiesManager() override {} 92 ~TestingHttpServerPropertiesManager() override {}
95 93
96 // Make these methods public for testing. 94 // Make these methods public for testing.
97 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; 95 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread;
98 96
99 // Post tasks without a delay during tests.
100 void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override {
101 HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread(
102 pref_update_delay_);
103 }
104
105 void UpdateCacheFromPrefsOnUIConcrete() { 97 void UpdateCacheFromPrefsOnUIConcrete() {
106 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread(); 98 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread();
107 } 99 }
108 100
109 // Post tasks without a delay during tests.
110 void StartCacheUpdateTimerOnPrefThread(base::TimeDelta delay) override {
111 HttpServerPropertiesManager::StartCacheUpdateTimerOnPrefThread(
112 cache_update_delay_);
113 }
114
115 void UpdatePrefsFromCacheOnNetworkThreadConcrete( 101 void UpdatePrefsFromCacheOnNetworkThreadConcrete(
116 const base::Closure& callback) { 102 const base::Closure& callback) {
117 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback); 103 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback);
118 } 104 }
119 105
120 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) { 106 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) {
121 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location); 107 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location);
122 } 108 }
123 109
124 void ScheduleUpdatePrefsOnNetworkThread() { 110 void ScheduleUpdatePrefsOnNetworkThread() {
125 // Picked a random Location as caller. 111 // Picked a random Location as caller.
126 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread( 112 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(
127 DETECTED_CORRUPTED_PREFS); 113 DETECTED_CORRUPTED_PREFS);
128 } 114 }
129 115
130 void set_pref_update_delay(base::TimeDelta delay) {
131 pref_update_delay_ = delay;
132 }
133 void set_cache_update_delay(base::TimeDelta delay) {
134 cache_update_delay_ = delay;
135 }
136 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void()); 116 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void());
137 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&)); 117 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&));
138 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location)); 118 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location));
139 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread, 119 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread,
140 void(std::vector<std::string>* spdy_servers, 120 void(std::vector<std::string>* spdy_servers,
141 AlternativeServiceMap* alternative_service_map, 121 AlternativeServiceMap* alternative_service_map,
142 IPAddress* last_quic_address, 122 IPAddress* last_quic_address,
143 ServerNetworkStatsMap* server_network_stats_map, 123 ServerNetworkStatsMap* server_network_stats_map,
144 QuicServerInfoMap* quic_server_info_map, 124 QuicServerInfoMap* quic_server_info_map,
145 bool detected_corrupted_prefs)); 125 bool detected_corrupted_prefs));
146 MOCK_METHOD6(UpdatePrefsOnPrefThread, 126 MOCK_METHOD6(UpdatePrefsOnPrefThread,
147 void(base::ListValue* spdy_server_list, 127 void(base::ListValue* spdy_server_list,
148 AlternativeServiceMap* alternative_service_map, 128 AlternativeServiceMap* alternative_service_map,
149 IPAddress* last_quic_address, 129 IPAddress* last_quic_address,
150 ServerNetworkStatsMap* server_network_stats_map, 130 ServerNetworkStatsMap* server_network_stats_map,
151 QuicServerInfoMap* quic_server_info_map, 131 QuicServerInfoMap* quic_server_info_map,
152 const base::Closure& completion)); 132 const base::Closure& completion));
153 133
154 private: 134 private:
155 // Time delays used in test for posting tasks. Default to zero.
156 base::TimeDelta pref_update_delay_;
157 base::TimeDelta cache_update_delay_;
158 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); 135 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
159 }; 136 };
160 137
161 } // namespace 138 } // namespace
162 139
163 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated 140 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated
164 // to version 4, delete the following code. 141 // to version 4, delete the following code.
165 static const int kHttpServerPropertiesVersions[] = {3, 4, 5}; 142 static const int kHttpServerPropertiesVersions[] = {3, 4, 5};
166 143
167 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { 144 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 std::unique_ptr<TestingHttpServerPropertiesManager> 234 std::unique_ptr<TestingHttpServerPropertiesManager>
258 http_server_props_manager_; 235 http_server_props_manager_;
259 base::Time one_day_from_now_; 236 base::Time one_day_from_now_;
260 scoped_refptr<TestMockTimeTaskRunner> pref_test_task_runner_; 237 scoped_refptr<TestMockTimeTaskRunner> pref_test_task_runner_;
261 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_; 238 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_;
262 239
263 private: 240 private:
264 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); 241 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest);
265 }; 242 };
266 243
267 INSTANTIATE_TEST_CASE_P(Tests, 244 INSTANTIATE_TEST_CASE_P(/* no prefix */,
268 HttpServerPropertiesManagerTest, 245 HttpServerPropertiesManagerTest,
269 ::testing::ValuesIn(kHttpServerPropertiesVersions)); 246 ::testing::ValuesIn(kHttpServerPropertiesVersions));
270 247
271 TEST_P(HttpServerPropertiesManagerTest, 248 TEST_P(HttpServerPropertiesManagerTest,
272 SingleUpdateForTwoSpdyServerPrefChanges) { 249 SingleUpdateForTwoSpdyServerPrefChanges) {
273 ExpectCacheUpdate(); 250 ExpectCacheUpdate();
274 251
275 // Set up the prefs for https://www.google.com and https://mail.google.com and 252 // Set up the prefs for https://www.google.com and https://mail.google.com and
276 // then set it twice. Only expect a single cache update. 253 // then set it twice. Only expect a single cache update.
277 254
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 EXPECT_EQ(kProtoHTTP2, map_it->second[0].alternative_service.protocol); 435 EXPECT_EQ(kProtoHTTP2, map_it->second[0].alternative_service.protocol);
459 EXPECT_TRUE(map_it->second[0].alternative_service.host.empty()); 436 EXPECT_TRUE(map_it->second[0].alternative_service.host.empty());
460 EXPECT_EQ(444, map_it->second[0].alternative_service.port); 437 EXPECT_EQ(444, map_it->second[0].alternative_service.port);
461 } 438 }
462 439
463 // Verify SupportsQuic. 440 // Verify SupportsQuic.
464 IPAddress last_address; 441 IPAddress last_address;
465 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&last_address)); 442 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&last_address));
466 EXPECT_EQ("127.0.0.1", last_address.ToString()); 443 EXPECT_EQ("127.0.0.1", last_address.ToString());
467 444
468 /*
469 // Verify ServerNetworkStats. 445 // Verify ServerNetworkStats.
470 const ServerNetworkStats* stats2 = 446 const ServerNetworkStats* stats2 =
471 http_server_props_manager_->GetServerNetworkStats(google_server); 447 http_server_props_manager_->GetServerNetworkStats(google_server);
472 EXPECT_EQ(10, stats2->srtt.ToInternalValue()); 448 EXPECT_EQ(10, stats2->srtt.ToInternalValue());
473 const ServerNetworkStats* stats3 = 449 const ServerNetworkStats* stats3 =
474 http_server_props_manager_->GetServerNetworkStats(mail_server); 450 http_server_props_manager_->GetServerNetworkStats(mail_server);
475 EXPECT_EQ(20, stats3->srtt.ToInternalValue()); 451 EXPECT_EQ(20, stats3->srtt.ToInternalValue());
476 452
477 // Verify QuicServerInfo. 453 // Verify QuicServerInfo.
478 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( 454 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
479 google_quic_server_id)); 455 google_quic_server_id));
480 EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo( 456 EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo(
481 mail_quic_server_id)); 457 mail_quic_server_id));
482 EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo( 458 EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo(
483 play_quic_server_id)); 459 play_quic_server_id));
484 460
485 // Verify the MRU order. 461 // Verify the MRU order.
486 http_server_props_manager_->SetMaxServerConfigsStoredInProperties(2); 462 http_server_props_manager_->SetMaxServerConfigsStoredInProperties(2);
487 EXPECT_EQ(nullptr, http_server_props_manager_->GetQuicServerInfo( 463 EXPECT_EQ(nullptr, http_server_props_manager_->GetQuicServerInfo(
488 google_quic_server_id)); 464 google_quic_server_id));
489 EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo( 465 EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo(
490 mail_quic_server_id)); 466 mail_quic_server_id));
491 EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo( 467 EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo(
492 play_quic_server_id)); 468 play_quic_server_id));
493 */
494 } 469 }
495 470
496 TEST_P(HttpServerPropertiesManagerTest, BadCachedHostPortPair) { 471 TEST_P(HttpServerPropertiesManagerTest, BadCachedHostPortPair) {
497 ExpectCacheUpdate(); 472 ExpectCacheUpdate();
498 // The prefs are automatically updated in the case corruption is detected. 473 // The prefs are automatically updated in the case corruption is detected.
499 ExpectPrefsUpdate(1); 474 ExpectPrefsUpdate(1);
500 ExpectScheduleUpdatePrefsOnNetworkThread(); 475 ExpectScheduleUpdatePrefsOnNetworkThread();
501 476
502 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; 477 base::DictionaryValue* server_pref_dict = new base::DictionaryValue;
503 478
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); 648 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
674 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 649 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
675 } 650 }
676 651
677 // Regression test for crbug.com/670519. Test that there is only one pref update 652 // Regression test for crbug.com/670519. Test that there is only one pref update
678 // scheduled if multiple updates happen in a given time period. Subsequent pref 653 // scheduled if multiple updates happen in a given time period. Subsequent pref
679 // update could also be scheduled once the previous scheduled update is 654 // update could also be scheduled once the previous scheduled update is
680 // completed. 655 // completed.
681 TEST_P(HttpServerPropertiesManagerTest, 656 TEST_P(HttpServerPropertiesManagerTest,
682 SinglePrefUpdateForTwoSpdyServerCacheChanges) { 657 SinglePrefUpdateForTwoSpdyServerCacheChanges) {
683 http_server_props_manager_->set_pref_update_delay( 658 // Keep this in sync with http_server_properties_manager.cc
684 base::TimeDelta::FromMilliseconds(60)); 659 const int64_t kUpdatePrefsDelayMs = 60000;
Zhongyi Shi 2017/02/10 18:01:38 Just to confirm, looks like all the tests are now
xunjieli 2017/02/10 20:01:21 Yes.
685 ExpectPrefsUpdate(2); 660 ExpectPrefsUpdate(2);
686 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3); 661 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3);
687 662
688 // Post an update task to the network thread. SetSupportsSpdy calls 663 // Post an update task to the network thread. SetSupportsSpdy calls
689 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms. 664 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms.
690 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); 665 url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
691 EXPECT_FALSE( 666 EXPECT_FALSE(
692 http_server_props_manager_->SupportsRequestPriority(spdy_server)); 667 http_server_props_manager_->SupportsRequestPriority(spdy_server));
693 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); 668 http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
694 // The pref update task should be scheduled to network thread. 669 // The pref update task should be scheduled to network thread.
695 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); 670 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
696 671
697 // Move forward the task runner with 20ms. 672 // Move forward the task runner with kUpdatePrefsDelayMs/2.
698 net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20)); 673 net_test_task_runner_->FastForwardBy(
674 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2));
699 675
700 // Set another spdy server to trigger another call to 676 // Set another spdy server to trigger another call to
701 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to 677 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to
702 // the network thread. 678 // the network thread.
703 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443); 679 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443);
704 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true); 680 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true);
705 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); 681 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
706 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 682 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
707 683
708 // Move forward another 40ms. The pref update should be executed. 684 // Forward another kUpdatePrefsDelayMs/2. The pref update should be executed.
709 net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40)); 685 net_test_task_runner_->FastForwardBy(
686 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2));
710 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 687 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
711 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 688 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
712 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 689 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
713 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 690 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
714 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 691 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
715 692
716 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); 693 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
717 EXPECT_TRUE( 694 EXPECT_TRUE(
718 http_server_props_manager_->SupportsRequestPriority(spdy_server2)); 695 http_server_props_manager_->SupportsRequestPriority(spdy_server2));
719 // Set the third spdy server to trigger one more call to 696 // Set the third spdy server to trigger one more call to
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1121 EXPECT_EQ(kProtoQUIC, alternative_service_vector[0].protocol); 1098 EXPECT_EQ(kProtoQUIC, alternative_service_vector[0].protocol);
1122 EXPECT_EQ(i, alternative_service_vector[0].port); 1099 EXPECT_EQ(i, alternative_service_vector[0].port);
1123 } 1100 }
1124 1101
1125 // Verify SupportsQuic. 1102 // Verify SupportsQuic.
1126 IPAddress address; 1103 IPAddress address;
1127 ASSERT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); 1104 ASSERT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
1128 EXPECT_EQ("127.0.0.1", address.ToString()); 1105 EXPECT_EQ("127.0.0.1", address.ToString());
1129 } 1106 }
1130 1107
1131 TEST_P(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { 1108 TEST_P(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
1132 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5); 1109 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5);
1133 1110
1134 const url::SchemeHostPort server_www("http", "www.google.com", 80); 1111 const url::SchemeHostPort server_www("https", "www.google.com", 80);
1135 const url::SchemeHostPort server_mail("http", "mail.google.com", 80); 1112 const url::SchemeHostPort server_mail("https", "mail.google.com", 80);
1136 1113
1137 // Set alternate protocol. 1114 // #1 & #2: Set alternate protocol.
1138 AlternativeServiceInfoVector alternative_service_info_vector; 1115 AlternativeServiceInfoVector alternative_service_info_vector;
1139 AlternativeService www_alternative_service1(kProtoHTTP2, "", 443); 1116 AlternativeService www_alternative_service1(kProtoHTTP2, "", 443);
1140 base::Time expiration1; 1117 base::Time expiration1;
1141 ASSERT_TRUE(base::Time::FromUTCString("2036-12-01 10:00:00", &expiration1)); 1118 ASSERT_TRUE(base::Time::FromUTCString("2036-12-01 10:00:00", &expiration1));
1142 alternative_service_info_vector.push_back( 1119 alternative_service_info_vector.push_back(
1143 AlternativeServiceInfo(www_alternative_service1, expiration1)); 1120 AlternativeServiceInfo(www_alternative_service1, expiration1));
1144 AlternativeService www_alternative_service2(kProtoHTTP2, "www.google.com", 1121 AlternativeService www_alternative_service2(kProtoHTTP2, "www.google.com",
1145 1234); 1122 1234);
1146 base::Time expiration2; 1123 base::Time expiration2;
1147 ASSERT_TRUE(base::Time::FromUTCString("2036-12-31 10:00:00", &expiration2)); 1124 ASSERT_TRUE(base::Time::FromUTCString("2036-12-31 10:00:00", &expiration2));
1148 alternative_service_info_vector.push_back( 1125 alternative_service_info_vector.push_back(
1149 AlternativeServiceInfo(www_alternative_service2, expiration2)); 1126 AlternativeServiceInfo(www_alternative_service2, expiration2));
1150 http_server_props_manager_->SetAlternativeServices( 1127 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
1151 server_www, alternative_service_info_vector); 1128 server_www, alternative_service_info_vector));
1152 1129
1153 AlternativeService mail_alternative_service(kProtoHTTP2, "foo.google.com", 1130 AlternativeService mail_alternative_service(kProtoHTTP2, "foo.google.com",
1154 444); 1131 444);
1155 base::Time expiration3 = base::Time::Max(); 1132 base::Time expiration3 = base::Time::Max();
1156 http_server_props_manager_->SetAlternativeService( 1133 ASSERT_TRUE(http_server_props_manager_->SetAlternativeService(
1157 server_mail, mail_alternative_service, expiration3); 1134 server_mail, mail_alternative_service, expiration3));
1158 1135
1159 // Set ServerNetworkStats. 1136 // #3: Set ServerNetworkStats.
1160 ServerNetworkStats stats; 1137 ServerNetworkStats stats;
1161 stats.srtt = base::TimeDelta::FromInternalValue(42); 1138 stats.srtt = base::TimeDelta::FromInternalValue(42);
1162 http_server_props_manager_->SetServerNetworkStats(server_mail, stats); 1139 http_server_props_manager_->SetServerNetworkStats(server_mail, stats);
1163 1140
1164 // Set quic_server_info string. 1141 // #4: Set quic_server_info string.
1165 QuicServerId mail_quic_server_id("mail.google.com", 80); 1142 QuicServerId mail_quic_server_id("mail.google.com", 80);
1166 std::string quic_server_info1("quic_server_info1"); 1143 std::string quic_server_info1("quic_server_info1");
1167 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, 1144 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
1168 quic_server_info1); 1145 quic_server_info1);
1169 1146
1170 // Set SupportsQuic. 1147 // #5: Set SupportsQuic.
1171 IPAddress actual_address(127, 0, 0, 1); 1148 IPAddress actual_address(127, 0, 0, 1);
1172 http_server_props_manager_->SetSupportsQuic(true, actual_address); 1149 http_server_props_manager_->SetSupportsQuic(true, actual_address);
1173 1150
1174 // Update cache. 1151 // Update Prefs.
1175 ExpectPrefsUpdate(1); 1152 ExpectPrefsUpdate(1);
1176 ExpectCacheUpdate();
1177 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1178
Zhongyi Shi 2017/02/10 18:01:38 Hm, I thought we had UpdateCacheWithPref and Updat
xunjieli 2017/02/10 20:01:21 Talked to Cherie offline. There are other 4 tests
1179 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); 1153 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
1154 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1155 net_test_task_runner_->FastForwardUntilNoTasksRemain();
1180 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 1156 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
1181 net_test_task_runner_->FastForwardUntilNoTasksRemain();
1182 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1157 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1183 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1158 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1184 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1159 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1185 1160
1186 // Verify preferences. 1161 // Verify preferences.
1187 const char expected_json[] = 1162 const char expected_json[] =
1188 "{\"quic_servers\":{\"https://" 1163 "{\"quic_servers\":{\"https://"
1189 "mail.google.com:80\":{\"server_info\":\"quic_server_info1\"}}," 1164 "mail.google.com:80\":{\"server_info\":\"quic_server_info1\"}},"
1190 "\"servers\":[" 1165 "\"servers\":["
1191 "{\"http://www.google.com\":{" 1166 "{\"https://www.google.com:80\":{"
1192 "\"alternative_service\":[{\"expiration\":\"13756212000000000\"," 1167 "\"alternative_service\":[{\"expiration\":\"13756212000000000\","
1193 "\"port\":443,\"protocol_str\":\"h2\"}," 1168 "\"port\":443,\"protocol_str\":\"h2\"},"
1194 "{\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\"," 1169 "{\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\","
1195 "\"port\":1234,\"protocol_str\":\"h2\"}]}}," 1170 "\"port\":1234,\"protocol_str\":\"h2\"}]}},"
1196 "{\"http://mail.google.com\":{\"alternative_service\":[{" 1171 "{\"https://mail.google.com:80\":{\"alternative_service\":[{"
1197 "\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\"," 1172 "\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\","
1198 "\"port\":444,\"protocol_str\":\"h2\"}]," 1173 "\"port\":444,\"protocol_str\":\"h2\"}],"
1199 "\"network_stats\":{\"srtt\":42}}}" 1174 "\"network_stats\":{\"srtt\":42}}}"
1200 "]," 1175 "],"
1201 "\"supports_quic\":{\"address\":\"127.0.0.1\",\"used_quic\":true}," 1176 "\"supports_quic\":{\"address\":\"127.0.0.1\",\"used_quic\":true},"
1202 "\"version\":5}"; 1177 "\"version\":5}";
1203 1178
1204 const base::Value* http_server_properties = 1179 const base::Value* http_server_properties =
1205 &pref_delegate_->GetServerProperties(); 1180 &pref_delegate_->GetServerProperties();
1206 std::string preferences_json; 1181 std::string preferences_json;
1207 EXPECT_TRUE( 1182 EXPECT_TRUE(
1208 base::JSONWriter::Write(*http_server_properties, &preferences_json)); 1183 base::JSONWriter::Write(*http_server_properties, &preferences_json));
1209 EXPECT_EQ(expected_json, preferences_json); 1184 EXPECT_EQ(expected_json, preferences_json);
1210 } 1185 }
1211 1186
1212 TEST_P(HttpServerPropertiesManagerTest, 1187 TEST_P(HttpServerPropertiesManagerTest,
1213 SingleCacheUpdateForMultipleUpdatesScheduled) { 1188 SingleCacheUpdateForMultipleUpdatesScheduled) {
1214 http_server_props_manager_->set_cache_update_delay( 1189 // Keep this in sync with http_server_properties_manager.cc
1215 base::TimeDelta::FromMilliseconds(60)); 1190 const int64_t kUpdateCacheDelayMs = 1000;
1216
1217 // Update cache. 1191 // Update cache.
1218 ExpectCacheUpdate(); 1192 ExpectCacheUpdate();
1219 1193
1220 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount()); 1194 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount());
1221 // Update cache. 1195 // Update cache.
1222 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 1196 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1223 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); 1197 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
1224 1198
1225 // Move forward the task runner 20ms. 1199 // Move forward the task runner kUpdateCacheDelayMs/2.
1226 pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20)); 1200 pref_test_task_runner_->FastForwardBy(
1201 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2));
1227 // Schedule a new cache update within the time window should be a no-op. 1202 // Schedule a new cache update within the time window should be a no-op.
1228 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 1203 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1229 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); 1204 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
1230 1205
1231 // Move forward the task runner 40ms, now the cache update should be 1206 // Move forward the task runner kUpdateCaceDelayMs/2, now the cache update
1232 // exectured. 1207 // should be exectured.
1233 pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40)); 1208 pref_test_task_runner_->FastForwardBy(
1209 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2));
1234 1210
1235 // Since this test has no pref corruption, there shouldn't be any pref update. 1211 // Since this test has no pref corruption, there shouldn't be any pref update.
1236 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1212 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1237 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1213 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1238 1214
1239 // Schedule one more cache update. The task should be successfully scheduled 1215 // Schedule one more cache update. The task should be successfully scheduled
1240 // on pref task runner. 1216 // on pref task runner.
1241 ExpectCacheUpdate(); 1217 ExpectCacheUpdate();
1242 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 1218 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1243 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); 1219 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2); 1296 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2);
1321 1297
1322 AlternativeServiceInfoVector alternative_service_info_vector; 1298 AlternativeServiceInfoVector alternative_service_info_vector;
1323 1299
1324 const AlternativeService broken_alternative_service( 1300 const AlternativeService broken_alternative_service(
1325 kProtoHTTP2, "broken.example.com", 443); 1301 kProtoHTTP2, "broken.example.com", 443);
1326 const base::Time time_one_day_later = 1302 const base::Time time_one_day_later =
1327 base::Time::Now() + base::TimeDelta::FromDays(1); 1303 base::Time::Now() + base::TimeDelta::FromDays(1);
1328 alternative_service_info_vector.push_back( 1304 alternative_service_info_vector.push_back(
1329 AlternativeServiceInfo(broken_alternative_service, time_one_day_later)); 1305 AlternativeServiceInfo(broken_alternative_service, time_one_day_later));
1306 // #1: MarkAlternativeServiceBroken().
1330 http_server_props_manager_->MarkAlternativeServiceBroken( 1307 http_server_props_manager_->MarkAlternativeServiceBroken(
1331 broken_alternative_service); 1308 broken_alternative_service);
1332 1309
1333 const AlternativeService expired_alternative_service( 1310 const AlternativeService expired_alternative_service(
1334 kProtoHTTP2, "expired.example.com", 443); 1311 kProtoHTTP2, "expired.example.com", 443);
1335 const base::Time time_one_day_ago = 1312 const base::Time time_one_day_ago =
1336 base::Time::Now() - base::TimeDelta::FromDays(1); 1313 base::Time::Now() - base::TimeDelta::FromDays(1);
1337 alternative_service_info_vector.push_back( 1314 alternative_service_info_vector.push_back(
1338 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago)); 1315 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago));
1339 1316
1340 const AlternativeService valid_alternative_service(kProtoHTTP2, 1317 const AlternativeService valid_alternative_service(kProtoHTTP2,
1341 "valid.example.com", 443); 1318 "valid.example.com", 443);
1342 alternative_service_info_vector.push_back( 1319 alternative_service_info_vector.push_back(
1343 AlternativeServiceInfo(valid_alternative_service, time_one_day_later)); 1320 AlternativeServiceInfo(valid_alternative_service, time_one_day_later));
1344 1321
1345 const url::SchemeHostPort server("https", "www.example.com", 443); 1322 const url::SchemeHostPort server("https", "www.example.com", 443);
1346 http_server_props_manager_->SetAlternativeServices( 1323 // #2: SetAlternativeService().
1347 server, alternative_service_info_vector); 1324 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
1325 server, alternative_service_info_vector));
1348 1326
1349 // Update cache. 1327 // Update cache.
1350 ExpectPrefsUpdate(1); 1328 ExpectPrefsUpdate(1);
1351 ExpectCacheUpdate();
1352 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1353 1329
1354 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); 1330 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
1331 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1332 net_test_task_runner_->FastForwardUntilNoTasksRemain();
1355 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 1333 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
1356 net_test_task_runner_->FastForwardUntilNoTasksRemain();
1357 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1334 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1358 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1335 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1359 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1336 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1360 1337
1361 const base::DictionaryValue& pref_dict = 1338 const base::DictionaryValue& pref_dict =
1362 pref_delegate_->GetServerProperties(); 1339 pref_delegate_->GetServerProperties();
1363 1340
1364 const base::ListValue* servers_list = nullptr; 1341 const base::ListValue* servers_list = nullptr;
1365 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list)); 1342 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list));
1366 base::ListValue::const_iterator it = servers_list->begin(); 1343 base::ListValue::const_iterator it = servers_list->begin();
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1525 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1502 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1526 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1503 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1527 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1504 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1528 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 1505 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
1529 http_server_props_manager_.reset(); 1506 http_server_props_manager_.reset();
1530 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1507 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1531 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1508 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1532 } 1509 }
1533 1510
1534 } // namespace net 1511 } // namespace net
OLDNEW
« no previous file with comments | « 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