Chromium Code Reviews| 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 |