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

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

Issue 2554723003: Always persist data to disk after 60s from the receiving update request. (Closed)
Patch Set: rebase with upstream committed Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« 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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 }; 77 };
78 78
79 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { 79 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
80 public: 80 public:
81 TestingHttpServerPropertiesManager( 81 TestingHttpServerPropertiesManager(
82 HttpServerPropertiesManager::PrefDelegate* pref_delegate, 82 HttpServerPropertiesManager::PrefDelegate* pref_delegate,
83 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner, 83 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner,
84 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner) 84 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner)
85 : HttpServerPropertiesManager(pref_delegate, 85 : HttpServerPropertiesManager(pref_delegate,
86 pref_task_runner, 86 pref_task_runner,
87 net_task_runner) { 87 net_task_runner),
88 pref_update_delay_(base::TimeDelta()) {
88 InitializeOnNetworkThread(); 89 InitializeOnNetworkThread();
89 } 90 }
90 91
91 ~TestingHttpServerPropertiesManager() override {} 92 ~TestingHttpServerPropertiesManager() override {}
92 93
93 // Make these methods public for testing. 94 // Make these methods public for testing.
94 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; 95 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread;
95 96
96 // Post tasks without a delay during tests. 97 // Post tasks without a delay during tests.
97 void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override { 98 void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override {
98 HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread( 99 HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread(
99 base::TimeDelta()); 100 pref_update_delay_);
100 } 101 }
101 102
102 void UpdateCacheFromPrefsOnUIConcrete() { 103 void UpdateCacheFromPrefsOnUIConcrete() {
103 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread(); 104 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread();
104 } 105 }
105 106
106 // Post tasks without a delay during tests. 107 // Post tasks without a delay during tests.
107 void StartCacheUpdateTimerOnPrefThread(base::TimeDelta delay) override { 108 void StartCacheUpdateTimerOnPrefThread(base::TimeDelta delay) override {
108 HttpServerPropertiesManager::StartCacheUpdateTimerOnPrefThread( 109 HttpServerPropertiesManager::StartCacheUpdateTimerOnPrefThread(
109 base::TimeDelta()); 110 base::TimeDelta());
110 } 111 }
111 112
112 void UpdatePrefsFromCacheOnNetworkThreadConcrete( 113 void UpdatePrefsFromCacheOnNetworkThreadConcrete(
113 const base::Closure& callback) { 114 const base::Closure& callback) {
114 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback); 115 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback);
115 } 116 }
116 117
117 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) { 118 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) {
118 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location); 119 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location);
119 } 120 }
120 121
121 void ScheduleUpdatePrefsOnNetworkThread() { 122 void ScheduleUpdatePrefsOnNetworkThread() {
122 // Picked a random Location as caller. 123 // Picked a random Location as caller.
123 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread( 124 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(
124 DETECTED_CORRUPTED_PREFS); 125 DETECTED_CORRUPTED_PREFS);
125 } 126 }
126 127
128 void set_pref_update_delay(base::TimeDelta delay) {
129 pref_update_delay_ = delay;
130 }
127 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void()); 131 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void());
128 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&)); 132 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&));
129 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location)); 133 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location));
130 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread, 134 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread,
131 void(std::vector<std::string>* spdy_servers, 135 void(std::vector<std::string>* spdy_servers,
132 AlternativeServiceMap* alternative_service_map, 136 AlternativeServiceMap* alternative_service_map,
133 IPAddress* last_quic_address, 137 IPAddress* last_quic_address,
134 ServerNetworkStatsMap* server_network_stats_map, 138 ServerNetworkStatsMap* server_network_stats_map,
135 QuicServerInfoMap* quic_server_info_map, 139 QuicServerInfoMap* quic_server_info_map,
136 bool detected_corrupted_prefs)); 140 bool detected_corrupted_prefs));
137 MOCK_METHOD6(UpdatePrefsOnPrefThread, 141 MOCK_METHOD6(UpdatePrefsOnPrefThread,
138 void(base::ListValue* spdy_server_list, 142 void(base::ListValue* spdy_server_list,
139 AlternativeServiceMap* alternative_service_map, 143 AlternativeServiceMap* alternative_service_map,
140 IPAddress* last_quic_address, 144 IPAddress* last_quic_address,
141 ServerNetworkStatsMap* server_network_stats_map, 145 ServerNetworkStatsMap* server_network_stats_map,
142 QuicServerInfoMap* quic_server_info_map, 146 QuicServerInfoMap* quic_server_info_map,
143 const base::Closure& completion)); 147 const base::Closure& completion));
144 148
145 private: 149 private:
150 // Time delays used in test for posting tasks. Default to zero.
151 base::TimeDelta pref_update_delay_;
146 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); 152 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
147 }; 153 };
148 154
149 } // namespace 155 } // namespace
150 156
151 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated 157 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated
152 // to version 4, delete the following code. 158 // to version 4, delete the following code.
153 static const int kHttpServerPropertiesVersions[] = {3, 4, 5}; 159 static const int kHttpServerPropertiesVersions[] = {3, 4, 5};
154 160
155 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { 161 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> {
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 net_test_task_runner_->FastForwardUntilNoTasksRemain(); 658 net_test_task_runner_->FastForwardUntilNoTasksRemain();
653 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 659 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
654 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 660 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
655 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 661 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
656 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 662 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
657 663
658 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); 664 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
659 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 665 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
660 } 666 }
661 667
668 // Regression test for crbug.com/670519. Test that there is only one pref update
669 // scheduled if multiple updates happen in a given time period. Subsequent pref
670 // update could also be scheduled once the previous scheduled update is
671 // completed.
672 TEST_P(HttpServerPropertiesManagerTest,
673 SinglePrefUpdateForTwoSpdyServerCacheChangese) {
674 http_server_props_manager_->set_pref_update_delay(
675 base::TimeDelta::FromMilliseconds(60));
676 ExpectPrefsUpdateRepeatedly();
677 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly();
678
679 // Post an update task to the network thread. SetSupportsSpdy calls
680 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms.
681 url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
682 EXPECT_FALSE(
683 http_server_props_manager_->SupportsRequestPriority(spdy_server));
684 http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
685 // The pref update task should be scheduled to network thread.
686 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
687
688 // Move forward the task runner with 20ms.
689 net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
690
691 // Set another spdy server to trigger another call to
692 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to
693 // the network thread.
694 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443);
695 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true);
696 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
697 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
698
699 // Move forward another 40ms. The pref update should be executed.
700 net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40));
701 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
702 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
703 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
704 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
705 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
706
707 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
708 EXPECT_TRUE(
709 http_server_props_manager_->SupportsRequestPriority(spdy_server2));
710 // Set the third spdy server to trigger one more call to
711 // ScheduleUpdatePrefsOnNetworkThread. A new update task should be posted to
712 // network thread now since the previous one is completed.
713 url::SchemeHostPort spdy_server3("https", "maps.google.com", 443);
714 http_server_props_manager_->SetSupportsSpdy(spdy_server3, true);
715 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
716 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
717
718 // Run the task.
719 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
720 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
721 net_test_task_runner_->FastForwardUntilNoTasksRemain();
722 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
723 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
724 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
725 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
726
727 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
728 }
729
662 TEST_P(HttpServerPropertiesManagerTest, GetAlternativeServices) { 730 TEST_P(HttpServerPropertiesManagerTest, GetAlternativeServices) {
663 ExpectPrefsUpdate(); 731 ExpectPrefsUpdate();
664 ExpectScheduleUpdatePrefsOnNetworkThread(); 732 ExpectScheduleUpdatePrefsOnNetworkThread();
665 733
666 url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); 734 url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
667 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); 735 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
668 const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 736 const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
669 443); 737 443);
670 http_server_props_manager_->SetAlternativeService( 738 http_server_props_manager_->SetAlternativeService(
671 spdy_server_mail, alternative_service, one_day_from_now_); 739 spdy_server_mail, alternative_service, one_day_from_now_);
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1410 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1478 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1411 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1479 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1412 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1480 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1413 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 1481 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
1414 http_server_props_manager_.reset(); 1482 http_server_props_manager_.reset();
1415 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1483 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1416 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1484 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1417 } 1485 }
1418 1486
1419 } // namespace net 1487 } // 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