OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |