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

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

Issue 2657013002: Introduce ThreadTaskRunnerHandle::OverrideForTesting and TestMockTimeTaskRunner::ScopedContext. (Closed)
Patch Set: fix task runner paradigms in SyncStoppedReporterTest and ServerBackedStateKeysBrokerTest 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
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/bind.h"
10 #include "base/json/json_reader.h" 11 #include "base/json/json_reader.h"
11 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
12 #include "base/macros.h" 13 #include "base/macros.h"
13 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
14 #include "base/message_loop/message_loop.h" 15 #include "base/memory/ref_counted.h"
15 #include "base/run_loop.h"
16 #include "base/single_thread_task_runner.h" 16 #include "base/single_thread_task_runner.h"
17 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
18 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
19 #include "base/test/scoped_mock_time_message_loop_task_runner.h"
19 #include "base/test/test_mock_time_task_runner.h" 20 #include "base/test/test_mock_time_task_runner.h"
20 #include "base/test/test_simple_task_runner.h" 21 #include "base/test/test_simple_task_runner.h"
21 #include "base/threading/thread_task_runner_handle.h" 22 #include "base/threading/thread_task_runner_handle.h"
22 #include "base/values.h" 23 #include "base/values.h"
23 #include "net/base/ip_address.h" 24 #include "net/base/ip_address.h"
24 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
25 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
26 #include "url/gurl.h" 27 #include "url/gurl.h"
27 28
28 namespace net { 29 namespace net {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 base::DictionaryValue prefs_; 75 base::DictionaryValue prefs_;
75 base::Closure prefs_changed_callback_; 76 base::Closure prefs_changed_callback_;
76 77
77 DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate); 78 DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate);
78 }; 79 };
79 80
80 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { 81 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
81 public: 82 public:
82 TestingHttpServerPropertiesManager( 83 TestingHttpServerPropertiesManager(
83 HttpServerPropertiesManager::PrefDelegate* pref_delegate, 84 HttpServerPropertiesManager::PrefDelegate* pref_delegate,
84 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner, 85 scoped_refptr<TestMockTimeTaskRunner> pref_task_runner,
85 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner) 86 scoped_refptr<TestMockTimeTaskRunner> net_task_runner)
86 : HttpServerPropertiesManager(pref_delegate, 87 : HttpServerPropertiesManager(pref_delegate,
87 pref_task_runner, 88 pref_task_runner,
88 net_task_runner) { 89 net_task_runner),
89 InitializeOnNetworkThread(); 90 pref_task_runner_(std::move(pref_task_runner)),
91 net_task_runner_(std::move(net_task_runner)) {
92 // This call must run in the context of |net_task_runner_|.
xunjieli 2017/02/16 02:49:18 Just so I understand the api, if we remove the |sc
gab 2017/02/16 16:50:15 It doesn't yet but it should (see TODO(gab) I adde
xunjieli 2017/02/16 17:08:29 Acknowledged. Thanks for the context.
93 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
94 HttpServerPropertiesManager::InitializeOnNetworkThread();
90 } 95 }
91 96
92 ~TestingHttpServerPropertiesManager() override {} 97 ~TestingHttpServerPropertiesManager() override {}
93 98
94 // Make these methods public for testing. 99 // Make these methods public for testing.
95 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; 100 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread;
96 101
97 void UpdateCacheFromPrefsOnUIConcrete() { 102 void UpdateCacheFromPrefsOnUIConcrete() {
103 TestMockTimeTaskRunner::ScopedContext scoped_context(pref_task_runner_);
98 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread(); 104 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread();
99 } 105 }
100 106
101 void UpdatePrefsFromCacheOnNetworkThreadConcrete( 107 void UpdatePrefsFromCacheOnNetworkThreadConcrete(
102 const base::Closure& callback) { 108 const base::Closure& callback) {
109 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
103 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback); 110 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback);
104 } 111 }
105 112
106 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) { 113 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) {
114 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
107 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location); 115 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location);
108 } 116 }
109 117
110 void ScheduleUpdatePrefsOnNetworkThread() { 118 void ScheduleUpdatePrefsOnNetworkThreadDefault() {
119 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
111 // Picked a random Location as caller. 120 // Picked a random Location as caller.
112 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread( 121 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(
113 DETECTED_CORRUPTED_PREFS); 122 DETECTED_CORRUPTED_PREFS);
114 } 123 }
115 124
116 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void()); 125 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void());
117 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&)); 126 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&));
118 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location)); 127 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location));
119 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread, 128 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread,
120 void(std::vector<std::string>* spdy_servers, 129 void(std::vector<std::string>* spdy_servers,
121 AlternativeServiceMap* alternative_service_map, 130 AlternativeServiceMap* alternative_service_map,
122 IPAddress* last_quic_address, 131 IPAddress* last_quic_address,
123 ServerNetworkStatsMap* server_network_stats_map, 132 ServerNetworkStatsMap* server_network_stats_map,
124 QuicServerInfoMap* quic_server_info_map, 133 QuicServerInfoMap* quic_server_info_map,
125 bool detected_corrupted_prefs)); 134 bool detected_corrupted_prefs));
126 MOCK_METHOD6(UpdatePrefsOnPrefThread, 135 MOCK_METHOD6(UpdatePrefsOnPrefThread,
127 void(base::ListValue* spdy_server_list, 136 void(base::ListValue* spdy_server_list,
128 AlternativeServiceMap* alternative_service_map, 137 AlternativeServiceMap* alternative_service_map,
129 IPAddress* last_quic_address, 138 IPAddress* last_quic_address,
130 ServerNetworkStatsMap* server_network_stats_map, 139 ServerNetworkStatsMap* server_network_stats_map,
131 QuicServerInfoMap* quic_server_info_map, 140 QuicServerInfoMap* quic_server_info_map,
132 const base::Closure& completion)); 141 const base::Closure& completion));
133 142
134 private: 143 private:
144 // References to the underlying task runners, used to simulate running in
145 // their contexts where required.
146 scoped_refptr<TestMockTimeTaskRunner> pref_task_runner_;
147 scoped_refptr<TestMockTimeTaskRunner> net_task_runner_;
148
135 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); 149 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
136 }; 150 };
137 151
138 } // namespace 152 } // namespace
139 153
140 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated 154 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated
141 // to version 4, delete the following code. 155 // to version 4, delete the following code.
142 static const int kHttpServerPropertiesVersions[] = {3, 4, 5}; 156 static const int kHttpServerPropertiesVersions[] = {3, 4, 5};
143 157
144 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { 158 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> {
145 protected: 159 protected:
146 HttpServerPropertiesManagerTest() 160 HttpServerPropertiesManagerTest() = default;
147 : pref_test_task_runner_(new TestMockTimeTaskRunner()),
148 net_test_task_runner_(new TestMockTimeTaskRunner()) {}
149 161
150 void SetUp() override { 162 void SetUp() override {
151 one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1); 163 one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1);
152 pref_delegate_ = new MockPrefDelegate; 164 pref_delegate_ = new MockPrefDelegate;
153 http_server_props_manager_.reset( 165 http_server_props_manager_.reset(
154 new StrictMock<TestingHttpServerPropertiesManager>( 166 new StrictMock<TestingHttpServerPropertiesManager>(
155 pref_delegate_, pref_test_task_runner_, net_test_task_runner_)); 167 pref_delegate_, pref_test_task_runner_.task_runner(),
168 net_test_task_runner_));
156 169
157 EXPECT_FALSE(http_server_props_manager_->IsInitialized()); 170 EXPECT_FALSE(http_server_props_manager_->IsInitialized());
158 ExpectCacheUpdate(); 171 ExpectCacheUpdate();
159 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 172 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
160 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 173 pref_test_task_runner_->RunUntilIdle();
161 // InitializeOnNetworkThread() is called from the test thread, so 174 net_test_task_runner_->RunUntilIdle();
162 // PostTaskAndReply() will post back to the test thread.
163 // TODO(xunjieli): Fix this in a follow-up so we can use
164 // |net_test_task_runner_|->RunUntilIdle().
165 base::RunLoop().RunUntilIdle();
166 EXPECT_TRUE(http_server_props_manager_->IsInitialized()); 175 EXPECT_TRUE(http_server_props_manager_->IsInitialized());
167 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 176 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
168 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 177 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
169 } 178 }
170 179
171 void SetUpWithNonTaskRunner() {
172 pref_delegate_ = new MockPrefDelegate;
173 http_server_props_manager_.reset(
174 new StrictMock<TestingHttpServerPropertiesManager>(
175 pref_delegate_, base::ThreadTaskRunnerHandle::Get(),
176 net_test_task_runner_));
177
178 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
179 ExpectCacheUpdate();
180 base::RunLoop().RunUntilIdle();
181 EXPECT_TRUE(http_server_props_manager_->IsInitialized());
182 }
183
184 void TearDown() override { 180 void TearDown() override {
185 if (http_server_props_manager_.get()) 181 if (http_server_props_manager_.get())
186 http_server_props_manager_->ShutdownOnPrefThread(); 182 http_server_props_manager_->ShutdownOnPrefThread();
187 base::RunLoop().RunUntilIdle(); 183 // Run pending non-delayed tasks but don't FastForwardUntilNoTasksRemain()
188 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 184 // as some delayed tasks may forever repost (e.g. because impl doesn't use a
189 net_test_task_runner_->FastForwardUntilNoTasksRemain(); 185 // mock clock and doesn't see timings as having expired, ref.
186 // HttpServerPropertiesImpl::ScheduleBrokenAlternateProtocolMappingsExpirati on()).
187 pref_test_task_runner_->RunUntilIdle();
188 net_test_task_runner_->RunUntilIdle();
190 http_server_props_manager_.reset(); 189 http_server_props_manager_.reset();
191 } 190 }
192 191
193 void ExpectCacheUpdate() { 192 void ExpectCacheUpdate() {
194 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread()) 193 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread())
195 .WillOnce(Invoke(http_server_props_manager_.get(), 194 .WillOnce(Invoke(http_server_props_manager_.get(),
196 &TestingHttpServerPropertiesManager:: 195 &TestingHttpServerPropertiesManager::
197 UpdateCacheFromPrefsOnUIConcrete)); 196 UpdateCacheFromPrefsOnUIConcrete));
198 } 197 }
199 198
(...skipping 27 matching lines...) Expand all
227 bool HasAlternativeService(const url::SchemeHostPort& server) { 226 bool HasAlternativeService(const url::SchemeHostPort& server) {
228 const AlternativeServiceVector alternative_service_vector = 227 const AlternativeServiceVector alternative_service_vector =
229 http_server_props_manager_->GetAlternativeServices(server); 228 http_server_props_manager_->GetAlternativeServices(server);
230 return !alternative_service_vector.empty(); 229 return !alternative_service_vector.empty();
231 } 230 }
232 231
233 MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager. 232 MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager.
234 std::unique_ptr<TestingHttpServerPropertiesManager> 233 std::unique_ptr<TestingHttpServerPropertiesManager>
235 http_server_props_manager_; 234 http_server_props_manager_;
236 base::Time one_day_from_now_; 235 base::Time one_day_from_now_;
237 scoped_refptr<TestMockTimeTaskRunner> pref_test_task_runner_; 236
238 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_; 237 // Overrides the main thread's message loop with a mock tick clock. Making the
238 // main thread the |pref_test_task_runner_| matches expectations better than
239 // having an independent TestMockTimeTaskRunner and makes tests easier to
240 // write.
241 base::ScopedMockTimeMessageLoopTaskRunner pref_test_task_runner_;
242
243 // Mock the net task runner as well.
244 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_ =
245 new TestMockTimeTaskRunner;
xunjieli 2017/02/16 02:49:18 Can we initialize this one in the constructor?
gab 2017/02/16 16:50:15 I prefer C++11 member initialization when at all p
xunjieli 2017/02/16 17:08:29 Acknowledged.
239 246
240 private: 247 private:
241 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); 248 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest);
242 }; 249 };
243 250
244 INSTANTIATE_TEST_CASE_P(/* no prefix */, 251 INSTANTIATE_TEST_CASE_P(/* no prefix */,
245 HttpServerPropertiesManagerTest, 252 HttpServerPropertiesManagerTest,
246 ::testing::ValuesIn(kHttpServerPropertiesVersions)); 253 ::testing::ValuesIn(kHttpServerPropertiesVersions));
247 254
248 TEST_P(HttpServerPropertiesManagerTest, 255 TEST_P(HttpServerPropertiesManagerTest,
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); 655 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
649 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 656 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
650 } 657 }
651 658
652 // Regression test for crbug.com/670519. Test that there is only one pref update 659 // Regression test for crbug.com/670519. Test that there is only one pref update
653 // scheduled if multiple updates happen in a given time period. Subsequent pref 660 // scheduled if multiple updates happen in a given time period. Subsequent pref
654 // update could also be scheduled once the previous scheduled update is 661 // update could also be scheduled once the previous scheduled update is
655 // completed. 662 // completed.
656 TEST_P(HttpServerPropertiesManagerTest, 663 TEST_P(HttpServerPropertiesManagerTest,
657 SinglePrefUpdateForTwoSpdyServerCacheChanges) { 664 SinglePrefUpdateForTwoSpdyServerCacheChanges) {
658 // Keep this in sync with http_server_properties_manager.cc
659 const int64_t kUpdatePrefsDelayMs = 60000;
660 ExpectPrefsUpdate(2); 665 ExpectPrefsUpdate(2);
661 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3); 666 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3);
662 667
663 // Post an update task to the network thread. SetSupportsSpdy calls 668 // Post an update task to the network thread. SetSupportsSpdy calls
664 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms. 669 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms.
665 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); 670 url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
666 EXPECT_FALSE( 671 EXPECT_FALSE(
667 http_server_props_manager_->SupportsRequestPriority(spdy_server)); 672 http_server_props_manager_->SupportsRequestPriority(spdy_server));
668 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); 673 http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
669 // The pref update task should be scheduled to network thread. 674 // The pref update task should be scheduled to network thread.
670 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); 675 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
671 676
672 // Move forward the task runner with kUpdatePrefsDelayMs/2. 677 // Move forward the task runner short by 20ms.
673 net_test_task_runner_->FastForwardBy( 678 net_test_task_runner_->FastForwardBy(
674 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2)); 679 HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() -
680 base::TimeDelta::FromMilliseconds(20));
675 681
676 // Set another spdy server to trigger another call to 682 // Set another spdy server to trigger another call to
677 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to 683 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to
678 // the network thread. 684 // the network thread.
679 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443); 685 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443);
680 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true); 686 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true);
681 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); 687 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
682 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 688 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
683 689
684 // Forward another kUpdatePrefsDelayMs/2. The pref update should be executed. 690 // Move forward the extra 20ms. The pref update should be executed.
685 net_test_task_runner_->FastForwardBy( 691 net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
686 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2));
687 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 692 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
688 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 693 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
689 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 694 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
690 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 695 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
691 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 696 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
692 697
693 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); 698 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
694 EXPECT_TRUE( 699 EXPECT_TRUE(
695 http_server_props_manager_->SupportsRequestPriority(spdy_server2)); 700 http_server_props_manager_->SupportsRequestPriority(spdy_server2));
696 // Set the third spdy server to trigger one more call to 701 // Set the third spdy server to trigger one more call to
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 800 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
796 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 801 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
797 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 802 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
798 803
799 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); 804 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
800 } 805 }
801 806
802 TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { 807 TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) {
803 ExpectPrefsUpdate(1); 808 ExpectPrefsUpdate(1);
804 809
805 url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); 810 url::SchemeHostPort spdy_server_mail;
806 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); 811 AlternativeService alternative_service;
807 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 443);
808 812
809 ExpectScheduleUpdatePrefsOnNetworkThread(); 813 {
810 http_server_props_manager_->SetAlternativeService( 814 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
811 spdy_server_mail, alternative_service, one_day_from_now_);
812 815
813 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( 816 spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80);
814 alternative_service)); 817 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
815 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( 818 alternative_service =
816 alternative_service)); 819 AlternativeService(kProtoHTTP2, "mail.google.com", 443);
817 820
818 ExpectScheduleUpdatePrefsOnNetworkThread(); 821 ExpectScheduleUpdatePrefsOnNetworkThread();
819 http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service); 822 http_server_props_manager_->SetAlternativeService(
820 EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( 823 spdy_server_mail, alternative_service, one_day_from_now_);
821 alternative_service));
822 EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
823 alternative_service));
824 824
825 ExpectScheduleUpdatePrefsOnNetworkThread(); 825 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
826 http_server_props_manager_->ConfirmAlternativeService(alternative_service); 826 alternative_service));
827 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( 827 EXPECT_FALSE(
828 alternative_service)); 828 http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
829 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( 829 alternative_service));
830 alternative_service)); 830
831 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. 831 ExpectScheduleUpdatePrefsOnNetworkThread();
832 http_server_props_manager_->ConfirmAlternativeService(alternative_service); 832 http_server_props_manager_->MarkAlternativeServiceBroken(
833 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( 833 alternative_service);
834 alternative_service)); 834 EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
835 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( 835 alternative_service));
836 alternative_service)); 836 EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
837 alternative_service));
838
839 ExpectScheduleUpdatePrefsOnNetworkThread();
840 http_server_props_manager_->ConfirmAlternativeService(alternative_service);
841 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
842 alternative_service));
843 EXPECT_FALSE(
844 http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
845 alternative_service));
846 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once.
847 http_server_props_manager_->ConfirmAlternativeService(alternative_service);
848 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
849 alternative_service));
850 EXPECT_FALSE(
851 http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
852 alternative_service));
853 }
837 854
838 // Run the task. 855 // Run the task.
839 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 856 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
840 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); 857 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
841 net_test_task_runner_->FastForwardUntilNoTasksRemain(); 858 net_test_task_runner_->FastForwardUntilNoTasksRemain();
842 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 859 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
843 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 860 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
844 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 861 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
845 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 862 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
846 863
847 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 864 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
848 865
849 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( 866 {
850 alternative_service)); 867 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
851 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( 868 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
852 alternative_service)); 869 alternative_service));
870 EXPECT_FALSE(
871 http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
872 alternative_service));
873 }
853 } 874 }
854 875
855 TEST_P(HttpServerPropertiesManagerTest, SupportsQuic) { 876 TEST_P(HttpServerPropertiesManagerTest, SupportsQuic) {
856 ExpectPrefsUpdate(1); 877 ExpectPrefsUpdate(1);
857 ExpectScheduleUpdatePrefsOnNetworkThread(); 878 ExpectScheduleUpdatePrefsOnNetworkThread();
858 879
859 IPAddress address; 880 IPAddress address;
860 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); 881 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address));
861 882
862 IPAddress actual_address(127, 0, 0, 1); 883 IPAddress actual_address(127, 0, 0, 1);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 953 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
933 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 954 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
934 955
935 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 956 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
936 957
937 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( 958 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
938 mail_quic_server_id)); 959 mail_quic_server_id));
939 } 960 }
940 961
941 TEST_P(HttpServerPropertiesManagerTest, Clear) { 962 TEST_P(HttpServerPropertiesManagerTest, Clear) {
942 // This task expect to run the QuitWhenIdleClosure in the current thread,
943 // thus can not mock the pref task runner.
944 SetUpWithNonTaskRunner();
945
946 ExpectPrefsUpdate(1); 963 ExpectPrefsUpdate(1);
947 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5); 964 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5);
948 965
949 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); 966 const url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
950 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); 967 const IPAddress actual_address(127, 0, 0, 1);
951 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 1234); 968 const QuicServerId mail_quic_server_id("mail.google.com", 80);
952 http_server_props_manager_->SetAlternativeService( 969 const std::string quic_server_info1("quic_server_info1");
953 spdy_server, alternative_service, one_day_from_now_);
954 IPAddress actual_address(127, 0, 0, 1);
955 http_server_props_manager_->SetSupportsQuic(true, actual_address);
956 ServerNetworkStats stats;
957 stats.srtt = base::TimeDelta::FromMicroseconds(10);
958 http_server_props_manager_->SetServerNetworkStats(spdy_server, stats);
959 970
960 QuicServerId mail_quic_server_id("mail.google.com", 80); 971 {
961 std::string quic_server_info1("quic_server_info1"); 972 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
962 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, 973
963 quic_server_info1); 974 http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
975 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
976 1234);
977 http_server_props_manager_->SetAlternativeService(
978 spdy_server, alternative_service, one_day_from_now_);
979 http_server_props_manager_->SetSupportsQuic(true, actual_address);
980 ServerNetworkStats stats;
981 stats.srtt = base::TimeDelta::FromMicroseconds(10);
982 http_server_props_manager_->SetServerNetworkStats(spdy_server, stats);
983
984 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
985 quic_server_info1);
986 }
964 987
965 // Run the task. 988 // Run the task.
966 base::RunLoop().RunUntilIdle(); 989 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
967 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); 990 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
968 net_test_task_runner_->FastForwardUntilNoTasksRemain(); 991 net_test_task_runner_->FastForwardUntilNoTasksRemain();
969 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 992 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
970 993
971 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); 994 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
972 EXPECT_TRUE(HasAlternativeService(spdy_server)); 995 EXPECT_TRUE(HasAlternativeService(spdy_server));
973 IPAddress address; 996 IPAddress address;
974 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); 997 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
975 EXPECT_EQ(actual_address, address); 998 EXPECT_EQ(actual_address, address);
976 const ServerNetworkStats* stats1 = 999 const ServerNetworkStats* stats1 =
977 http_server_props_manager_->GetServerNetworkStats(spdy_server); 1000 http_server_props_manager_->GetServerNetworkStats(spdy_server);
978 EXPECT_EQ(10, stats1->srtt.ToInternalValue()); 1001 EXPECT_EQ(10, stats1->srtt.ToInternalValue());
979 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( 1002 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
980 mail_quic_server_id)); 1003 mail_quic_server_id));
981 1004
982 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 1005 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
983 1006
984 ExpectPrefsUpdate(1); 1007 ExpectPrefsUpdate(1);
985 1008
986 // Clear http server data, time out if we do not get a completion callback. 1009 // Clear http server data and run the ensuing non-delayed prefs update.
987 http_server_props_manager_->Clear(base::MessageLoop::QuitWhenIdleClosure()); 1010 {
988 1011 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
989 base::RunLoop().Run(); 1012 http_server_props_manager_->Clear();
1013 }
1014 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
1015 pref_test_task_runner_->RunUntilIdle();
1016 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
990 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1017 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
991 1018
992 EXPECT_FALSE( 1019 EXPECT_FALSE(
993 http_server_props_manager_->SupportsRequestPriority(spdy_server)); 1020 http_server_props_manager_->SupportsRequestPriority(spdy_server));
994 EXPECT_FALSE(HasAlternativeService(spdy_server)); 1021 EXPECT_FALSE(HasAlternativeService(spdy_server));
995 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); 1022 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address));
996 const ServerNetworkStats* stats2 = 1023 const ServerNetworkStats* stats2 =
997 http_server_props_manager_->GetServerNetworkStats(spdy_server); 1024 http_server_props_manager_->GetServerNetworkStats(spdy_server);
998 EXPECT_EQ(nullptr, stats2); 1025 EXPECT_EQ(nullptr, stats2);
999 EXPECT_EQ(nullptr, 1026 EXPECT_EQ(nullptr,
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 const base::Value* http_server_properties = 1206 const base::Value* http_server_properties =
1180 &pref_delegate_->GetServerProperties(); 1207 &pref_delegate_->GetServerProperties();
1181 std::string preferences_json; 1208 std::string preferences_json;
1182 EXPECT_TRUE( 1209 EXPECT_TRUE(
1183 base::JSONWriter::Write(*http_server_properties, &preferences_json)); 1210 base::JSONWriter::Write(*http_server_properties, &preferences_json));
1184 EXPECT_EQ(expected_json, preferences_json); 1211 EXPECT_EQ(expected_json, preferences_json);
1185 } 1212 }
1186 1213
1187 TEST_P(HttpServerPropertiesManagerTest, 1214 TEST_P(HttpServerPropertiesManagerTest,
1188 SingleCacheUpdateForMultipleUpdatesScheduled) { 1215 SingleCacheUpdateForMultipleUpdatesScheduled) {
1189 // Keep this in sync with http_server_properties_manager.cc
1190 const int64_t kUpdateCacheDelayMs = 1000;
1191 // Update cache. 1216 // Update cache.
1192 ExpectCacheUpdate(); 1217 ExpectCacheUpdate();
1193 1218
1194 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount()); 1219 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount());
1195 // Update cache. 1220 // Update cache.
1196 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 1221 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1197 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); 1222 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
1198 1223
1199 // Move forward the task runner kUpdateCacheDelayMs/2. 1224 // Move forward the task runner short by 20ms.
1200 pref_test_task_runner_->FastForwardBy( 1225 pref_test_task_runner_->FastForwardBy(
1201 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2)); 1226 HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() -
1227 base::TimeDelta::FromMilliseconds(20));
1202 // Schedule a new cache update within the time window should be a no-op. 1228 // Schedule a new cache update within the time window should be a no-op.
1203 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 1229 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1204 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); 1230 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
1205 1231
1206 // Move forward the task runner kUpdateCaceDelayMs/2, now the cache update 1232 // Move forward the task runner the extra 20ms, now the cache update should be
1207 // should be exectured. 1233 // exectuted.
xunjieli 2017/02/16 02:49:18 nit: executed. (i know it was misspelled in the or
gab 2017/02/16 16:50:15 Done.
1208 pref_test_task_runner_->FastForwardBy( 1234 pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
1209 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2));
1210 1235
1211 // Since this test has no pref corruption, there shouldn't be any pref update. 1236 // Since this test has no pref corruption, there shouldn't be any pref update.
1212 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1237 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1213 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1238 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1214 1239
1215 // Schedule one more cache update. The task should be successfully scheduled 1240 // Schedule one more cache update. The task should be successfully scheduled
1216 // on pref task runner. 1241 // on pref task runner.
1217 ExpectCacheUpdate(); 1242 ExpectCacheUpdate();
1218 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 1243 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
1219 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); 1244 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 1313
1289 AlternativeServiceMap::iterator it = alternative_service_map.Get(server); 1314 AlternativeServiceMap::iterator it = alternative_service_map.Get(server);
1290 EXPECT_EQ(alternative_service_map.end(), it); 1315 EXPECT_EQ(alternative_service_map.end(), it);
1291 } 1316 }
1292 1317
1293 // Do not persist expired or broken alternative service entries to disk. 1318 // Do not persist expired or broken alternative service entries to disk.
1294 TEST_P(HttpServerPropertiesManagerTest, 1319 TEST_P(HttpServerPropertiesManagerTest,
1295 DoNotPersistExpiredOrBrokenAlternativeService) { 1320 DoNotPersistExpiredOrBrokenAlternativeService) {
1296 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2); 1321 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2);
1297 1322
1298 AlternativeServiceInfoVector alternative_service_info_vector; 1323 {
1324 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
1299 1325
1300 const AlternativeService broken_alternative_service( 1326 AlternativeServiceInfoVector alternative_service_info_vector;
1301 kProtoHTTP2, "broken.example.com", 443);
1302 const base::Time time_one_day_later =
1303 base::Time::Now() + base::TimeDelta::FromDays(1);
1304 alternative_service_info_vector.push_back(
1305 AlternativeServiceInfo(broken_alternative_service, time_one_day_later));
1306 // #1: MarkAlternativeServiceBroken().
1307 http_server_props_manager_->MarkAlternativeServiceBroken(
1308 broken_alternative_service);
1309 1327
1310 const AlternativeService expired_alternative_service( 1328 const AlternativeService broken_alternative_service(
1311 kProtoHTTP2, "expired.example.com", 443); 1329 kProtoHTTP2, "broken.example.com", 443);
1312 const base::Time time_one_day_ago = 1330 const base::Time time_one_day_later =
1313 base::Time::Now() - base::TimeDelta::FromDays(1); 1331 base::Time::Now() + base::TimeDelta::FromDays(1);
1314 alternative_service_info_vector.push_back( 1332 alternative_service_info_vector.push_back(
1315 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago)); 1333 AlternativeServiceInfo(broken_alternative_service, time_one_day_later));
1334 // #1: MarkAlternativeServiceBroken().
1335 http_server_props_manager_->MarkAlternativeServiceBroken(
1336 broken_alternative_service);
1316 1337
1317 const AlternativeService valid_alternative_service(kProtoHTTP2, 1338 const AlternativeService expired_alternative_service(
1318 "valid.example.com", 443); 1339 kProtoHTTP2, "expired.example.com", 443);
1319 alternative_service_info_vector.push_back( 1340 const base::Time time_one_day_ago =
1320 AlternativeServiceInfo(valid_alternative_service, time_one_day_later)); 1341 base::Time::Now() - base::TimeDelta::FromDays(1);
1342 alternative_service_info_vector.push_back(
1343 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago));
1321 1344
1322 const url::SchemeHostPort server("https", "www.example.com", 443); 1345 const AlternativeService valid_alternative_service(
1323 // #2: SetAlternativeService(). 1346 kProtoHTTP2, "valid.example.com", 443);
1324 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( 1347 alternative_service_info_vector.push_back(
1325 server, alternative_service_info_vector)); 1348 AlternativeServiceInfo(valid_alternative_service, time_one_day_later));
1349
1350 const url::SchemeHostPort server("https", "www.example.com", 443);
1351 // #2: SetAlternativeService().
1352 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
1353 server, alternative_service_info_vector));
1354 }
1326 1355
1327 // Update cache. 1356 // Update cache.
1328 ExpectPrefsUpdate(1); 1357 ExpectPrefsUpdate(1);
1329 1358
1330 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); 1359 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
1331 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1360 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1332 net_test_task_runner_->FastForwardUntilNoTasksRemain(); 1361
1362 // |net_test_task_runner_| has a remaining pending task to expire
1363 // |broken_alternative_service| |time_one_day_later| (and the impl uses
1364 // TimeTicks::Now() without a mock clock so FastForwardUntilNoTasksRemain()
1365 // would result in an infinite loop).
1366 net_test_task_runner_->FastForwardBy(
1367 HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting());
1368 EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount());
1369
1333 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 1370 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
1334 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1371 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1335 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1372 EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount());
1336 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1373 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1337 1374
1338 const base::DictionaryValue& pref_dict = 1375 const base::DictionaryValue& pref_dict =
1339 pref_delegate_->GetServerProperties(); 1376 pref_delegate_->GetServerProperties();
1340 1377
1341 const base::ListValue* servers_list = nullptr; 1378 const base::ListValue* servers_list = nullptr;
1342 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list)); 1379 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list));
1343 base::ListValue::const_iterator it = servers_list->begin(); 1380 base::ListValue::const_iterator it = servers_list->begin();
1344 const base::DictionaryValue* server_pref_dict; 1381 const base::DictionaryValue* server_pref_dict;
1345 ASSERT_TRUE((*it)->GetAsDictionary(&server_pref_dict)); 1382 ASSERT_TRUE((*it)->GetAsDictionary(&server_pref_dict));
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1450 http_server_props_manager_.reset(); 1487 http_server_props_manager_.reset();
1451 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1488 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1452 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1489 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1453 } 1490 }
1454 1491
1455 // 1492 //
1456 // Tests for shutdown when updating prefs. 1493 // Tests for shutdown when updating prefs.
1457 // 1494 //
1458 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) { 1495 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) {
1459 // Post an update task to the IO thread. 1496 // Post an update task to the IO thread.
1460 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); 1497 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault();
1461 // Shutdown comes before the task is executed. 1498 // Shutdown comes before the task is executed.
1462 http_server_props_manager_->ShutdownOnPrefThread(); 1499 http_server_props_manager_->ShutdownOnPrefThread();
1463 http_server_props_manager_.reset(); 1500 http_server_props_manager_.reset();
1464 // Run the task after shutdown and deletion. 1501 // Run the task after shutdown and deletion.
1465 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); 1502 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
1466 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1503 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1467 net_test_task_runner_->FastForwardUntilNoTasksRemain(); 1504 net_test_task_runner_->FastForwardUntilNoTasksRemain();
1468 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1505 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1469 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1506 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1470 } 1507 }
1471 1508
1472 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) { 1509 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) {
1473 ExpectPrefsUpdate(1); 1510 ExpectPrefsUpdate(1);
1474 // Post an update task. 1511 // Post an update task.
1475 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); 1512 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault();
1476 // Shutdown comes before the task is executed. 1513 // Shutdown comes before the task is executed.
1477 http_server_props_manager_->ShutdownOnPrefThread(); 1514 http_server_props_manager_->ShutdownOnPrefThread();
1478 // Run the task after shutdown, but before deletion. 1515 // Run the task after shutdown, but before deletion.
1479 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); 1516 EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
1480 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1517 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1481 net_test_task_runner_->FastForwardUntilNoTasksRemain(); 1518 net_test_task_runner_->FastForwardUntilNoTasksRemain();
1482 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); 1519 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
1483 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1520 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1484 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1521 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1485 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1522 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
(...skipping 16 matching lines...) Expand all
1502 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); 1539 pref_test_task_runner_->FastForwardUntilNoTasksRemain();
1503 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1540 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1504 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1541 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1505 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 1542 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
1506 http_server_props_manager_.reset(); 1543 http_server_props_manager_.reset();
1507 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); 1544 EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
1508 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); 1545 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
1509 } 1546 }
1510 1547
1511 } // namespace net 1548 } // namespace net
OLDNEW
« net/http/http_server_properties_manager.cc ('K') | « net/http/http_server_properties_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698